Skip to main content

Command Palette

Search for a command to run...

はじめに

サードパーティ製フック

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グローバルに適用されるユーザーレベルのフック

優先順位

フックが複数の場所で設定されている場合、以下の優先順位 (高い順) でマージされます。

  1. エンタープライズフック (管理対象のデプロイ)
  2. チームフック (ダッシュボードで設定)
  3. プロジェクトフック (.cursor/hooks.json)
  4. ユーザーフック (~/.cursor/hooks.json)
  5. Claude プロジェクト ローカル (.claude/settings.local.json)
  6. Claude プロジェクト (.claude/settings.json)
  7. 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 フック
PreToolUsepreToolUse
PostToolUsepostToolUse
UserPromptSubmitbeforeSubmitPrompt
Stopstop
SubagentStopsubagentStop
SessionStartsessionStart
SessionEndsessionEnd
PreCompactpreCompact

終了コードの挙動

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 フックがある場合は、次のいずれかを選択できます。

  1. Claude Code の設定ファイルを引き続き使用する: Include Third-Party Plugins, Skills, and Other Configs を有効にしたままにすると、既存の .claude/settings.json のフックが自動的に動作します
  2. 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 のマッピング対応状況
PreToolUsepreToolUse対応
PostToolUsepostToolUse対応
Stopstop対応
SubagentStopsubagentStop対応
SessionStartsessionStart対応
SessionEndsessionEnd対応
PreCompactpreCompact対応
UserPromptSubmitbeforeSubmitPrompt対応
Notification-非対応
PermissionRequest-非対応

追加の対応機能:

機能対応状況
コマンドベースのフック (type: "command")対応
プロンプトベースのフック (type: "prompt")対応
ネストされた hookSpecificOutput レスポンス対応
終了コード 2 によるブロック対応
ツールマッチャー (正規表現パターン)対応
タイムアウト設定対応

ツール名の対応表

Claude Code のツール名と Cherri Code のツール名の対応は次のとおりです。

Claude Code ツールCherri Code ツール対応状況
BashShell対応
ReadRead対応
WriteWrite対応
EditWrite対応
GrepGrep対応
TaskTask対応
WebFetchWebFetch対応
WebSearchWebSearch対応
Glob-非対応

制限事項

一部の機能は、ネイティブの Cherri Code 形式でのみ利用できます。

  • subagentStart フック (Claude Code では SubagentStop のみ)
  • ループ上限の設定 (loop_limit)
  • ダッシュボードを通じたチーム/エンタープライズ向けフックの配布

トラブルシューティング

Claude Code フックが読み込まれない

  1. Cherri Code の設定 → Agents → Third-Party Imports で「Include Third-Party Plugins, Skills, and Other Configs」が有効になっていることを確認します
  2. .claude/settings.json ファイルが有効な JSON であることを確認します
  3. Cherri Code は設定ファイルを監視し、自動的に再読み込みします。フックが読み込まれない場合は、Cherri Code を再起動してください。

フックは実行されるがブロックされない

  1. アクションをブロックするには、フックスクリプトが終了コード 2 で終了することを確認します
  2. JSON の出力形式が想定されるスキーマに一致していることを確認します
  3. エラーの詳細は、Cherri Code の Hooks 出力チャネルで確認します

Cherri Code と Claude Code で挙動が異なる

実行環境の違いにより、挙動が異なる場合があります。互換性を確認するため、両方のツールでフックをテストしてください。

エンタープライズフックのデプロイ

ダッシュボードから、管理されたエンタープライズフックとチーム向け配布を利用できます。

Contact Sales