原文(日本語に翻訳)
--worktree セッションで実行中の場合に、ステータスラインフックコマンドに名前・パス・ブランチ・オリジナルリポジトリディレクトリを含む worktree フィールドを追加
原文(英語)
Added worktree field to status line hook commands with name, path, branch, and original repo directory when running in a --worktree session
概要
ワークツリーセッション(--worktree フラグで起動)でフックが発火する際、イベントデータに worktree フィールドが追加されるようになりました。このフィールドにはワークツリーの名前・パス・ブランチ名・元リポジトリのディレクトリが含まれており、ワークツリーを意識したフック処理が実現できます。
worktreeフィールドの構造
json
{
"worktree": {
"name": "feature-auth",
"path": "/home/user/project/.claude/worktrees/feature-auth",
"branch": "worktree-feature-auth",
"originalRepoDir": "/home/user/project"
}
}基本的な使い方
フックスクリプトでワークツリー情報を取得:
python
#!/usr/bin/env python3
import json
import sys
event = json.load(sys.stdin)
worktree = event.get("worktree")
if worktree:
print(f"ワークツリー: {worktree['name']}")
print(f"ブランチ: {worktree['branch']}")
print(f"パス: {worktree['path']}")
else:
print("メインリポジトリで実行中")実践例
ワークツリー別にセッションを追跡する
python
#!/usr/bin/env python3
# hooks/track-worktree-session.py
import json
import sys
from pathlib import Path
from datetime import datetime
event = json.load(sys.stdin)
worktree = event.get("worktree")
log_dir = Path.home() / ".claude" / "worktree-sessions"
log_dir.mkdir(parents=True, exist_ok=True)
if worktree:
session_file = log_dir / f"{worktree['name']}.log"
with open(session_file, "a") as f:
f.write(f"[{datetime.now().isoformat()}] branch={worktree['branch']}\n")ワークツリー名をターミナルタイトルに設定
bash
#!/bin/bash
# hooks/set-terminal-title.sh
EVENT=$(cat)
WORKTREE_NAME=$(echo "$EVENT" | jq -r '.worktree.name // empty')
if [ -n "$WORKTREE_NAME" ]; then
# ターミナルタイトルをワークツリー名に設定
printf "\033]0;Claude [worktree: %s]\007" "$WORKTREE_NAME"
fiワークツリーのPR作成を自動化
python
#!/usr/bin/env python3
# hooks/auto-pr-on-worktree-stop.py
import json
import sys
import subprocess
event = json.load(sys.stdin)
worktree = event.get("worktree")
# ワークツリーセッション終了時にPR作成を提案
if worktree and event.get("event") == "Stop":
branch = worktree["branch"]
name = worktree["name"]
repo_dir = worktree["originalRepoDir"]
# PRが未作成の場合のみ
result = subprocess.run(
["gh", "pr", "list", "--head", branch, "--json", "number"],
cwd=repo_dir, capture_output=True, text=True
)
prs = json.loads(result.stdout)
if not prs:
print(f"ワークツリー '{name}' のPRがまだ作成されていません。")
print(f"ブランチ: {branch}")注意点
worktreeフィールドはワークツリーセッション(claude --worktree <name>で起動した場合)でのみ存在します- メインリポジトリで実行している場合は
worktreeフィールドはnullまたは存在しません originalRepoDirは元のリポジトリのルートディレクトリへの絶対パスです