بنقرة واحدة
tmux-watch
tmux の特定 pane を監視し、状態変化に応じて自律的に判断・行動するオーケストレータースキル。「tmux の X.Y と X.Z を見て」「tmux 監視して」のように使う。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
tmux の特定 pane を監視し、状態変化に応じて自律的に判断・行動するオーケストレータースキル。「tmux の X.Y と X.Z を見て」「tmux 監視して」のように使う。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
herdr で管理されている他の agent pane(別 worktree / 別タブで動く Claude Code や Codex 等)にメッセージを送り応答を確認する手順。「他の agent に FB して」「herdr 経由で伝えて」「並行作業中の agent に連絡して」等で使う。
ブラウザ操作に関する要件
Interview the user relentlessly about a plan or design until reaching shared understanding, resolving each branch of the decision tree. Use when user wants to stress-test a plan, get grilled on their design, or mentions "grill me" / 「詰めて」「設計を grill して」.
既存または新規のコメントを SoT 規約 (CLAUDE.md / code-comments rule) に照らして audit し、削除・短縮候補を抽出する手順。「他に削れるコメントある?」「コメント減らしたい」「AI-workslop ないか?」のような問い、または PR/diff のレビュー段階で使う。
GitHub CLI を使った PR 作成
セッションで得た学びを dotfiles ハーネス(Skill / Rule / Subagent)に恒久反映する方法論。「学んだことを焼き込みたい」「/learn」のときに使う。手順は Skill、原則は Rule、専門役割は Subagent に振り分け、共有レイヤー(dot_agents / .chezmoitemplates)優先で chezmoi ソースを編集し apply する。
| name | tmux-watch |
| description | tmux の特定 pane を監視し、状態変化に応じて自律的に判断・行動するオーケストレータースキル。「tmux の X.Y と X.Z を見て」「tmux 監視して」のように使う。 |
| allowed-tools | Bash(tmux capture-pane:*), Bash(tmux list-panes:*), Bash(tmux list-windows:*), Bash(tmux send-keys:*), Bash(bash $TMPDIR/tmux-capture*), Bash(sleep *), Agent, SendMessage, TaskOutput, TaskStop |
指定された tmux pane を 2 層構成で監視し、状態変化を検知して自律的に Next Action を判断する。
Layer 1: Capture (bash background) — トークン消費ゼロ
tmux capture-pane → diff → stdout(出力ファイル)
Layer 2: Orchestrator (background agent) — 判断時のみトークン消費
出力ファイルを Read → 状態判定 → モードに応じた行動
$ARGUMENTS から以下を抽出する。
| 形式 | 例 | 解釈 |
|---|---|---|
W.P | 2.0 3.1 | window=2 pane=0, window=3 pane=1 |
W:P | 2:0 3:1 | 同上 |
| 引数 | 説明 | デフォルト |
|---|---|---|
--mode MODE | 自律度モード (observe / suggest / auto) | suggest |
--context TEXT | ペインの役割説明(エージェントの判断精度向上) | なし |
--interval N | キャプチャ間隔(秒) | 10 |
--lines N | キャプチャ行数 | 50 |
--once | 1回だけ全ペインをスナップショット | (継続監視) |
| モード | 行動 |
|---|---|
observe | 状態変化を検知 → SendMessage で報告 + 推奨アクションを提示。実行はしない |
suggest | 軽微なアクション(既知エラーの対処、コマンド再実行等)は自動実行。大きな判断はユーザーに確認 |
auto | 検知した状態に応じて自分で判断・実行まで行う(tmux send-keys 含む)。報告は事後 |
$ARGUMENTS が空、またはペイン指定が含まれていない場合、対話的に設定を収集する。
tmux list-windows -F '#{window_index}: #{window_name}'
tmux list-panes -a -F '#{window_index}.#{pane_index}: #{pane_current_command} (#{pane_width}x#{pane_height})'
AskUserQuestion で以下を順に聞く:Q1: 監視対象ペイン(上記一覧を選択肢に含める)
0.1: claude (186x45), 0.2: zsh (93x45)Q2: 自律度モード
observe — 報告 + 提案のみ。実行はしないsuggest (Recommended) — 軽微なものは自動実行。大きな判断は確認auto — フル自律。判断・実行まで行うQ3: コンテキスト(任意)
なし — 特に補足情報なし入力する — ペインの役割を自由記述Q3 で「入力する」が選ばれた場合、ユーザーの Other 入力をコンテキストとして使用する。
収集した情報を使って Step 1 以降を実行する。
指定された各ペインについて:
tmux list-panes -t {window} -F '#{pane_index} #{pane_current_command}'
存在しないペインがあればエラーを表示して終了。
全ペインの初回キャプチャを実行:
tmux capture-pane -t {window}.{pane} -p -S -{lines}
初回結果をユーザーに以下の形式で報告:
tmux-watch を開始します(モード: {mode})
pane {W1}.{P1}: {現在のコマンド}
---
{キャプチャ内容の末尾10行}
---
pane {W2}.{P2}: {現在のコマンド}
---
{キャプチャ内容の末尾10行}
---
⚠ キャプチャ内容にシークレットが含まれる可能性があります。
--once の場合はここで終了。
ペインごとに 以下のスクリプトを $TMPDIR/tmux-capture-{window}-{pane}.sh に書き出し、
Bash(run_in_background: true) で実行する。
#!/bin/bash
# tmux-capture for pane {window}.{pane}
TARGET="{window}.{pane}"
INTERVAL={interval}
LINES={lines}
PREV=""
for i in $(seq 1 360); do
CURRENT=$(tmux capture-pane -t "$TARGET" -p -S "-$LINES" 2>&1)
RC=$?
if [ $RC -ne 0 ]; then
echo "@@ERROR $(date '+%H:%M:%S') pane $TARGET not found or inaccessible"
echo "$CURRENT"
echo "@@END"
exit 1
fi
if [ "$CURRENT" != "$PREV" ]; then
echo "@@CHANGED $(date '+%H:%M:%S') iteration=$i"
echo "$CURRENT"
echo "@@END"
PREV="$CURRENT"
fi
sleep "$INTERVAL"
done
echo "@@TIMEOUT $(date '+%H:%M:%S') max iterations reached"
各バックグラウンドタスクの タスク ID と 出力ファイルパス を記録する。 これらは Layer 2 のエージェントに渡す。
Agent ツールで以下のようにオーケストレーターを起動する:
Agent(
name: "tmux-orchestrator",
run_in_background: true,
prompt: <下記のプロンプトテンプレート>
)
以下の情報をすべて含めること:
あなたは tmux ペイン監視オーケストレーターです。
複数の tmux ペインの出力を監視し、状態変化に応じて行動してください。
## 監視対象
{ペインごとに以下を列挙}
- pane {W}.{P}: 出力ファイル={出力ファイルパス}, タスクID={タスクID}
## コンテキスト
{--context の内容。未指定なら「コンテキスト情報なし」}
## モード: {observe | suggest | auto}
{モードの説明を記載}
## 動作ルール
以下のループを繰り返してください:
1. 各ペインの出力ファイルの末尾100行を Read で確認する
2. @@CHANGED マーカーから最新の出力を抽出する
3. 以下の基準で状態を判定する:
- エラー: スタックトレース、"error"、"Error"、"failed"、"FAIL"、
"panic"、"exception"、compile error、permission denied、
"command not found"、exit code 非ゼロ等
- 完了: シェルプロンプト復帰("$"、"❯"、">"で行が終わる)、
Claude Code の入力待ち(">"プロンプト)
- 待機中: Y/n 確認、"[y/N]"、"Press any key"、
Claude Code の permission prompt、"Allow"/"Deny" 選択肢
- 進行中: 出力が継続的に変化しているが上記に該当しない → 何もしない
4. 状態変化を検知したら、モードに応じて行動する:
### observe モード
- SendMessage で親エージェントに報告する
- フォーマット:
tmux-orchestrator: pane {W}.{P}
状態: {エラー | 完了 | 待機中}
検知内容: {出力の要約3行以内}
推奨アクション: {具体的な提案}
### suggest モード
- 以下は自動実行してよい:
- 明らかなタイポや簡単なコマンドエラーの修正提案
- テスト再実行の提案
- 依存パッケージのインストール提案
- 以下は SendMessage でユーザーに確認:
- アーキテクチャに関わる判断
- ファイルの削除や大規模な変更
- 不明瞭なエラーの対処
### auto モード
- 状態に応じて自分で判断し、tmux send-keys で対象ペインにコマンドを送信できる:
tmux send-keys -t {W}.{P} '{command}' Enter
- 実行後、結果を SendMessage で事後報告する
- ただし破壊的操作(rm -rf、git push --force 等)は絶対に実行しない
5. Bash で `sleep 15` してから 1 に戻る
6. @@ERROR や @@TIMEOUT を検知したら、報告して終了する
## 重要な注意事項
- 進行中の状態では何もしない(過剰な報告は避ける)
- 同じ状態を繰り返し報告しない(前回と同じ状態なら skip)
- シークレット(API キー、パスワード、トークン)を検知したら内容を伏せて報告する
- 破壊的操作は auto モードでも絶対に実行しない
Layer 1, 2 の起動が完了したら、以下をユーザーに報告:
tmux-watch オーケストレーター起動完了
監視対象:
- pane {W1}.{P1} (タスクID: {id1})
- pane {W2}.{P2} (タスクID: {id2})
モード: {mode}
間隔: {interval}秒
オーケストレーターがバックグラウンドで状態を監視します。
変化があれば自動的に報告されます。
excludedCommands に設定済み)TaskStop で停止可能SendMessage(to: "tmux-orchestrator") で追加指示可能