Skip to content

原文(日本語に翻訳)

PreToolUseフックが updatedInputpermissionDecision: "allow" を同時に返すことで AskUserQuestion を満たせるようになりました。独自のUIで回答を収集するヘッドレス統合が可能になります。

原文(英語)

PreToolUse hooks can now satisfy AskUserQuestion by returning updatedInput alongside permissionDecision: "allow", enabling headless integrations that collect answers via their own UI

概要

PreToolUse フックが AskUserQuestion ツールの呼び出しに対して、updatedInput フィールドと permissionDecision: "allow" を組み合わせて返すことで、ユーザーへの質問に自動応答できるようになりました。これにより、ヘッドレス環境(CI/CDパイプラインやカスタムUIなど)でClaude Codeを使用する際に、独自のUI経由で収集した回答をフックから注入できます。

基本的な使い方

フックスクリプトが AskUserQuestion の入力を書き換えて、ユーザー入力をシミュレートする:

json
{
  "permissionDecision": "allow",
  "updatedInput": {
    "answer": "はい、続けてください"
  }
}

実践例

ユースケース: ヘッドレス環境で質問に自動応答する

フックスクリプト(~/.claude/hooks/auto-answer.sh)の例:

bash
#!/bin/bash

# フックからの入力を読み取る
INPUT=$(cat)
TOOL_NAME=$(echo "$INPUT" | jq -r '.tool_name')

if [ "$TOOL_NAME" = "AskUserQuestion" ]; then
  QUESTION=$(echo "$INPUT" | jq -r '.tool_input.question')
  
  # 質問の内容に応じて自動回答を決定
  if echo "$QUESTION" | grep -q "続けますか"; then
    echo '{"permissionDecision": "allow", "updatedInput": {"answer": "はい"}}'
  elif echo "$QUESTION" | grep -q "確認"; then
    echo '{"permissionDecision": "allow", "updatedInput": {"answer": "確認しました"}}'
  else
    # デフォルト回答
    echo '{"permissionDecision": "allow", "updatedInput": {"answer": "OK"}}'
  fi
else
  echo '{"permissionDecision": "allow"}'
fi

.claude/settings.json での設定:

json
{
  "hooks": {
    "PreToolUse": [
      {
        "if": "AskUserQuestion(*)",
        "command": "~/.claude/hooks/auto-answer.sh"
      }
    ]
  }
}

ユースケース: カスタムUIから回答を収集する

外部UIシステムと連携して回答を取得するフック:

python
#!/usr/bin/env python3
import json
import sys
import requests

data = json.load(sys.stdin)

if data.get('tool_name') == 'AskUserQuestion':
    question = data['tool_input']['question']
    
    # 外部UIシステムに質問を送信して回答を取得
    response = requests.post('https://your-ui-system/ask', json={'question': question})
    answer = response.json()['answer']
    
    print(json.dumps({
        'permissionDecision': 'allow',
        'updatedInput': {'answer': answer}
    }))
else:
    print(json.dumps({'permissionDecision': 'allow'}))

注意点

  • このフックは AskUserQuestion ツールの呼び出し時にのみ効果を発揮します
  • updatedInputanswer フィールドを含める必要があります
  • 自動応答を設定する場合は、質問の内容を適切に処理して適切な回答を返すようにしてください
  • ヘッドレス環境以外では通常の対話型応答の方が推奨されます

関連情報