ディスパッチャーのコンテキストを圧迫したまま session を続けるのを避けるため、 monitoring 状態(active workers / 直近 polling cursor / pending escalations)を handover ファイルに書き出し、secretary の指示で /clear → /dispatcher-resume の 流れで新しいディスパッチャー session を開始する準備をする。 Secretary から DISPATCHER_HANDOVER peer message を受領したとき、または ディスパッチャー自身が context が長くなったと判断したときに使う。
goal-setup
プロジェクトのゴール台帳(registry/goals/<owner>/<repo>.md)を人間と対話して新規作成・改訂する。
README と open Issue からゴール候補を推定して提示し、「何を目指すか」「何が起きていたら未達か」を 短く質問して条項を固め、書式検証(tools/work_discovery_goals.py validate)を通してから保存する。
「ゴール台帳を書きたい」「ゴールを設定して」「ゴール未設定と出た」「台帳エラーを直して」 「このプロジェクトの目標を決めたい」等や、/work-discovery の「ゴール未設定」「ゴール台帳エラー」案内を 受けて窓口が起動する。候補の提示そのものは /work-discovery の役目で本スキルではない。
含まれるファイル(1)
- SKILL.md7.4 KB
SKILL.md(原文)
インストールする前に、エージェントに与えられる指示の中身を確認できます。
goal-setup: ゴール台帳を対話で書く
/work-discovery は、オペレーターが書いたゴール台帳の条項に当たる Issue だけを条項順に提案する。
台帳の無いプロジェクトからは候補が出ず、書式が崩れた台帳も候補ゼロになる。本スキルは、その台帳を人間との対話で作る・直す。
- 書式の正本:
registry/goals/README.md(例:registry/goals/example.md) - 設計:
docs/design/work-discovery-triage.md§12.3 - 書式検証:
tools/work_discovery_goals.py validate(scan と同じパーサで読む。ここを通らない台帳は保存しない)
起動主体は窓口。台帳はオペレーターのローカルファイル(git 管理外)なので、commit・PR はしない。 ゴールの中身は人間が決める。窓口は候補を推定して示すが、条項の採否・文言・順番はすべて人間の答えで確定させる。
Step 1 — 対象リポジトリを決める
引数($ARGUMENTS)の通称を GitHub の owner/repo に解決する。owner/repo 形式ならそのまま使う。
python3 tools/work_discovery_repos.py --format json
included[] の nickname と引数を照らして repo を取る(Windows は py -3)。
- 引数が無い、または一致が無い・複数あるときは、
included[]の通称一覧を示して聞き返す。 opted_out[](triage 列で除外)にある通称なら、台帳を書いても候補は出ないことを伝え、先にregistry/projects.mdの triage 列を戻すかを聞く。skipped[](パスが GitHub URL でない等。reason付き)にある通称なら理由を伝え、owner/repoを直接教えてもらう。- 台帳のパスは
registry/goals/<owner>/<repo>.md(小文字)。
Step 2 — 既存台帳を確認する
python3 tools/work_discovery_goals.py validate --repo <owner>/<repo>
出力は 1 行の JSON(status が ok なら exit 0、それ以外は exit 1)。
unset→ 新規作成モード。ok→ 改訂モード。台帳ファイルを Read し、今の条項(G1 から順に見出しと unmet if)を人間に見せて、何を変えたいか(追加・削除・順番・文言)を聞く。error→ 修復モード。errorの内容(例:G2: no 'unmet if:' line)をそのまま伝え、台帳を Read して直し方を提案する。case mismatchはファイル名を小文字に直す話なので、その旨を伝える。
Step 3 — ゴール候補を推定して提示する
新規作成モードと、改訂で条項を足すときに行う。材料は 2 つだけ(読み取りのみ):
gh repo view <owner>/<repo>
gh issue list --repo <owner>/<repo> --state open --limit 100 --json number,title,labels
README の目的と、open Issue のまとまり(同じ困りごとを指す Issue 群)から、ゴール候補を 3〜5 個に絞って示す。 各候補は「目指す状態 1 行 + 根拠になった Issue 番号 2〜3 個」。 Issue をそのまま条項にしない。条項は「状態」であり、Issue はその未達を解消する仕事である。
Step 4 — 質問して条項を固める
候補を叩き台に、1 条項ずつ短く聞く(まとめて 5 問を並べない):
- 何を目指すか: 見出しになる 1 行(例「利用者がセットアップで詰まらない」)。
- 何が起きていたら未達か:
unmet ifを 1 行以上。Issue が 1 件出れば当たるくらい具体的に(例「README の手順どおりに進めて失敗する報告が open のまま残っている」)。「品質が低い」のような判定できない文は、どんな報告・状態を指すかを聞き返して具体化する。 - 順番: 全条項が出そろったら並びを見せ、「上にある条項ほど優先して提案されます。この順で合っていますか」と確認する。
条項の本文(見出しと unmet if の間の説明)は任意。人間が話した補足があれば 1〜2 行で残す。
Step 5 — 下書き → 書式検証 → 人間の確認 → 保存
- README の書式どおりに下書きを作る:
## G<番号> <見出し>を 1 から欠番なしの連番で並べ、各条項に- unmet if: …を 1 行以上。下書きは$TMPDIR/goal-setup-<owner>-<repo>.mdに書く。 - 書式検証を必ず通す:
exit 1 ならpython3 tools/work_discovery_goals.py validate --file "$TMPDIR/goal-setup-<owner>-<repo>.md"errorを読んで下書きを直し、通るまで繰り返す。通らない台帳は保存しない。 - 下書き全文(改訂モードなら変更前との差分も)を人間に見せ、次の点を明示して保存してよいか聞く:
- この台帳を置くと、その repo の候補 Issue のタイトル・要約・本文冒頭・ラベルとゴール条項が、提案の判定のため
claude -p経由でapi.anthropic.comに送られる。台帳を置くことがその送信への同意になる(registry/goals/README.md「運用前提と送られるデータ」)。
- この台帳を置くと、その repo の候補 Issue のタイトル・要約・本文冒頭・ラベルとゴール条項が、提案の判定のため
- 明示の OK が出たら
registry/goals/<owner>/<repo>.mdに保存し(ディレクトリが無ければ作る)、保存先で再検証する:python3 tools/work_discovery_goals.py validate --repo <owner>/<repo>statusがokであることを確認して終える。「次の仕事候補を出すなら/work-discovery」と 1 行添える(自分では起動しない)。
やらないこと
- 人間の答えを待たずに条項を確定・保存しない。推定した候補はあくまで叩き台。
- 台帳を commit しない・公開リポジトリに入れない(
registry/goals/の台帳は.gitignore済み)。 - Issue や repo に書き込まない(
ghはrepo view/issue listの読み取りだけ)。 - 候補の提案(triage)や委譲を始めない。それは
/work-discovery→/org-delegateの役目。
レビュー
まだレビューはありません。使ってみた感想をお寄せください。
同じリポジトリのスキル
概要と使いどころ
/dispatcher-handover で書き出した handover ファイルを読み込み、 ディスパッチャーを新しい session で復帰させる。/clear 直後の最初のターンで使う。 state.db の dispatcher_pane_id / dispatcher_peer_id を atomic に更新し、 worker monitoring の /loop 3m を再開する。 「ディスパッチャー復帰」「resume」「引き継ぎから再開」と secretary から指示された ときに使う。/org-start ではない(ワーカー・窓口・キュレーターは生きている前提)。
組織の生きているペイン(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 落として」等で発動。
窓口が人間から「承認スコープの輪郭」を受けて、その内側で triage → worker 派遣 → iteration → verify → push → PR 作成 → CI 監視 を完了駆動で自走し、PR ごとに merge gate で必ず停止するベルトコンベア。/work-discovery + /org-delegate + verify + /org-pull-request + /org-escalation を呼ぶ薄い orchestrator。 発動条件: 人間が「この範囲は自走してよい」というスコープ承認を明示し、複数候補を 完了駆動で順次流したいとき(例「triage 上位の S 級バグ修正を空き pane 分まで自走、 merge は都度わたしが判断」)。起動主体は窓口に限定。スコープ外候補・判断境界・退出条件に 触れたら必ず halt する。merge 自動化はしない。