opencode-claude-code-hooks
Run existing Claude Code command guardrails in OpenCode without copying their commands or settings.
Install
Add the package to the OpenCode plugin array.
{
"plugin": ["opencode-claude-code-hooks"]
}
OpenCode installs the package when it starts. The plugin reads these Claude files at every tool call.
~/.claude/settings.json<git-root>/.claude/settings.json<git-root>/.claude/settings.local.json
Preserved behavior
PreToolUseandPostToolUsecommand hooks- Claude matcher names such as
Bash,Edit, andWrite - exit code 2 blocking
- structured deny results
- full
updatedInputreplacement - post-tool feedback and
additionalContext - the Claude default command timeout of 600 seconds
CLAUDE_PROJECT_DIRset to the Git project root
Settings are read at runtime, so editing a Claude hook does not require reinstalling this plugin.
Honest limits
Stopcannot preserve Claude timing with OpenCode's current stable plugin API- prompt, agent, HTTP, async, and conditional
ifhandlers stay manual - allow and ask results do not bypass OpenCode permissions
- malformed source settings are ignored so they do not break OpenCode startup
For a dry-run report before installation, use the compatibility route in dsh-movein.
npx claude-to-opencode --hooks-only
npx claude-to-opencode --hooks-only --apply
Verification
The test suite runs real hook child processes and checks blocking, input replacement, project-root discovery, and post-tool feedback on Linux, macOS, and Windows.
npm ci
npm test
License
MIT