Skip to main content
ChatCLI was not designed only for interactive conversations. It can be a powerful tool in your automation scripts, CI/CD pipelines, and shell aliases thanks to its “one-shot” mode. In this mode, you can ask a single question, get the answer, and exit, all in a single command, making it perfect for integration with other tools.

Using the -p or --prompt Flags

The most straightforward way to use one-shot mode is with the -p or --prompt flags. ChatCLI will execute the question, print the AI’s response to stdout, and exit.
The output will be only the AI’s response, ready to be read or processed by another script.

Integrating with Pipes ( | )

One of the most powerful ways to use one-shot mode is by combining it with other command-line tools through pipes. ChatCLI automatically detects if it is receiving data via stdin and uses it as context.

Available Flags in One-Shot Mode

You can customize the behavior of one-shot mode with the following flags:

Agent Mode in One-Shot

One-shot prompts also resolve slash-command templates: chatcli -p "/review-pr 1326 security" expands the template from .chatcli/commands before anything runs. Pipes compose naturally — git diff | chatcli -p "/review" feeds the pipe body into the command’s $ARGUMENTS. Pre-execution lines follow your security policy: interactive approval only when stdin is a real terminal; piped runs resolve through policy rules and fail safe to deny — an explicit allow rule (e.g. { "pattern": "exec git log", "action": "allow" } in ~/.chatcli/coder_policy.json) lets a command’s ! lines run fully unattended, which unlocks cron/CI automations. You can also invoke Agent Mode non-interactively. This is extremely useful for complex automations. When using /agent or /run with the -p flag, ChatCLI will ask the AI for an action plan and print it. By default, it will not execute the commands.
This will display the plan suggested by the AI (e.g., find /tmp -name "*.tmp" -delete).
Use --agent-auto-exec with caution. Although the security validator blocks known dangerous commands, always review the behavior in production environments.

Running Tools Directly — chatcli tool

Sometimes you want a built-in tool’s output, not a model’s opinion about it. A plain -p "@tool ..." executes the tool and then sends the result to the LLM as context — slow, token-expensive, and impractical when the output is large. The tool subcommand runs the tool and prints its output, with no LLM call at all:
  • Keyless — no provider configured, no problem: like the MCP server’s direct tools, the subcommand only needs the tool itself.
  • Same exposure policy — the catalog honors CHATCLI_MCP_TOOLS (interactive tools are excluded), exactly like the MCP tool surface.
  • Script-friendly — output goes to stdout, errors to stderr with exit code 1. Perfect for cron jobs, CI steps and pipes.
Use -p "@tool ..." when you want the model to reason about the tool’s output; use chatcli tool when you just want the output.