OpenCode 2.0 Turned the Coding Agent Into a Service
OpenCode 2.0 moves every tool call into a background service, and a sandbox built around the old terminal client stopped working without an error. What the 213,672-star agent's rewrite changes for anyone who contains it.
OpenCode 2.0 shipped Wednesday and reached the Hacker News front page within hours, sitting at 614 points and 240 comments as of October 15. The project behind it is a free, open source coding agent, MIT licensed, with 213,672 GitHub stars at the time of writing. The version number suggests an upgrade. The migration guide describes something closer to an exchange of organs: three intentional breaking changes, and underneath them, a background service where the sessions live now.
The background service is the update
V1 looked like a terminal program. V2 runs a service, and every client is a shell over it: the terminal, the desktop app, and the built-in browser, which one daily-driver commenter called the most welcome feature. There is a web mode too: the announcement points at opencode pair for connecting other applications, and opencode web starts a local server on 127.0.0.1 that opens the same sessions in your browser, a third window on the same service. Password protection exists but stays off until you set an environment variable.
The manifest of intentional breaking changes is short and blunt: plugins, the server API, and terminal configuration, which collapses layered tui.json files into one global cli.json (migrated automatically on first start). Everything else, including agents, commands, skills, and MCP servers under .opencode/, is meant to keep working untouched.
The permission system shows how deep the rethink goes. V1 grouped rules by tool. V2 replaces that with one ordered array where precedence is explicit and readable top to bottom:
{
"permissions": [
{ "action": "shell", "resource": "git push *", "effect": "ask" },
{ "action": "edit", "resource": "*", "effect": "allow" },
{ "action": "websearch", "resource": "*", "effect": "deny" }
]
}
Then there is the report that should give everyone pause. One commenter upgraded and discovered, a day or two later, that the sandbox wrapping their TUI process had quietly stopped doing anything. Web fetches that were supposed to be blocked were succeeding. The reason: in V2, tool calls execute in the background service, so a wrapper around the terminal client no longer sits between the agent and the network. Nothing errored. The boundary just moved, and the guard was left covering a door the agent no longer walks through. Containment, once you move the agent into a service, has to be rebuilt around the service.
When the SDK is the front door
The announcement's demo code is not a terminal screenshot. It is an SDK snippet: Service.ensure() finds or starts the local service, session.create() points at a working directory, and session.prompt() sends the text "Review the current changes." The announcement also lists a dedicated Code Mode package, @opencode/codemode, grouped alongside MCP servers and background tasks as first-class surfaces.
Even the migration path leans on the API. The guide's recommended way to convert your V1 config is to paste this into the agent:
Migrate my OpenCode configuration, including file-based definitions,
from the V1 format to the native V2 format. Preserve its behavior
and all unrelated settings.
A coding agent whose documented upgrade path is asking a coding agent to do the upgrade. It is a small detail, and it says more about where this tool is heading than any feature list.
The LSP contradiction
The boldest change is a subtraction. The migration guide states plainly that V2 does not run language servers, does not expose LSP tools, and does not produce LSP diagnostics, and points teams at their project's lint, typecheck, and compiler commands instead. The bet is coherent: if the model can run your typechecker on demand, a bundled LSP is redundant plumbing.
But the homepage still advertises "LSP enabled: automatically loads the right LSPs for the LLM" as a headline feature. One of those two pages is wrong, and teams that rely on LSP diagnostics will find out which one only after upgrading. Release homepages sell the vision; migration guides are where the truth about breaking changes lives.
A rewrite, done in the open
The thread spent a surprising amount of time on provenance. The original author left for Crush, a rival terminal agent from Charm that sits at 28,651 stars today. OpenCode continued without him, and per the commenters who traced the history, 2.0 is a rewrite that kept the name and not the old code. The Go to TypeScript refactor comes up repeatedly in the thread, and GitHub's language field for the repo agrees: TypeScript, 28,668 forks, with commits landing the same morning this post was drafted.
For users, the rewrite lands as three practical notes. The install command replaces the V1 binary, so package-managed V1 installs should be removed first. Plugin code does not carry over and needs porting against the new API. And any integration that talks to the server API has to migrate to the new contracts, which is exactly the kind of work nobody budgets until something breaks.
What transfers
If you sandbox your agent, move the sandbox. The 2.0 architecture executes tool calls in the background service, so wrappers around the terminal client are decorative now. Containment has to wrap the service, or happen in the permission rules where they see the calls.
Read the migration guide against the homepage before upgrading, not after. The LSP mismatch is the documented example, and the guide is the side that commits to specifics.
Budget the porting. Config conversion is optional and V1 fields keep loading, but plugins and server API integrations are real work, and the guide itself says plugin porting is a migration step, not an option.
On pricing, the thread did the accounting better than the pricing page. OpenCode Go runs $10 a month, with a Go Plus tier at $40. A commenter's breakdown: your plan buys $10 of usage at cost, then a per-model multiplier from 1.5x to 8x stretches it, so a cheap model like DeepSeek 4.1 Flash works out to roughly $80 of list-price usage. Generous, if you pick models the multiplier favors.
The agent-built software curve this tool rides has two other data points on this blog. The infrastructure side appeared in September on blog.codecora.dev in Coding agents are drowning in their own output. The leaderboard side showed up here in October, when the top model in OpenCode's own usage stats had no name attached: The most-used coding model has no name. 2.0 is the tool itself changing shape under that load.
Repro notes: HN thread numbers (614 points, 240 comments) from the Algolia API on October 15, story submitted October 14. Star, fork, language, and license figures from the GitHub API the same morning. Quotes about the sandbox, pricing, and the Crush split come from the thread. The LSP, permissions, and migration details come from the official V2 migration guide, and the "LSP enabled" line is live on the homepage today.
The announcement is at anoma.ly/notes/opencode-2-0, the migration guide at opencode.ai/v2/docs/migrate-v1, and the discussion on Hacker News.
Comments ()