Almost nobody needs to leave Crush, and that is the most useful thing a Crush alternatives page can tell you. Crush is Charm's terminal coding agent — not liljencrantz/crush, the unrelated Rust shell and programming language that shares the name, and not any of the companion-chat apps that own the bare "crush ai" queries. Charm's Crush is active: the GitHub API reported charmbracelet/crush as not archived with more than 28,000 stars on September 21, 2026, and it shipped v0.96.1 that same day. So "alternatives" here is really six different exit reasons, and three of them do not need a different client at all.
Start with which one is yours. Then read the migration ledger, because the cost of switching is not where people expect it.
Start with the exit reason, not the shortlist
| Why you are looking | Does it need a different client? | What actually fixes it |
|---|---|---|
| Charm Hyper does not sell the model family you want | No | Register your own endpoint. Crush documents custom providers as a plain config builtin and attaches no plan requirement to them; the README calls Hyper the quickest way to start, not a requirement |
| You want telemetry off | No | Crush records pseudonymous usage metrics by default and documents two opt-outs: CRUSH_DISABLE_METRICS=1, and it honours DO_NOT_TRACK=1 |
| Your organization requires an OSI-approved license on tooling | Yes | Crush is FSL-1.1-MIT and GitHub reports NOASSERTION. OpenCode and OpenHands are MIT; goose and Codex CLI are Apache-2.0 |
| You do not want a config file that executes | Yes | Crush's own docs: "Both formats are trusted code: they run with your shell privileges before the UI appears." OpenCode's opencode.json is data |
| You need a surface beyond the terminal | Yes | OpenCode documents a browser UI it starts with opencode web, and an IDE extension for VS Code and its forks. OpenHands describes itself as "an open source platform for software engineering agents" and ships a GUI, a CLI and an SDK, so it is the option to weigh when a terminal chat loop is not the shape you want |
| You want a flat monthly rate instead of metered tokens | Probably not | Hyper publishes a $20/month subscription; OpenCode Go is $10/month and Crush ships OpenCode as a built-in provider. Go's own validated-client table does not list Crush, and this page has no evidence either way — test it |
Sources for that table, all checked September 21, 2026: the Crush README for custom providers and metrics, docs/config/README.md for the trusted-code warning, hyper.charm.land for the subscription price, OpenCode Go for its, and OpenCode's web and IDE pages for the non-terminal surfaces. One practical note on Crush's documentation: charm.land/crush returns 200 but its whole body is a 199-byte meta refresh to the repository, so the README and docs/config/README.md are the first-party docs. A Mintlify-hosted mirror of the Crush docs still teaches the deprecated crush.json format; it carries a "Claim this site" banner and is not Charm's.
The shortlist, with the names it actually has today
Three of these moved organization recently enough that most published comparisons use the wrong repository.
| Project | Status on September 21, 2026 | License | Latest release |
|---|---|---|---|
| OpenCode (Anomaly) | Active. Formerly sst/opencode; that path now resolves to anomalyco/opencode | MIT | v1.18.31, September 14, 2026 |
| goose (AAIF) | Active. Formerly block/goose; the project announced its move to the Agentic AI Foundation at the Linux Foundation on April 7, 2026 | Apache-2.0 | v1.51.0, September 17, 2026 |
| OpenHands | Active. Formerly All-Hands-AI/OpenHands; homepage now openhands.dev | MIT | v1.20.0, September 17, 2026 |
| Codex CLI | Active | Apache-2.0 | rust-v0.155.1, September 18, 2026 |
| Claude Code | Active, and not open source: its LICENSE.md reserves all rights and makes use subject to Anthropic's Commercial Terms of Service | Proprietary; GitHub detects no SPDX license | Not compared here |
| Aider | Not archived, but stalled: last commit to main May 22, 2026; 1,379 open issues | Apache-2.0 | v0.86.0 dated August 9, 2025; PyPI aider-chat 0.86.2 from February 12, 2026 |
| Gemini CLI | Repository still releasing (v0.60.0, September 15, 2026), but its own project site says the CLI was replaced by Antigravity CLI on June 18, 2026 for unpaid-tier and Google One users | Apache-2.0 | v0.60.0, September 15, 2026 |
Repository status, licenses and releases read through the GitHub API on September 21, 2026. The Gemini CLI row is scoped exactly as its source states it and no wider: the repository is plainly still shipping, and no announcement on Google's own domains was found to corroborate the replacement notice. For the Crush-versus-OpenCode comparison itself — permissions defaults, license detail, the two-wallet split — see Crush vs OpenCode rather than a summary here.
Where each client lets you put your own endpoint
This is the table that decides whether a candidate is even viable for you. The same gateway is spelled four different ways across these five clients, and one of them cannot accept a plain chat-completions endpoint at all.
| Client | Where the endpoint goes | How the URL is written | The wall to know about |
|---|---|---|---|
| Crush | provider add <id> --type openai-compat --base-url … --api-key …, then model add | Includes /v1. Charm's own examples write https://api.deepseek.com/v1 | None on the endpoint. Use openai-compat, not openai — the README says openai "should be used when proxying or routing requests through OpenAI" |
| OpenCode | opencode.json, a provider block with "npm": "@ai-sdk/openai-compatible" and options.baseURL | Includes /v1 | None on the endpoint. Pick the package by wire format: its docs use @ai-sdk/openai-compatible for /v1/chat/completions and @ai-sdk/openai for /v1/responses. Separately, the same docs say baseURL can be set on any provider, and the worked example overrides the built-in anthropic one |
| Claude Code | ANTHROPIC_BASE_URL, plus a credential variable | Bare origin, no path. The doc example is https://llm-gateway.example.com; the client appends /v1/messages | The credential variable picks the header — ANTHROPIC_AUTH_TOKEN sends Authorization: Bearer, ANTHROPIC_API_KEY sends x-api-key, and the wrong one returns 401. The desktop app reads neither this nor settings.json |
| goose | OPENAI_API_KEY plus OPENAI_HOST and OPENAI_BASE_PATH, or a dedicated custom provider | Split in two. OPENAI_HOST is the root with no trailing path; OPENAI_BASE_PATH defaults to v1/chat/completions | Its own docs: a 404 usually means OPENAI_BASE_PATH is wrong for your endpoint, while a 401 is the key not loading |
| Codex CLI | [model_providers.<id>] in config.toml | base_url plus wire_api | The hard wall. In config.schema.json the WireApi definition has exactly one enum value, "responses". A chat-completions-only endpoint has no valid wire protocol. openai, ollama and lmstudio are also built-in ids, and Codex's provider source says built-in providers are "not generally overridable" |
Crush and goose read verbatim from the Crush README and goose's provider documentation on September 21, 2026; the Codex enum from config.schema.json and the built-in ids from model-provider-info, both on main and fetched the same day; Claude Code from its gateway connection page; OpenCode from its provider docs. Two things worth carrying away: the base-URL reference exists because that /v1 difference is a common misconfiguration when moving between these clients, and Anthropic's gateway overview states that it "doesn't endorse, maintain, or audit third-party gateway products, and doesn't support routing Claude Code to non-Claude models through any gateway". Kunavo publishes a Codex configuration using wire_api = "responses" — see best API for Codex — but a published configuration is not a test result.
The migration ledger: what moves, what does not
The surprise is that the portable assets are the expensive ones and the throwaway assets are the ones people worry about.
| Asset | Moves? | Detail |
|---|---|---|
| Agent Skills | Yes, unchanged | Crush's global skill paths include ~/.claude/skills/ and ~/.agents/skills/; per project it reads .agents/skills, .crush/skills, .claude/skills and .cursor/skills. OpenCode reads ~/.claude/skills/ too. Same folders, no conversion |
| Cross-tool project rules | Yes | Crush loads ~/.config/AGENTS.md as the shared file and ~/.config/crush/CRUSH.md as the Crush-only one. OpenCode reads AGENTS.md first, then ~/.config/opencode/AGENTS.md, then ~/.claude/CLAUDE.md. Anything Crush-specific stays behind in CRUSH.md by design |
| Your API key | Yes | It belongs to the endpoint, not the client. One key can sit behind Crush, OpenCode and goose at the same time while you compare them |
| MCP and LSP servers | Capability yes, syntax no | Both clients support them; the declarations are rewritten. This is a copy-and-reshape job, not a re-architecture |
| Provider configuration | No converter | A crushrc is Bash with Crush builtins; opencode.json is a data file. Rewritten by hand, once, per project or per machine |
| Session history | No | Crush's session command registers list, show, last, delete and rename — there is no export or import subcommand. State lives in ~/.local/share/crush (Unix) or %LOCALAPPDATA%\crush (Windows) |
| Your on-screen cost readout | No, and it never was a bill | For a hand-registered Crush provider the figure is arithmetic on the --price-input and --price-output numbers you typed; for built-in providers it comes from Catwalk. Neither reads your account |
Read from the Crush README, docs/config/README.md and internal/cmd/session.go on main, and from OpenCode's rules documentation, all on September 21, 2026. One ambiguity is left standing rather than guessed: Crush's own files disagree about how session state is stored, so this page names the location and not the storage engine.
The rollback. Install the candidate beside Crush rather than instead of it. Leave the crushrc untouched, point the new client at the same endpoint, and run one bounded task in both. Skills and AGENTS.md are read from shared paths, so neither client needs reconfiguring to see them, and going back is simply running crush again. The one thing to decide before you start is whether the session history you would leave behind matters to you — because it is the only asset with no route out.
What a session costs, whichever client wins
None of these clients charges for itself. Crush, OpenCode, goose, Codex CLI and Aider are all free downloads; what you pay is model tokens at whichever endpoint you configure. So the client choice does not move your bill — the wallet does, and that is the real reason a Crush user ends up shopping.
The figures below are illustrative token arithmetic, not measured task costs and not a bill ceiling. Assume one session on the large slot that sends 200,000 uncached input tokens and receives 15,000 output tokens. That ratio is an assumption for comparison, not a measurement of your repository. Rates are live Kunavo catalog prices per million tokens.
| Model | Input / output per 1M | Estimated cost for that session |
|---|---|---|
| GPT-5.6 Luna | $0.07 / $0.42 | $0.020 |
| Claude Haiku 4.5 | $0.40 / $2.00 | $0.110 |
| Gemini 3.8 Flash | $0.525 / $2.625 | $0.144 |
| GPT-5.6 Terra | $0.70 / $4.20 | $0.203 |
| Claude Sonnet 5 | $2.00 / $10.00 | $0.550 |
There is a second line item specific to Crush, and it is worth checking after any migration. Crush pins two slots, model large and model small. In Crush's source on main (internal/agent/agent.go, read September 21, 2026) the small slot generates the session title and backs the built-in agentic fetch tool, while conversation summarization runs on the large model. Title generation is one short call per session, capped at 40 output tokens unless the slot holds a reasoning model — so on its own the small slot is cheap by construction, and the fetch tool is what can make it add up. To put a scale on it, take an arbitrary 40,000 input and 3,000 output tokens of small-slot traffic across a session — a figure chosen to make the models comparable, not a measurement of Crush. On GPT-5.6 Luna that estimates at $0.004 and on Claude Haiku 4.5 at $0.022; left pointing at Claude Sonnet 5 it is $0.110, about 5 times the Claude Haiku 4.5 figure. Whichever client you land on, check whether it has a cheap-model slot and what is actually in it.
For context on why the wallet question arises at all: Charm Hyper's public model endpoint returned 23 models on September 21, 2026, and none of them is a Claude, a GPT-5 or GPT-6 series, or a Gemini model. Its published plans are a Free tier at "$0 /month" with "100 Hypercredits per month" and a Subscription at "$20 /month" with "250 Hypercredits, refreshing daily", with prepaid bundles at $5 for 100, $10 for 200 and $20 for 400 credits, of which the page says "Prepaid Hypercredits never expire", and the same page says "1 Hypercredit is currently 5¢". Those two statements do not reconcile into a monthly allowance and the page publishes no burn rules, so this guide quotes the strings and does no arithmetic on them.
Kunavo's catalog amount is a billing floor rather than a cap: when the upstream reports its charge, the bill is the greater of catalog cost and upstream cost times the applicable markup. Cache charges and external tools sit outside this example. The minimum top-up is $10 in prepaid credit — a funding minimum, not a task fee or a subscription. See billing details. Kunavo serves no embedding, text-to-speech or speech-to-text model, so any client feature that needs one of those calls an outside provider on its own account.
Two honest caveats before you pick
First, Kunavo is not the only API vendor writing about Crush, and any page implying otherwise is checkable and wrong. Z.AI, DeepSeek and Vercel each publish a first-party Crush setup page. What is worth knowing is that when those three were read on September 21, 2026, Z.AI and DeepSeek both published a hand-written deprecated crush.json block and Vercel's page pointed its setup at ~/.config/crush/crush.json — while Crush's own documentation says crush.json "is the original format and is now deprecated" and that new options land only in the Bash-based config. DeepSeek's block also sets base_url to https://api.deepseek.com, without the /v1 suffix that Charm's own DeepSeek example carries. If you copy a config from a token vendor's page, check it against the README first.
Second, cheapest listed rate and cheapest way to finish the task are different claims, and only the first is on a price table. Pick the least expensive model that completes your work at review effort you accept, then reconcile against the ledger your provider account recorded — not against the terminal readout, which for a hand-registered provider is arithmetic on figures you typed yourself.
Trying one
If you are staying on Crush and only changing the wallet, the Crush integration guide carries the whole crushrc. If you are moving, the setup pages for OpenCode and goose cover the two most common destinations. Kunavo has not runtime-tested any of these clients — what those pages document is each client's own published configuration against the endpoint Kunavo publishes, which is not the same thing as a compatibility result. Keep a working route available, run one bounded task, and read the charge your account actually recorded before you move a daily driver. Create a Kunavo account when you are ready to fund a key.
Comparing further afield? OpenCode alternatives and Claude Code alternatives run the same decision-tree exercise from the other side, and the OpenAI-compatible API reference covers the endpoint convention most of these clients rely on.
FAQ
What are the alternatives to the Crush CLI?
The terminal agents people actually move between are OpenCode from Anomaly (MIT, at opencode.ai), goose (Apache-2.0, now governed by the Agentic AI Foundation at the Linux Foundation), OpenAI's Codex CLI (Apache-2.0), Anthropic's Claude Code (not open source: its LICENSE.md reserves all rights and puts use under Anthropic's Commercial Terms of Service), Google's Gemini CLI (Apache-2.0) and Aider (Apache-2.0, but stalled). OpenHands is the outlier: it describes itself as an open source platform for software engineering agents and ships a GUI, a CLI and an SDK, rather than being a terminal chat loop. One trap before you compare them: the archived repository at github.com/opencode-ai/opencode is not an alternative at all — its own README says the project continued under the name Crush, so that OpenCode is Crush's former name. Repository facts checked September 21, 2026.
Is the Crush CLI abandoned or discontinued?
No. On September 21, 2026 the GitHub API reported charmbracelet/crush as archived false with more than 28,000 stars, created May 21, 2025, and it published release v0.96.1 that same day; the npm package @charmland/crush went to 0.96.1 minutes later. If you arrived here because a search result implied the project had stopped, the likely cause is the name collision with the archived Go repository that became Crush, or with github.com/liljencrantz/crush, an unrelated command-line shell and programming language. Neither says anything about Charm's agent.
Do I need a different client to use a model Charm Hyper does not sell?
No. Crush documents custom providers as a first-class path, and its documentation attaches no plan requirement to them: provider add registers the endpoint and model add registers each id, and Charm's own examples cover both an OpenAI-compatible and an Anthropic-compatible endpoint. Hyper is what the README calls the quickest way to start, not a requirement. This matters because Hyper's public catalog returned 23 models on September 21, 2026 and none of them is a Claude, a GPT-5 or GPT-6 series, or a Gemini model — so wanting one of those families is a reason to change your wallet, not your client.
What actually transfers when I switch terminal coding agents?
Agent Skills transfer with no conversion, because several clients read the same folders: Crush's documented skill paths include ~/.claude/skills/ and, in a project, .claude/skills and .cursor/skills, and OpenCode reads ~/.claude/skills/ too. Cross-tool project rules transfer through AGENTS.md — Crush loads ~/.config/AGENTS.md as the shared file and ~/.config/crush/CRUSH.md as the Crush-only one, and OpenCode reads AGENTS.md first and falls back to CLAUDE.md. Your API key transfers, because it belongs to the endpoint rather than the client. What does not transfer is the provider configuration, which has no converter between formats, and the session history: Crush's session command registers list, show, last, delete and rename, with no export or import subcommand. Checked September 21, 2026.
Does the Crush small model slot cost me anything?
Yes, a little, and it is worth knowing what it is spent on. Crush pins two model slots, large and small. In Crush's source the small slot generates the session title and backs the built-in agentic fetch tool; conversation summarization runs on the large model, not the small one. Title generation is one short call per session, capped at 40 output tokens unless the slot holds a reasoning model. So the small slot is cheap by construction — the thing to check after a migration is simply that something cheap is in it, rather than the expensive model you selected for the large slot. Read from internal/agent/agent.go on main, September 21, 2026.
Is the Crush CLI open source?
Not under an OSI-approved license, which is the one exit reason that genuinely forces a client change. Crush's LICENSE.md is headed Functional Source License, Version 1.1, MIT Future License, abbreviated FSL-1.1-MIT, copyright 2025-2026 Charmbracelet, Inc., and GitHub's license API reports it as NOASSERTION rather than a recognised SPDX identifier. If your organization's policy requires an OSI-approved license on developer tooling, OpenCode is MIT, goose and Codex CLI are Apache-2.0, and OpenHands is MIT. Claude Code is not a substitute on that axis — its LICENSE.md reserves all rights and makes use subject to Anthropic's Commercial Terms of Service, and GitHub detects no SPDX license for the repository.
Can I try an alternative without giving up my current setup?
Yes, and the rollback is cheaper than most switches because the two expensive assets are shared rather than moved. Install the candidate alongside Crush, point it at the same endpoint, leave your existing configuration in place, and run the same bounded task on both. Skills and AGENTS.md are read from shared paths, so neither client has to be reconfigured to see them. Nothing in Crush is uninstalled by trying something else, and if you go back, the crushrc you never edited is still there.
Which alternative should I avoid picking from an old listicle?
Any recommendation that still calls Aider fresh, and any that uses a repository name that has moved. Aider is not archived, but its newest GitHub release is v0.86.0 dated August 9, 2025, its newest PyPI build of aider-chat is 0.86.2 uploaded February 12, 2026, its last commit to main is May 22, 2026 and it carries 1,379 open issues — treat it as a maintenance-risk option rather than a fresh recommendation. Separately, sst/opencode now resolves to anomalyco/opencode, block/goose to aaif-goose/goose after the donation to the Agentic AI Foundation, and All-Hands-AI/OpenHands to OpenHands/OpenHands. A listicle using the old names was written before those moves and may be stale in other ways too.
Checked September 21, 2026: repository status, licenses and latest releases for Crush, OpenCode, goose, OpenHands, Codex, Aider and the unrelated liljencrantz/crush through the GitHub API; the Crush README, docs/config/README.md, internal/cmd/session.go and internal/agent/agent.go on main, and the npm record for @charmland/crush; charm.land/crush; hyper.charm.land and its models endpoint; the Codex config.schema.json wire-protocol definition and its model-provider-info source; goose's provider documentation and its April 7, 2026 move announcement. Claude Code's LICENSE.md and gateway pages, OpenCode's provider, rules, web and IDE docs, OpenCode Go's price, the Gemini CLI replacement notice, and the Z.AI, DeepSeek and Vercel Crush setup pages come from those vendors' own pages on the same date. Kunavo token rates read from the live catalog. No client on this page was runtime-tested against Kunavo's endpoint, and no benchmark or performance claim is made.