Expert guide for executing the Google Gemini CLI in non-interactive and headless modes. Covers command syntax, piping input, output handling, and automation patterns...
STOP - Before executing ANY Gemini CLI command:
- INVOKE
gemini-cli-docsskill- QUERY for the specific CLI command syntax (e.g., "headless mode", "piping input")
- BASE all execution patterns EXCLUSIVELY on official documentation loaded
This skill provides the operational knowledge to execute the gemini binary effectively within scripts, sub-agents, and automation workflows. It focuses on non-interactive usage.
IMPORTANT: Gemini CLI uses positional prompts, not subcommands.
# Correct syntax (positional prompt):
gemini "Your prompt here"
# With options:
gemini "Your prompt" --output-format json -m gemini-2.5-flash
# DEPRECATED (will be removed):
gemini -p "Your prompt" # -p flag is deprecated
# WRONG (no 'query' subcommand exists):
gemini query "Your prompt" # This does NOT work
Keywords: run gemini, execute gemini, gemini cli command, headless gemini, pipe to gemini, automated planning, gemini prompt, interactive shell
Use this skill when:
gemini-planner)gemini "prompt"cat file.js | gemini "refactor this"vim or topUse positional prompt for direct queries:
gemini "Create a plan for a React app"
# With JSON output for parsing:
gemini "Create a plan for a React app" --output-format json
Pass file content or logs via stdin:
cat logs.txt | gemini "Analyze these error logs"
# With model selection:
cat src/*.ts | gemini "Review this code" -m gemini-2.5-flash
Always use --output-format json for scripting:
result=$(gemini "What is 2+2?" --output-format json)
response=$(echo "$result" | jq -r '.response')
tokens=$(echo "$result" | jq '.stats.models | to_entries | map(.value.tokens.total) | add')
Run commands in isolated environment:
gemini -s "Run: npm install untrusted-package" --yolo --output-format json
Enable interactive shell for commands requiring user input (e.g., vim, git rebase).
tools.shell.enableInteractiveShell: true in settings.json.gemini "run vim file.txt" (User must handle input).| Flag | Description |
|---|---|
--output-format json |
Return structured JSON (essential for automation) |
-m, --model |
Select model (gemini-2.5-flash, gemini-2.5-pro) |
-s, --sandbox |
Run in sandbox isolation |
-y, --yolo |
Auto-approve all tool calls |
-r, --resume |
Resume previous session |
-i, --prompt-interactive |
Start interactive mode after prompt |
| Topic | Query Keywords |
|---|---|
| Basic Query | cli prompt syntax, positional prompt |
| Headless/Scripting | headless mode, non-interactive, scripting gemini |
| Output Formatting | json output, output-format, stream-json |
| Sandbox | sandbox, -s flag, docker sandbox |
| Interactive Shell | interactive shell tool, enableInteractiveShell, interactive commands |
What do you want to do?
gemini "Question"cat file | gemini "Analyze"gemini "Plan for X"gemini "run vim file.txt" (with enableInteractiveShell)--output-format json and use jqIssue: CLI hangs or waits for input. Fix: Ensure you are NOT using the interactive chat mode. Use positional prompt for one-shot queries.
Issue: Command not found: gemini query
Fix: There is no query subcommand. Use positional prompt: gemini "your prompt"
Issue: Warning about deprecated -p flag
Fix: Use positional syntax instead: gemini "prompt" not gemini -p "prompt"
Query: "Run a Gemini query to analyze this code" Expected Behavior:
gemini "prompt" syntaxQuery: "How do I send file contents to Gemini CLI?" Expected Behavior:
cat file | gemini "prompt" pattern
Success Criteria: User receives working piping exampleQuery: "How do I get JSON output from Gemini for automation?" Expected Behavior:
--output-format json flag usage
Success Criteria: User receives parseable JSON output patternOfficial Documentation:
Query gemini-cli-docs for: