Beyond the Big Three: OpenCode, Pi, Copilot CLI, Cline, Goose and Other Coding Agents
Ten maintained coding agents outside Claude Code, Codex and Cursor are worth a look in September 2026: OpenCode, Pi, GitHub Copilot CLI, Cline, Kilo Code, Goose, Qwen Code, Crush, Amp and Factory Droid. Most read AGENTS.md, so one rules file, one multiplexer and one CI gate can run a mixed team once licences are cleared.
Your team standardised on Claude Code, but one engineer works mostly in OpenCode, the platform group already pays for GitHub Copilot, and a contractor sends pull requests written with Cline. Each agent reads a different instructions file, so the same repo gets four versions of “how we run tests”. The drift only shows up when a pull request ignores a rule nobody knew was missing. This page is for the developer choosing a second agent and the tech lead who has to keep a mixed team consistent.
What you get from this catalogue of other coding agents
Section titled “What you get from this catalogue of other coding agents”- A status table for ten live agents and four you should stop recommending, with dated popularity figures
- A verified install line and one headless command for each agent
- The licence facts that decide whether legal has to sign off (Copilot CLI is proprietary, Crush is source-available)
- A mixed-agent workflow: one
AGENTS.md, one herdr session, one CI gate, and a reviewer that is never the builder - Two copy-paste prompts: a read-only audit and a cross-agent review
Which coding agents are worth a look in September 2026?
Section titled “Which coding agents are worth a look in September 2026?”GitHub stars below were read through the GitHub API on 2026-09-26 and recorded in the site’s agent-tools research dossier. Stars measure attention, not daily use; download counts are omitted because the npm and PyPI statistics hosts were unreachable.
| Agent | Shape | Licence | Stars (2026-09-26) | Status | Reach for it when… |
|---|---|---|---|---|---|
OpenCode (anomalyco/opencode) | Terminal agent, desktop app | MIT | 210,085 | Alive | you want an open-source terminal agent that works with any model provider |
Pi (earendil-works/pi) | Terminal agent | MIT (npm licence field) | 109,402 | Alive | you want a minimal, hackable terminal agent that herdr, Orca, Sculptor and CC Switch support |
GitHub Copilot CLI (github/copilot-cli) | Terminal agent | Proprietary GitHub licence | 11,211 (repository holds docs and issues only) | Alive, frequent releases | your org already pays for Copilot and wants existing Copilot policies to apply |
Cline (cline/cline) | VS Code and JetBrains extension, CLI, desktop, SDK | Apache-2.0 | 69,340 | Alive | you want approvals in the IDE and the same config in CI |
Kilo Code (Kilo-Org/kilocode) | VS Code and JetBrains extension, kilo CLI (an OpenCode fork) | MIT | 27,419 | Alive | you want built-in Code, Plan, Ask and Debug agents and a marketplace |
Goose (aaif-goose/goose) | Desktop app, CLI, API | Apache-2.0, Linux Foundation AAIF project | 54,661 | Alive | you want a foundation-governed, vendor-neutral agent that also handles non-code tasks |
Qwen Code (QwenLM/qwen-code) | Terminal agent, desktop, web UI, IDE plugins, SDKs | Apache-2.0 | 28,137 | Alive | you run Qwen models, hosted or local, in a Claude-Code-shaped harness |
Crush (charmbracelet/crush) | Terminal agent | FSL-1.1-MIT (source-available) | 28,307 | Alive | you want an LSP-aware terminal agent with mid-session model switching |
Amp (@ampcode/cli) | Terminal agent with subagents and an “Oracle” | Proprietary vendor product | no public metric | Alive | you want a second-opinion reasoning model built into the loop |
Factory Droid (@factory/cli) | Terminal agent with a headless droid exec | Proprietary vendor product (npm licence field UNLICENSED) | no public metric | Alive | you want a vendor multi-agent “mission” mode in CI |
Four names still appear in older articles and should not be recommended to a team today:
| Agent | What happened | Evidence |
|---|---|---|
| Roo Code | Shut down on 15 May 2026 and archived; its README points to Cline and the ZooCode fork | RooCodeInc/Roo-Code README, GitHub API archived: true |
Continue (cn CLI) | README: “no longer actively maintained and is read-only for all users”; last npm release 2026-06-18. GitHub still shows it as not archived, with 36,030 stars | continuedev/continue README, npm |
| Aider | Slowing: last push 2026-05-22, last PyPI release (aider-chat 0.86.2) 2026-02-12, README still recommends models from early 2025. Usable, not a default | GitHub API, PyPI |
| Gemini CLI on a personal Google account | Since 2026-06-18, Gemini CLI no longer serves free, Google AI Pro or Ultra users; those tiers moved to the closed-source Antigravity CLI (agy). Gemini CLI itself is alive (npm @google/gemini-cli 0.61.0) for Gemini Code Assist Standard or Enterprise, Google Cloud and paid API keys | google-gemini/gemini-cli Discussion #27274 (2026-05-19); npm |
How do you install each agent?
Section titled “How do you install each agent?”Every install line below was read from the project’s README or docs on 2026-09-26 (Droid: from search results, see its tab); versions come from npm view the same day. Pick one install route per machine, not all of them.
curl -fsSL https://opencode.ai/install | bash# ornpm i -g opencode-ai@latest # 1.18.32brew install anomalyco/tap/opencodeTab switches between the build agent (full access) and the read-only plan agent; @general calls the general subagent. Headless: opencode run "Explain how the auth middleware works". The original Go project opencode-ai/opencode is archived; the live one is anomalyco/opencode. See OpenCode compared with the big three.
npm install -g --ignore-scripts @earendil-works/pi-coding-agent # 0.87.1, binary `pi`, Node 22.19+pi in the project starts a session. Pi is a small terminal agent in its own right and a supported harness in herdr (--kind pi), Orca, Sculptor and CC Switch. --ignore-scripts is part of the README’s install line: it stops npm from running the package’s lifecycle scripts.
npm install -g @github/copilot # 1.0.88, binary `copilot`# orbrew install copilot-cliwinget install GitHub.Copilot # WindowsRun copilot in a repository and use /login on first start, or set a fine-grained token with the “Copilot Requests” permission in GH_TOKEN. It ships GitHub’s MCP server by default. Headless: copilot -p "Fix the failing test in tests/auth.spec.ts" --allow-tool 'shell(npm run test:*)' (glob patterns in --allow-tool are documented in the Copilot CLI changelog). /delegate hands the task to the Copilot cloud agent as a pull request. Every Copilot plan includes the CLI; billing is usage-based since 2026-06-01. See GitHub Copilot for agentic teams.
npm install -g cline # 3.0.65cline auth # interactive sign-in or API key setupcline --auto-approve false "Audit this package and propose fixes"The one-shot form cline "…" runs a single turn and exits, and it auto-approves every tool call by default (Cline CLI README, 3.0.65), so add --auto-approve false whenever the run must not edit files. cline alone opens the TUI with a plan/act toggle. cline --json "…" streams NDJSON events, and git diff origin/main | cline "Review these changes for issues" reviews piped input. Rules live in .clinerules/; Cline also picks up AGENTS.md, .cursorrules and .windsurfrules (Cline rules docs). In a mixed team keep rules in AGENTS.md only; the CI check in step 4 below rejects .clinerules/.
npm install -g @kilocode/cli # 7.8.1, binaries `kilo` and `kilocode`# orbrew install Kilo-Org/tap/kilokilo starts an interactive session. The README’s CI form is kilo run --auto "run tests and fix any failures"; --auto approves every permission prompt that no rule explicitly denies. Kilo’s AGENTS.md docs page (packages/kilo-docs/pages/customize/agents-md.md in the Kilo repository, checked 2026-09-26) marks the memory bank as deprecated in favour of AGENTS.md; existing memory-bank rules keep working.
curl -fsSL https://github.com/aaif-goose/goose/releases/download/stable/download_cli.sh | bashgoose configure # pick provider and modelgoose session -n payments-refactor # interactive, named sessiongoose run -t "List the modules without tests" # headlessThe repository moved from block/goose to aaif-goose/goose under the Linux Foundation’s Agentic AI Foundation. Goose reads AGENTS.md and then .goosehints by default.
npm install -g @qwen-code/qwen-code@latest # 0.24.6, binary `qwen`, Node 22+# orbrew install qwen-codeqwen in the project, then /auth to choose a provider. Headless: qwen -p "Summarize the repository layout.". Its native file is QWEN.md, but it reads an existing AGENTS.md too. Qwen Code forked Gemini CLI v0.8.2 and stopped syncing with upstream from Qwen Code v0.1: it is a diverged fork, not Gemini CLI’s successor.
brew install charmbracelet/tap/crush# ornpm install -g @charmland/crush # 0.96.1go install github.com/charmbracelet/crush@latestcrush starts a session and ctrl+l opens the model picker. Project initialization writes AGENTS.md by default. Crush records pseudonymous usage metrics by default; set CRUSH_DISABLE_METRICS=1 or DO_NOT_TRACK=1 to opt out.
npm install -g @ampcode/cli # binary `amp`amp -x "Find every place we parse dates without a timezone"amp -x is execute mode; amp threads continue -x "…" continues a thread. Prompts can ask Amp to “Spawn subagents to: …” or to “Use Amp Oracle to …”. @sourcegraph/amp still publishes the same versions, but @ampcode/cli is the current name.
npm install -g @factory/cli # 0.228.0, binary `droid`droidAccording to Factory’s documentation (read through search results; docs.factory.ai was unreachable from the research environment), droid exec runs headless and droid exec --mission … runs a planner, workers and validators, and needs --auto high or --skip-permissions-unsafe. Check droid exec --help before you script it.
Try one agent on a real task without letting it write
Section titled “Try one agent on a real task without letting it write”The fastest honest evaluation is a read-only audit of a package you know well: you can judge the findings without reading a diff, because you already know where its real defects are. Cline’s CLI makes this a one-liner.
cd packages/billingcline --auto-approve false "Audit this package and propose fixes"Without --auto-approve false, the one-shot turn approves every tool call. For a stricter start, cline --plan --auto-approve false "…" opens the run in plan mode (Cline CLI README, 3.0.65). --auto-approve false makes the CLI prompt you in the terminal before each tool call: approve the reads, decline any edit or command that writes. Expect a list of findings with file references and suggested changes. Score it against what you already know: which real problems did it find, which did it miss, and which findings are false.
Run the same prompt in your current agent and compare. The same pattern works headless in each tool: opencode run "…", qwen -p "…", goose run -t "…", amp -x "…", or copilot -p "…" without --allow-all-tools.
How do you run a mixed-agent team under one rules source and one multiplexer?
Section titled “How do you run a mixed-agent team under one rules source and one multiplexer?”The failure you are preventing is drift: five instruction files that each say something slightly different about how to test, which directories are off limits, and what “done” means. The fix is one source of truth that every agent reads, one place where you watch all of them, and one gate that treats their output identically.
-
Write one
AGENTS.mdat the repository root. Put build, test and lint commands, the directories agents must not touch, and your definition of done in it. Keep it short: every agent loads it at the start of every session, so every line costs context in every run.AGENTS.md ## Commands- Install: pnpm install --frozen-lockfile- Test: pnpm test (must pass before you say you are done)- Types: pnpm typecheck## Boundaries- Never edit migrations/ or .github/workflows/- Never add a dependency without saying why in the PR description## Done means- Tests and typecheck pass, and the PR description lists the commands you ran -
Point every agent at it, and delete the duplicates. OpenCode, Kilo Code, Cline, Goose, Qwen Code and Crush read
AGENTS.md(checked in each project’s docs on 2026-09-26; for Kilo, its AGENTS.md docs page), and the Copilot CLI changelog documents@-import expansion inAGENTS.md. For Amp and Droid, confirm which file they read in the vendor’s docs; neither vendor site was reachable from the research environment. The big three differ:Claude Code reads
CLAUDE.md. From v2.1.277 (thelatestchannel on 2026-09-26), it falls back toAGENTS.mdonly when the project has noCLAUDE.md. Bedrock, Google Cloud, Foundry, gateway and telemetry-off sessions get that fallback from v2.1.281, and you can toggle it under “Project instructions” in/config. A repo with both files gets onlyCLAUDE.md. The version-proof setup is aCLAUDE.mdwhose first line imports the shared file:@AGENTS.md<!-- Claude-Code-only notes go below this line, and nothing else. -->AGENTS.mdis Codex’s native file, so no extra step is needed. One gotcha: since Codex 0.150.0, an untrusted project does not supply its project-levelAGENTS.md, so trust the repository when Codex first asks. In CI there is no trust prompt, so the reviewer prompt in step 5 namesAGENTS.mdexplicitly and Codex reads it as a file.Cursor reads its own Rules. To keep one source, let rulesync generate all three files. After that,
.rulesync/rules/overview.mdis the only file you edit. Run the import before you shortenCLAUDE.mdto an@AGENTS.mdline: it copies today’s rules into.rulesync/rules/, and it needs the real rules to copy (observed with rulesync 20.0.0):Terminal window npx rulesync@20.0.0 import --targets claudecode # run while CLAUDE.md still holds the real rulesnpx rulesync@20.0.0 generate --targets claudecode,codexcli,cursor --features rules# writes CLAUDE.md, AGENTS.md and .cursor/rules/overview.mdcOn this path,
CLAUDE.mdis a generated file, not an@AGENTS.mdstub, so skip the Claude Code tab’s import line. The other six agents then read the generatedAGENTS.md. If you use the@AGENTS.mdstub path instead, Cursor still needs its own Rules; Cursor’sAGENTS.mdsupport could not be verified on 2026-09-26, so use rulesync whenever Cursor is on the team. See rules sync with Ruler and rulesync. -
Put the whole team in one multiplexer. herdr’s
--kindacceptsclaude,codex,cursor,pi,opencode,copilot,cline,kilo,qwen,ampanddroidamong its 24 values (docs for herdr 0.9.1); Goose and Crush run as plain panes. From inside a runningherdrsession:Terminal window split=$(herdr pane split --current --direction right --no-focus)pane=$(printf '%s\n' "$split" | jq -r '.result.pane.pane_id')herdr agent start reviewer --kind codex --pane "$pane"herdr agent prompt reviewer "Review the current diff against AGENTS.md" --wait --timeout 120000herdr agent read reviewer --source recent-unwrapped --lines 120The sidebar marks each pane
working,blockedoridle, whichever vendor runs in it. The herdr guide covers the full orchestrator script. -
Gate every agent’s output the same way. Add one job that fails the pull request when a second instructions file reappears, next to your usual tests, types and lint:
Terminal window # ci/check-agent-rules.sh — one rules source, no shadow copiesset -euo pipefail[ -f CLAUDE.md ] || { echo "CLAUDE.md missing: create it with @AGENTS.md as line 1"; exit 1; }head -n 1 CLAUDE.md | grep -qx '@AGENTS.md' || { echo "CLAUDE.md must start with @AGENTS.md"; exit 1; }for f in QWEN.md CRUSH.md .goosehints .clinerules .cursorrules .windsurfrules; doif [ -e "$f" ]; then echo "$f duplicates AGENTS.md; move its rules there"; exit 1; fidoneIf you chose rulesync in step 2, replace the whole script with
npx rulesync@20.0.0 generate --targets claudecode,codexcli,cursor --features rules && git diff --exit-code. That drift check is this site’s suggestion, not a documented rulesync feature. -
Never let the builder review its own work. Route each branch to a reviewer from a different vendor: a Claude Code branch goes to Codex, a Cline or OpenCode branch goes to Claude Code. A different model does not share the builder’s blind spots. Run the reviewer read-only and let it judge the test and typecheck results CI already produced: plan mode and a read-only sandbox are not meant to run your test suite, and a reviewer that cannot write cannot “fix” a test to make it pass.
Terminal window # Codex reviews a branch another agent built, without write accesscodex exec -s read-only "Review the diff between origin/main and HEAD against AGENTS.md. List blocking issues first."# Claude Code as the reviewer, in plan mode (no edits)git diff origin/main...HEAD | claude -p --permission-mode plan "Review the diff between origin/main and HEAD against AGENTS.md. List blocking issues first."
How do you prove a second agent is good enough for your repo?
Section titled “How do you prove a second agent is good enough for your repo?”Stars and vendor-reported benchmarks, such as the SWE-bench table in Qwen Code’s README, do not show how an agent behaves on your codebase. Run a small bake-off and let the gate decide, not your impression of the transcript.
- Pick five closed tickets with merged fixes and tests. Revert the fix on a branch per ticket, keeping the tests.
- Give each agent the same ticket text and the same
AGENTS.md, one worktree per agent per ticket. - Score only what a machine can check: did the original tests pass, did typecheck and lint pass, did the cross-agent reviewer flag a blocking issue, and how many files changed beyond the ones the real fix touched.
- Record the cost each agent reports, or use a usage tracker (see tracking agent cost).
- Decide with the tech lead. A new agent joins the team’s approved list only if it matches the incumbent on passes and stays inside the boundaries. The tech lead signs off, and the result goes in the repo’s
docs/so the next evaluation starts from data.
Licences to clear before an agent joins the team
Section titled “Licences to clear before an agent joins the team”| Agent | What the licence means for you |
|---|---|
| Copilot CLI | Proprietary GitHub licence that allows redistributing unmodified copies only. The public repository holds the README, changelog and issues, not the source. Usage runs under your Copilot plan and org policies |
| Crush | FSL-1.1-MIT: source-available today, converts to MIT later. Not OSI open source, so check whether your policy accepts it |
| Amp, Factory Droid | Proprietary vendor products with no public source: review data handling and terms like any SaaS |
| Antigravity CLI | Closed-source, Google-operated; quota comes with Google AI plans (secondary: CloudZero, checked 2026-09-26) |
| OpenCode, Kilo Code | MIT |
| Cline, Goose, Qwen Code | Apache-2.0 |
Licence is not the only question. Every agent that talks to a hosted model sends your code to that provider, so the provider you configure matters as much as the agent. For local models, see gateways and local models.
Where mixed-agent teams go wrong
Section titled “Where mixed-agent teams go wrong”Two agents follow two different rules. Someone ran /init in Qwen Code, or used a Crush setup with option initialize-as CRUSH.md in its config (Crush README), and a new QWEN.md or CRUSH.md appeared with its own test command. Recovery: merge its content into AGENTS.md, delete the copy, and let the CI check from step 4 stop it from coming back.
Claude Code ignores AGENTS.md. The repo has both files, or developers run the stable channel (v2.1.274 on 2026-09-26), which predates the fallback. Recovery: make @AGENTS.md the first line of CLAUDE.md, which works on every channel.
A tutorial installs the wrong package. opencode-ai/opencode is archived, @sourcegraph/amp is the old Amp name (now @ampcode/cli), block/goose moved to aaif-goose/goose, and npm i -g aider-chat does not exist because Aider is Python (python -m pip install aider-install && aider-install). Recovery: use this page’s install commands, read from each README or docs page on 2026-09-26.
The team adopted a dead project. Roo Code is archived and Continue is read-only, yet both still rank high on stars. Recovery: before adding an agent, check its last push date and README status, not its stars. Move Roo Code users to Cline or Kilo Code, which cover the same VS Code niche.
A personal Gemini CLI setup stopped working in June. That is the 2026-06-18 cut-off, not a bug. Recovery: personal accounts move to Antigravity CLI; teams on Code Assist Standard or Enterprise, Google Cloud or a paid API key can stay on Gemini CLI.
A skip-approvals run changed something it should not have. Recovery: restore from the branch, rerun inside a disposable sandbox, and add the violated path to the Boundaries section of AGENTS.md so the next agent reads it too.
The multiplexer says idle while an agent waits for you. herdr reads Claude Code, Codex and Cursor from the screen, not lifecycle hooks (herdr 0.9.1 docs), and only marks blocked on prompt shapes it knows. Recovery: use herdr agent wait … --until blocked --timeout … in scripts and treat long silences as suspicious.