claude-in-new-window
別ターミナルを開き、そこで別 claude セッションを起動し、指定された指示文を自動送信する Skill。worktree に切り替わりたくないが worktree 側で作業させたい、他 Skill から作業を並列委譲したい、といった場面で使う。
実行環境によって委譲先が変わる:
| 環境 | 委譲先 | helper |
| --- | --- | --- |
| HERDR_ENV=1 | herdr workspace (agent 名付き) | ~/.claude/scripts/claude-in-herdr.sh |
| $TMUX あり | tmux window | ~/.claude/scripts/claude-in-new-window.sh |
| どちらでもない | 委譲しない (中止) | — |
herdr 版を優先する。herdr は pane 内の agent を認識するため、委譲した claude の
working / blocked / done が sidebar に集約され、承認待ちを見落とさずに済む。
前提条件
- herdr セッション内 (
HERDR_ENV=1) か、tmux セッション内で claude が動いていること <dir>が実在するディレクトリであることclaudeコマンドが$PATHにあること- herdr 版は
herdrとjqが$PATHにあること
呼び出し方
1. ユーザーからの明示呼び出し
/claude-in-new-window <dir> <task>
<dir>: 新 window の cwd (絶対パス、または現在の cwd からの相対パス)<task>: 新 window の claude に送信する指示文 (改行やクォート含んで OK)
2. 他 Skill / hook からの呼び出し
helper スクリプトを直接呼ぶ:
~/.claude/scripts/claude-in-herdr.sh <dir> <task> # herdr
~/.claude/scripts/claude-in-new-window.sh <dir> <task> # tmux
成功時、作成した agent 名 / window 名が stdout に出力される。呼び出し元はそれをユーザーに報告してよい。
実行手順
-
環境を判定して helper を呼ぶ
if [ "${HERDR_ENV:-}" = "1" ]; then ~/.claude/scripts/claude-in-herdr.sh "<abs-dir>" "<task>" elif [ -n "${TMUX:-}" ]; then ~/.claude/scripts/claude-in-new-window.sh "<abs-dir>" "<task>" else : # どちらでもなければ委譲しない fiherdr 版 (
claude-in-herdr.sh) が行うこと:HERDR_ENV=1/herdr/jq/<dir>の検証- agent 名の決定 (basename を
[a-z][a-z0-9_-]{0,31}に整形、衝突時は-2,-3) herdr workspace create --cwd <dir> --label <name> --no-focusherdr agent start <name> --kind claude --pane <id>(shell 初期化との競合でagent_pane_busyの間だけリトライ)- 承認ダイアログ待ち (
blocked) なら task を送らずに exit 3 herdr agent prompt <name> "<task>"を送り、画面に現れたことをherdr pane wait-outputで確認 (失敗時は 1 回だけ再送)- agent 名を stdout に出力
tmux 版 (
claude-in-new-window.sh) が行うこと:- tmux 内かの検証、
<dir>の絶対パス化と存在チェック - window 名の決定 (basename ベース、衝突時は
-2,-3と採番) tmux new-window→send-keys 'claude' Enter→sleep 3<task>が非空ならload-buffer+paste-bufferで流し込みEnter送信- window 名を stdout に出力
-
exit code の扱い (herdr 版のみ)
| exit | 意味 | 報告 | | --- | --- | --- | | 0 | 起動と指示送信が完了 | 通常どおり報告 | | 3 | 起動したが指示は未送信 (承認ダイアログ待ち等) | ユーザーに承認を促す | | その他 | 失敗 | エラー内容を報告 |
-
結果報告
agent 名 / window 名を含めて 1〜2 行で報告する:
herdr workspace
<name>を<dir>で作成し、claude 起動と指示送信を完了しました。 -
turn 終了
この Skill を明示呼び出しで使った場合、元 pane の Claude は追加作業を行わず turn を終える。
直接 herdr コマンドで書く場合 (helper を使わない fallback)
herdr skill が入っていれば、Claude が直接 CLI を叩いてもよい。最小構成:
created=$(herdr workspace create --cwd "<abs-dir>" --label "<name>" --no-focus)
pane=$(printf '%s' "$created" | jq -r '.result.root_pane.pane_id')
herdr agent start "<name>" --kind claude --pane "$pane"
herdr agent prompt "<name>" "<task>"
ただし helper には以下のガードが入っているので、素で書くより helper 経由を推奨する:
workspace create直後の shell 未初期化 (agent_pane_busy) リトライ- 未訪問ディレクトリの trust ダイアログ検出 (送ると本文が吸われ Enter が「信頼する」を選ぶ)
- 送信取りこぼしの検出と再送
直接 tmux コマンドで書く場合 (helper を使わない fallback)
DIR=$(cd "<入力>" && pwd)
NAME=$(basename "$DIR")
n=2
while tmux list-windows -F '#W' | grep -qx "$NAME"; do
NAME="$(basename "$DIR")-$n"
n=$((n+1))
done
tmux new-window -c "$DIR" -n "$NAME"
tmux send-keys -t "$NAME" 'claude' Enter
sleep 3
printf '%s' "<task>" | tmux load-buffer -
tmux paste-buffer -t "$NAME"
tmux send-keys -t "$NAME" Enter
send-keys -l ではなく load-buffer + paste-buffer を使う理由: task 文字列に改行 / クォート / バックスラッシュが混ざっても安全に転送できるため。
注意点
- trust ダイアログ (herdr 版): 未訪問のディレクトリで claude を起動すると
"Is this a project you trust?" が出る。helper はこれを
blockedとして検出し、 task を送らずに exit 3 で返す。ユーザーが承認したあとherdr agent prompt <name> '<task>'で送り直す。 - sleep 3 のチューニング (tmux 版): claude 起動が遅い環境では 3 秒で足りない場合がある。
herdr 版は
agent startが起動検出まで待つのでこの調整は不要。 - task が空の場合: helper はターミナルを作って claude を起動するだけで、prompt 送信はスキップする。ユーザーが手動で指示を投入する用途に使える。
- herdr / tmux 外での実行: helper が冒頭で検出して中止するので、この Skill 側で個別対処は不要。
- 元 pane の Claude: この Skill を呼んだ側の Claude は、agent 名 / window 名を報告して turn を終える。委譲した作業を追いかけて元 pane 側でも進めない。
関連
- 自動発動 hook:
~/.claude/scripts/on-worktree-add.sh(PostToolUse Bash chain) がgit worktree addの成功を検知し、HERDR_ENV/$TMUXを見て helper を振り分ける。 - 委譲先の可視化 (herdr): sidebar の Agent panel が
blocked/doneを集約する。prefix+ctrl+n/prefix+alt+1..9で agent 間を移動、prefix+oで通知対象へジャンプできる。 - 委譲先の可視化 (tmux):
~/.config/tmux/scripts/claude-window-flag.shにより、新 window で claude が起動すると status bar 上で紫背景に変わる。