From feature-design
Invoke Google's Gemini CLI from inside a Claude session to get an independent response from a non-Claude model. Trigger when the user asks to "ask Gemini", "get Gemini's take", "have Gemini review", "second opinion from Gemini", "run this past Gemini", or when running a multi-model crossfire that needs an independent Google-side perspective. Sends a prompt to Gemini via `gemini -p` and returns the plain-text response. Used by the feature-design plugin's crossfire stages but also independently useful for any second-opinion task.
How this skill is triggered — by the user, by Claude, or both
Slash command
/feature-design:geminiThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Invokes Google's Gemini CLI in non-interactive mode to get an independent response from a non-Claude model. The skill shells out via the Bash tool, captures stdout, and returns the response cleanly.
Invokes Google's Gemini CLI in non-interactive mode to get an independent response from a non-Claude model. The skill shells out via the Bash tool, captures stdout, and returns the response cleanly.
Do NOT trigger when:
Before this skill works, the user must have:
npm install -g @google/gemini-cli (Node 20+).GEMINI_API_KEY env var, obtained from https://aistudio.google.com/app/apikey. This is the path of least friction for shell-out.gemini interactively, complete the browser flow, then cached credentials live in ~/.gemini/. Free-tier OAuth has stricter quotas than API key.GOOGLE_APPLICATION_CREDENTIALS + GOOGLE_CLOUD_PROJECT (+ GOOGLE_CLOUD_LOCATION for Vertex).If none is set, gemini -p will either drop into an OAuth flow (which won't work in non-interactive context) or error. Detect and tell the user.
command -v gemini && gemini --version
If unavailable, tell the user:
Gemini CLI doesn't appear to be installed or on PATH. Install with
npm install -g @google/gemini-cli(Node 20+ required), then either setGEMINI_API_KEYor rungeminionce interactively to complete OAuth, then retry.
Stop. Do not attempt the call.
Same as the Codex skill — assemble the prompt from the user's request, file contents, or a parent-flow-supplied template. For long prompts, use a file rather than inline shell-arg quoting.
gemini -p "$PROMPT" --output-format text -m flash 2>/dev/null
Run from the project's working directory so Gemini can read files referenced in the prompt. Crossfire reviewers read the project's docs and code via the CLI's filesystem tools — they don't just respond to inlined text.
Flag rationale:
-p — mandatory for non-interactive use. Without it, Gemini drops into the REPL when stdin is a TTY.--output-format text — plain text on stdout. Use --output-format json for {response, stats, error} if the parent flow needs structured output.-m flash — pick the fast/cheap model. For higher-quality reviews use -m pro (or whatever the current top-tier model is). Defer to user preference if specified.2>/dev/null — suppresses Gemini's progress/spinner output.Note: Gemini auto-loads GEMINI.md from the cwd as additional context, similar to Claude's CLAUDE.md. For crossfire this is fine — it's project-scoped context the reviewer should see. If you specifically need a clean run with no project context, run from a temp directory (but you'll lose file-access to the very docs the prompt references — almost never what you want for crossfire).
For long prompts:
gemini -p "$(cat /path/to/prompt.md)" --output-format text -m flash 2>/dev/null
Or pipe stdin:
cat /path/to/prompt.md | gemini -p "Review the following:" --output-format text -m flash 2>/dev/null
Capture stdout. Present back with framing:
Gemini says:
--approval-mode yolo (or --yolo) — auto-approves any tool calls Gemini wants to make. Only relevant if the prompt encourages tool use; for pure text-in/text-out reviews, prompt phrasing keeps things clean and you don't need this.-m <model> — pin a specific model when the user requests one.--output-format stream-json — for streaming JSON events. Use only if the parent flow consumes streamed structured output.Gemini auto-loads two things from the working directory that can contaminate output:
GEMINI.md — analogous to CLAUDE.md. If the cwd has one, it gets loaded as context. For deterministic crossfire, run from a clean directory or a temp dir..gemini/.env — environment overrides. Loaded from cwd up the directory tree, then ~/.gemini/.env. Variables can leak from project-specific configs.If you want a guaranteed-clean Gemini call:
TEMP_DIR=$(mktemp -d)
cd "$TEMP_DIR"
gemini -p "$PROMPT" --output-format text -m flash 2>/dev/null
cd - >/dev/null
rm -rf "$TEMP_DIR"
| Symptom | Likely cause | Action |
|---|---|---|
command not found | Gemini CLI not installed | Install per Setup section |
| Hangs / browser opens | OAuth flow triggered in non-interactive context | Set GEMINI_API_KEY instead of relying on OAuth |
| Exit code 42 | Input error (malformed prompt, empty stdin where one was expected) | Check prompt construction |
| Exit code 53 | Turn limit reached | Shouldn't happen on single-turn -p calls; if it does, the prompt may have triggered tool-use loops |
| Quota exceeded | Free-tier OAuth quota hit | Switch to GEMINI_API_KEY (paid tier) or wait for reset |
Same caveat as the Codex skill: the user's Gemini CLI is likely installed on Windows; Cowork's Bash runs in a Linux sandbox. If the sandbox can't reach the host binary, install Gemini CLI inside the sandbox (npm install -g @google/gemini-cli) and pass GEMINI_API_KEY as an env var so auth survives the ephemeral sandbox.
npx claudepluginhub choughton/feature-design-prompt-templates --plugin feature-designCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.