ディスパッチャーのコンテキストを圧迫したまま session を続けるのを避けるため、 monitoring 状態(active workers / 直近 polling cursor / pending escalations)を handover ファイルに書き出し、secretary の指示で /clear → /dispatcher-resume の 流れで新しいディスパッチャー session を開始する準備をする。 Secretary から DISPATCHER_HANDOVER peer message を受領したとき、または ディスパッチャー自身が context が長くなったと判断したときに使う。
org-down
組織を中断し、broker daemon まで含めて完全に停止する。「完全に止める」「daemon ごと落とす」「org down して」「全部終了」と言われたときに使う。suspend(状態保存 + ja 管理プロセス / ペイン停止)を完走してから `claude-org-runtime org down` を呼ぶ統合終了。
単に「中断」「今日は終わり」なら daemon を残す /org-suspend を使う。
含まれるファイル(1)
- SKILL.md13.0 KB
SKILL.md(原文)
インストールする前に、エージェントに与えられる指示の中身を確認できます。
org-down: 組織の完全停止(broker daemon まで)
/org-down は /org-suspend を完走してから claude-org-runtime org down を呼び、broker
daemon まで含めて組織を完全に停止する統合終了スキルである。
責務境界(最重要):
claude-org-runtime org down(broker daemon 停止)を呼ぶのは 本スキルだけである。/org-suspendは「状態保存 + ja 管理下の補助 プロセス(dashboard / secretary_queue_watcher / attention watcher)とペインの停止」までで 止まり、daemon は走らせたまま(/org-startで再開する前提の中断)にする。/org-down は suspend の成功を確認できたときにのみ daemon 停止へ進む。順序を守るのは、未保存の状態を 残したまま daemon を落とすと復旧経路(check_messagesでの drain 等)ごと失われるため。runtime 側の pre-flight 検出(
org down前に生存ワーカー / 未 drain キューを警告する機能)は runtime#142 の担当で、本スキルは 触れない。本スキルは runtime のorg downを 呼ぶだけ。
輸送層の前提:
claude-org-runtime org downは broker daemon を落とすコマンドで、broker transport(ORG_TRANSPORT無設定=コード既定 broker、または明示 broker)でのみ意味を持つ。 renga フォールバック(ORG_TRANSPORT=rengaでrenga --layout ops起動)では daemon の概念が 無いので、Step 3 は skip して「renga では daemon 停止は不要」と案内する。jud断は Step 3 の transport 確認で行う。
Step 1: /org-suspend を完走する
/org-suspend の全 Phase を順に実行する(Phase 1 状態収集 → Phase 2
未応答スクレイプ → Phase 3 状態書き込み → Phase 3.6 secretary_queue_watcher 停止 →
Phase 3.7 attention watcher 停止(ペイン teardown 前)→ Phase 4 全ペイン停止)。
ただし Phase 3.5 の dashboard blind kill は本スキル Step 2 の stale-pid-safe 停止に差し替える
(org down 直前の完全停止では、pid recycle された stale な dashboard.pid を無検証 kill すると
無関係プロセスを撃つため。誤 kill 防止)。他の Phase はそのまま実行する。
suspend 成功の確認(gate) — 次を満たしたときのみ Step 2 / Step 3 へ進む:
.state/state.dbのsession.statusがSUSPENDEDになっている(Phase 3 の DB write が成立)- Phase 4 が全対象ペイン(ワーカー / ディスパッチャー / 存在した場合のキュレーター)について停止を
「消滅済み」として確定している。ここで確定と読んでよいのは
.claude/skills/org-suspend/SKILL.mdPhase 4 が F-1(同 Phase 1 手順 1 の「フォーカス前提(F)」)に従って自ら出した結論だけで、 本 gate のために org-down 側でlist_panesを引き直して判定をやり直さない — 生存判定の正本は org-suspend 側にあるので、その条件文をここに再掲せず確定結果を読むだけにする(list_panesに 居ないことを単独で停止の根拠にする単段の読み替えを本スキルに置かない)。Phase 4 が自らの停止確認の ために行う再列挙(同 Phase 4 停止手順 1 の台帳最新化 / Pass 2 の残存確認)は org-suspend 側の手順 なので、Step 1 の「全 Phase を順に実行する」どおりそのまま実行する - Phase 4 が「停止できなかった / 判定できなかったピア」を 1 件も残していない。生死を判定できなかった
ピアは、Phase 4 の停止手順が「残存または判定不能なら、閉鎖扱いにせず journal に記録して人間に報告
する」に従って
pendingに残すので、gate の入口は同 Phase 4 手順 7 の最終報告になる —pendingとunresolvedが両方空で「組織を中断しました」と言い切れた形だけが gate 成立である。 「組織を部分的に中断しました(停止しきれていないペインがあります)」の形(停止できなかったワーカー /roleが判定できず対象外にしたピア / 他タブに見えたが自組織と確認できず対象外にしたピアのいずれかが 残る)は gate 不成立として扱う - 最後の窓口ペインが残っているのは gate の妨げにならない(窓口は自分自身を close できない。同 Phase 4 「最後のペイン (窓口) の扱い」)
suspend が abort / 失敗した場合、または生死を判定できないピアが 1 件でも pending に残った場合
(DB が SUSPENDED にならない / Phase 4 が「組織を部分的に中断しました」を出した / ワーカーが SUSPEND
応答を返さず生死を判定できないまま等)は、org down に進まず STOPする。状況を人間に報告し、「状態が保存し切れていない
/ ペインの停止を確認し切れていないため daemon は落とさなかった。原因解消後に /org-down を再実行するか、
/org-suspend でいったん中断してください」と案内する(生死を判定できなかったピアが残っている場合は、
Phase 4 手順 7 が列挙したその一覧もそのまま渡す)。
判定不能は「継続」ではなく STOP に倒す: ディスパッチャーの worker 監視 (
.dispatcher/references/worker-monitoring.md)は 観測不能なサイクルでも監視対象を保持して次サイクルで再評価する(人間が居ないので無停止継続が安全側)が、 本スキルの後段はclaude-org-runtime org down= broker daemon の kill であり向きが逆になる。生死を 判定できないピアを抱えたまま daemon を落とすと、そのピアが走り続けていた場合に止める手段も、生死を 後から確かめる経路(冒頭の責務境界で挙げたcheck_messagesでの drain 等)も同時に失われる。 判定不能のまま不可逆操作へ進まない側が安全側である。
Step 2: ダッシュボードの停止(stale-pid-safe)
dashboard.pid は bare pid のみを持つため、recycle された pid を無検証 kill すると無関係プロセスを
撃つ。pid の生存だけでなく、その cmdline が dashboard/server.py であることを照合してから kill し、
照合が外れたら kill せず stale pid file を削除する。
sandbox 注記: ホストのプロセス確認・kill は Claude Code の Bash sandbox 内では観測できない (process namespace 隔離)。本 Step は
dangerouslyDisableSandbox: trueを付けてホスト実行する (org-start Block C のダッシュボード起動と同じ理由)。
identity 照合ロジックは helper(tools/stop_dashboard.py)に入っているので、POSIX では 1 行呼ぶ
だけでよい。helper は pid の生存に加え、その live argv(Linux/WSL は /proc、macOS/BSD は ps
フォールバック)が dashboard/server.py を含むことを照合できたときだけ SIGTERM し、外れたら kill
せず pid file を stale として削除する。
Mac / Linux / WSL:
python3 tools/stop_dashboard.py # Windows で console python を使う場合は py -3 ...
標準出力の 1 行([stop-dashboard] dashboard (pid=N) stopped / ... 消滅(stale)... /
... 起動していない ...)を Step 4 の報告にそのまま転記する(実際に停止したか stale だったかを
人間に正しく伝えるため)。exit 0 が正常系。exit 2(identity 未確認)は /proc も ps も無い環境
(Windows native)でのみ出るシグナルで、その場合は次の PowerShell 手順を使う。
Windows native(PowerShell) — Get-CimInstance Win32_Process の CommandLine で identity を
照合してから Stop-Process する:
$pf = ".state\dashboard.pid"
if (Test-Path $pf) {
$dpid = [int]((Get-Content $pf -Raw).Trim())
$proc = Get-CimInstance Win32_Process -Filter "ProcessId=$dpid" -ErrorAction SilentlyContinue
if ($proc -and ($proc.CommandLine -match 'dashboard[\\/]server\.py')) {
Stop-Process -Id $dpid -Force
Write-Output "dashboard (pid=$dpid) stopped"
} else {
Write-Output "dashboard pid stale or not running; removing stale pidfile (no kill)"
}
Remove-Item $pf -ErrorAction SilentlyContinue
}
Step 3: broker daemon の停止(org down)
Step 1 の suspend gate を満たしたときのみ実行する。
-
transport を確認する:
echo "${ORG_TRANSPORT:-broker}"renga: daemon の概念が無いので 本 Step は skip。Step 4 で「renga フォールバックのため daemon 停止は不要」と案内するbroker(無設定を含む): 次へ
-
broker daemon を停止する(この呼び出しで現在の broker セッション=窓口ペインを含む tmux も 終了する。必ず最後に実行する):
claude-org-runtime org down # Mac / Linux / WSL py -3 -m claude_org_runtime.cli org down # Windows で console script が PATH に無い場合- 正常終了で broker daemon が停止し、以後
claude-org-runtime org up→/org-startで再起動する - 失敗(non-zero exit / エラー出力)した場合は、そのまま人間に報告する。状態保存(Step 1)は
既に完了しているので、daemon が残っていても
/org-start再開には支障しない
- 正常終了で broker daemon が停止し、以後
注:
org down実行後は broker daemon と窓口ペインが落ちるため、本スキルの続き(Step 4 の 報告)はorg downの前に準備し、org downを最後の操作にする。あるいはorg downの stdout/exit を受けてから最終報告する場合は、端末が閉じる前に人間が読めるよう 1 行で簡潔に出す。
Step 4: 報告
broker で daemon まで停止した場合(org down 実行直前に提示。dashboard の行は Step 2 の
標準出力を転記し、stopped か stale(元々動いていなかった)かを実態どおりに書く — 未確認で
「停止済み」と断定しない):
組織を完全に停止します。
- 状態保存: 完了(.state/state.db = SUSPENDED)
- dashboard: {Step 2 の出力(stopped / stale)}
- 停止済み: secretary_queue_watcher / attention watcher / 全ワーカー・ディスパッチャーペイン
- これから broker daemon を停止します(claude-org-runtime org down)。
再開するときは `claude-org-runtime org up` → `/org-start` を実行してください。
renga フォールバックで daemon 停止を skip した場合:
組織を中断しました(renga フォールバックのため broker daemon 停止は不要です)。
- 状態保存: 完了(.state/state.db = SUSPENDED)
- 停止済み: dashboard / attention watcher / 全ワーカー・ディスパッチャーペイン
(secretary_queue_watcher は broker 専用のため renga では非該当)
再開するときは `renga --layout ops` → `/org-start` を実行してください。
suspend gate を満たせず STOP した場合(Step 1 で分岐済み): org down は実行せず、未保存の原因、
または停止を確定できなかった(indeterminate の)ピアの一覧と、復旧手順(再実行 or /org-suspend)を
人間に報告する。
レビュー
まだレビューはありません。使ってみた感想をお寄せください。
同じリポジトリのスキル
概要と使いどころ
/dispatcher-handover で書き出した handover ファイルを読み込み、 ディスパッチャーを新しい session で復帰させる。/clear 直後の最初のターンで使う。 state.db の dispatcher_pane_id / dispatcher_peer_id を atomic に更新し、 worker monitoring の /loop 3m を再開する。 「ディスパッチャー復帰」「resume」「引き継ぎから再開」と secretary から指示された ときに使う。/org-start ではない(ワーカー・窓口・キュレーターは生きている前提)。
プロジェクトのゴール台帳(registry/goals/<owner>/<repo>.md)を人間と対話して新規作成・改訂する。 README と open Issue からゴール候補を推定して提示し、「何を目指すか」「何が起きていたら未達か」を 短く質問して条項を固め、書式検証(tools/work_discovery_goals.py validate)を通してから保存する。 「ゴール台帳を書きたい」「ゴールを設定して」「ゴール未設定と出た」「台帳エラーを直して」 「このプロジェクトの目標を決めたい」等や、/work-discovery の「ゴール未設定」「ゴール台帳エラー」案内を 受けて窓口が起動する。候補の提示そのものは /work-discovery の役目で本スキルではない。
組織の生きているペイン(secretary / dispatcher / worker)へ tmux で**直接入る** ための **コマンドを出力するだけ** の read-only スキル。`mcp__org-broker__list_panes`(論理ペイン) と `/usr/bin/tmux -L claude-org-broker list-panes -a`(pane_id ↔ session マッピング)を pane_id(%N)で突き合わせ、各ペインに role + name(task_id) ラベル付きの attach コマンドを 生成する(読取専用 `-r` / 書込は `-r` 無し / デタッチは `Ctrl-b d`)。 「ワーカーのペインを見たい」「ワーカーのペインに入りたい」「dispatcher の様子を直接見たい」 「ペインに入りたい」「あのペインを直接覗きたい」「attach コマンド教えて」 「tmux でつなぎたい」「worker の画面に入る」等で発動。 自分で attach はせず・ペインも一切変更しない(コマンド文字列とペイン一覧表を表示するのみ)。 作業委譲(org-delegate)・ダッシュボードで状況一覧(org-dashboard)・watcher 停止(org-attention-stop) には発動しない。
attention notification watcher(承認待ち / 判断待ち / CI 失敗等を OS 通知 + 音で能動通知)を dispatcher ペインの右側に split で常駐起動する。`.state/attention.json` が未配置なら ja 既定テンプレートを `tools/templates/attention.example.json` から自動コピーする。 起動後のペイン id は `.state/attention_pane.json` に記録し、`/org-attention-stop` から参照する。 「attention 起動」「通知監視を始めて」「watcher を立てて」等で発動。 `/org-start` からの auto-start はしない(明示起動推奨ポリシー)。
`/org-attention-start` で起動した attention watcher ペインを停止する。 `.state/attention_pane.json` に記録された pane_id を `list_panes` の name/role で identity 確認し、いまも attention watcher を指している場合だけ `close_pane`(pane 破棄)で 破棄する(pane_id が別ペインへ再割当て済みなら close せず stale sidecar として削除)。 「attention 止めて」「通知監視を停止」「watcher 落として」等で発動。