Skip to content

feat(config): add plugin_config for structured plugin options - #9161

Closed
GoodFarming wants to merge 1 commit into
anomalyco:devfrom
GoodFarming:pr/plugin-config
Closed

GoodFarming wants to merge 1 commit into
anomalyco:devfrom
GoodFarming:pr/plugin-config

Conversation

@GoodFarming

@GoodFarming GoodFarming commented Jan 18, 2026 •

Copy link
Copy Markdown

What does this PR do?

Adds an optional top-level plugin_config map to the config schema so plugins can receive structured options via opencode.json(c):

{
  "plugin": ["@acme/my-plugin"],
  "plugin_config": {
    "@acme/my-plugin": { "endpoint": "https://example.com" }
  }
}

Why?

Config parsing is strict (Config.Info is .strict()), so plugins can’t add plugin-specific keys to opencode.json(c) today without an upstream schema change. The common workarounds are env vars or sidecar config files, which are harder to install/standardize.

plugin_config is a minimal, additive escape hatch: OpenCode already passes the resolved config to plugins via Hooks.config, so plugins can read/validate their own entry without any new lifecycle plumbing.

Why this shape (vs plugin: [{ name, config }])?

Keeping plugin as a plain “load list” avoids changing plugin loading/deduping/merge semantics. plugin_config adds configuration without altering how plugins are resolved or initialized.

Notes

  • plugin_config is deep-merged across config layers (same merge behavior as other config objects).
  • Not intended for secrets; plugins should prefer existing auth/token flows when possible.

How did you verify your code works?

  • bun test --cwd packages/opencode
  • bun turbo typecheck
  • bun ./script/generate.ts

Fixes #4393

@github-actions

Copy link
Copy Markdown
Contributor

The following comment was made by an LLM, it may be inaccurate:

No duplicate PRs found

@github-actions

Copy link
Copy Markdown
Contributor

Closing this pull request because it has had no updates for more than 60 days. If you plan to continue working on it, feel free to reopen or open a new PR.

@github-actions github-actions Bot closed this Mar 19, 2026
aagarwal1012 added a commit to dodopayments/dodo-agent-plugin that referenced this pull request May 8, 2026
OpenCode (runtime toggle): plugin's config hook now reads
DODO_DISABLE_API_MCP and DODO_DISABLE_KNOWLEDGE_MCP env vars and skips
registering the matching MCP when set to a truthy value (1/true/yes/on,
case-insensitive). Both unset = both registered (prior default
preserved). Env vars chosen over an opencode.json config block because
OpenCode's top-level schema is strict and rejects unknown keys
(anomalyco/opencode#9161).

Claude Code / Codex / Cursor: added explicit "enabled": true to every
MCP entry in .mcp.json so users have a clear field to flip to false in
their own override config. Per-MCP plugin toggles in the Claude Code UI
are still pending upstream (anthropics/claude-code#27105, #46373,
#50826); this is the supported path until they land.

Docs: new README sections documenting toggles for all four clients,
plus an env-var table in opencode-plugin/README.md.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[FEATURE]: Allow plugins to have their own configuration

1 participant