-
Notifications
You must be signed in to change notification settings - Fork 3.4k
Description
Bug Description
oh-my-opencode bypasses OpenCode's OPENCODE_DISABLE_CLAUDE_CODE* env vars by independently reading ~/.claude/plugins/installed_plugins.json and injecting Claude Code components into the resolved config — without checking process.env.
OpenCode core already respects these env vars and disables Claude Code integration when they are set (confirmed in anomalyco/opencode#10383). The issue is exclusively in oh-my-opencode's independent Claude plugin loader path.
Environment
- OpenCode:
1.2.10 - oh-my-opencode:
3.8.1 - OS: macOS (Darwin)
Steps to Reproduce
- Have any Claude Code plugins installed (e.g.,
everything-claude-code,frontend-design@claude-plugins-official). - Include
"oh-my-opencode@latest"in OpenCode'spluginarray. - Set env vars:
export OPENCODE_DISABLE_CLAUDE_CODE=1 export OPENCODE_DISABLE_CLAUDE_CODE_PROMPT=1 export OPENCODE_DISABLE_CLAUDE_CODE_SKILLS=1 export OPENCODE_DISABLE_EXTERNAL_SKILLS=1
- Run:
opencode debug config | rg "everything-claude-code|frontend-design"
Expected Behavior
Claude Code plugin components should not appear in OpenCode's resolved config when OPENCODE_DISABLE_CLAUDE_CODE=1 is set.
Actual Behavior
Claude Code plugin entries (commands, skills, agents) still appear in the resolved config.
Disabling oh-my-opencode or setting claude_code.*: false in oh-my-opencode.json stops the leak — confirming the source.
Root Cause
Zero integration with OPENCODE_DISABLE_* env vars
Searching the oh-my-opencode codebase for OPENCODE_DISABLE returns zero results. The plugin never reads process.env for these variables.
7 opt-out gates default to true
All Claude Code component loading uses pluginConfig.claude_code?.X ?? true. When claude_code is absent from config (the default), all gates resolve to true:
| File | Gate | Component |
|---|---|---|
src/plugin-handlers/plugin-components-loader.ts |
claude_code?.plugins ?? true |
Plugin discovery from ~/.claude/plugins/ |
src/plugin-handlers/command-config-handler.ts |
claude_code?.commands ?? true |
Commands |
src/plugin-handlers/command-config-handler.ts |
claude_code?.skills ?? true |
Skills (command context) |
src/plugin-handlers/agent-config-handler.ts |
claude_code?.skills ?? true |
Skills (agent awareness) |
src/plugin-handlers/agent-config-handler.ts |
claude_code?.agents ?? true |
Agents from ~/.claude/agents/ |
src/plugin-handlers/mcp-config-handler.ts |
claude_code?.mcp ?? true |
MCP servers |
src/plugin/hooks/create-transform-hooks.ts |
claude_code?.hooks ?? true |
Hooks |
src/plugin/skill-context.ts uses an equivalent variant: claude_code?.skills !== false.
Workaround
{
"claude_code": {
"agents": false,
"commands": false,
"hooks": false,
"mcp": false,
"plugins": false,
"skills": false
}
}Suggested Fixes
- Honor OpenCode env flags: Check
process.env.OPENCODE_DISABLE_CLAUDE_CODE(and related vars) as hard gates insrc/plugin-config.tsbefore evaluatingclaude_code.*config properties. - Add global
claude_code.enabledswitch: Single master toggle inClaudeCodeConfigSchema, subordinating per-component switches. - Safer default: Auto-disable Claude plugin import when
OPENCODE_DISABLE_CLAUDE_CODE=1is set.
Related
- anomalyco/opencode#10383 — Same issue reported against OpenCode core, closed as oh-my-opencode's responsibility.