Skip to content

tools.read = false in opencode.json makes all zen free-tier models fail with "free tier can only be used from within OpenCode" #51315

Closed as not planned

Description

@imattpeters

Environment

  • opencode 1.18.29 and 1.18.32, both affected
  • Windows 11 x64
  • Built-in opencode provider (zen Console), free-tier models
  • No custom agents, no plugins, no permissions config

What happens

With this in a project's opencode.jsonc:

{
  "$schema": "https://opencode.ai/config.json",
  "tools": {
    "read": false
  }
}

every request to every zen free-tier model fails with:

Error from provider (Console): OpenCode's free tier can only be used from within OpenCode

The request comes from opencode itself. What changes is the tools array: with read disabled, the request sent to zen no longer contains it, and the free-tier gate rejects it as if it came from outside opencode. The gate runs on zen's side and I can't read its code, but the 9router maintainers bisected the same behaviour from their side: decolua/9router#4101 documents that free-tier requests with 0-3 tools, or missing the required tool set that includes read, get refused, while requests carrying it get 200.

Reproduction

  1. Empty project directory, opencode.jsonc containing only the config above.
  2. opencode run -m opencode/mimo-v2.6-flash-free "Reply with exactly: ok" gives the 403.
  3. Delete the "tools" block, or just the "read": false line, and the same request succeeds.

Same client, same machine, same session throughout:

tools config Model Result
none mimo-v2.6-flash-free 200
write/edit/apply_patch: false, read enabled mimo-v2.6-flash-free 200
read: false only mimo-v2.6-flash-free 403
read/write/edit/apply_patch: false (my actual repo config) mimo-v2.6-flash-free, ling-3.0-flash-fin-free, nemotron-3.5-lightning-free, big-pickle 403

So disabling edit/write/apply_patch is harmless. The only thing that matters is read.

What I expected

The gate should not care which tools the config enables, or the tools.* option should say it breaks the free tier. As it stands, a supported, documented config option quietly kills every free model for the whole project, and the error message blames the client for something the user configured.

Why I disable it

I use the lineage-mcp server for file operations. Its read/write tools report line-level external changes and append the AGENTS.md instruction files from parent directories up the stack once per session. The built-in tools do neither. So "tools": { "read": false, ... } is not some exotic setup for me, it's the documented way to get the built-ins out of the way.

If I have the option to remove the read tool, why would removing it be a free-tier violation? A request with fewer tools is still a request from opencode.

Related

Workaround

Re-enable read in projects where you want free models. That's it.

Activity

  1. github-actions commented on Sep 25, 2026

    @github-actions
    Contributor

    This issue might be a duplicate of existing issues. Please check:

    • #51241: Free models fail when read or shell permissions are denied, triggering the same free-tier error.
  2. Mike-Rice commented on Sep 30, 2026

    @Mike-Rice

    Same underlying mechanism, but keyed on bash rather than read: withholding the bash tool makes the gate reject. On opencode 1.18.33 (V1), built-in opencode provider, opencode/big-pickle, empty project:

    • permission.bash: "ask" → works
    • permission.bash: "deny" (or tools.bash: false) → Error: OpenCode's free tier can only be used from within OpenCode

    So it is the tools array, not the model identity — consistent with the bisect here. Cross-ref #50627 (which isolates the bash tool specifically, including built-in agents like plan).

  3. thdxr commented on Oct 11, 2026

    @thdxr
    Member

    Thanks for the report! OpenCode 2.0 is now out and development is focused on V2, so we're closing issues filed against OpenCode 1. Please upgrade (opencode upgrade --major, details: https://anoma.ly/notes/opencode-2-0), and if this is still relevant on 2.0, reopen this issue or open a new one with your 2.0 version.

    — from 𝕺𝖕𝖊𝖓𝕮𝖔𝖉𝖊

  4. bas01f commented on Oct 17, 2026

    @bas01f

    Hi!

    i am having this issue as of today using opencode 1.18.35 tho

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions