Claude Code 標準の --worktree を薄くラップするランチャー — リポジトリのどこからでも ccw と打てば、既存の worktree を PR 情報付きで選択・起動できます(無ければ新規作成)。単体 CLI なので tmux/zellij と競合しません。
# 1. インストール
brew install tqer39/tap/ccw
# 2. 任意の git リポジトリで実行
ccwこれだけ。ccw は .claude/worktrees/ を走査して picker を表示し、worktree が無ければ新規作成します。
- 🤝 橋渡しまでが仕事 — worktree を選ぶ(or 新規作成)→ その中で
claudeを起動 → ccw は終了。常駐プロセスもラッパーもなく、tmux/zellij にも噛まない。あとは claude の世界 - 🎯 worktree の状態が一目でわかる — push 済 / ahead・behind / dirty、PR 番号を picker にまとめて表示
- 🧹 溜まった worktree を一括掃除 —
[clean pushed]/ccw --clean-allで push 済をまとめて削除 - 📋 機械可読リスト —
ccw -L --jsonで worktree × git × PR × session 情報を一括取得。スクリプトや Claude Code のエージェント用途に最適
メモ:
💬 RESUMEバッジは「その worktree に紐づくセッションログがある」ことだけを示します。セッションのタイトルや最初のプロンプトは picker には表示されません。ccwはclaude --continueを実行するだけで、最新セッションの選択は Claude Code CLI 任せです。
ccw # 既存 worktree を選ぶか、新規起動
ccw -n # picker をスキップして新規作成
ccw -s # 新規 worktree + ローカライズされた superpowers preamble を最初のプロンプトとして注入
ccw -- --model <model-id> # パススルー: `--` 以降の引数はそのまま claude に渡す(モデル ID は一例)
ccw -L # ccw worktree を表形式で一覧
ccw -L --json # 同上、JSON 出力(スクリプト・エージェント用)
ccw -L -d ~/repo --no-pr --no-session # 特定の repo を対象、gh / session 探索を skip
ccw --clean-all --status=pushed --dry-run # 一括削除対象をプレビュー
ccw --clean-all --force -y # 確認なしで全削除全オプションは ccw --help で確認できます。
Worktree 状態バッジ:
| バッジ | 意味 |
|---|---|
🟢 [PUSHED] |
clean、upstream 追従、ahead 0 |
🟡 [LOCAL] |
upstream なし、または ahead あり |
🔴 [DIRTY] |
未コミットの変更がある |
PR 状態バッジ(gh がインストール済みかつ認証済みの場合のみ表示):
| バッジ | 意味 |
|---|---|
🟩 [OPEN] |
オープン中の PR(レビュー / マージ待ち) |
⬛ [DRAFT] |
ドラフト PR |
🟪 [MERGED] |
マージ済みの PR |
🟥 [CLOSED] |
マージされずにクローズされた PR |
セッションバッジ:
| バッジ | 意味 |
|---|---|
💬 RESUME |
過去のセッションログがあり、run で会話を復元できる |
⚡ NEW |
セッションログ無し。run は新規起動 |
worktree を選択すると [r] run / [d] delete / [b] back のサブメニューに遷移。run はセッションログが残っていれば claude --continue で過去会話を復元、無ければ claude -n <worktree名> で新規起動します。[delete all] / [clean pushed] / [custom select] は一括削除のショートカットで、dirty を含む場合は --force か、または 3 択確認 (y force · s dirty を除外 · N キャンセル) を経由します。
gh が無い場合も picker は動作し、ヒントを下部に表示。rate limit / ネットワークエラー時は PR 列だけを静かに隠します。
ccw は新規 worktree を作るとき、worktree 名と Claude Code のセッション名を 1:1 で揃えます:
- ディレクトリ:
<repo>/.claude/worktrees/<name>/ - セッション名:
<name>(claude -n <name>で設定)
<name> は ccw-<owner>-<repo>-<yymmdd>-<hhmmss>(例: ccw-tqer39-ccw-cli-260426-143055)形式で生成されます。<owner> / <repo> は origin remote の URL から抽出、タイムスタンプは worktree 作成時刻(ローカルタイム)です。origin が未設定の場合は <owner> が local、<repo> がディレクトリ basename になります。同一秒に複数作成した場合などの同名衝突は -2, -3, … で回避します。/rename で手動改名しても ccw 側は追跡しないため問題ありません(--continue は作業ディレクトリ基準で会話を復元します)。
brew install tqer39/tap/ccwgit clone https://github.com/tqer39/ccw-cli ~/ccw-cli
go build -o ~/.local/bin/ccw ~/ccw-cli/cmd/ccw~/.local/bin が PATH に入っていることを確認してください。
git- Claude Code
>= 2.1.76— ccw は--worktree <name>(2.1.49 で追加) と-n <name>(2.1.76 で追加) を併用します。未導入なら起動時に npm / brew で入れるかを確認します。 - (optional)
gh— picker で PR 情報を表示 - (optional) superpowers プラグイン —
-sを付けて起動するとき(superpowers preamble を注入するモード)のみ必要です。.claude/settings.jsonで宣言済みのため、本リポジトリで初回claude起動時にインストールを促されます
| 変数 | 効果 |
|---|---|
NO_COLOR=1 |
カラー出力を無効化 |
CCW_DEBUG=1 |
詳細ログ出力 |
CCW_LANG=en|ja |
出力言語を強制。--lang が優先される。未設定時はシステム locale (LC_ALL / LC_MESSAGES / LANG) を参照し、最終的に英語にフォールバック。 |
終了コード: 0 成功 · 1 ユーザーエラー / キャンセル · その他は claude の終了コードを透過。
go test ./...
go vet ./...
go build ./cmd/ccw開発環境は 1 コマンドで整います(Homebrew 必須):
make bootstrapBrewfile の Homebrew パッケージをインストールし、mise で Go / Node を用意、lefthook の pre-commit フックを有効化します。
GIF の再生成は docs/assets/picker-demo-setup.sh + picker-demo.tape を vhs で実行してください。
このプロジェクトは Claude Code + Claude Opus 4.7 で作成しました。

