Skip to content

feat(backends): add gemini-cli backend to standalone CLI #93

@devswha

Description

@devswha

Follow-up to #69 (v2 phase). v1 (codex-cli) shipped via PR #70.

Goal

Add a gemini-cli backend that spawns gemini -p '' --output-format text with the patina prompt on stdin. Together with claude-cli, completes the no-API-key triad (codex / claude / gemini).

Sketch

  • src/backends/gemini-cli.js mirroring codex-cli.js shape
  • isAvailable() checks gemini --version
  • isAuthenticated() checks the gemini CLI's credential file location (verify in CLI docs)
  • invoke() spawns gemini -p '' --output-format text, pipes prompt to stdin
  • Register in src/backends/index.js REGISTRY
  • Heuristic: --model gemini* → gemini-cli
  • Per security: require explicit opt-in or sandboxing for codex-cli backend #88 hardening: no silent auto-fallback; require explicit --backend gemini-cli (or --model gemini*)

Edge cases

  • Output post-processing if gemini wraps with markdown code fences
  • Timeout: gemini CLI start latency higher than HTTP

Acceptance

  • patina --backend gemini-cli input.txt works when gemini is installed and authenticated
  • patina --model gemini-1.5-pro input.txt routes to gemini-cli
  • patina auth status reports availability + auth state
  • No silent auto-fallback (per security: require explicit opt-in or sandboxing for codex-cli backend #88 policy)
  • Tests: backend mock + selection routing
  • Docs: README CLI section lists gemini-cli alongside codex-cli/claude-cli

Out of scope

  • Mixed-backend MAX mode (tracked separately once both v2 backends land)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions