A coding agent with several front doors
OpenCode is easiest to understand as one agent runtime presented through several clients. The terminal interface is the center of gravity, but the project also ships a desktop app, an IDE extension, a web client, and a server. The same system can read and edit files, run shell commands, call language models, delegate to subagents, and attach Model Context Protocol servers.
Two built-in primary agents establish the basic safety split. Build has all tools enabled for implementation. Plan asks before shell commands and file changes, making it better for inspecting an unfamiliar repository. General, Explore, and Scout subagents divide deeper work into full-access research, read-only code search, and outside dependency research. Users can define more agents with their own prompts, models, and permissions.
Model choice is a real strength. OpenCode uses the AI SDK and Models.dev, documents more than 75 providers, and also supports local models. Teams can point a provider at a custom base URL, hide models from the picker, or constrain the list. That flexibility is useful when cost, data location, and model behavior vary across projects.
What happened when we ran it
We cloned commit f4019ca into an unprivileged Debian container with 3 CPUs, 8 GB of RAM, and no secrets. This is a large Bun monorepo: 6,466 files, about 681,820 source lines, and a 131.1 MB checkout. Installation succeeded in 107 seconds, but it brought in 2,363 packages and occupied 2,474 MB. Source contributors should budget disk and dependency churn accordingly.
There was no build script or build target at the repository root, so our build step skipped it. The test command ran for 15 seconds and exited 1 after printing do not run tests from root. That is an intentional guard in the package script, not a failing assertion. It also means the common root command provides no summary of package tests; contributors must identify the relevant workspace and run its checks there.
The repository has 25 CI workflow files and monorepo workspaces, but no top-level tests directory and no Dockerfile in the measured checkout. Our run proves that dependency installation completes in the lab environment. It does not prove that the application packages pass their individual suites, because the root explicitly refused that test path.
Permissions need an owner
OpenCode's permission rules can allow, ask, or deny each action. They can match particular shell commands and file paths, cover external directories, control subagents and web access, and stop repeated identical tool calls. Later matching rules win, so teams can start with a catch-all and add exceptions. Managed configuration can be placed in system directories, with macOS also supporting managed preferences.
The defaults are friendlier to momentum than containment. The documentation says most permissions default to allow. External-directory access and a repeated-call guard ask, while .env reads are denied. Build also starts as the full-access agent. That may be acceptable on a disposable branch, but a company repository needs an explicit policy for edits, shell commands, network access, and directories outside the workspace. Auto mode raises the stakes because it approves anything that was set to ask, though explicit denies remain in force.
MCP support expands both capability and exposure. Local servers run configured commands; remote servers can use headers or OAuth. Their tools become available to the model, and the docs warn that large tool catalogs consume context quickly. Keep the enabled set small, audit local commands, and decide where credentials live. A tool that can reach an internal system deserves the same review as any other executable integration.
The convenience features have privacy edges
Conversation sharing is manual by default, but it creates a public URL containing the session history, messages, and metadata. The link stays available until someone runs the unshare command. Teams can disable sharing in project configuration, while enterprise deployments can restrict it to SSO users or host it themselves. For confidential work, disabling it is safer than relying on every developer to inspect a long agent transcript before sharing.
Windows has native installers, yet the official guide recommends WSL for file performance, terminal support, and development-tool compatibility. The desktop client can connect to a server inside WSL. If that server listens on 0.0.0.0, the docs tell users to set a server password. Keep it on localhost unless another device genuinely needs access.
Current issues show the cost of a product moving this quickly. Issue #44866 reports heavy terminal flicker and blank subagent tabs during streaming on Windows. Issue #44802 describes the desktop client freezing when an agent sends a screenshot to a text-only model. Issue #42950 reports a provider socket drop that leaves the UI without a clear error. These are specific client and provider paths, but they can interrupt a long coding session.
Health and the buying decision
The project moved from the sst organization to anomalyco, and GitHub redirects the old repository path. The last push was August 25, 2026. Release v1.18.22 arrived one day earlier, after nine other listed releases during August. Its fixes cover provider compatibility, login links, pricing text, and the desktop model picker. This cadence is exceptionally active, though frequent releases also make version pinning sensible for teams.
GitHub reported 5,362 open issues and pull requests combined. The count includes contributions and requests, not only defects. The same-day issue and pull-request activity shows an engaged project, while the queue size tells adopters to search carefully before filing and to expect overlapping reports.
OpenCode earns a trial if provider choice, terminal work, and configurable agents matter. Install the release rather than the monorepo, set a permission policy before the first sensitive task, disable sharing where code is confidential, and pin upgrades for team use. Developers extending the source should run checks in the package they changed because the root test command is deliberately a dead end.

