ディスパッチャーのコンテキストを圧迫したまま session を続けるのを避けるため、 monitoring 状態(active workers / 直近 polling cursor / pending escalations)を handover ファイルに書き出し、secretary の指示で /clear → /dispatcher-resume の 流れで新しいディスパッチャー session を開始する準備をする。 Secretary から DISPATCHER_HANDOVER peer message を受領したとき、または ディスパッチャー自身が context が長くなったと判断したときに使う。
org-resume
中断された組織を再開する。.state/org-state.md が存在し Status: SUSPENDED のとき、 「再開」「続きから」「前回どこまでやった?」と言われたときに使う。起動時の自動ブリーフィングにも対応。
含まれるファイル(1)
- SKILL.md6.5 KB
SKILL.md(原文)
インストールする前に、エージェントに与えられる指示の中身を確認できます。
org-resume: 組織の再開
中断された組織の状態を読み込み、人間にブリーフィングし、再開する。
state DB 前提 (Issue #267 / M4):
.state/state.dbが唯一の SoT。 read 経路は DB のみ (markdown fallback は M4 で撤去)、構造化セクションの write 経路はStateWriter.transaction()経由(post-commit hook が.state/org-state.mdを DB から自動再生成、markdown 直接編集禁止 — drift_check が検出する)。free-form な学び / Pending Lead 等はnotes/配下に保存する。.state/journal.jsonlは M4 で廃止。 DB が無い場合はpython -m tools.state_db.importer --db .state/state.db --rebuild --no-strictで構築する。
Phase 1: 状態読み込みとブリーフィング
-
state schema migration を実行する(Set C §4.4 契約)。
.state/配下の JSON 状態を最新スキーマへ揃えてから読み込みに入る:py -3 tools/state_migrate.py # Windows python3 tools/state_migrate.py # Mac/Linuxexit 0 なら続行。exit 1(未対応 version 残存)/ exit 2(migration ループ異常)なら人間に報告して停止する。
-
DB から前回状態を取得する(Phase 1 は軽量 briefing API、Issue #412):
.state/state.dbが存在 → DB をクエリ:python -c "from tools.state_db import connect; from tools.state_db.queries import get_resume_briefing_light; import json; \ conn = connect('.state/state.db'); \ print(json.dumps(get_resume_briefing_light(conn), ensure_ascii=False, indent=2, default=str))"active_runs/reserved_runs/recent_events/last_suspend_summaryでブリーフィング素材を作る。sessionには Status / Current Objective / suspended_at / resumed_at / resume_summary が圧縮されて入る(rawresume_instructions本文と raw eventpayload_jsonは含まれない)。active_inventory_dirsはruns.statusから逆引きした worker_dir 集合(state-semantics-contract I7 —worker_dirs.lifecycle='active'ではない)。 必要があれば(極稀ケース)get_resume_briefingで raw payload / 完全な resume_instructions を取得できるが、起動時 Phase 1 では使わない。- DB が無い → 人間に rebuild を促す:
「state.db not found. Run:
python -m tools.state_db.importer --db .state/state.db --root . --rebuild」
-
人間に簡潔なサマリーを提示する:
- 全体の目標 (briefing の
session.objective) - 各作業アイテムの状態 (完了/進行中/保留/ブロック、briefing の
active_runs/reserved_runs) - 中断時刻 (briefing の
last_suspend_summary.occurred_at、reason / counts も同 dict)
- 全体の目標 (briefing の
-
notes/配下にある自由記述 (学び / Pending Lead / セッションサマリー) を確認する
Phase 2: 現実との照合
DB の active_runs を SoT として照合し、markdown は表示用補助とする。
- DB から取得した active_runs(または markdown の Worker Directory Registry)を起点に、各 run の
worker_dirを確認する .state/workers/内の各ワーカー状態ファイルも参照する(旧経路)- 各ワーカーの作業ディレクトリで以下を確認:
- ディレクトリが存在するか
git status— 未コミットの変更があるかgit log --oneline -5— 最後のコミットは run のcommit_short/ 状態ファイルと一致するか- ブランチは run の
branch/ 状態ファイルの記述と一致するか
knowledge/raw/に未整理のファイルがあるか確認- 差異があれば人間に報告する(例: 「DB ではOAuth run が in_use ですが、ディレクトリが存在しません」)
Phase 3: 再開計画の提案
状態に応じて提案を分ける:
- COMPLETED: 結果を報告するのみ
- IN_PROGRESS(中断済み): 「未コミットの変更があります。ワーカーを派遣して続行しますか?」
- PENDING: ブロッカーの状態を確認し、実行可能か判断
- BLOCKED: ブロッカーの解消状況を確認
重要: 人間の確認を待ってから行動すること。勝手にワーカーを派遣しない。
Phase 4: 組織の再構築
人間が承認した作業について:
-
/org-delegateスキルでワーカーを派遣 -
新ワーカーには前回のワーカー状態ファイル(
.state/workers/worker-{id}.md)の内容をコンテキストとして渡す -
DB に Status / Resumed を書く(
StateWriter.transaction()経由。post-commit hook が.state/org-state.mdの Status 行をACTIVEに更新する。regen 失敗時も DB は確定済みで stderr 警告のみ):python -c " from datetime import datetime, timezone from pathlib import Path from tools.state_db import connect from tools.state_db.writer import StateWriter ts = datetime.now(timezone.utc).strftime('%Y-%m-%dT%H:%M:%fZ') conn = connect('.state/state.db') with StateWriter(conn, claude_org_root=Path('.')).transaction() as w: w.update_session(status='ACTIVE', resumed_at=ts, updated_at=ts) " -
JSON スナップショットを再生成する(dashboard 用。state-db cutover とは別経路):
py -3 dashboard/org_state_converter.py # Windows python3 dashboard/org_state_converter.py # Mac/Linux -
ディスパッチャー・キュレーターペインの起動は /org-start が担当するため、ここでは行わない
-
resume イベントを DB に追記 (
tools/journal_append.pyは M4 で DB-only ルーティング。tsは自動付与):py -3 tools/journal_append.py resume \ --json '{"resumed_items": ["blog-redesign", "data-analysis"]}'event 名と payload key の規約は
docs/journal-events.mdを参照。
レビュー
まだレビューはありません。使ってみた感想をお寄せください。
同じリポジトリのスキル
概要と使いどころ
/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 落として」等で発動。