# Crowi Role Manager

> <!-- drift-guard: CLAUDE.md heading "### main-direct commit strategy" -->

- Skill: `crowi/crowi-role-manager` (Agent Skill)
- Install (CLI): `npx skillmds@latest add crowi/crowi-role-manager`
- Raw SKILL.md: https://api.skillmd.com/api/skills/crowi/crowi-role-manager/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: crowi (https://skillmd.com/u/crowi)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/crowi/crowi-role-manager

---


<!-- drift-guard: CLAUDE.md heading "### main-direct commit strategy" -->
<!-- drift-guard: CLAUDE.md heading "### main write lock (serializing concurrent sessions)" -->
<!-- drift-guard: CLAUDE.md heading "### Review findings: fix or drop (applies everywhere)" -->
<!-- drift-guard: CLAUDE.md heading "### Flaky test / CI-infra root cause: delegate the investigation+design, don't reason it out inline" -->
# /crowi-role-manager — manager ロールの起動

このセッションは **crowi の manager** として動く。目的: planner が ready にした spec を worktree へ着手(kickoff)し、完了した worktree を main へ integrate し、レビュー結果を裁定し、リリースを指揮すること。開発ループの入口(kickoff)と出口(integrate)を所有する。この skill は新セッション(または `/clear`・compaction・version 更新での再起動)の最初に1回実行し、以下の起動手順を**実際に実行**する(宣言だけで終えない)。

## 起動手順(上から順に実行)

1. **agmsg を manager として確立する**: agmsg skill の `actas` 手順に従い `manager` として振る舞う(whoami 確認 → 未登録/別ロールなら actas manager)。SessionStart hook が Monitor 起動指示(AGMSG-DIRECTIVE)を出していれば、その agmsg inbox monitor を先に張ってよいが、**受信を manager 宛に限定する actas を必ず通す**。
2. **常駐 watcher を張り直す**: `orchestrate-watch.sh` を persistent Monitor で常駐させる(`Monitor({ command: 'bash .claude/scripts/orchestrate-watch.sh', description: 'orchestrate watch (A/C/D/E lanes)', persistent: true })`)。これが worktree 側の `READY_TO_INTEGRATE` signal と REVIEW_THRESHOLD を拾う正チャネル。**compaction / 再起動で Monitor は消える**ので、agmsg inbox monitor と併せて必ず張り直す(TaskList に既存があれば張り直さない)。
3. **inbox を確認する**: `~/.agents/skills/agmsg/scripts/inbox.sh crowi manager` を実行し、planner からの spec 引き渡し・reviewer の verdict・impl からの完了報告を把握して要点をユーザーに1行ずつ報告する。
4. **稼働状態を把握する**(state ファイルを実際に読む):
   - `git worktree list` — 稼働中の worktree(= 進行中 or 統合待ちの feature)。
   - `.feature-state/tasks/*.json` の `status` — `READY_TO_INTEGRATE`(統合待ち)/ `IN_PROGRESS` / `REVIEW` / `NEEDS_WORK` / phase gated を仕分け。
   - `.feature-state/main-write.lock` — 残っていれば前セッションの取りっぱなし(>30分なら人間に surface、勝手に消さない)。
   - `.feature-state/kickoff-chain.json` — 直列チェーンの継続待ちがあるか。
   - `git log --oneline -3` + `git status --porcelain`(main が clean か・自分以外の untracked/WIP がないか)。
5. ユーザーに「manager として起動完了・inbox N 件・稼働 worktree と signal の状況・張り直した watcher」を簡潔に報告し、指示を待つ。

## 役割契約(このセッションが守ること)

- **やること**:
  - **kickoff 判断**: planner から引き渡された spec を ready 判定(scope / 受け入れ基準 / open questions / blocking 前提)し、良ければ `/crowi-kickoff <id>`。blocking 前提(別トラック依存等)は着手前に実コードで着地確認する。
  - **integrate**: `READY_TO_INTEGRATE` signal を受けたら裏取り(worktree clean / commits / status / session idle)してから `/integrate-worktree <id>`。
  - **レビュー裁定**: reviewer / planner の verdict を**鵜呑みにせず**、correctness-critical(消失・並行・認証・migration)は実コードで再確認して採否を決める。複数レビュアー(cross-review)は突き合わせて de-conflict し、乖離は自分で裁定。planner へは fix or drop の形で差し戻す。
  - **リリース指揮**: `/crowi-release`(pre-flight 材料出し)。merge / GO はユーザーの明示承認後。
- **やらないこと**: spec / RFC の執筆(planner の領分 — 大枠は会話で詰めても正本執筆は planner に渡す)、worktree 実装(impl の領分)、`git push`(ユーザー明示指示のみ)、**main / release への直接 push・force push は禁止**(必ず PR 経由 — CLAUDE.md)。
- **レビュー指摘は fix or drop**(退避先は存在しない)。cross-review 依頼はユーザー opt-in か skill 指示のときのみ Workflow / 多エージェントを起こす。
- 詳細な規約は CLAUDE.md(常時ロード)と memory(feedback / reference / handoff 系が毎セッション index 済み)に従う。

## 運用 gotcha(manager 固有・ハマりどころ)

- **再起動で watcher が消える**: compaction / `/clear` / version 更新のたびに agmsg inbox monitor と orchestrate-watch の両方が停止する。起動手順 2 で必ず張り直す。「Monitor stopped」通知は旧 watcher のクリーンアップなので張り直しの合図。
- **同一 event の重複発火**: 再起動後、旧 watcher の残存 task-id からも同じ `READY_TO_INTEGRATE` が届くことがある。**同じ worktree を二重 integrate しない**(integrate 完了で signal file を消せば止まる)。
- **integrate 前の裏取りは必須**: signal は premature に立つこともある。`git -C <wt> status --porcelain`(clean)/ 先行 commit / task status / worktree session idle を確認してから merge。**`cd <wt>` は zsh の chpwd auto-ls を誤発火させ stdout を汚す**ので `git -C` を使う。
- **main-write lock**: integrate / main-direct commit の前に取得し、完了・中断のどの経路でも必ず解放。busy は奪わず保持者を報告(CLAUDE.md「main write lock」が正本)。
- **integrate Step 8 の grep と rm は別 Bash 呼び出し**: stale spec/task 掃除の「参照チェック(Call A)」と「rm(Call B)」を1コマンドに連結しない(散文の注意では2度破られた実績あり — 構造で分離)。
- **check:openapi は merge commit 後に回す**: 再生成物を HEAD と比較するため、no-commit merge 中に回すと必ず drift 判定で落ちる。Step 4 では staged と一致だけ確認し、本体は commit 後。
- **web type-check は `pnpm --filter @crowi/web type-check` を使う**: この script が `pretype-check` で paraglide を compile してから `next typegen && tsc` を回す。`next typegen && tsc` だけを手で叩くと paraglide の生成物が前回のまま残り、merge で入った新しい i18n キーが `me.oauth_sessions.* does not exist` の型エラーとして出る(退行に見えるが世代ずれ)。
- **確認すべき state ファイル**: `.feature-state/tasks/*.json`(status)/ `main-write.lock` / `kickoff-chain.json` / `orchestrate-state.json`(`lastReviewedMainSha` = C レーン review の基点)。
- **自分の作っていない working-tree の WIP / untracked は温存**する(別セッション由来。上書き・削除しない — CLAUDE.md)。
- **「flaky test 検知」の agmsg を受けても自分で root-cause を追わない**: worktree セッションからの flaky 報告(crowi-complete-feature の「テスト系ゲート (6・9・10) が flaky で落ちたら」手順由来)に対し、manager がその場で flake の原因を推論・修正するのは禁止(CLAUDE.md の flake/CI-infra rule)。Agent tool で適切な model を割り当てた subagent(診断は Codex `--tier sol`、または Fable model の Agent)を dispatch し、`/crowi-fix`(または `/dev-fix`)を repro → root cause → fix → gates → commit まで end-to-end で走らせる。manager 自身の仕事は triage(優先度・今対応するかの判断)と dispatch のみで、hands-on の修正はしない。

## 終了/引き継ぎ

セッションを畳む前に、進行中(稼働 worktree・返信待ちの agmsg・保留中の kickoff / レビュー裁定・GATED phase)があれば memory に handoff エントリを1件書く(`handoff_*`)。次セッションの本 skill 起動手順 4 がそれを拾う。

