gemini-cli
Gemini CLI Skill
Gemini CLI is an open-source AI agent that brings Gemini models directly into the terminal. It supports interactive REPL sessions, headless/non-interactive scripting, MCP servers, custom slash commands, and extension-based workflows.
Reference files (read when needed):
references/commands.md— slash commands, built-in commands referencereferences/configuration.md— settings.json, GEMINI.md, environment variablesreferences/mcp-and-extensions.md— MCP server setup, extensions authoringreferences/headless-and-scripting.md— non-interactive mode, automation, CI/CD patterns
Installation
# Instant use, no install
npx @google/gemini-cli
# Global install (recommended)
npm install -g @google/gemini-cli
# macOS/Linux via Homebrew
brew install gemini-cli
# Specific channels
npm install -g @google/gemini-cli@latest # stable (weekly Tuesdays)
npm install -g @google/gemini-cli@preview # preview (weekly, less vetted)
npm install -g @google/gemini-cli@nightly # nightly (daily builds)
Authentication
Choose one method:
Option 1: Google OAuth (recommended for individuals)
gemini # → choose "Login with Google" → browser flow
- Free: 60 req/min, 1,000 req/day
- No API key needed
Option 2: Gemini API Key
export GEMINI_API_KEY="your_key_here"
# Get key: https://aistudio.google.com/apikey
gemini
- Free: 1,000 req/day (Gemini Flash/Pro mix)
- Can also store in
~/.gemini/.envor./.gemini/.env
Option 3: Application Default Credentials (ADC)
gcloud auth application-default login
gemini
- Uses Google Cloud ADC — no API key needed
- Best for developers already using Google Cloud
Option 4: Vertex AI (enterprise)
export GOOGLE_GENAI_USE_VERTEXAI=true
export GOOGLE_CLOUD_PROJECT="your-project-id"
gcloud auth application-default login
gemini
Basic Usage
# Start interactive session in current directory
gemini
# Include extra directories as context
gemini --include-directories ../lib,../docs
# Use a specific model
gemini -m gemini-2.5-flash
gemini -m gemini-2.5-pro
# Non-interactive: single prompt, then exit
gemini -p "Explain the architecture of this codebase"
# Reference files in prompt with @ syntax
gemini -p "Review @./src/auth.py for security issues"
# Pipe stdin
cat error.log | gemini -p "What went wrong here?"
git diff --cached | gemini -p "Write a concise commit message"
Headless / Non-Interactive Mode
Headless mode is triggered by -p flag or non-TTY environment.
# Plain text output (default)
gemini -p "Explain Docker" > output.txt
# Structured JSON output (recommended for scripting)
gemini -p "Explain Docker" --output-format json
# Streaming JSONL (for long-running tasks)
gemini -p "Run tests and analyze results" --output-format stream-json
# Extract response field with jq
gemini -p "List top 5 Python testing frameworks" --output-format json | jq -r '.response'
# Auto-accept all tool actions (auto-approve mode) — use with care in automation
gemini -p "Generate unit tests for @./src/utils.js" --auto-approve
JSON output schema
{
"response": "...",
"stats": {
"models": { "gemini-2.5-pro": { "tokens": {...}, "api": {...} } },
"tools": { "totalCalls": 1, "totalSuccess": 1 },
"files": { "totalLinesAdded": 0, "totalLinesRemoved": 0 }
}
}
For full scripting patterns → read references/headless-and-scripting.md
Interactive Session: Key Commands
| Command | Description |
|---|---|
/help |
List all commands |
/tools |
Show available tools |
/mcp list |
List MCP servers and their status |
/mcp status |
Detailed MCP connection info |
/chat save <name> |
Save current session |
/chat resume <name> |
Resume a saved session |
/memory add <text> |
Add persistent fact to GEMINI.md memory |
/memory show |
Show current memory contents |
/restore |
List checkpoints |
/restore <file> |
Restore a checkpoint |
/bug |
Report an issue directly from CLI |
Ctrl+Y |
Toggle auto-approve mode |
GEMINI.md — Project Context Files
Create GEMINI.md at project root (or ~/.gemini/GEMINI.md for global context):
# My Project
## Guidelines
- All Python code must follow PEP 8
- Use 2-space indentation for JavaScript
## Architecture
@./docs/architecture.md
## Style Guides
@./src/frontend/react-style-guide.md
Hierarchy (all are loaded and merged):
~/.gemini/GEMINI.md— global user context<project>/.gemini/GEMINI.md— project context- Sub-directory
GEMINI.mdfiles — scoped context
Custom Slash Commands (.toml)
Create .toml files to define reusable commands:
Locations:
~/.gemini/commands/<name>.toml→ user-scoped/name<project>/.gemini/commands/<name>.toml→ project-scoped/name<project>/.gemini/commands/git/commit.toml→ namespaced/git:commit
Minimal example (~/.gemini/commands/plan.toml):
prompt = "Only plan the changes step-by-step. Do NOT start implementation yet."
Full example (~/.gemini/commands/review.toml):
description = "Code review with focus on security and performance"
prompt = """
Review the following code for:
1. Security vulnerabilities
2. Performance issues
3. Code style
Code to review: {{args}}
"""
With shell execution:
description = "Review staged git changes"
prompt = "Review these git changes for issues:\n!{git diff --cached}"
For MCP prompts as slash commands → read references/mcp-and-extensions.md
settings.json Configuration
Location: ~/.gemini/settings.json (global) or <project>/.gemini/settings.json
{
"model": {
"name": "gemini-2.5-pro"
},
"theme": {
"name": "dark"
},
"autoAccept": false,
"tools": {
"core": ["read_file", "write_file", "run_shell_command"],
"disabled": ["dangerous_tool"]
},
"mcpServers": {
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_TOKEN": "$GITHUB_TOKEN"
}
}
}
}
For full configuration reference → read references/configuration.md
MCP Server Integration
Add to ~/.gemini/settings.json:
{
"mcpServers": {
"myServer": {
"command": "node",
"args": ["./mcp-server.js"],
"env": { "API_KEY": "$MY_API_KEY" },
"timeout": 15000,
"trust": false
}
}
}
CLI management commands:
gemini mcp add <name> # add server
gemini mcp list # list configured servers
gemini mcp remove <name> # remove server
Invoke tools in prompts:
> @github List my open pull requests
> @database Find inactive users from last 30 days
For detailed MCP setup and extensions → read references/mcp-and-extensions.md
Extensions
Extensions bundle MCP servers + GEMINI.md + custom commands into a reusable package.
Install from URL:
gemini extensions install https://github.com/GoogleCloudPlatform/cloud-run-mcp
Browse gallery: https://geminicli.com/extensions/
Extension structure:
my-extension/
├── gemini-extension.json # manifest
└── GEMINI.md # context (optional)
// gemini-extension.json
{
"name": "my-extension",
"version": "1.0.0",
"mcpServers": {
"my-server": { "command": "node my-server.js" }
},
"contextFileName": "GEMINI.md",
"excludeTools": ["run_shell_command"]
}
Common Patterns
Commit message automation
result=$(git diff --cached | gemini -p "Write a concise commit message" --output-format json)
echo "$result" | jq -r '.response' | git commit -F -
Batch file processing
for file in src/**/*.py; do
gemini -p "Generate docstrings for @$file" --output-format json | jq -r '.response' > "${file%.py}_docs.md"
done
Security code review
cat src/auth.py | gemini -p "Review for security vulnerabilities" > security-review.txt
Generate OpenAPI spec
result=$(cat api/routes.js | gemini -p "Generate OpenAPI spec" --output-format json)
echo "$result" | jq -r '.response' > openapi.json
CI/CD pipeline integration
# In GitHub Actions / CI script
export GEMINI_API_KEY="${{ secrets.GEMINI_API_KEY }}"
gemini -p "Analyze test failures in @./test-results.xml and suggest fixes" \
--output-format json \
--auto-approve \
| jq -r '.response'
Model Selection
gemini -m gemini-2.5-pro # most powerful, 1M context
gemini -m gemini-2.5-flash # fast, efficient (default routing)
Models available through Gemini API: gemini-2.5-pro, gemini-2.5-flash, gemini-2.0-flash, etc.
For Vertex AI: additional enterprise models available.
Troubleshooting
| Problem | Solution |
|---|---|
command not found: gemini |
Run npm install -g @google/gemini-cli or use npx |
| Auth errors | Check GEMINI_API_KEY env var or re-run gemini and re-authenticate |
| Rate limit errors | Free tier: 60 req/min, 1000/day — wait or upgrade |
| MCP server not connecting | Check /mcp status, verify server binary is installed |
| Slash command not recognized in headless | Known limitation — embed prompt text directly for now |
| Tool confirmation loops | Add --auto-approve flag for automation, or set "autoAccept": true in settings |
Full troubleshooting: https://geminicli.com/docs/resources/troubleshooting/
More from biggora/claude-plugins-registry
captcha
>
32test-web-ui
>
19tailwindcss-best-practices
Tailwind CSS v4.x utility-first CSS framework best practices. Use when styling web applications with utility classes, building responsive layouts, customizing design systems with @theme variables, migrating from v3 to v4, configuring dark mode, creating custom utilities with @utility, or working with any Tailwind CSS v4 features. This skill covers the full v4.x line through v4.2 including text shadows, masks, logical properties, and source detection. Use this skill even for simple Tailwind questions — v4 changed many class names and configuration patterns that trip people up.
18vite-best-practices
Vite build tool configuration, plugin API, SSR, library mode, and Vite 8 Rolldown/Oxc migration. Use when working with Vite projects, vite.config.ts, Vite plugins, building libraries or SSR apps with Vite, migrating from older Vite versions, or configuring Rolldown/Oxc options. Also use when the user mentions HMR, import.meta.glob, virtual modules, or Vite environment variables.
12test-mobile-app
>
11typescript-expert
TypeScript language expertise covering the type system, generics, utility types, advanced type patterns, and project configuration. Use this skill whenever writing, reviewing, or refactoring TypeScript code, designing type-safe APIs, working with complex generics, debugging type errors, configuring tsconfig.json, migrating JavaScript to TypeScript, or leveraging TypeScript 5.x features like satisfies, const type parameters, decorators, and the using keyword. Also use when the user asks about type narrowing, conditional types, mapped types, template literal types, branded types, discriminated unions, or any TypeScript type system question — even seemingly simple ones, because TypeScript's type system has subtle gotchas that catch experienced developers.
11