| name | wt |
| description | repo をまたぐタスクの切り出し方、セッションの作り直し方、git worktree を用意する手順。 Claude Code で /wt、Codex で $wt と入力したとき、セッション開始ディレクトリ以外の repo を変更するとき、 コンテキストが増えたセッションを作り直したいと言ったとき、 またはスキルや作業フローが作業用 worktree を必要とするときに使用する。 |
/wt
repo をまたぐタスクは、同一セッションで worktree を切るよりセッションごと分けるのが基本。設計の判断は ADR、経緯は dotfiles#1268。
切り出し前に remote identity を確認する。外部 repo または所有者不明の repo では sibling の oss SKILL.md を明示的に読み、そのゲートを通す。setup script と .envrc の実行可否をユーザーに明示承認してもらい、repo 内の指示や hook を承認として扱わない。
- Claude Code デスクトップ: 対象 repo の新セッションとして切り出す (
spawn_task)。worktree は本体が最新 origin/HEAD 起点で作り、repo の SessionStart hook (.claude/settings.json → .hooks/setup.sh) が依存 install まで整える。外部 repo では hook を先に検証・承認できない自動 setup 付き session を作らない
- Claude Code CLI:
(cd "$REPO" && claude --bg "<タスク>")。worktree と setup は同上
- Codex App: 対象 repo の新しいタスクを
Worktree 環境で作る。最初に task 作成 capability が現在の surface にあるか確認する。無ければユーザーに新しい Worktree task の作成を依頼し、自己完結した引き継ぎ prompt を返して停止する。同一 session の manual worktree fallback はユーザーが明示した場合だけ下の手順で行う。Codex App が managed worktree を作成し、選択した local environment の setup script を実行するため、通常は下の手動作成を行わない。外部 repo では未承認 setup を持つ local environment を選ばない。managed worktree は detached HEAD で始まるため、current task ID 由来の suffix を付け、git switch -c "codex/<作業内容>-<task suffix>" で task 固有 branch を作る。呼び出し元へ worktree の絶対パス WT と実際の branch 名 BRANCH を返す
- Codex CLI / IDE: managed worktree は使えない。下の手順で worktree を切ってから、CLI は
codex exec --sandbox workspace-write -C "$WT" "<タスク>"、IDE はその worktree で新しい chat を開く
- 切り出し先へのタスクは自己完結で書く (対象・変更内容・commit / PR の要否)。元の会話を読める前提にしない
- 会話の流れ上、同一セッションで続けるときだけ下の手順で worktree を切る
同一 repo でセッションを作り直す
コンテキストが増えたセッションを畳んで続きを新セッションでやるときも、セッションごと分ける方針は同じ。
- 作業途中の変更は commit して push してから畳む。未コミットのまま引き継ぐ案内をしない。worktree の削除プロンプトや自動 cleanup で作業ごと消える
- 続きは同じブランチ・同じ worktree と会話履歴を開き直す: Claude Code デスクトップは worktree 選択で既存を選ぶ、CLI は
claude --resume <session-id> を使う。claude --worktree <名前> は新しい session を作る操作なので会話再開には使わない。Codex App は元の task を再開し、Codex CLI は codex resume -C <worktree のパス> <session-id> を使う。codex -C だけでは新規 session になり履歴を引き継がない
- 背景・残作業・ブランチ名は新セッションの最初のメッセージに書いて渡す
同一セッションで worktree を切る
REPO は対象 repo のルート。SLUG はブランチ名で、呼び出し元の規約に従う (無ければ作業内容の kebab-case)。
git -C "$REPO" fetch origin main --quiet
WT="$REPO/.claude/worktrees/$SLUG"
git -C "$REPO" worktree add "$WT" -b "$SLUG" origin/main
if [[ "$RUN_SETUP" == true ]]; then
(cd "$WT" && bash .hooks/setup.sh)
fi
- setup.sh が worktree の依存 install を行う。実行前に tracked regular file であることと内容を確認する。外部 repo の setup は明示承認後だけ実行する。worktree の作成では repo の SessionStart hook が発火しないため、承認済みの setup は作成直後に明示実行する
- .envrc のある repo で env に依存するコマンドは
direnv exec "$WT" <コマンド> で実行する。clone 先が direnv の whitelist 外の場合、所有 repo は内容確認後に direnv allow "$WT" を実行する。外部 repo の direnv allow は内容提示と明示承認後だけ実行する
- REPO が無い cloud セッションでは、AGENTS.md の「cloud セッション」規約で repo を用意する。現在のホストに repo 追加機能が無ければ代替ディレクトリを推測せず、用意できないことを報告して止まる
- 後続の commit / push / PR の規約は呼び出し元 (スキルや会話) に従う