worktrees について
worktreesは、機能開発を独立したGit worktreeで行い、変更前に開始時の状態を確認するエージェントスキルです。既存の隔離環境を検出し、ハーネス標準のワークスペースツールを優先しつつ、依存関係の導入とベースラインテストを含むGit手順を示します。
主な機能
- 01既存worktreeの隔離を検出
- 02標準ワークスペースツールを優先
- 03Git worktreeの代替手順
- 04プロジェクトファイルから依存関係を導入
- 05作業前にベースラインテストを実行
活用シーン
- 01機能ブランチを現在のチェックアウトから隔離
- 02実装前のワークスペース準備
- 03変更前に既存テストの状態を確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ jayden-dang/ skills --skill worktreesインストール後、Claude Code で/worktreesを入力して読み込まれたか確認します。
詳細
ワークツリー
検証済みのクリーンな状態から始められる、機能開発用の隔離されたワークスペースを用意します。優先順位は、既存の隔離環境を検出する → ハーネス標準のワークスペースツールを使う → 手動で git worktree にフォールバックする、の順です。ハーネスの動作を妨げないでください。
ステップ 0 — 検出して同意を得る
すでにリンクされたワークツリー内にいるか確認します。
GIT_DIR=$(cd "$(git rev-parse --git-dir)" && pwd -P)
GIT_COMMON=$(cd "$(git rev-parse --git-common-dir)" && pwd -P)
GIT_DIR != GIT_COMMON→ リンクされたワークツリーの可能性があります。ただし、先にサブモジュールでないことを確認してください。git rev-parse --show-superproject-working-treeがパスを出力する場合、サブモジュール内にいます。通常のチェックアウトとして扱ってください。そうでなければ、すでに隔離されています。パスとブランチを報告し、作成をスキップしてステップ 2 に進みます。GIT_DIR == GIT_COMMON→ 通常のチェックアウトです。ユーザーがワークツリーに関する希望を明示している場合は、何も聞かずにその希望に従います。そうでない場合は、「現在のブランチに手を加えずに済むよう、隔離されたワークツリーで作業を始めましょうか?」と尋ねます。断られた場合は、現在の場所で作業し、ステップ 2 に進みます。
完了条件:3 つのケースのどれに該当するか把握し、作成する場合は同意を得ていること。
ステップ 1 — ワークスペースを作成する
1a. まず標準ツールを使う。 ハーネスにワークスペース/ワークツリーの仕組み(EnterWorktree のような名前のツール、/worktree コマンド、--worktree フラグ)がある場合は、それを使ってステップ 2 に進みます。標準ツールは配置、ブランチ、クリーンアップを自ら管理します。その横に手動のワークツリーを作ると、ハーネスから認識できない不整合な状態が残ります。標準ツールがない場合に限り、次の方法に進んでください。
1b. Git にフォールバックする。 次の優先順位でディレクトリを選びます。
- ユーザーによる明示的な指示 — 常に最優先
- リポジトリのルートにある既存の
.worktrees/ - 既存の
worktrees/(両方ある場合は.worktrees/を優先) - どちらもない場合 →
.worktrees/を作成
選んだディレクトリを $DIR に割り当て、以下のすべてのコマンドで使用します。上記の優先順位が実際に意味を持つのは、コマンドがそれに従う場合だけです。
DIR=.worktrees # or DIR=worktrees if that existing dir was selected above
プロジェクト内のディレクトリに何かを作成する前に、必ず Git の無視対象であることを確認してください。エントリは未コミットの作業ツリーの変更として残します。Git はすぐにその設定を反映します。ここで .gitignore をコミットすると、ユーザーの現在のブランチにコミットが作成されます。このスキルが変更しないと約束している、まさにその対象です。
git check-ignore -q "$DIR" || printf '%s/\n' "$DIR" >> .gitignore
次に作成して移動します。
git worktree add "$DIR/<branch-name>" -b "<branch-name>"
サンドボックスまたは権限エラーで作成に失敗した場合は、ユーザーに伝えて、現在の場所で作業してください。
完了条件:ワークスペース内にいること(または、そうできなかった理由を報告していること)。
ステップ 2 — 依存関係をインストールする
ロックファイル/マニフェストからパッケージマネージャーを自動判定して、インストールを実行します。pnpm-lock.yaml → pnpm、bun.lock* → bun、yarn.lock → yarn、package-lock.json/単独の package.json → npm、Cargo.toml → cargo build、uv.lock → uv、poetry.lock → poetry、requirements.txt → pip、go.mod → go mod download。マニフェストがない場合はスキップします。
ステップ 3 — クリーンなベースライン
docs/agents/project.md に記載されたコマンドでテストスイートを実行します(ファイルがない場合はその旨を伝え、setup-repo を提案して、各エコシステムのデフォルトのテストランナーを使用します)。
- ベースラインが成功 → 続行します。
- ベースラインが失敗 → 停止し、続行する前にユーザーに確認します。失敗しているベースラインから始めると、自分のバグと既存の問題を区別できません。
報告
Workspace ready at <absolute path> (branch <name>)
Baseline: <N> tests passing, 0 failures
Ready to start <task>.
警告 — 絶対にしないこと
- ステップ 0 ですでにワークツリー内にいると判明した場合に、ワークツリーを作成する
- 標準ツールがある場合に、
git worktree addを使う - 無視対象であることを確認せずに、プロジェクト内のワークツリーディレクトリを作成する
- ベースラインテストを省略する、または失敗したベースラインについてユーザーに確認せずに続行する