How this compares
Three ways to reach Claude from opencode, with every claim traced to its source.
Three ways to reach Claude from opencode. They differ in who authenticates, who gets billed, whether Anthropic sanctions it, and how much of your machine opencode still governs.
opencode’s native anthropic provider |
This plugin | Proxy / token-reuse plugins | |
|---|---|---|---|
| Authentication | An Anthropic Platform API key, held in opencode’s own auth store. | Whatever the official claude CLI already holds: a subscription login, an API key, Bedrock, or Vertex. The plugin never reads, stores, or replays a token of its own, and there is no subscription token here to lift. |
The Claude OAuth session, used outside the official client. Meridian runs a local proxy that maps Anthropic-style HTTP onto the Claude Agent SDK and your Claude session; opencode-claude-auth reads the OAuth tokens out of the macOS Keychain or ~/.claude/.credentials.json and refreshes them against Anthropic’s OAuth endpoint itself. |
| What is billed, and to whom | Pay as you go on the Platform account that owns the key. | Whatever the CLI’s own authentication bills. Headless --print is the Agent SDK path; an API key found anywhere the CLI looks switches the same turn onto Console pay-as-you-go instead. apiKeySource on the CLI’s system init event is the field that says which, and the plugin warns once per process when a key is in effect. On a subscription, headless and interactive turns both draw from the plan’s ordinary usage limits. See which login bills what. |
The subscription the reused session belongs to. Meridian’s own FAQ: “Usage limits follow your Max subscription, not Anthropic API billing tiers.” |
| Terms-of-service status | The ordinary API route. Nothing unusual about it. | Sanctioned: the official client does the authenticating, and driving claude is what claude is for. |
Disallowed. Anthropic disallowed reusing subscription authentication for third-party Claude use in February 2026, and each project says so in its own words: Meridian’s wrapper “makes no claims regarding compliance with Anthropic’s Terms of Service”; opencode-claude-auth calls itself “a community workaround” and notes that the terms say subscription tokens “should only be used with official Anthropic clients”; opencode-claude-plan quotes Consumer Terms 3.7 and asks you to accept that your account “could be suspended or terminated”. |
| Model list and fast mode | Whatever opencode’s own provider registers. | 18 ids auto-registered, Haiku 4.5 through Opus 5.5 plus Fable and Mythos, each carrying a (N×) list-price suffix, and any other id claude --model accepts passes straight through. Three -fast Opus ids are this plugin’s own markers and opt a headless session into fast mode through --settings (CLI 2.1.220+). See Models. |
opencode-claude-auth’s README lists 14 model ids. Meridian’s lists none, because model metadata comes from opencode’s own anthropic provider. Neither README mentions fast mode. |
| Which tools run where, under whose permissions | All of them are opencode’s, behind opencode’s permission prompts and audit log. | Your choice, per tool. Bash, Edit, Write, WebFetch and Task are proxied by default: Claude calls an in-process MCP tool and opencode executes it, under its own permissions and audit log. Anything neither proxied nor named in extraDisallowedTools runs inside Claude Code under --dangerously-skip-permissions. See Selective tool proxy and Read-only mode. |
All of them are opencode’s, because the model call is an ordinary provider call. This is the one row where the third column matches the native provider and this plugin has to work for the same result. |
| Reasoning and effort | opencode’s own reasoning controls. | Five picker variants per model, low through max, handed to the CLI as CLAUDE_CODE_EFFORT_LEVEL at spawn. Effort is fixed for the life of a claude process, so it is part of the session key, and an agent’s own reasoningEffort beats the effort a call arrived with. Thinking is Anthropic’s summarized digest, not raw chain-of-thought. See Extended thinking. |
Meridian’s SDK-features file exposes a thinking key. Neither README documents per-model effort variants. |
| Context window | Whatever the model exposes. | The registered limits: 200k context / 64k output on the 4.5 generation, 1M / 128k on 4.6 and later, all at standard pricing with no above-200K tier. Claude Code may also compact or clear its own context mid-conversation, which the plugin can announce but not prevent. | Not stated in either README. |
| Subagents | opencode’s own task tool and child sessions. | Task is proxied by default, so dispatch is an opencode child session under the caller’s permission.task rule, and task_batch runs two or more concurrently because the CLI otherwise serialises MCP calls. Drop Task from proxyTools and Claude orchestrates internally with no opencode child-session visibility. See OpenCode-native subagents. |
opencode’s own, unchanged. |
| What you lose versus the native provider | Baseline. | A claude child process per conversation (an idle --print holds around 250 MB) under an LRU cap, so many open chats cost memory. Claude Code can compact or clear its own context behind opencode’s back. Session titles are a local keyword stub, not a model-written title. Two watchdogs exist only because a child that is alive but wedged emits no event to listen for. /compact runs as its own short-lived spawn, on Haiku by default. On opencode 2 there is no todo panel, because 2.x has no todowrite tool, and /btw is answered after the running turn rather than inside it. opencode hooks that overlap the plugin’s hand-rolled features (tool.definition, the two compaction hooks, chat.headers, permission.ask) are deliberately not adopted, and opencode’s own reasoning features are bypassed by design, because the whole point is to route through the CLI. Windows spawns through cmd.exe unquoted and is not hardened. |
Everything in the row to the left is avoided, because opencode’s runtime is doing the work. What replaces it is the account risk in the terms row, plus one more moving part between opencode and Anthropic: a local HTTP proxy, or a reader of your credential store. |
Where the third column names a project, the claim is that project’s own README:
- ianjwhite99/opencode-with-claude starts Meridian inside opencode’s own lifecycle and points opencode’s
anthropicprovider at it. Its disclaimer calls it an “unofficial wrapper”, says the authors “make no claims regarding compliance with Anthropic’s Terms of Service”, and notes that no API keys are intercepted: the proxy uses the Agent SDK over your own OAuth session. - griffinmartin/opencode-claude-auth registers its own auth provider, reads Claude Code’s OAuth credentials from the Keychain or
~/.claude/.credentials.json, caches and refreshes them, and syncs them into opencode’sauth.json. Its disclaimer is quoted in the table. - jcubic/opencode-claude-plan ships no plugin at all: it is a documented plan an agent can build one from, written after opencode removed its bundled Anthropic OAuth plugin on a legal request. Its legal note is the bluntest of the three.
- The first version of this plugin, written by Émilien (unixfox) and archived since April 2026, belongs in the middle column rather than the third, and deserves the credit: it is this plugin’s ancestor and it already drove the
claudeCLI as a subprocess, so it inherited the CLI’s authentication the same sanctioned way. What it does not have is the opencode-side mediation. Its README states that the CLI executes every tool, that permissions go through Claude Code’s own allow/deny lists with “no opencode permission UI integration”, that MCP servers are Claude’s rather than opencode’s, and that its session key is(cwd, model), so two opencode instances in one directory on one model share a process and interfere. It is archived and links here.
Policy sources: Anthropic’s Agent SDK on a Claude plan page, which is authoritative and does change (read the dated note under Billing before quoting it), and the February 2026 report that Anthropic banned subscription authentication for third-party Claude use.
