Skip to content

Latest commit

 

History

History
158 lines (106 loc) · 8.23 KB

File metadata and controls

158 lines (106 loc) · 8.23 KB

ccw-cli — Claude Code x worktree

Claude Code 標準の --worktree を薄くラップするランチャー — リポジトリのどこからでも ccw と打てば、既存の worktree を PR 情報付きで選択・起動できます(無ければ新規作成)。単体 CLI なので tmux/zellij と競合しません。

Go Release License Homebrew brew-audit codecov

🇺🇸 English · 🇯🇵 日本語


⚡ Quick Start

# 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 のエージェント用途に最適

🎬 デモ

picker demo

メモ: 💬 RESUME バッジは「その worktree に紐づくセッションログがある」ことだけを示します。セッションのタイトルや最初のプロンプトは picker には表示されません。ccwclaude --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 で確認できます。

🎯 Picker リファレンス

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 は作業ディレクトリ基準で会話を復元します)。

📦 インストール

Homebrew (推奨)

brew install tqer39/tap/ccw

ソースから

git clone https://github.com/tqer39/ccw-cli ~/ccw-cli
go build -o ~/.local/bin/ccw ~/ccw-cli/cmd/ccw

~/.local/binPATH に入っていることを確認してください。

依存

  • 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 bootstrap

Brewfile の Homebrew パッケージをインストールし、mise で Go / Node を用意、lefthook の pre-commit フックを有効化します。

GIF の再生成は docs/assets/picker-demo-setup.sh + picker-demo.tapevhs で実行してください。

🤖 作成ツール

このプロジェクトは Claude Code + Claude Opus 4.7 で作成しました。

📄 ライセンス

MIT