Every provider.
One terminal.
Never stop coding.

Open-source terminal AI agent. Bring 180+ providers or log in with the Claude/ChatGPT/Gemini subscriptions you already pay for. One 85 MB binary. No accounts. No lock-in.

goat — zsh
GoatCode terminal session doing real work: reading files, running commands, editing code

Speaks to all of them, natively:

Anthropic OpenAI Google Mistral Groq DeepSeek xAI OpenRouter Bedrock Azure Ollama LM Studio Copilot Kimi Together Fireworks +165 more
180+
providers & subscription logins
85 MB
single binary, 5 platforms
90%
cheaper sessions with prompt caching
87
tests, CI on ubuntu · windows · macos
GoatCode hitting 429 retries and switching to a fallback provider mid-turn, finishing the answer
429 retries → ⇢ switched provider → answer

pty-captured recordings of the real TUI — real renderer, real agent loop, never a mock-up.

Mid-turn failover

Quota dies at 2 AM?

GoatCode retries the provider, walks your fallback chain live — switches, says so, and finishes the answer. No crash, no lost context.

The switch is sticky: the next launch starts on the provider that worked.

goat config set fallback-models \
  '["openrouter/claude-sonnet","groq/llama-3.3-70b",
   "deepseek/deepseek-chat"]'

Background work gets its own budget too: set small_model and compaction + explore-subagents route to the cheap model while your main turn stays on the frontier one.

Why GoatCode

Coding agents are great until they
ask you to subscribe to them.

Your terminal, your keys, your existing plans. Not a comparison chart trick — every cell is a feature you can test in sixty seconds.

▄███▄ GoatCodeClaude CodeCodex CLIOpenCode
Cost to start$0, MITsubscriptionsubscription/API$0, provider keys
Providers180+ + any compatible endpointAnthropic onlyOpenAI onlymany
Use your existing subscriptions OAuth → credentialsonly Anthropic'sonly OpenAI'spartial
Failover when quota dies built-in, mid-turnmanual
Desktop control (click/type/launch) built-in
MCP / skills / plugins✓ ✓ ✓✓ · plugins ✗
Single static binary Bun-compiled, 5 platformsNodeNodevarious
Prompt caching + live cost in USD automatic, /costsilentvaries
/rewind — transcript + files restored
Parallel subagents (3 at once)serial only
Session search across all history /search

Features differ by vendor version — spot-check anytime: goat --help lists everything.

Log in, don't sign up

Your subscriptions, as API credentials

Browser / device OAuth — one command each. No new accounts, no extra invoices.

Claude Pro / Max
goat auth claude --oauth
ChatGPT (Codex)
goat auth codex --oauth
Gemini
goat auth gemini --oauth
Kimi
goat auth kimi --oauth
Grok
goat auth grok --oauth
GitHub Copilot
goat auth github-copilot --oauth

API-key providers too — OpenAI, DeepSeek, Groq, Mistral, Together, Fireworks, xAI, OpenRouter, Moonshot, Cerebras, Ollama, LM Studio, llama.cpp… set the usual env var or goat auth <id> --key. Any endpoint speaking OpenAI / Anthropic / Gemini wire formats slots in with goat addp. Check what resolves: goat providers --check.

Computer use

It actually drives your machine

The computer tool clicks, types, scrolls, launches apps, and reads what's on screen — vision included, screenshots go straight into the model.

Permission-gated by default: every destructive action asks — or plan/bypass modes decide per-session.

And reads are parallelized — a five-file exploration costs one round-trip, not five.

goat — zsh
> open the settings and tell me which
  extension is using the most disk
GoatCode todo planning and file tools while driving the desktop

Extensible

MCP · Skills · Plugins · Hooks

⛁ MCP servers

Add any stdio / http / sse server — their tools land beside the built-ins.

goat mcp add context7 npx -y @upstash/context7-mcp
✦ SKILL.md skills

Drop a folder into ~/.goatcode/skills/. Progressive disclosure keeps context lean. /skills lists everything loaded.

⚄ Plugins

One config line points at a directory of commands + skills. /plugin reload picks up edits live.

⛓ Hooks

Claude-Code-compatible PreToolUse / PostToolUse / Stop shell hooks. Guardrails as code, not vibes.

▤ GOAT.md

Project memory loaded into every session. /init drafts it from a real read of your codebase — commands, architecture, gotchas with file:line examples.

⟳ self-update

goat self-update swaps the running binary for the latest release atomically. The TUI hints the moment a release lands.

Toolbox

Built for the long session

⚡ Prompt caching

System prompt + tools cached between turns — repeated context bills at 10% of input price. Savings shown live in /cost.

⎿ Inline diffs

Every edit prints its colored diff the moment it lands. /rewind 4 restores transcript and files to turn 4.

🐐 GOAT MODE

Bypass permissions that actually bypasses — every tool auto-approves, mid-turn, no prompts.

⧉ Parallel subagents

3 research agents, dispatched in one message.

⌕ /search

Full-text search across every saved session.

⌨ @file + aliases

@file completion and /model sonnet shortcuts.

Slash commands

Twenty-four commands. Zero context switches.

/model
switch catalog model, aliases
/auth
login flow
/mcp
manage servers
/skills
list skills
/sessions
history
/resume
pick one and continue
/new
fresh session
/compact
fold context
/cost
this session, live USD
/usage
all-time dashboard
/context
token window
/doctor
health check
/init
write GOAT.md
/review
code review
/undo
revert last edits
/tasks
background jobs
/memory
show GOAT.md
/status
providers + model
/export
transcript → md
/help
everything
/rewind
back to any turn
/search
all sessions, full-text
/permissions
session rules
/plugin
list · reload

shift+tab cycles ask → accept-edits → plan → 🐐 GOAT MODE  ·  ctrl+t task panel  ·  ctrl+v attach image  ·  esc interrupt

CI & scripts

Pipe-native. Machine-readable.

Print mode reads stdin, writes JSON, and its sessions stay resumable — goat -c picks up where CI left off.

Unknown models show honest zeros and a no price known note instead of a made-up number.

$ cat error.log | goat -p "why did this fail?" --output-format json
{
  "type": "result",  "is_error": false,
  "session_id": "…",  "model": "…",
  "usage": { input_tokens: 512, output_tokens: 42 },
  "cost_usd": 0.002166
}

$ goat /usage all
all time · 41 sessions · 1,284,113 in / 204,992 out · $4.31

Quick start

Three commands to goat

01 — installnpm install -g goatcode-cli

Any OS with Node ≥16 — fetches the right binary. No Python, no node_modules black hole.

02 — authgoat auth

Pick a subscription OAuth flow or paste an API key.

03 — workgoat

You're in. Alias any model with /model sonnet, chain fallbacks, start shipping.

no npm? one line from the release —
windows   powershell -c "irm …/install.ps1 | iex"
unix     curl -fsSL …/install.sh | bash
or grab a binary straight from GitHub releases —
goat-windows-x64.exe · goat-linux-x64 · goat-linux-arm64 · goat-darwin-arm64 · goat-darwin-x64

FAQ

Fair questions

Is it free?
Yes — MIT, $0 forever. You only pay whichever providers you choose (or already pay for).
Can it actually use my Claude subscription?
goat auth claude --oauth → browser login → credentials, done. Same for ChatGPT, Gemini, Kimi, Grok, and Copilot.
What if a provider dies mid-session?
The fallback chain handles it — GoatCode walks the chain mid-turn, switches, and finishes the answer. And the switch is sticky: the next launch starts on the provider that worked.
Windows?
First-class. irm | iex install, native computer-use, ConPTY-tested TUI. CI runs on ubuntu, windows and macos on every push.

Stop babysitting rate limits.

If GoatCode saved your quota an evening, a ★ is the cheapest thank-you.