原文(日本語に翻訳)
フックが effort.level JSONフィールドと $CLAUDE_EFFORT 環境変数を通じてアクティブなエフォートレベルを受け取れるようになりました。BashツールのコマンドもClaude Codeのエフォートレベルを $CLAUDE_EFFORT で読み取れます
原文(英語)
Hooks now receive the active effort level via the effort.level JSON input field and the $CLAUDE_EFFORT environment variable, and Bash tool commands can read $CLAUDE_EFFORT
概要
Claude Codeのフックシステムが、現在のエフォートレベル(low、medium、high、xhigh、max)を受け取れるようになりました。フックスクリプトでは $CLAUDE_EFFORT 環境変数で参照するか、フックへの入力JSONの effort.level フィールドを読み取ることができます。また、Bashツールで実行されるコマンドも $CLAUDE_EFFORT にアクセスできます。これにより、エフォートレベルに応じて処理を変えるスマートなフックやスクリプトが作成できます。
基本的な使い方
フックスクリプト内で $CLAUDE_EFFORT 環境変数を使用します。
bash
#!/bin/bash
# フックスクリプトでエフォートレベルを取得
echo "現在のエフォートレベル: $CLAUDE_EFFORT"JSONフィールドから取得する場合:
bash
#!/bin/bash
# 標準入力からJSONを読み取る
INPUT=$(cat)
EFFORT=$(echo "$INPUT" | jq -r '.effort.level // "medium"')
echo "エフォートレベル: $EFFORT"実践例
エフォートレベルに応じてテストの深さを変える
bash
#!/bin/bash
# .claude/hooks/post-tool-use.sh
case "$CLAUDE_EFFORT" in
"max"|"xhigh")
echo "高エフォート: 全テストスイートを実行します"
npm run test:full
;;
"high")
echo "中高エフォート: 統合テストを実行します"
npm run test:integration
;;
"medium")
echo "中エフォート: ユニットテストのみ実行します"
npm run test:unit
;;
"low")
echo "低エフォート: テストをスキップします"
;;
esacコード品質チェックのレベル調整
bash
#!/bin/bash
# 高エフォートの場合のみ詳細な静的解析を実行
if [ "$CLAUDE_EFFORT" = "max" ] || [ "$CLAUDE_EFFORT" = "xhigh" ]; then
echo "詳細な静的解析を実行中..."
npx eslint . --rule 'no-console: error' --rule 'complexity: [error, 5]'
npx tsc --strict --noEmit
else
echo "基本的なlintのみ実行中..."
npx eslint . --fix
fiログの詳細度をエフォートレベルで制御
bash
#!/bin/bash
# PreToolUse フックでのログ設定
EFFORT="${CLAUDE_EFFORT:-medium}"
if [ "$EFFORT" = "max" ] || [ "$EFFORT" = "xhigh" ]; then
export LOG_LEVEL="debug"
export VERBOSE=1
else
export LOG_LEVEL="warn"
export VERBOSE=0
fi
echo "ログレベル: $LOG_LEVEL (エフォート: $EFFORT)"settings.json でのフック設定
json
{
"hooks": {
"PostToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "/path/to/scripts/post-bash-hook.sh"
}
]
}
],
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "/path/to/scripts/session-end.sh"
}
]
}
]
}
}Bashツールから $CLAUDE_EFFORT を読む
フックだけでなく、Bashツールで実行されるコマンドでも $CLAUDE_EFFORT が利用できます。
# Claude Code プロンプトで実行されるBashコマンド
> echo $CLAUDE_EFFORT でビルドスクリプトを実行してくださいbash
# build.sh
#!/bin/bash
echo "エフォートレベル: $CLAUDE_EFFORT"
if [ "$CLAUDE_EFFORT" = "max" ]; then
npm run build:production -- --analyze
else
npm run build:development
fi注意点
effort.levelの値は"low"、"medium"(デフォルト)、"high"、"xhigh"、"max"の5段階です$CLAUDE_EFFORTが未設定の場合(エフォートレベルが不明な状況)に備えて、デフォルト値を設定しておくことを推奨します:EFFORT="${CLAUDE_EFFORT:-medium}"- フックが実行されるイベントによっては
effort.levelが利用できない場合があります(セッション開始時など) - エフォートレベルは
/effortコマンドや--effortフラグで変更できます $CLAUDE_EFFORTはBashツールで実行されるシェルコマンドでのみ有効です。外部プロセスや子プロセスには自動的には引き継がれません