Claude Codeのフックは、セッションの名前付き時点でアプリが実行するコマンドです。本ガイドはプロジェクト限定のSessionStartフックを追加し、現在のGitブランチを読み、会話の開始・再開時に短い文脈行を渡します。根拠はAnthropicの現行フックリファレンスで、2026年10月19日に確認しました。BIG CHANGEはNodeによるスクリプトの直接実行と設定JSONを確認しましたが、Claude Codeが呼ぶフックやモデルの回答はテストしていません。
大きな変化
- 何が変わったか: このプロジェクト用
SessionStartフックが、Claude Codeで会話を開始・再開するときに短いGitブランチ行を渡します。 - なぜ重要か: 開始・再開時に現在のブランチが文脈に入り、毎回手動で貼る必要がなくなります。
- 注意点: 文脈はルールを強制せず、モデル回答も保証しません。自分の信頼できるプロジェクトで開始・再開時の実際の受け渡しを確認します。
インストール前に
変更権限のあるGitプロジェクトを使います。同じターミナルでClaude Code、Node.js、Gitが利用でき、プロジェクトの.claude/settings.jsonを編集する権限が必要です。node --version、git --versionおよびclaude --versionを確認します。準備環境はClaude Code 2.1.301とNode 24.19.0でした。観測した版であり、最低要件ではありません。
モデルへ送る前にブランチ名を確認してください。 顧客、チケット、インシデント名が含まれる場合があります。文字のフィルタリングや短縮は意味を消しません。モデル文脈への提供が承認された名前でのみ導入してください。それ以外は承認済みの非機密状態を出すよう変更し、導入前に変更をレビューします。Anthropicのデータ使用文書にサービスの取り扱いがあります。プロジェクトの権限も守ってください。
フックのコマンドはユーザー権限で動きます。有効化前に既存のプロジェクト・ユーザーフック、組織方針、スクリプト全体を確認します。プロジェクト設定はコミットされる場合がありますが、.claude/settings.local.jsonはローカルに残ります。この例はプロジェクト設定ファイルで対象範囲を限定します。
2つのファイルを入れる
- プロジェクト内に
.claude/hooks/を作り、以下のブロック全体を.claude/hooks/session-context.cjsとして保存します。
'use strict';
const { execFileSync } = require('node:child_process');
const project = process.env.CLAUDE_PROJECT_DIR;
if (!project) {
process.stderr.write('CLAUDE_PROJECT_DIR is unavailable\n');
process.exit(1);
}
try {
const raw = execFileSync('git', ['-C', project, 'branch', '--show-current'], {
encoding: 'utf8',
timeout: 1500,
maxBuffer: 4096,
stdio: ['ignore', 'pipe', 'pipe'],
}).trim();
const branch = raw ? raw.replace(/[^A-Za-z0-9._/-]/g, '_').slice(0, 80) : 'detached HEAD';
process.stdout.write(`Current project branch: ${branch}\n`);
} catch {
process.stderr.write('Could not read the project branch; check Git and project path\n');
process.exit(1);
}Git子プロセスは1.5秒でタイムアウトし、出力バッファは4,096バイトです。HEAD切り離しなどブランチ結果が空ならdetached HEADになります。プロジェクトパスなし、またはGit失敗では短いstderr診断と終了コード1を返します。
- 既存の
.claude/settings.jsonを開き、下記のhooks.SessionStart項目を他の設定・フック群に統合し、既存項目を保持します。ブロックはレビュー済み資料の完全なsettings.example.jsonです。すでにSessionStart項目があれば、その配列を置換せずグループを追加します。
{
"hooks": {
"SessionStart": [
{
"matcher": "startup|resume",
"hooks": [
{
"type": "command",
"command": "node",
"args": ["${CLAUDE_PROJECT_DIR}/.claude/hooks/session-context.cjs"],
"timeout": 5
}
]
}
]
}
}照合条件は新規・再開セッションを対象とします。Anthropicはclear、compactおよびforkもSessionStartの発生元として記載していますが、本例は意図的に除外します。フィールドargsはexec形式を選び、Claude Codeはnodeを、解決済みプロジェクトスクリプトパス1個の引数で呼びます。シェルの引用・解析は行いません。Windowsではnode.exeが本当の実行ファイルに解決される必要があり、.cmdシムはexec形式に使えません。コマンドの5秒のフック制限は、スクリプトの1.5秒Git制限と別です。
スクリプト、次にClaude Codeを確認する
- Claude Codeを開く前にプロジェクトのターミナルでスクリプトを実行し、Gitと出力を比較します。PowerShell:
$env:CLAUDE_PROJECT_DIR = (Get-Location).Path
node .claude/hooks/session-context.cjs
git branch --show-currentBash:
CLAUDE_PROJECT_DIR="$PWD" node .claude/hooks/session-context.cjs
git branch --show-currentstdoutはちょうど1行のCurrent project branch: BRANCHです。ここでBRANCHは文字フィルターと80文字上限適用後のGit結果です。HEAD切り離しではCurrent project branch: detached HEADを表示します。直接テストが示すのは、その端末でローカルスクリプトが動くことだけです。準備では通常ブランチがGitと一致し、パスなし・無効パスは空のstdout、stderr診断、終了1となりました。長い名前の上限とHEAD切り離し時の代替処理はソースを確認しましたが、実行していません。
- 信頼できるプロジェクトで新しい対話型Claude Codeプロセスを
claude --debug-file STARTUP_PRIVATE_LOGで起動し、自分が管理する非公開パスを指定します。ワークスペース信頼を承認する前にプロジェクト・ユーザーフックを確認します。デバッグログでSessionStartイベントと発生元startup、選択スクリプトのパス、終了状態、出力処理を確認します。ツールや別のGit読み取りを禁止し、受け取ったブランチ文脈をClaudeに尋ねます。回答とログを直接結果に照合します。フックstdoutはClaudeの文脈に入り、画面上のメッセージとして表示される保証はありません。 - そのセッションを終了し、別プロセスで
claude --debug-file RESUME_PRIVATE_LOG --resumeを使って再開します。SessionStartresumeイベントを確認し、ツールやGit再読み取りなしで同じ質問をします。2つのログはプロジェクト情報を含み得るため非公開にします。非対話型の-pやSDK実行には同じ信頼確認がなく、リポジトリのフックを自動実行できるので、このテストは対話型で行います。Anthropicは通常ファイル監視で設定変更を反映すると説明していますが、新規プロセスのほうが開始・再開テストを明確にできます。
通常作業で後からブランチが変わったら、直接確認と新規セッションで行が変わるか確認します。本ガイドをテストしたと主張するためだけにブランチを切り替えないでください。
動かない場合
直接実行結果から調べ、JSON統合、SessionStartの綴り、startup|resumeの照合、プロジェクトルート、nodeとgitの利用可否、信頼、デバッグエラーを確認します。CLAUDE_PROJECT_DIRがなければstderrへCLAUDE_PROJECT_DIR is unavailableを出し、パス不正やGit失敗はCould not read the project branch; check Git and project pathを出します。どちらも終了1で文脈行なしです。SessionStartの失敗は非ブロックの診断で、操作のゲートにはできません。Anthropicが示すPreToolUseはツール操作を制御する別イベントで、独自の設計レビューが必要です。
スクリプトはローカルGitだけを実行し、ネットワークやモデルを呼びません。Claude Codeの起動・再開・質問はアカウント、プロバイダー、モデルの枠を消費する場合があります。Anthropicの費用ガイドで現行条件を確認します。固定価格や有料セッションのテストは報告していません。
会話開始後の別作業は、文脈の確認とClaude Codeセッション継続のガイドを参照してください。文脈確認と継続を扱いますが、この起動フックは設定しません。
出典と参考資料
- Anthropic、Claude Codeフックリファレンス — 2026年10月19日確認の現行一次仕様。
SessionStartの発生元・照合条件、exec形式のargs、パス変数、stdout文脈、設定再読み込み、信頼、デバッグログ、非ブロック失敗を説明します。文書であり、BIG CHANGEのフック実行結果ではありません。 - Anthropic、フックで操作を自動化 — 公式の設定・テスト手順。上のスクリプトと設定は本ガイド用にレビューした限定的なBIG CHANGE例で、ベンダーのテスト結果のコピーではありません。
- Anthropic、Claude Codeの設定 — インストールと環境要件。例を使う前に現在のプラットフォーム説明を確認します。
- Anthropic、Claude Codeのデータ使用 — ブランチ情報をモデル文脈へ送る前に読む現行データ条件。プロジェクトの許可は別に判断します。
- Anthropic、費用を効果的に管理 — 対話型検証のアカウント・使用ガイド。ローカルGitスクリプト自体はモデル・ネットワークを呼びません。



