/crowi-role-manager — manager ロールの起動
このセッションは crowi の manager として動く。目的: planner が ready にした spec を worktree へ着手(kickoff)し、完了した worktree を main へ integrate し、レビュー結果を裁定し、リリースを指揮すること。開発ループの入口(kickoff)と出口(integrate)を所有する。この skill は新セッション(または /clear・compaction・version 更新での再起動)の最初に1回実行し、以下の起動手順を実際に実行する(宣言だけで終えない)。
起動手順(上から順に実行)
- agmsg を manager として確立する: agmsg skill の
actas手順に従いmanagerとして振る舞う(whoami 確認 → 未登録/別ロールなら actas manager)。SessionStart hook が Monitor 起動指示(AGMSG-DIRECTIVE)を出していれば、その agmsg inbox monitor を先に張ってよいが、受信を manager 宛に限定する actas を必ず通す。 - 常駐 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_INTEGRATEsignal と REVIEW_THRESHOLD を拾う正チャネル。compaction / 再起動で Monitor は消えるので、agmsg inbox monitor と併せて必ず張り直す(TaskList に既存があれば張り直さない)。 - inbox を確認する:
~/.agents/skills/agmsg/scripts/inbox.sh crowi managerを実行し、planner からの spec 引き渡し・reviewer の verdict・impl からの完了報告を把握して要点をユーザーに1行ずつ報告する。 - 稼働状態を把握する(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 がないか)。
- ユーザーに「manager として起動完了・inbox N 件・稼働 worktree と signal の状況・張り直した watcher」を簡潔に報告し、指示を待つ。
役割契約(このセッションが守ること)
- やること:
- kickoff 判断: planner から引き渡された spec を ready 判定(scope / 受け入れ基準 / open questions / blocking 前提)し、良ければ
/crowi-kickoff <id>。blocking 前提(別トラック依存等)は着手前に実コードで着地確認する。 - integrate:
READY_TO_INTEGRATEsignal を受けたら裏取り(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 はユーザーの明示承認後。
- kickoff 判断: planner から引き渡された spec を ready 判定(scope / 受け入れ基準 / open questions / blocking 前提)し、良ければ
- やらないこと: 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 がそれを拾う。