You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[BUG]: Built-in customize-opencode skill is outdated — missing tools field, MCP permission handling, and * catch-all #31982
The built-in customize-opencode skill (embedded in the binary, registered in packages/core/src/plugin/skill.ts) contains several inaccuracies relative to the current JSON Schema (https://opencode.ai/config.json) and the Permissions docs (https://opencode.ai/docs/permissions).
Issues
1. tools field omitted from frontmatter documentation
The JSON Schema (AgentConfig) includes a tools field:
"tools": {
"type": "object",
"additionalProperties": { "type": "boolean" },
"description": "@deprecated Use 'permission' field instead"
}
The skill does not mention tools at all, and additionally claims:
Any unknown field is silently routed into options.
This is incorrect for tools — it IS a recognized (though deprecated) field and is not routed to options.
2. No documentation of MCP permission behavior
The skill's permission section lists known permission keys but does not explain how MCP tools interact with the permission system. Users attempting to restrict MCP tools per-agent via:
permission:
mcp: deny
…will find it silently ineffective, because mcp is not a recognized permission key (confirmed in the Permissions docs: the available keys are read, edit, glob, grep, list, bash, task, skill, lsp, question, webfetch, websearch, external_directory, doom_loop).
The skill should clarify that MCP tools cannot be controlled via a mcp permission key, and document the working approach (e.g., "*": deny catch-all with specific allows).
3. "*" catch-all permission pattern not documented
The "*" key at the top level of the permission object is a catch-all that matches any tool (including MCP tools). This is not mentioned in the skill, which makes it difficult for users to figure out how to create locked-down agents (e.g., read-only agents that also block all MCP tools).
Impact
Users following the skill's guidance will:
Not know tools exists (even as deprecated)
Assume permission.mcp: deny blocks MCP tools (it does not)
Not discover the "*": deny pattern needed to actually lock down an agent
Suggested fix
Update the skill content in packages/core/src/plugin/skill.ts to:
Include tools in the frontmatter field list, marked as @deprecated
Correct the "silently routed into options" claim for known fields
Add a note that mcp is not a valid permission key and MCP tools are controlled via "*" catch-all or individual tool name patterns
Document the "*": deny permission pattern for locking down agents
If the underlying permission behaviors described above are already tracked in those issues, it may be worth focusing this report specifically on the skill content itself needing to be updated to reflect the current state.
The skill only documents opencode.json and never mentions that the TUI has its own tui.json config file with a separate plugin array — loaded by a completely independent plugin system (plugin/tui/runtime.ts vs plugin/index.ts). A user removing a plugin from opencode.json will find it still active if it's also (or only) declared in tui.json$/. This is exactly what happened to me today — @cortexkit/opencode-magic-contextkept loading viatui.json$ despite being removed from `opencode.jsonc$.
Activity
github-actions commentedon Jun 12, 2026
This issue might be a duplicate of or closely related to existing issues. Please check:
toolstopermissions— covers the same underlying behavior (MCP tools cannot be controlled via the newpermissionfield) that this issue says is undocumented in the skilltoolsconfig is removed? #18051: How will tool visibility be controlled aftertoolsconfig is removed? — covers the deprecatedtoolsfield and its relationship to thepermissionsystem"*"catch-all pattern and permission rule evaluationIf the underlying permission behaviors described above are already tracked in those issues, it may be worth focusing this report specifically on the skill content itself needing to be updated to reflect the current state.
ildella commentedon Jun 16, 2026
4.
tui.jsonparallel plugin system not documentedThe skill only documents
opencode.jsonand never mentions that the TUI has its owntui.jsonconfig file with a separatepluginarray — loaded by a completely independent plugin system (plugin/tui/runtime.tsvsplugin/index.ts). A user removing a plugin fromopencode.jsonwill find it still active if it's also (or only) declared intui.json$/. This is exactly what happened to me today —@cortexkit/opencode-magic-contextkept loading viatui.json$ despite being removed from `opencode.jsonc$.github-actions commentedon Aug 16, 2026
To stay organized issues are automatically closed after 60 days of no activity. If the issue is still relevant please open a new one.