Back to guides
Coding agents·September 21, 2026·9 min read

Aider alternatives: pick by why you are leaving

Aider is slowing rather than dead, and the right replacement depends on which of its three concrete gaps pushed you out — not on star counts.

Last reviewed on .

The nearest thing to a drop-in Aider alternative is cecli, an actively maintained Apache-2.0 fork that keeps Aider's exact bring-your-own-key route — the same two environment variables and the same mandatory openai/ model prefix — while adding the agent mode, MCP, skills, subagents and hooks Aider never shipped. If your reason for leaving is something other than staleness, the answer changes: a tool-using terminal agent points at OpenCode, Crush or Goose; delegated runs point at OpenHands; an editor workflow points at Cline, Kilo Code or Zoo Code; and a protocol other than chat completions points at Claude Code or Codex CLI.

One framing correction before the list. Aider is slowing, not dead. The repository is not archived, no maintainer has announced anything, and there is no deprecation notice anywhere. Everything below is a counted signal with a date attached, because that is all the evidence supports.

Why people are leaving Aider

SignalValue, checked September 19, 2026Source
Repository stateNot archived, Apache-2.0, 49,042 starsGitHub API
Last commit to mainMay 22, 2026Same
Commits in the previous 180 days19Commits API
Open issues / open pull requests1,380 / 502GitHub issue search
Newest installable release0.86.2, uploaded February 12, 2026 (0.86.1 before it, August 13, 2025)PyPI
Newest GitHub releasev0.86.0, August 9, 2025Releases API

The two official views of "latest release" disagree — PyPI serves 0.86.2 while GitHub Releases stops at v0.86.0 — so 0.86.1 and 0.86.2 shipped to PyPI without a GitHub release. Trust PyPI for what pip install gives you, and confirm in your own environment. Two open threads, #4751 on the project's future direction (opened January 7, 2026) and #4584 on the release gap (opened October 13, 2025), are users asking rather than maintainers answering. Treat them as community signal only.

Cadence is the soft reason. Three functional gaps are the concrete ones, and each maps to a different replacement:

  1. The model table is frozen, and that changes how edits are made. In released 0.86.2, configure_model_settings tests model == ms.name — plain string equality — and all 40 openai/-prefixed rows in the shipped 313-entry table are OpenAI models, so a gateway id exact-matches only when it happens to reuse one of those OpenAI names. Anything else falls through to substring rules whose newest Claude entries are sonnet-4-5, opus-4-6 and haiku-4-5. An id like openai/claude-sonnet-4-6 matches none of them and inherits the dataclass defaults: edit_format "whole", use_repo_map False, cache_control False, no weak model and no editor model. Check your own id against those three substrings rather than assuming: openai/claude-haiku-4-5 contains haiku-4-5, so it takes the diff-edit branch with the repo map enabled, and only cache_control stays False. Read at aider/models.py and model-settings.yml on September 19, 2026. This is what the shipped code does, not something observed at runtime here.
  2. No MCP. At tag v0.86.2 no file path in the repository contains mcp, and aider.chat's documentation index has zero occurrences of "MCP" or "Model Context Protocol".
  3. One wire protocol. Aider's compatible-endpoint page documents exactly one third-party route: OPENAI_API_BASE, OPENAI_API_KEY and the openai/ prefix. Its Anthropic page names only the API key, and no base-URL override for Anthropic appears anywhere in the v0.86.2 source tree, so Aider documents no way to point its Anthropic route at another host. Undocumented is not the same as impossible — Aider calls models through LiteLLM, whose main.py reads ANTHROPIC_API_BASE from the environment — but that path is untested here and unsupported by Aider's own docs.

Which alternative matches which exit reason

Pick by the reason you are leaving, not by star count. Every project below was checked on September 19, 2026 and is under active development unless the row says otherwise.

Why you are leavingWhere to goHow it takes a custom endpointWhat you accept
You like Aider's workflow, you want it maintainedcecli (Apache-2.0 fork)Identical: OPENAI_API_BASE, OPENAI_API_KEY, openai/ prefixA young, small-team fork — 406 stars, created August 2025
You need MCP servers and a tool-using agent loopOpenCode (MIT)A provider block in opencode.json with @ai-sdk/openai-compatible, options.baseURL and a models mapA custom provider does not inherit context limits — you set limit.context and limit.output by hand
You want per-model prices the client displays correctlyCrushprovider add <id> --type openai-compat --base-url … --api-key …, then model add with --price-input / --price-outputLicensed FSL-1.1-MIT, not an OSI open-source licence like Aider's; and its own docs call crushrc and crush.json trusted code that executes at load
You want a vendor-neutral, foundation-governed projectGoose (Apache-2.0)Its OpenAI provider, which the same docs say also serves OpenAI-compatible endpoints: OPENAI_API_KEY plus OPENAI_HOST, with OPENAI_BASE_PATH for an endpoint that serves a different path; or a JSON file under ~/.config/goose/custom_providers/Its docs say goose "relies heavily on tool calling capabilities and currently works best with Claude 4 models", and name models it cannot use at all because they lack tool calling
You want work delegated rather than pair-programmedOpenHands (MIT)Provider, model, API key and Base URL in the Settings UI, with Base URL under Advanced settingsIts docs say it "requires a powerful model to work"; a handful of extra LLM_* settings cannot be set in the UI and go in environment variables or config.toml instead
You want the editor, not the terminalCline (Apache-2.0), Kilo Code (MIT), Zoo Code (Apache-2.0)Base URL, key and model id in the extension's provider settingsCline's compatible-provider settings expose max output tokens, context window, image support, computer use and input/output prices as fields you fill in yourself; its docs describe no auto-detection for them
You want a protocol other than chat completionsClaude Code, Codex CLIClaude Code: ANTHROPIC_BASE_URL plus ANTHROPIC_AUTH_TOKEN. Codex CLI: a [model_providers.<id>] blockAnthropic's docs state that pointing ANTHROPIC_BASE_URL at a non-first-party host disables MCP tool search by default and, from v2.1.196, disables Remote Control. Codex CLI's wire_api accepts responses and nothing else

Sources for that table, all read September 19, 2026: OpenCode providers, the Crush README, Goose providers, OpenHands LLM configuration, Cline's compatible-provider page, Claude Code environment variables and the Codex configuration reference. Kunavo's repository serves chat, messages and responses routes under /v1, so all three protocols have an endpoint — that is a protocol statement, not a compatibility test, and none of these clients has been runtime-tested against Kunavo.

Do not migrate to these

ProjectWhat it is nowWhere to go instead
Roo CodeShut down May 15, 2026; RooCodeInc/Roo-Code is archived with its last push that day. Its own docs say "The Roo Code Extension was shut down on May 15th."The docs name ZooCode, the community fork, and Cline
Continuecontinue.dev now says "Continue was acquired by Cursor". Last non-prerelease tag v2.0.0-vscode, June 19, 2026; the only later commits on main are documentation changes dated July 21, 2026, one retiring the sign-in link. Not archivedCline, or another editor agent from the table above
PlandexNot archived, but staler than the tool you are leaving: last push October 3, 2025Any actively pushed option above
Qwen Code's free tierIts auth docs state "The Qwen OAuth free tier was discontinued on 2026-04-15"; the client itself is still Apache-2.0 and activeStill usable with your own endpoint — see Qwen Code pricing

Four projects also changed identity in 2026, so setup instructions written earlier will send you to the wrong place: sst/opencode now redirects to anomalyco/opencode, block/goose to aaif-goose/goose after Block donated Goose to the Agentic AI Foundation on April 7, 2026, All-Hands-AI/OpenHands to OpenHands/OpenHands, and Anaconda acquired Kilo Code on July 15, 2026 — that announcement says Kilo "remains available today with no changes to existing products, plans, or support for current users" and defers integration details, so what changes later is unknown. Its site is now kilo.ai. Verify the redirect target before pasting an install command from an old post.

What migrates, and what you rewrite

cecli is the only option on this page where migration is a rename. Its compatible-endpoint page is Aider's with the product name and install command swapped: same two variables, same openai/ prefix, same instruction to pass a compatible endpoint. Its YAML config page names .cecli.conf.yml and its advanced model settings page names .cecli.model.settings.yml and .cecli.model.metadata.json — the same three files with a different prefix, loaded from the same home, git-root and current-directory locations.

migrate-to-cecli.sh
# 1. Keep a working Aider install. Nothing below removes it.
cp .aider.conf.yml .aider.conf.yml.bak 2>/dev/null

# 2. Install the fork alongside it.
uv tool install cecli-dev

# 3. The same two variables Aider reads. Nothing is renamed here.
export OPENAI_API_BASE=https://api.kunavo.com/v1
export OPENAI_API_KEY=<your Kunavo key>

# 4. Rename the three dotfiles. cecli looks for the cecli-prefixed names.
mv .aider.conf.yml            .cecli.conf.yml
mv .aider.model.settings.yml  .cecli.model.settings.yml
mv .aider.model.metadata.json .cecli.model.metadata.json

# 5. Same prefix rule as Aider: openai/ is mandatory for a compatible endpoint.
cecli --model openai/claude-sonnet-4-6

# Rollback: rename the three files back and run aider again. Nothing else changed.

Two things are genuinely better in the fork rather than merely renamed. Its ModelSettings dataclass defaults edit_format to "diff" where Aider's defaults to "whole", so an unrecognised id starts from diff edits instead of whole-file rewrites — read at cecli/models.py on main, September 19, 2026. And it adds a first-class model-providers mechanism, where a custom OpenAI-compatible endpoint is declared with api_base, api_key_env and an optional models_url, instead of being squeezed through the single OPENAI_API_BASE slot. Its bundled table carries 383 entries against the released Aider's 313, including claude-sonnet-4-6 and claude-opus-4-7 — but it lists no 2026 Claude 5 id either, so a hand-written settings and metadata pair is still worth keeping. Two caveats stay on the record: its Anthropic page, like Aider's, documents only a key and no base-URL override, and use_repo_map still defaults to False.

What you are carryingTo cecliTo OpenCode, Crush, Goose, Cline or OpenHands
Endpoint and keyUnchanged — same two environment variablesRe-entered once in that client's own config file or settings pane
Project conventions--read is still a flag, but cecli's conventions page loads CONVENTIONS.md with --rules or a rules: key insteadOpenCode reads AGENTS.md with a CLAUDE.md fallback, so rename or point its instructions array at your existing file
Edit format and repo-map settingsRenamed file, same keysNot portable — these are Aider concepts, not shared ones
Cost metadataRenamed file, same LiteLLM-shaped keysRe-typed: Crush takes per-million prices on model add, Cline takes input and output price fields
Chat historyNot a documented import path — assume it does not moveAssume it does not move

Whatever you pick, migrate additively. Keep the old install and a copy of the dotfiles until one real task has completed on the new client, then delete the backups. The commands above never remove Aider, and the rollback is renaming three files.

What switching does to the bill

The client you choose changes token shape before it changes anything else, because the edit format decides how much the model re-emits. These are illustrative token arithmetic, not measured task costs and not a bill ceiling. Assume one session sending 200,000 uncached input tokens and receiving 12,000 output tokens under diff edits; for the whole-file column, assume the same session emits 40,000 output tokens because edited files are re-sent in full. That ratio is an assumption for illustration. Rates are live Kunavo catalog prices per million tokens.

ModelInput / output per 1MEstimate, diff editsEstimate, whole-file edits
Claude Haiku 4.5$0.40 / $2.00$0.104$0.160
Claude Sonnet 4.6$1.20 / $6.00$0.312$0.480
Claude Opus 5$2.00 / $10.00$0.520$0.800

Under these assumptions the edit format alone moves Claude Sonnet 4.6 from $0.312 to $0.480 for identical work. That gap is why a client's default for an id it does not recognise belongs in the comparison, and why it is not on its own a reason to switch: a settings file closes it without changing tools. Cheapest listed rate and lowest cost to finish the task are still different questions, and neither this page nor any price table answers the second one for your repository.

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.

Where to start

If you are staying on the Aider-shaped workflow, nothing about your Kunavo configuration changes: the Aider setup guide documents the same OPENAI_API_BASE, OPENAI_API_KEY and openai/ prefix that cecli reads, and Aider pricing covers the settings file that restores diff edits, the repo map and the cost line. If you are changing client, start from that client's own page: OpenCode, Cline, Kilo Code, Claude Code or Codex CLI. These are published configuration references rather than compatibility tests. Create a Kunavo account when you are ready to fund a key, run one bounded task, and read the charge your account actually recorded for it.

Still choosing between agents rather than providers? OpenCode alternatives, OpenHands vs OpenCode and Goose vs Claude Code compare them head to head, and the OpenAI-compatible API guide covers what the shared protocol does and does not carry.

FAQ

Is Aider dead or still maintained?

Neither word is accurate. The Aider-AI/aider repository is not archived, carries an Apache-2.0 license and had 49,042 stars when checked on September 19, 2026, and no maintainer has published any statement about discontinuing it. But the cadence has clearly slowed: the last commit to main is May 22, 2026, there were 19 commits in the preceding 180 days, and 1,380 issues and 502 pull requests are open. The newest installable release on PyPI is 0.86.2 from February 12, 2026, and the one before it was 0.86.1 from August 13, 2025. GitHub Releases stops earlier still, at v0.86.0 from August 9, 2025. Read that as cadence evidence, not as an announcement.

What is the closest drop-in replacement for Aider?

cecli, an Apache-2.0 fork of Aider published on PyPI as cecli-dev. It keeps Aider's bring-your-own-key route unchanged — the same OPENAI_API_BASE and OPENAI_API_KEY variables and the same mandatory openai/ model prefix — so an existing key and endpoint move across untouched. Migration is a rename of three dotfiles rather than a rewrite: .aider.conf.yml, .aider.model.settings.yml and .aider.model.metadata.json become .cecli.conf.yml, .cecli.model.settings.yml and .cecli.model.metadata.json. The caveat is durability, not capability: the fork was created in August 2025 and had 406 stars on September 19, 2026, against Aider's 49,042. Shipping weekly today — 1.5.0 on September 12 and 1.6.0 on September 19, 2026, per PyPI — is a fact about now, not a guarantee about next year.

Does Aider support MCP?

No. At released tag v0.86.2 no file path in the repository contains “mcp”, and aider.chat's documentation index contains zero occurrences of “MCP” or “Model Context Protocol” (both checked September 19, 2026). If you need MCP servers, that is a reason to change client rather than a setting to change. cecli, OpenCode, Crush, Goose, Cline and Zoo Code all document MCP configuration; Aider does not.

Can I keep my API key when I switch away from Aider?

Whether a key moves depends on what the new client expects on the wire. cecli reads the same two OpenAI-compatible environment variables Aider does, so a key and base URL transfer with no edit. OpenCode, Crush, Goose, Cline and OpenHands each take a base URL, a key and a model id, but through their own configuration file or settings pane, so the key is re-entered once. Claude Code expects the Anthropic Messages protocol via ANTHROPIC_BASE_URL, and Codex CLI expects the Responses protocol, so those two need an endpoint that serves those shapes rather than only chat completions. Kunavo's own repository serves chat, messages and responses routes under /v1, which is a protocol fact rather than a tested-compatibility claim.

Should I move from Aider to Roo Code or Continue?

No, both are finished. The Roo Code extension was shut down on May 15, 2026; its own documentation site now states that and points readers to ZooCode, the Apache-2.0 community fork at Zoo-Code-Org/Zoo-Code, and to Cline. The RooCodeInc/Roo-Code repository is archived, with its last push on May 15, 2026. continue.dev now carries a notice reading "Continue was acquired by Cursor." Its last non-prerelease tag is v2.0.0-vscode from June 19, 2026, and the only commits on its default branch since then are documentation changes dated July 21, 2026, one of which removes the sign-in link because the login flow was retired. The repository is not archived, so “archived” is the wrong word, but no feature work has landed since June 2026.

Why does my model behave worse in Aider than the model should?

A common cause is that Aider does not recognise the model id and silently falls back to its defaults. In released version 0.86.2, configure_model_settings tests model == ms.name, a plain string equality, and all 40 openai/-prefixed rows in the shipped 313-entry table are OpenAI models — so a gateway id such as openai/claude-sonnet-4-6 can never match exactly. It then falls through to substring rules whose newest Claude entries are sonnet-4-5, opus-4-6 and haiku-4-5. openai/claude-sonnet-4-6 matches none of them and inherits the dataclass defaults: edit_format "whole", use_repo_map False, cache_control False, and no separate weak or editor model — whole-file rewrites, no repo map, no prompt caching and commit-message traffic billing at your main model's rate. Check your own id against those three substrings before assuming that is what happened: openai/claude-haiku-4-5 does contain haiku-4-5, so it takes the diff-edit branch with the repo map on, and only cache_control stays False. A hand-written .aider.model.settings.yml fixes either case without changing client. For comparison, cecli's equivalent dataclass defaults edit_format to "diff", so an unknown id starts from diff edits there.

Repository state, release dates, commit and issue counts, and every client configuration page linked above were read on September 19, 2026; Aider behaviour claims come from released tag v0.86.2 and cecli claims from its main branch. No client on this page has been runtime-tested against Kunavo, and no token bill was measured — every dollar figure is illustrative arithmetic over live catalog rates.