サードパーティ製フック
Cherri Codeはサードパーティ製ツールのフックを読み込めるため、他のAIコーディングアシスタントで既存のフック設定との互換性を確保できます。
Claude Code Hooks
Cherri Code は、Claude Code 用に設定されたフックを読み込み、実行できます。これにより、両方のツールで同じフックスクリプトを使用できます。
要件
Claude Code hooks は、Cherri Code の設定 → Agents → Third-Party Imports で Include Third-Party Plugins, Skills, and Other Configs が有効になっているときに読み込まれます。この設定はデフォルトでオンになっています。
設定ファイルの場所
Claude Code フックは、以下の場所から優先順位順に読み込まれます。
| 場所 | パス | 説明 |
|---|---|---|
| プロジェクト ローカル | .claude/settings.local.json | プロジェクト固有の、gitignore される上書き設定 |
| プロジェクト | .claude/settings.json | リポジトリにチェックインされるプロジェクトレベルのフック |
| ユーザー | ~/.claude/settings.json | グローバルに適用されるユーザーレベルのフック |
優先順位
フックが複数の場所で設定されている場合、以下の優先順位 (高い順) でマージされます。
- エンタープライズフック (管理対象のデプロイ)
- チームフック (ダッシュボードで設定)
- プロジェクトフック (
.cursor/hooks.json) - ユーザーフック (
~/.cursor/hooks.json) - Claude プロジェクト ローカル (
.claude/settings.local.json) - Claude プロジェクト (
.claude/settings.json) - Claude ユーザー (
~/.claude/settings.json)
すべてのソースで一致するフックが実行されます。レスポンスが競合する場合、マージ時には優先順位の高いソースが優先されます。
エンタープライズ管理フックとダッシュボードでの配布には、エンタープライズプランが必要です。詳細については、営業にお問い合わせください。
Claude Code フックの形式
Claude Code フックは、似ていますが形式が少し異なります。Cherri Code は Claude のフック名を対応する Cherri Code のフック名に自動的にマッピングします。
Claude Code の settings.json の例:
{ "hooks": { "PreToolUse": [ { "matcher": "Shell", "hooks": [ { "type": "command", "command": "./hooks/validate-shell.sh" } ] } ], "PostToolUse": [ { "matcher": ".*", "hooks": [ { "type": "command", "command": "./hooks/audit.sh" } ] } ] }}レスポンス形式の互換性
Cherri Code は、Claude Code のネストされた hookSpecificOutput レスポンス形式と、従来のフラットなレスポンス形式の両方をサポートしています。Claude Code 用に作成されたフックスクリプトは、どちらの形式を使用していても Cherri Code で動作します。
PreToolUse レスポンス形式
ネスト形式 (Claude Code形式) :
{ "hookSpecificOutput": { "hookEventName": "PreToolUse", "permissionDecision": "deny", "permissionDecisionReason": "Blocked by policy", "updatedInput": { "command": "npm ci" } }}フラット形式 (Cherri Codeネイティブ形式) :
{ "permission": "deny", "user_message": "Blocked by policy", "updated_input": { "command": "npm ci" }}両方の形式は同等です。ネストされたpermissionDecisionはpermissionに、permissionDecisionReasonはuser_messageに、updatedInputはupdated_inputに対応します。
Stop / SubagentStop のレスポンス形式
ネスト形式 (Claude Code 形式) :
{ "hookSpecificOutput": { "decision": "block", "reason": "Tasks incomplete, continue working" }}フラット形式 (Claude Codeのレガシースタイル) :
{ "decision": "block", "reason": "Tasks incomplete, continue working"}Cherri Codeネイティブ形式:
{ "followup_message": "Tasks incomplete, continue working"}Stop フックおよび SubagentStop フックでは、reason を伴う "block" の decision は自動フォローアップとして扱われます。これは、ネイティブの Cherri Code 形式で followup_message を指定するのと同等です。
フックステップの対応
Claude Codeのフック名は、Cherri Codeのフック名に自動的に対応付けられます。
| Claude Code フック | Cherri Code フック |
|---|---|
PreToolUse | preToolUse |
PostToolUse | postToolUse |
UserPromptSubmit | beforeSubmitPrompt |
Stop | stop |
SubagentStop | subagentStop |
SessionStart | sessionStart |
SessionEnd | sessionEnd |
PreCompact | preCompact |
終了コードの挙動
Cherri Code と Claude Code のフックはどちらも、アクションをブロックするために終了コード 2 をサポートしています。これにより、ツール間でフックを共有しても一貫した挙動が保たれます。
#!/bin/bash# 危険なコマンドをブロックif [[ "$COMMAND" == *"rm -rf"* ]]; then echo '{"permission": "deny", "user_message": "Destructive command blocked"}' exit 2fiecho '{"permission": "allow"}'exit 0- 終了コード 0: フックが成功した場合、JSON 出力を使用します
- 終了コード 2: アクションをブロックします (
permission: "deny"と同等) - その他の終了コード: フックが失敗した場合、アクションは続行されます (フェイルオープン)
Claude Code からの移行
既存の Claude Code フックがある場合は、次のいずれかを選択できます。
- Claude Code の設定ファイルを引き続き使用する: Include Third-Party Plugins, Skills, and Other Configs を有効にしたままにすると、既存の
.claude/settings.jsonのフックが自動的に動作します - Cherri Code 形式に移行する: すべての機能を利用するには、Cherri Code 形式に従ってフックを
.cursor/hooks.jsonにコピーします
Cherri Code 形式での対応例:
{ "version": 1, "hooks": { "preToolUse": [ { "command": "./hooks/validate-shell.sh", "matcher": "Shell" } ], "postToolUse": [ { "command": "./hooks/audit.sh" } ] }}対応機能
Cherri Code で Claude Code フックを使用する際は、以下の機能に対応しています。
| Claude Code イベント | Cherri Code のマッピング | 対応状況 |
|---|---|---|
PreToolUse | preToolUse | 対応 |
PostToolUse | postToolUse | 対応 |
Stop | stop | 対応 |
SubagentStop | subagentStop | 対応 |
SessionStart | sessionStart | 対応 |
SessionEnd | sessionEnd | 対応 |
PreCompact | preCompact | 対応 |
UserPromptSubmit | beforeSubmitPrompt | 対応 |
Notification | - | 非対応 |
PermissionRequest | - | 非対応 |
追加の対応機能:
| 機能 | 対応状況 |
|---|---|
コマンドベースのフック (type: "command") | 対応 |
プロンプトベースのフック (type: "prompt") | 対応 |
ネストされた hookSpecificOutput レスポンス | 対応 |
| 終了コード 2 によるブロック | 対応 |
| ツールマッチャー (正規表現パターン) | 対応 |
| タイムアウト設定 | 対応 |
ツール名の対応表
Claude Code のツール名と Cherri Code のツール名の対応は次のとおりです。
| Claude Code ツール | Cherri Code ツール | 対応状況 |
|---|---|---|
Bash | Shell | 対応 |
Read | Read | 対応 |
Write | Write | 対応 |
Edit | Write | 対応 |
Grep | Grep | 対応 |
Task | Task | 対応 |
WebFetch | WebFetch | 対応 |
WebSearch | WebSearch | 対応 |
Glob | - | 非対応 |
制限事項
一部の機能は、ネイティブの Cherri Code 形式でのみ利用できます。
subagentStartフック (Claude Code ではSubagentStopのみ)- ループ上限の設定 (
loop_limit) - ダッシュボードを通じたチーム/エンタープライズ向けフックの配布
トラブルシューティング
Claude Code フックが読み込まれない
- Cherri Code の設定 → Agents → Third-Party Imports で「Include Third-Party Plugins, Skills, and Other Configs」が有効になっていることを確認します
.claude/settings.jsonファイルが有効な JSON であることを確認します- Cherri Code は設定ファイルを監視し、自動的に再読み込みします。フックが読み込まれない場合は、Cherri Code を再起動してください。
フックは実行されるがブロックされない
- アクションをブロックするには、フックスクリプトが終了コード
2で終了することを確認します - JSON の出力形式が想定されるスキーマに一致していることを確認します
- エラーの詳細は、Cherri Code の Hooks 出力チャネルで確認します
Cherri Code と Claude Code で挙動が異なる
実行環境の違いにより、挙動が異なる場合があります。互換性を確認するため、両方のツールでフックをテストしてください。
エンタープライズフックのデプロイ
ダッシュボードから、管理されたエンタープライズフックとチーム向け配布を利用できます。