What the CLI binary contacts, when, and how to control it. Based on source code review of OpenCode v1.3.0 (34f43ff). See the official Privacy Policy.
| Domain | When it fires | Opt-in? | Disable flag | Details |
|---|---|---|---|---|
app.opencode.ai | Web UI page loads (not TUI) | Web UI is experimental | Not yet (devs plan to bundle it) | |
api.opencode.ai | opencode github command | Yes | No | |
opencode.ai | Auto-update check | No | Yes — OPENCODE_DISABLE_AUTOUPDATE | |
opncd.ai | Session sharing | Yes — must explicitly share or set "share": "auto" | Yes — OPENCODE_DISABLE_SHARE | |
models.dev | On startup + refreshes hourly | No | Yes — OPENCODE_DISABLE_MODELS_FETCH |
app.opencode.ai proxy only handles web UI assets (HTML, JS, CSS). Prompts and LLM responses are handled by local API routes. Session sharing (opncd.ai) can send session data, but only when you explicitly opt in.
us.i.posthog.com) and Honeycomb (api.honeycomb.io) references exist in the repo but are in script/stats.ts (a CI build script) and packages/console/ (cloud dashboard). They do not fire when you use the OpenCode CLI or TUI.
Community-filed issues and PRs related to network behavior. The main open item is bundling the web UI into the binary (experimental, in progress).
app.opencode.ai) — experimental, devs plan to bundle First issue to raise the privacy concern (Dec 29, 2025). Project paths are leaked to app.opencode.ai through the catch-all proxy. Requests either bundling the web UI into the binary or adding a config override for the proxy URL. Also raises a stability concern: the CDN-hosted UI can change between binary releases, causing version mismatches.
Main tracking issue for the offline web UI problem. The web UI fails completely in corporate/air-gapped environments because it depends on app.opencode.ai for all frontend assets. 16 reactions and 10 comments — the most-engaged privacy issue. Multiple community workaround commits linked in the comments (proAlexandr, tardyp).
Filed by a user on GCP Cloud Workstations where app.opencode.ai is blocked by corporate firewall. Closed by the reporter as a duplicate of #8549. The reporter (tardyp) contributed a workaround commit (a988b75) that serves the frontend from the same port.
Pure intranet users cannot load the web UI at all. 16 comments and 10 reactions. The reporter traced the root cause to the server.ts catch-all proxy. Distinct from #8549 in that this focuses on users who have zero external internet access, not just restricted corporate access.
Root feature request for an OPENCODE_APP_URL environment variable to override the hardcoded app.opencode.ai proxy destination. Spawned PR #12446. 4 reactions.
TUI-only user wants an OPENCODE_DISABLE_WEB flag so the catch-all proxy returns 404 instead of proxying to app.opencode.ai. References #12445 and #11981. No PR has been created for this approach.
Filed by BYK (author of PR #15721). Detailed technical write-up: the binary is ~159MB but proxies all HTML/JS/CSS/fonts to the CDN instead of serving them locally. Distinct from #12083 — this is specifically about the binary not embedding web assets despite having room. Spawned PRs #15700 and #15721.
View on GitHub →Minimal 5-line change adding an OPENCODE_APP_URL env var to override the app.opencode.ai proxy destination. 18 reactions. Reviewed by community contributor @kikuchan who identified a subpath routing bug — but kikuchan explicitly stated they cannot press the approve button because they are not a maintainer. No maintainer has reviewed it.
Bundles the web UI at build time with a flag to disable. 41 reactions — the most-reacted PR. Tested in air-gapped Docker by @Chetic and confirmed working. @BlankParticle pinged maintainers. Maintainers responded that they were "interested in doing this themselves" but no internal PR has materialized.
View on GitHub →BYK's first attempt at embedding web UI assets. 294 additions. Auto-closed by the compliance bot for missing PR template fields. Superseded by #15721 which fixes the issues found in this version (middleware ordering, SPA route hijacking, CI compatibility).
View on GitHub →Most technically mature PR. 229 additions, 3 commits. Fixes v1 bugs: middleware ordering, SPA route hijacking, CI compatibility. Externalizes 83 optional font files (~27MB) to keep binary size reasonable (~174MB vs ~159MB). Tested in air-gapped environment by @Warkeeper and confirmed working. Codeowner review requested from @adamdotdevin — no reviews have been submitted yet.
View on GitHub →Supports two modes: (1) file:// path for serving local web assets, (2) HTTP URL for a custom proxy target. Closes #12445. Relates to #8549, #11981, #16787. Passed compliance. Status: blocked (merge conflicts).
DroganC attempted to submit the same offline web serving fix 6 times. The approach adds an OPENCODE_APP_DIST env var to serve web assets from packages/app/dist locally, plus an OFFLINE_WEB.md documentation file. 138 additions, 12 files changed.
Why 5 were closed: The repo has an automated compliance bot that auto-closes PRs within ~2 hours if they don't meet template requirements (needs:title, needs:compliance). PRs #18506, #18508, #18510, #18520, and #18521 were all closed by this bot. The 6th attempt (#18522) finally passed compliance and remains open with review requested from @adamdotdevin.
Adds OPENCODE_OFFLINE=true / --offline CLI flag as a single kill switch for all non-essential outbound connections. When enabled: disables auto-update, disables session sharing, web UI proxy returns 503. 233 additions, 5 tests.
Maintainer @rekram1-node (Mar 20, 2026): "We ofc need to ship something with this shape, internally we talked about some approaches briefly, ill need to sync back w/ them to see what they think is best next week"
No follow-up action since that comment.
View on GitHub →models.dev) — has disable flag Docker deployment (ghcr.io/anomalyco/opencode:1.1.53) keeps requesting models.dev, blocking the web interface in offline environments. The OPENCODE_DISABLE_MODELS_FETCH flag exists but is undocumented — users don't know it's available. The flag is also only checked after local cache and bundled snapshot both fail, so the fetch can happen before the flag takes effect.
opncd.ai) — opt-in + has disable flag Opt-in by default — you must explicitly share a session or set "share": "auto" in config (docs). Disablable via OPENCODE_DISABLE_SHARE=true.
mcp.exa.ai) — opt-in Opt-in via OPENCODE_ENABLE_EXA=true. Auto-enabled when using OpenCode Zen.
opencode.ai) — has disable flag Disablable via OPENCODE_DISABLE_AUTOUPDATE=true. Standard auto-update behavior for CLI tools.
api.opencode.ai) — opt-in feature Only fires during opencode github commands. Sends org/repo names for GitHub App installation checks.
OpenCode provides both opencode.json config settings and environment variables to control outbound connections. Either method works — config settings go in your project's opencode.json, env vars can be set in your shell profile.
| Connection | Config setting (opencode.json) | Environment variable | Documentation |
|---|---|---|---|
Auto-updateopencode.ai |
"autoupdate": falseor "autoupdate": "notify" (show notification only) |
OPENCODE_DISABLE_AUTOUPDATE=true |
CLI docs |
Session sharingopncd.ai |
"share": "disabled"(options: "manual", "auto", "disabled") |
OPENCODE_DISABLE_SHARE=true |
Share docs |
Model catalogmodels.dev (hourly) |
— | OPENCODE_DISABLE_MODELS_FETCH=true |
CLI docs |
Example opencode.json:
{
"$schema": "https://opencode.ai/config.json",
"autoupdate": false,
"share": "disabled"
}
OpenCode is an excellent open-source agentic coding tool. This page was created to document its network behavior for users who need to understand what connects where — especially in corporate or air-gapped environments. OpenCode has a privacy policy, and most outbound connections are either opt-in or have disable flags. The main open item is bundling the experimental web UI into the binary, which the developers have said they're working on.
Background: original Reddit discussion
Vote by reacting on the GitHub Discussion — each GitHub account gets one vote. Pick the option closest to your view.
Vote on GitHub Discussion →Sign in with GitHub to comment or react. Reactions serve as upvotes/downvotes.
Copied!