Skip to content
Back to skills

Secretary Resume

ASecurity

/secretary-handover で書き出した handover ファイルを読み込み、 窓口を新しいセッションで復帰させる。/clear 直後の最初のターンで使う。 「窓口を復帰」「resume」「引き継ぎから再開」と言われたときに使う。 /org-start ではない(ディスパッチャー・キュレーターは既に生きている前提)。

  • 5 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added October 5, 2026
ai-agentspythonrustbashbackend

Works with

  • claude code
  • mcp

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned October 5, 2026

npx -y skills add suisya-systems/claude-org-ja --skill secretary-resume --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Secretary Resume?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Secretary Resume
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/suisya-systems-secretary-resume/badge)](https://www.skillsdirectory.com/skills/suisya-systems-secretary-resume)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: secretary-resume
owner: secretary
description: >
  /secretary-handover で書き出した handover ファイルを読み込み、
  窓口を新しいセッションで復帰させる。/clear 直後の最初のターンで使う。
  「窓口を復帰」「resume」「引き継ぎから再開」と言われたときに使う。
  /org-start ではない(ディスパッチャー・キュレーターは既に生きている前提)。
effort: low
allowed-tools:
  - Read
  - Bash(echo:*)
  - Bash(py -3 tools/journal_append.py:*)
  - Bash(bash tools/journal_append.sh:*)
  - Bash(py -3 tools/capability_gate.py:*)
  - Bash(python3 tools/capability_gate.py:*)
  - mcp__org-broker__set_summary
  - mcp__org-broker__list_panes
  - mcp__org-broker__set_pane_identity
  - mcp__org-broker__list_peers
  - mcp__org-broker__check_messages
---

# secretary-resume: 窓口の復帰

`/secretary-handover` で書き出した `.state/secretary-handover.md` を読み込み、
窓口として最低限の自覚(組織員としての立ち位置・直近の人間とのやり取り・進行中ワーク)
を復元する。

> **前提**:
> - ディスパッチャー / ワーカーのペインは前セッションから生きたまま
>   残っている。新たに spawn しない(/org-start ではない)。
> - キュレーターは常駐しない(オンデマンド化)。`curator_pane_id` / `curator_peer_id` が
>   null であること・ペインリストに curator が見えないことは**正常系**。
> - state DB (`.state/state.db`) はそのまま使う。ペイン identity の再記録も不要。
> - handover ファイルが存在しないか古すぎる場合は、/org-start もしくは
>   /org-resume の使用を案内する。

> **輸送層(transport)両系 — 既定 `broker` / opt-in `renga`**: 本ファイル(および各スキル)の `mcp__org-broker__*` 呼び出しは **既定 `broker`**(`ORG_TRANSPORT` 無設定)で書いてあり、そのまま従えばよい(既定挙動)。`ORG_TRANSPORT=renga`(opt-in・切戻し可)では MCP サーバー名が `renga-peers` になり、ツールの **完全修飾名が `mcp__org-broker__*` → `mcp__renga-peers__*`** に機械置換される(引数形・セマンティクスは同一なので手順の論理は変わらない)。輸送依存で手順が変わる点だけ renga 併記する:
>
> - **受信モデル**: 既定 broker は **push 一次**(各ペイン同居の channel sidecar `server:org-broker-channel` が broker キューを ~1 秒間隔で claim→`notifications/claude/channel` で idle セッションへ本文注入。pull = ナッジ + `check_messages` は sidecar 不在 / unhealthy / channel 非対応ペイン(codex pull-peer)/ claude.ai login 不在時のフォールバック層)。`ORG_TRANSPORT=renga` 時は dispatcher / worker メッセージが `<channel source="renga-peers" …>` として in-band で push される。
> - **spawn 儀式**: 既定 broker は `--mcp-config <broker>` 注入による Claude Code **folder-trust プロンプト**の画面判定による機械承認に加え、push 一次のため channel sidecar を `--dangerously-load-development-channels server:org-broker-channel` で load し dev-channel 承認プロンプトを画面判定で機械承認する(2 段承認)。`ORG_TRANSPORT=renga` 時は `--dangerously-load-development-channels server:renga-peers` の「Load development channel?」を画面判定で承認する 1 段。 **画面判定** = `inspect_pane` → `claude-org-runtime dispatcher spawn-prompt-step` が返した 1 手だけを `send_keys` する反復(runtime 0.1.43+)。盲目 Enter は禁止(folder-trust の初期カーソルは「No, exit」で、Enter 一発はワーカーを終了させる)。手順は spawn-flow 3-3b。
> - **エラー分岐**: 既定 broker は shared codes(`pane_not_found` / `last_pane` / `invalid-params`)に加え broker 固有 `[token_invalid]` / `[session_invalid]` / `[tool_not_authorized]` / `[no_backend]`(= adapter_unavailable)/ `[nudge_failed]` / `[peer_not_found]` / `[name_taken]` を返しうる(未知コードは default-branch で escalate)。`ORG_TRANSPORT=renga` 時は broker 固有コードは発生しない。
>
> `new_tab` / `focus_pane` は broker surface に**無い**(意図的除外)。契約面の正本は [`docs/contracts/backend-interface-contract.md`](../../../docs/contracts/backend-interface-contract.md) Surface 8 + push-primary amendment(broker push 一次が **既定の契約**、pull は fallback として retain)。**opt-in `renga` は削除せず常時有効な切戻しの安全装置**として維持する。broker 実走(dogfood)は Epic #6 Issue G スコープで本ファイルの既定運用経路ではない(**二フレーム注記(Refs #604)**: ここの「既定 `broker`」は**コード既定**(`tools/transport.py: DEFAULT_TRANSPORT`、生成面はこれで render)。**運用既定**は broker dogfood が Epic #6 Issue G まで未活性のため `renga` で、両者は指す対象が異なり矛盾しない。総説は root [`CLAUDE.md`](../../../CLAUDE.md)。)

## Step 0: 自分の identity を確認する

1. `mcp__org-broker__set_summary` で「Secretary: 窓口(resumed)」をセット
2. **caller pane id を確定する**(`focused: true` は「そのタブで今フォーカスされているペイン」で
   あって caller 自身ではない): 環境変数 `RENGA_PANE_ID`(`echo "${RENGA_PANE_ID:-unset}"`)を
   起点に、`mcp__org-broker__list_panes` へ**同一 id のレコードが在ることを照合**する。規則の正本は
   [`docs/contracts/backend-interface-contract.md`](../../../docs/contracts/backend-interface-contract.md)
   T-§4.2 の caller pane id 取得規則
   - **broker(`ORG_TRANSPORT=broker`)では `RENGA_PANE_ID` を読まず、最初から `caller-id 未確定` に
     倒す**: broker には `RENGA_PANE_ID` に相当する caller pane id を out of band で供給する surface が
     無いので、この取得規則は broker では常に未確定に落ちる。`list_panes` に数値 id のエントリが在って
     手元で掴めていても例外にならない(数値 id は MUST の**片方**=相対セレクタでないことしか満たさず、
     **もう片方**=自タブと確立済みの列挙から採った id でありその対象が caller であること、を満たさない)
   - 照合できたレコードの期待値: `name == "secretary"` かつ `role == "secretary"`。不一致なら
     `mcp__org-broker__set_pane_identity(target="<RENGA_PANE_ID の値>", name="secretary", role="secretary")` で修復
   - **`caller-id 未確定`**(`RENGA_PANE_ID` 未設定 / `list_panes` に同一 id 無し / broker 等で同等の
     caller-id を入手できない): 自己修復を実行せず、identity 未確認のまま**人間に報告して続行判断を
     仰ぐ**(勝手に fatal にしない。`target="focused"` や裸 `name` へフォールバックしない)

## Step 1: handover ファイルを読み込む

1. `.state/secretary-handover.md` が存在するか確認:
   ```bash
   ls -la .state/secretary-handover.md 2>&1
   ```
   - 存在しない → ユーザーに案内して停止:
     「handover ファイルがありません。/org-start で組織を起動するか、
     /org-resume で suspend 状態から再開してください。」
2. フロントマター `created_at` を見て鮮度を判定:
   - 24 時間以内 → そのまま採用
   - 24 時間超〜7 日以内 → ユーザーに警告(「handover が古いです、続行しますか?」)
   - 7 日超 → 採用せず、`/org-start` への切り替えを推奨する
3. ファイル本文を Read で取り込む。**書かれている内容は次セッションの自分にとっての
   「事実」として扱う**(後の Step 3 で state.db と照合する)。

## Step 2: state.db で現状を再取得する

```bash
python -c "
from tools.state_db import connect
from tools.state_db.queries import get_org_state_summary
import json
conn = connect('.state/state.db')
print(json.dumps(get_org_state_summary(conn), ensure_ascii=False, indent=2, default=str))
"
```

確認項目:
- `session.status` が handover フロントマターと一致するか
- `dispatcher_pane_id` が handover に書いた値と一致するか
- `curator_pane_id` / `curator_peer_id` が null であるか(**null が正常**。値が残っている
  場合は旧仕様からの stale 値の可能性があるので人間に報告する)
- `active_runs[]` が handover の「進行中のワーク」セクションと整合するか

## Step 3: ペイン生存確認

**`list_peers` の直前に
[`.claude/skills/org-delegate/references/capability-first-drive-operational-gate.md`](../org-delegate/references/capability-first-drive-operational-gate.md)
を Read し、`monitoring-read-only` の分岐を適用する**(同 reference §6 の表 #3)。capability 形かつ
未承認なら列挙を生存判定に使わず破棄し、`mcp__org-broker__list_panes` と state DB の `active_runs[]` の突き合わせで
代替して、差分は人間に報告する(停止しない・待ち時間 0 分。勝手に再 spawn しないのは従来どおり)。

**capability 形かつ承認済み(同 reference §2 の `first_drive` が `recorded`)のとき**は、§1-2 の
三値判定を dispatcher / handover 記載の各ワーカー名に適用し、**「在」(同タブ・一意)だけを現存として
数える**。他タブに同名のディスパッチャー / ワーカーが見えていても自組織の生存根拠にしない。
**「不在」は差分として、「unknown」は判定不能として区別して人間に報告する**(unknown を不在に数えない。
§1-2-b)。差分があっても勝手に再 spawn しないのは従来どおり。

```
mcp__org-broker__list_peers
```

- ディスパッチャーの name が見えること
- curator は**通常見えないのが正常**(オンデマンド化)。見えている場合は
  オンデマンド curate 実行中なので、そのまま放置してよい(dispatcher が閉じる)
- handover に記載のワーカーが現存するか(消えていれば後述)

**差分があれば人間に報告する**(例:「handover ではワーカー X が進行中とありますが、
現在のペインリストには見当たりません」)。勝手に再 spawn しない。

## Step 4: ブリーフィングを人間に返す

handover の情報と state.db の現状を統合した上で、以下の構造で簡潔に報告:

```
窓口を復帰しました。

【セッション】
- 目的: <session.objective>
- 状態: <session.status>

【ペイン構成】
- dispatcher (pane=N, peer=M)
- curator: 常駐なし(オンデマンド起動)
- workers: <task_id list>

【直近の合意・判断】
- ...

【Pending Decisions】
- ...(無ければ「なし」)

【次のアクション】
- ...

ご指示をお願いします。
```

## Step 5: handover ファイルを保持する

- 削除しない(次回トラブル時の参照用に残す)
- `.state/secretary-handover.prev.md` は前回のもの。読み込み済みであっても消さない

## イベント記録

```bash
py -3 tools/journal_append.py secretary_resumed \
    --json '{"handover_age_hours": <数値>}' 2>/dev/null \
    || echo "(journal_append unavailable; skipping)"
```

## やってはいけないこと

- 新規にディスパッチャー / キュレーターを spawn する(既に生きている)
- ワーカーに勝手に SUSPEND / SHUTDOWN を送る
- handover の内容と state.db の現状が食い違うときに、勝手にどちらかへ寄せる
  (必ず人間に報告して判断を仰ぐ)

Files in this skill

  • SKILL.md11.7 KB
  • SKILL.md.in8.3 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.