tmux + git worktree + Claude Code Stop hook + JSONL transcript だけで 「1 オーケストレータ + 複数ピア」の Claude Code 並列オーケストレーションを行う単一 bash CLI。
- bash, jq, tmux, git, coreutils
peerctl spawn alpha # worktree + tmux window で claude ピアを起動
peerctl ask alpha "実装して" # 送信して応答(ターン完了)を待って返す
peerctl list # ピア一覧と状態 (idle/working)
peerctl kill alpha # ピアと worktree を撤収
# 送受信を分けたい場合
peerctl send alpha "調べて"
peerctl recv alpha --timeout 60
# コードを触らない会話専用ピアは worktree 不要
peerctl spawn talker --no-git
# ステータス確認(別ターミナルで)
watch -n1 peerctl list- 送信:
tmux send-keysで本文と Enter を別キーとして送る(TUI の bracketed paste で 改行が吸われ Enter が確定しない問題を構造的に回避) - 受信: spawn 時に各ピアへ Stop hook を仕込み、ピアがターンを終えると
signalファイルにsession_idとtranscript_pathを書く。recv はそれを待って transcript の最終 assistant ターンを抽出する - 隔離: ピアごとに git worktree(
--no-gitで素ディレクトリ)。cwd が分かれるので transcript の名前空間も作業も衝突しない
PEERCTL_HOME状態ディレクトリ(既定$XDG_RUNTIME_DIR/peerctl)PEERCTL_TMUX_SESSIONtmux セッション名(既定peers)PEERCTL_AGENTピアで起動するコマンド(既定claude)
for t in tests/test_*.sh; do bash "$t"; done # 単体(外部依存ゼロ、claude 不要)
bash tests/smoke.sh # end-to-end(実 claude + tmux 必須、手動)MIT License — 詳細は LICENSE を参照。