本文へ移動
cccskills
無料GitHub で公開

org-attach

組織の生きているペイン(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) には発動しない。

インストール方法を見る

含まれるファイル(1)

  • SKILL.md19.4 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

org-attach: 組織ペインへの tmux attach コマンドを生成(read-only)

組織の生きているペイン(secretary / dispatcher / worker)へ人間が自分のターミナルから tmux で直接 attach するための attach コマンド文字列を生成して表示する スキル。 このスキルは 何も attach しない・どのペインも変更しない。論理ペイン一覧(broker)と tmux 側の pane_id↔session マッピングを pane_id(%N)で join し、各ペインへの attach コマンドを role + name(task_id) ラベル付きで印字するだけ。コピーした人間がコマンドを自分の端末に貼って入る。

輸送層 両系(frame C / 二フレーム) — このスキルは broker(tmux) フレーム専用: このスキルは tmux backend(socket claude-org-broker)上の detached tmux session への attach を 前提とする。broker フレーム: 各 broker ペインは claude-org-broker-{pid}-{seq} という独立した detached tmux session(1 ペイン = 1 session)として存在し、tmux attach -t <session> で入れる ― 本スキルの attach モデルが意味を持つ主フレームはこちら。renga フレーム(opt-in, ORG_TRANSPORT=renga)は概念が異なる: renga のペインは所属タブ内のタイルであって、独立した detached session ではない。「detached session へ attach し直す」概念がそのまま写像せず、ペイン単位の tmux attach -t <session> は存在しない。よって ORG_TRANSPORT=renga では本スキルの broker/tmux attach 形は適用外で、org のペインが並ぶタブを表示して直接見る。org が全ペインを同一タブへ置くのは org 側の配置規則であり、規範の正本は契約 docs/contracts/backend-interface-contract.md §4.2 の SINGLE-TAB MUST(本スキルはこれを再掲せず参照する)。したがってその org のタブを表示している 間は 1 画面で全ペインが見えるが、別のタブを表示している間は org のペインは視界に入らない。そのときは org のタブへ切り替えるか、renga の org サイドバー(全タブ横断でタブとペインを一覧する cross-tab パネル。 renga src/app/org_sidebar.rs:1-3)から該当ペインを選ぶ。 この適用外は transport が renga の場合に限る: 外側フレームが renga でも ORG_TRANSPORT が broker の 構成では detached tmux session が実在するので本スキルは適用される(その場合に必要なのは attach 打鍵の Ctrl+B 衝突回避で、手順は docs/operations/dispatcher-view.md「外側フレームが renga の 場合」)。本スキルは ORG_TRANSPORT=renga のときだけ「broker(tmux) 専用ツールです」と明示して停止する (下記 Step 0)。

(既定の二フレーム注記(Refs #604): org-attach は本質的に broker/tmux ツールなので header を broker 主軸で書く。輸送層全体の既定は二つのフレームで指す対象が異なる ― 運用既定は renga (broker 実走 dogfood が Epic #6 Issue G まで未活性)だが、コード既定は tools/transport.py: DEFAULT_TRANSPORT が runtime 0.1.28 (Epic #586) で renga→broker にフリップ済み。broker tool を 使う手保守スキルのうち .claude/skills/org-attention-stop/SKILL.md は header を 「既定 broker / opt-in renga」のコード既定フレームで書く ― 本スキルはこの broker 主軸の先例に倣う。 (.claude/skills/org-attention-start/SKILL.md は逆に「既定 renga」 の運用既定フレームで書かれており、両者は指す対象が異なるだけで矛盾しない。)総説は root CLAUDE.md「輸送層(transport)両系」節、契約面は docs/contracts/backend-interface-contract.md Surface 8。)

権限フレーム: list_panes は broker の ops-tier ツール(secretary / dispatcher のみ付与、 worker には付与されない)。したがって org-attach は 窓口(Secretary)/ ディスパッチャー面のスキルで、 人間は窓口セッションから実行する。

なぜ /usr/bin/tmux 絶対パス必須か(最重要)

zsh では tmux は oh-my-zsh の tmux プラグインで alias 化けする(tmux is an alias for _zsh_tmux_plugin_run)。素の tmux ... を出力すると、人間の zsh に貼った瞬間に alias 経由で 別物(プラグインのラッパ)が走り、-L claude-org-broker の socket 指定や attach -r -t <session> が 意図通り効かない。生成する全コマンドで実体パス /usr/bin/tmux を使い、出力にもその理由を 1 行添える。

Step 0: 輸送フレームを確認する(renga なら停止)

まず ORG_TRANSPORT を read-only で読む(この 1 コマンドだけが Step 0 の許可対象):

printenv ORG_TRANSPORT

renga transport(ORG_TRANSPORT=renga)ならこのスキルは適用外なので attach コマンドを生成せず停止する。

  • ORG_TRANSPORT=renga(明示)の場合 → 次の旨を伝えて停止する(attach コマンドは生成しない): 「現在は renga transport(ORG_TRANSPORT=renga)で稼働しています。renga のペインは所属タブ内のタイルで、 detached tmux session への attach という概念がそのまま適用されません。組織のペインはすべて同じタブに 置かれるので、その組織のタブを表示している間はそのまま画面で見られます。別のタブを表示中なら、組織の タブへ切り替えるか、renga の org サイドバー(全タブ横断でタブとペインを一覧するパネル)から該当ペインを 選んでください。ペイン状況の一覧は /org-dashboard を使ってください。」
  • それ以外(無設定 / broker) → broker(tmux) フレームとして Step 1 へ進む。

Step 1: 論理ペイン一覧を取得(broker)

mcp__org-broker__list_panes

戻り値は 1 論理ペイン = 1 レコードで、主に次のフィールドを持つ:

  • id: tmux backend では これが tmux の pane_id(%N 文字列)そのもの。 (runtime broker_queue_event.schema.json: "Backend-native pane id: int on WezTerm, string (e.g. "%3") on tmux" / dispatcher/runner.py: "broker/tmux backend emits tmux pane_id strings of the form %N"。WezTerm backend では int になるが、本スキルが対象とする tmux socket claude-org-broker では %N 文字列で来る。)
  • name: ペイン名(worker-{task_id} / dispatcher / secretary 等)
  • role: secretary / dispatcher / curator / worker
  • focused, geometry(x / y / width / height), cwd

重要 — attach 可能なのは broker が spawn した子ペイン(dispatcher / worker)だけ: 窓口(root secretary)は broker 起動時に logical pane(bookkeeping entry、register_logical_pane) として登録されるだけで、adapter 実ペインを持たず id / pane_id が null(%N 無し)。よって broker socket の detached session には出現せず attach 対象外である(窓口は org を起動した人間の 手元 terminal でそのまま動くので、そもそも attach 不要)。id が %N のレコードだけが attach 可能。 一次参照: docs/operations/broker-dogfood-runbook.md §8(attach 導線の正準ガイド・「対象範囲(重要)」節)。

list_panes が空 / 取得不可なら「組織ペインが見つかりません。/org-start 済みか確認してください」と 報告して停止する。list_panes が [tool_not_authorized] を返したら ops-tier 権限が無い (worker セッションから呼んでいる等)ので、窓口 / ディスパッチャー面で実行するよう案内する。

補足が要れば mcp__org-broker__list_peers(read-only)で peer 名と cwd を突き合わせてもよい (join には必須ではない)。

list_peers の直前に .claude/skills/org-delegate/references/capability-first-drive-operational-gate.md を Read し、monitoring-read-only の分岐を適用する。 全タブ列挙では予約名が別 org のペインと 衝突しうるので、素の名前突き合わせは他 org のペインに自 org のラベルを付けて人間に提示しうる。

縮退時(capability 形かつ未承認)の帰結: 列挙結果を破棄する。破棄しても Step 3 の pane-id join は継続し、表示するラベル(role / name(task_id))は list_panes 由来のままである — join key も表示元も list_panes なので、落ちるのは peer 名 / cwd の補足だけで本スキルの出力は成立する。

承認済み(first_drive が recorded)のときの帰結: 共有 reference §1-2 の三値判定を対象名に 適用し、「在」と確定したレコードの補足だけを表示に使う。「不在」「unknown」のレコードは自 org の ものとして表示しない(unknown はその旨を添えて出す)。判定手順と評価順の正本は §1-2。

どちらの帰結でも、この列挙は表示補助にしか使わないため attach 可否・join・lifecycle 判定の いずれにも波及させない(本スキルは read-only であり、縮退が破壊的な後段に繋がる経路を持たない)。 旧版 fallback(現行配備の全 backend)では従来どおりで、今日の挙動は変わらない。

Step 2: tmux 側の pane_id ↔ session マッピングを取得

/usr/bin/tmux -L claude-org-broker list-panes -a -F '#{pane_id} #{session_name}'
  • -L claude-org-broker: runtime の BROKER_SOCKET。組織の tmux はこの socket 上にある
  • -a: 全 session の全ペインを列挙
  • -F '#{pane_id} #{session_name}': 各行を %N <session> の固定 2 列に整形して頑健にパースする (tmux のデフォルト行は session:window.pane: [geometry] [history] %N (active) 形で、ここからも session 名と %N を取れるが、明示 -F の方が確実)

出力例(1 行 = 1 ペイン、各 broker ペインは独立 session claude-org-broker-{pid}-{seq}):

%0 claude-org-broker-1912-1
%5 claude-org-broker-1912-14
%6 claude-org-broker-1912-17

socket 接続自体が落ちている場合は error connecting to ... claude-org-broker が返る。その時は 「tmux socket claude-org-broker に繋がりません(組織が起動していない可能性)。/org-start 済みか 確認してください」と報告して停止する。

Step 3: pane_id(%N)で join

list_panes の id(%N)を key に、Step 2 の %N → <session> マッピングと突き合わせる:

list_panes.id (%N)  ⨝  tmux pane_id (%N)  →  各論理ペインの session 名

join 前に、まず id が null(%N 無し)の logical pane を除外する。これらは attach 対象外で、 join に回さず別枠で報告する(下記)。id が %N のレコードだけを tmux マッピングと突き合わせる。

両側でマッチしないエントリは失敗にせず一覧で報告する(実運用で起こる):

  • id が null の logical pane(通常は窓口 = secretary): これは drift ではなく正常。 adapter 実ペインを持たないので attach できない。「(logical pane / attach 対象外。窓口は人間の手元 terminal)」と注記して別枠表示する(attach コマンドは出さない)。
  • list_panes に %N があるが tmux に同 %N が無い: backend 再起動 / pane が死んだ直後の drift。 「session 解決不可」として attach コマンドは出さず、行だけ「(tmux 側に %N 無し)」と注記して出す。
  • tmux にあるが list_panes に無い: 組織外の手動 session / 孤児 session。「(broker 未登録 session)」 として、role/name は不明のまま attach コマンドだけ参考表示する(人間判断に委ねる)。

Step 4: attach コマンドを生成して出力

join できた各ペインについて、role + name(task_id) ラベル付きで次を出力する:

  • 読取専用 attach(既定・安全): /usr/bin/tmux -L claude-org-broker attach -r -t <session>
    • -r = read-only attach。覗くだけで誤入力でペインを壊さない。まずこちらを案内する
  • 読取書込 attach(自分で打ちたい時のみ): 同じコマンドから -r を外す → /usr/bin/tmux -L claude-org-broker attach -t <session>
  • デタッチ: attach 中に Ctrl-b d を押すと、ペインを動かしたまま自分だけ抜ける (ペインは生き続ける ― close ではない)
    • Ctrl-b は tmux prefix の既定値: prefix を変更している場合は設定した prefix に読み替える。 さらに、attach する端末が renga の場合はこの打鍵が届かない — renga の org サイドバーは既定で 有効なあいだ Ctrl+B(tmux prefix Ctrl-b と同じ物理入力)を消費して PTY へ渡さないため、 detach できず抜けられなくなる。attach する前に docs/operations/dispatcher-view.md の 「外側フレームが renga の場合」の回避策(renga 設定 [ui] org_sidebar = "off"、または tmux prefix の変更)を適用すること。

出力末尾に「tmux は zsh で alias 化けするため、必ず実体パス /usr/bin/tmux を使うこと」と、上記 Ctrl-b の読み替え(tmux prefix の既定値であること・renga の画面から attach する場合は先に docs/operations/dispatcher-view.md「外側フレームが renga の 場合」の回避策が要ること)を添える。

出力フォーマット(worked example)

Step 1 / Step 2 が次を返したとする:

list_panes(論理ペイン。窓口 = secretary は id が null の logical pane):

idrolename
nullsecretarysecretary
%5dispatcherdispatcher
%6workerworker-feat-org-attach-skill

/usr/bin/tmux -L claude-org-broker list-panes -a -F '#{pane_id} #{session_name}' (secretary は logical pane なので broker socket に出ない点に注意):

%5 claude-org-broker-1912-14
%6 claude-org-broker-1912-17

logical pane 除外 → %N を持つ dispatcher / worker のみ join → 生成する出力:

組織ペインへの attach コマンド(broker/tmux フレーム・read-only スキル:表示のみ、自動 attach はしません)
※ これらを自分のターミナルに貼って入る

■ dispatcher (dispatcher)          session=claude-org-broker-1912-14
  読取専用 : /usr/bin/tmux -L claude-org-broker attach -r -t claude-org-broker-1912-14
  読取書込 : /usr/bin/tmux -L claude-org-broker attach    -t claude-org-broker-1912-14

■ worker (worker-feat-org-attach-skill)   session=claude-org-broker-1912-17
  読取専用 : /usr/bin/tmux -L claude-org-broker attach -r -t claude-org-broker-1912-17
  読取書込 : /usr/bin/tmux -L claude-org-broker attach    -t claude-org-broker-1912-17

(logical pane / attach 対象外)
- secretary (secretary): 窓口は logical pane(pane_id 無し・broker socket 非出現)。
  org を起動した人間の手元 terminal でそのまま見えるので attach 不要。

- まず読取専用(-r)で入るのを推奨。自分で打ちたい時だけ -r を外す。
- 抜けるとき: Ctrl-b d(デタッチ。ペインは動いたまま自分だけ抜ける)。
- 別セッションへ切替: Ctrl-b s(attach 中にセッション一覧から選ぶ。現状は per-session attach)。
- 上記 Ctrl-b は tmux prefix の既定値。変更していれば設定した prefix に読み替える。
  renga の画面から attach する場合は、org サイドバー(既定で有効)が Ctrl+B(tmux prefix Ctrl-b と
  同じ物理入力)を消費して PTY へ渡さないため上の打鍵が届かない(detach できず抜けられなくなる)。
  先に docs/operations/dispatcher-view.md「外側フレームが renga の場合」の回避策
  (renga 設定 [ui] org_sidebar = "off"、または tmux prefix の変更)を適用すること。
- tmux は zsh で alias 化けするため、必ず実体パス /usr/bin/tmux を使うこと。

unmatched があった場合の追記例:

(参考) join できなかったエントリ:
- broker %3 (worker / worker-foo) : tmux 側に %3 無し(pane drift の可能性、attach 不可)
- tmux session claude-org-broker-1912-9 (%9)  : broker 未登録 session(組織外/孤児の可能性)
    /usr/bin/tmux -L claude-org-broker attach -r -t claude-org-broker-1912-9

やらないこと(read-only 不変条件)

  • 自分で attach しない(コマンド文字列を出すだけ)
  • ペインを spawn / close / rename / send_keys / send_message しない
  • .state/ / registry / tmux のいずれも変更しない
  • 書込み・spawn・送信系の broker / tmux ツールは allowed-tools に含めない (許可は list_panes / list_peers と read-only な tmux list-panes / list-sessions のみ)
  • 状況の一覧だけが目的なら /org-dashboard、作業委譲は /org-delegate を使う(本スキルは attach 用コマンド出力専用)

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

dispatcher-handover

無料日本語概要

ディスパッチャーのコンテキストを圧迫したまま session を続けるのを避けるため、 monitoring 状態(active workers / 直近 polling cursor / pending escalations)を handover ファイルに書き出し、secretary の指示で /clear → /dispatcher-resume の 流れで新しいディスパッチャー session を開始する準備をする。 Secretary から DISPATCHER_HANDOVER peer message を受領したとき、または ディスパッチャー自身が context が長くなったと判断したときに使う。

suisya-systems/claude-org-ja52026年10月12日 更新

dispatcher-resume

無料日本語概要

/dispatcher-handover で書き出した handover ファイルを読み込み、 ディスパッチャーを新しい session で復帰させる。/clear 直後の最初のターンで使う。 state.db の dispatcher_pane_id / dispatcher_peer_id を atomic に更新し、 worker monitoring の /loop 3m を再開する。 「ディスパッチャー復帰」「resume」「引き継ぎから再開」と secretary から指示された ときに使う。/org-start ではない(ワーカー・窓口・キュレーターは生きている前提)。

suisya-systems/claude-org-ja52026年10月12日 更新

goal-setup

無料日本語概要

プロジェクトのゴール台帳(registry/goals/<owner>/<repo>.md)を人間と対話して新規作成・改訂する。 README と open Issue からゴール候補を推定して提示し、「何を目指すか」「何が起きていたら未達か」を 短く質問して条項を固め、書式検証(tools/work_discovery_goals.py validate)を通してから保存する。 「ゴール台帳を書きたい」「ゴールを設定して」「ゴール未設定と出た」「台帳エラーを直して」 「このプロジェクトの目標を決めたい」等や、/work-discovery の「ゴール未設定」「ゴール台帳エラー」案内を 受けて窓口が起動する。候補の提示そのものは /work-discovery の役目で本スキルではない。

suisya-systems/claude-org-ja52026年10月12日 更新

org-attention-start

無料日本語概要

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 はしない(明示起動推奨ポリシー)。

suisya-systems/claude-org-ja52026年10月12日 更新

org-attention-stop

無料日本語概要

`/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 落として」等で発動。

suisya-systems/claude-org-ja52026年10月12日 更新

org-conveyor

無料日本語概要

窓口が人間から「承認スコープの輪郭」を受けて、その内側で 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 自動化はしない。

suisya-systems/claude-org-ja52026年10月12日 更新

suisya-systems のスキルをすべて見る

このスキルの問題を報告する