1. Workflow とは — pm-server の「思考の段取り」を構造化する
pm-server の workflow は 「ステップ列の状態マシン」。
ある作業 (機能開発・調査・リサーチ) を「順を追って進めるべき step の列」として
YAML テンプレートで定義し、各 step では Claude に対して
「ここでは pm_add_decision を使え」「ここでは sub-agent を起動しろ」
といったヒントを構造的に提供する。
1.1 「workflow が嬉しい」3 つの理由
| 理由 | 具体的に何が起きるか |
|---|---|
| 抜け漏れ防止 | 「spec を書かず実装に入った」「cross-check を skip した」を構造的に防ぐ |
| 判断の可視化 | 各 step に gate: user_approval を置くと、user が承認した瞬間が記録に残る |
| 再現可能性 | 同じ template から起こす workflow は同じ手順を踏む。「先週やった調査」を別 topic で再演できる |
1.2 アーキテクチャ上の役割分担
| レイヤ | 責務 |
|---|---|
| pm-server (workflow engine) | 状態マシン — どの step が active か追跡 |
| Skills / Sub-agents | 実行 — Claude が step の hint を読んで起動 |
| CLAUDE.md auto-rules | orchestration — 上記 2 つを繋ぐ behavior |
pm-server 自身は 何もしない。step の hint と progress を返すだけ。 実際の作業 (sub-agent 起動・ADR 作成等) は全部 Claude が行う。 この「engine と executor の分離」が workflow を 柔軟かつ強力にする鍵。
2. メンタルモデル — workflow は「現在地」を返す map
Claude にとって workflow は GPS のような存在。pm_workflow_status を呼ぶと、現在の step が何か、
次にすべきことが何か、artifact (ADR/task/KR) として何を残すべきかが返ってくる。
このループが完了するまで回る。各 advance で artifacts (ADR/task/KR の ID) を渡せば、
後で pm_workflow_status から「この workflow が生んだ artifact 一覧」が取り出せる。
3. Step Lifecycle — 4 つの status
| status | 意味 |
|---|---|
pending | まだ来ていない (template 初期値) |
active | 現在この step が進行中 (engine が next_step_index と一致) |
done | 完了 (artifacts と notes が保持される) |
skipped | skip=true で advance された (optional step 等) |
3.1 Workflow 全体の status (instance レベル)
| status | 意味 |
|---|---|
active | 進行中 |
completed | 全 step done または skipped で到達 |
paused | 一時停止 (現在 manual 操作のみ) |
abandoned | pm_workflow_abandon で放棄。state は preserve |
4. Special Features — gate / loop / chain / optional
4 つの構造を組み合わせて「ただの線形列」から「人間と LLM の協働 protocol」に昇華させる。
4.1 gate: user_approval
このフィールドが立った step では、pm_workflow_advance を Claude が
無断で呼ばないことが期待される。user の明示承認を待つ。
engine 側で「自動 advance を block する」コードがあるわけではない (= 紳士協定)。 CLAUDE.md auto-action rule の「gate のあるステップでは、ユーザーの承認を待ってから進む」が enforcement。
4.2 loop / loop_group
同じ loop_group の step は「セット」として扱われ、ループバック可能になる。
pm_workflow_advance(proceed=false) でループバックすると、group 内の全 step が
pending にリセット + iteration +1 され、最初の step から再開する。
典型例: super-research の parallel_research ↔ depth_check。Depth Check のスコアが
3.0 未満なら戻ってリサーチを深堀り。
4.3 chain_to
workflow 完了時に「次に起動を推奨する template 名」を返す。 例: discovery 完了 → development の起動を提案。
4.4 optional: true
「条件次第で skip 可能」を明示するフラグ。development workflow の issues step が好例。
skip された場合 status=skipped として記録される。
4.5 required_artifacts warning
step に required_artifacts: [ADR] 等を書くと、advance 時に artifacts が空だと
warning を返す (block ではなく soft warn)。
5. Builtin Templates 詳解
v0.9.0 に組み込まれる 4 つのテンプレート。
pm_workflow_templates で一覧、pm_workflow_start(template="...") で起動。
5.1 development (9 steps) — 機能開発の正攻法
ADR → Task → Spec → Plan → Cross-check (gate) → Implement → Test → Quality (gate) → Issues (optional)。 phase-8 / phase-9 の本番タスクはほぼ全てこの workflow で進められた。
5.2 discovery (5 steps, loop あり, chain → development)
調査・ブレストの workflow。research / fact_check / proposal の 3 step が
loop_group: brainstorm でループ可。proposal で user 承認後、cross_check → confirm
(ADR 起票) → chain_to: development。
5.3 super-research (6 steps, depth_check ループ)
3 並列エージェント (Domain Expert / Critical Analyst / Lateral Thinker) を起動して
6 dimension で depth scoring。スコア < 3.0 で parallel_research へループバック。
完了時は pm_record で Knowledge Record (KR-NNN) として保存。
5.4 brainstorming (8 steps, diverge↔evaluate ループ, chain → development)
アイデアの発散から要件・仕様化までを一貫して扱う workflow。Double Diamond パターンで、
diverge (3 並列エージェント: Idea Generator / Devil's Advocate / Synthesizer) と
evaluate (6 dimension scoring: Impact/Feasibility/Effort/Risk/Novelty/Strategic fit) が
loop_group: diverge_evaluate でループ可。Top 案の平均スコア < 3.5 なら
pm_workflow_advance(proceed=False) で diverge に戻り再発散。
収束後は converge (user 承認) → requirements (KR/category=requirement) →
spec (KR/category=spec) → cross_check → record (ADR 起票, user 承認, 必須 artifacts=KR+ADR)
→ chain_to: development。super-research の 3 agents パターンを発散思考に応用した位置付け
(research 用の Domain Expert/Critical Analyst/Lateral Thinker を ideation 用に再キャスト)。
使い分けの指針:
- discovery: 既存解の調査と方向性承認 (research-leaning)。
- super-research: 知識構築としての多角的深掘り (KR を生成)。
- brainstorming: アイデアの創発と要件・仕様への結晶化 (KR + ADR を生成)。
.pm/workflow_templates/development.yaml を作ると、同名の builtin より優先される
(storage.py:567)。組織独自の workflow を上書き運用できる。
6. YAML Schema 完全リファレンス
Template YAML は WorkflowTemplate と WorkflowStep (Pydantic v2) でバリデートされる。
未知フィールドは error にせず無視 (forward compat)。
6.1 トップレベル (WorkflowTemplate)
name 必須 str
例: name: Development
description 任意 str
chain_to 任意 str | null
steps 必須 list[WorkflowStep]
6.2 step レベル (WorkflowStep)
id 必須 str
例: id: decision
name 必須 str
description 任意 str
tool_hint 任意 str | null
skill_hint 任意 str | null
agent_hint 任意 str | null
gate 任意 str | null
loop 任意 bool = false
loop_group 任意 str | null
optional 任意 bool = false
required_artifacts 任意 list[str]
produces 任意 list[str]
consumes 任意 list[str]
6.3 runtime state (template には書かないが instance に残る)
| field | 意味 |
|---|---|
status | pending / active / done / skipped |
artifacts | advance で渡された ID 列 (ADR-019, PMSERV-094 等) |
iteration | ループバック回数 (0 から) |
notes | advance で渡された free-text (累積) |
7. カスタム Template の作り方 — Step by Step
7.1 配置場所
<project>/.pm/workflow_templates/ ├── code-review.yaml # 自作テンプレ └── release.yaml # 自作テンプレ
builtin と同名のファイルを置けば 上書きされる (storage.py:567)。
組織独自の development.yaml を書いて builtin を rewrite するパターンも可能。
7.2 最小テンプレ — 3 step の release workflow を作る
仮に「version bump → tag → CHANGELOG 更新」の 3 step を回したい場合:
# .pm/workflow_templates/release.yaml name: Release description: | Atomic release workflow: pyproject version bump → git tag → CHANGELOG. steps: - id: bump name: Version Bump description: > pyproject.toml と manifest.json を新 version へ更新。 ruff format で正規化、test 通過確認。 tool_hint: pm_log produces: - version_bump - id: tag name: Git Tag description: > git tag -a v<version> -m "<message>" + push tag。 tag の整合性 (HEAD と tag が一致) を確認。 consumes: - version_bump gate: user_approval # tag は不可逆なので承認待ち - id: changelog name: CHANGELOG Update description: | CHANGELOG.md にバージョン entry を追記。 breaking changes を明示。 tool_hint: pm_log optional: true # patch release では skip 可
7.3 起動 → 進行 → 完了
> release workflow を起動して、feature は "v0.8.1 patch release" # → pm_workflow_start(template="release", feature="v0.8.1 patch release") # → WF-029 として instance 化、current_step = "bump" > bump 完了。pyproject 0.8.0 → 0.8.1 へ。 # → pm_workflow_advance(artifacts=["pyproject:0.8.1"], notes="ruff clean, tests passed") # → 次 step "tag" が ACTIVE になる > (tag step は gate あり) tag 内容を確認してください # Claude は user 承認を待つ > OK、進めて # → pm_workflow_advance(artifacts=["v0.8.1"], notes="git tag -a v0.8.1") > changelog は patch なので skip # → pm_workflow_advance(skip=true) # → workflow_completed: true
7.4 super-research のような loop を持つ template を作る
name: Iterative Debug description: バグ調査 → 仮説 → 検証 を回す debug ループ steps: - id: reproduce name: Reproduce description: バグを再現する最小ケースを作る loop: true loop_group: debug_cycle - id: hypothesize name: Hypothesize description: 原因仮説を立てる (1-3 個) loop: true loop_group: debug_cycle - id: verify name: Verify description: 仮説を検証 — 当たれば advance、外れたら loop back loop: true loop_group: debug_cycle gate: user_approval - id: fix name: Fix description: 原因を修正 + regression test
使い方:
> reproduce, hypothesize 完了。verify したが外れ → loop back # → pm_workflow_advance(proceed=false) # → debug_cycle 内の 3 step が pending にリセット、iteration +1 # → reproduce step が再び ACTIVE
8. Task / ADR / KR との連動
workflow と他の artifact は artifacts 列で疎結合に紐付く。
8.1 advance 時に artifacts を渡す
# workflow の各 step で生まれる artifact ID を渡す > tasks step 完了、生成タスク 11 件 # → pm_workflow_advance(artifacts=["PMSERV-094", "PMSERV-095", ..., "PMSERV-104"]) > spec step 完了、memory に保存した # → pm_workflow_advance(artifacts=["memory:153"], notes="spec stored")
8.2 後から逆引き
> WF-028 が生んだ artifact 全部出して # → pm_workflow_status(workflow_id="WF-028") # → steps[*].artifacts に履歴が残っている > KR-005 はどの workflow で生まれた? # → load_knowledge() の workflow_id field を見る # → pm_workflow_status はそれを knowledge.count / by_category で返す
8.3 Knowledge Record (KR) 自動紐付け
pm_record で KR を作るとき workflow_id を指定すると、
pm_workflow_status の knowledge field に集計される (super-research の synthesis 用)。
8.4 artifact 型の使い分け (慣例)
| 型 | 例 | tool |
|---|---|---|
ADR | ADR-019 | pm_add_decision |
task | PMSERV-094 | pm_add_task |
KR | KR-005 | pm_record |
memory | memory:153 | pm_remember |
spec / plan / review_report | (free-text) | memory + ADR 等で間接保存 |
9. いつ workflow を使うか — 判断基準
9.1 使うべき場合
| シナリオ | 理由 | 推奨 template |
|---|---|---|
| 新規機能の設計から実装まで | 抜け漏れ (spec/test/quality) を構造的に防ぐ | development |
| 方向が決まっていない調査・ブレスト | 研究→提案→承認の流れを可視化 | discovery → development |
| 多面的なリサーチが必要な技術選定 | 3 agent 並列 + depth check で品質保証 | super-research |
| 非自明な judgment が必要な作業 | gate で user 承認を強制 → audit trail | カスタム |
9.2 使わない方がいい場合
| シナリオ | 理由 |
|---|---|
| typo 修正・docstring 直し | overkill。pm_add_task + commit で十分 |
| 緊急 hotfix (10 分以内に直す) | step を踏む時間がない。後で pm_log で記録する |
| 探索的なコード読み | workflow より pm_remember で都度メモが効く |
| 既に決まった単純 task | workflow なしで pm_add_task → 実装で OK |
「2 つ以上の判断 gate がある」または「4 step 以上で構造化したい」なら workflow。
そうでなければ task だけで十分。
10. 実用例 (recipe 集)
Recipe A: 「外部 API 統合」を 1 sprint で完走
pm_workflow_start(template="discovery", feature="X API integration")- discovery を回して API 候補を比較 → 承認後 chain で development が起動
- development の各 step で artifacts を渡す:
- decision → ADR-NNN (どの API を採用)
- tasks → PMSERV-NNN..MMM (5 個の implement task)
- spec → memory:NNN (interface 仕様)
- plan → memory:NNN (modules 影響範囲)
- check (gate) → review_report → ★ user approve
- implement → 各 task done
- test → coverage report
- quality (gate) → ★ user approve
- issues → (skip if clean)
Recipe B: 「アーキテクチャ判断 (DB 選定)」を super-research で
pm_workflow_start(template="super-research", feature="DB selection for X")- scope step で対象範囲を
pm_remember - parallel_research で 3 agent 並列起動 (Domain Expert: PostgreSQL/MySQL/SQLite/Mongo の技術比較 / Critical: 各 DB の運用罠 / Lateral: serverless DB 等の代替案)
- depth_check スコア < 3.0 なら loop back (parallel_research の iteration +1)
- 3.0 以上なら fact_check → cross_check
- synthesis で
pm_record(category="tradeoff", confidence="high")→ KR-NNN として保存
Recipe C: カスタム「PR Review」workflow
Reviewer 役割を構造化したい時:
name: PR Review steps: - id: scope name: Scope & Risk description: 変更行数・影響範囲・risk profile を把握 - id: correctness name: Correctness description: ロジック妥当性 (sub-agent で independent check) agent_hint: code-reviewer - id: security name: Security description: 脆弱性チェック skill_hint: security-audit - id: approval name: Approval gate: user_approval
11. トラブルシューティング
| 症状 | 原因 / 対処 |
|---|---|
pm_workflow_start が "template not found" |
pm_workflow_templates で一覧確認。custom template は YAML 構文エラーでスキップされる可能性 →
python -c "import yaml; yaml.safe_load(open('.pm/workflow_templates/X.yaml'))" で検証 |
pm_workflow_advance が "Step is done, not active" |
すでに advance 済み。pm_workflow_status で現在地確認 |
| loop back されない (proceed=false なのに次へ進む) | step に loop_group が設定されていない可能性。template を確認 |
| complete したのに chain_to の workflow が始まらない | engine は提案のみ。Claude が user に「次の workflow を起動しますか?」と聞いて、user 承認後に
pm_workflow_start(template=<chain_to>) を発火する flow が想定 |
| artifacts に渡した ID が知りたい後で見つからない | pm_workflow_status(workflow_id="WF-NNN") の steps[*].artifacts を参照 |
| active workflow が複数になって warning が出る | 意図的に同時並行も可能だが、推奨は 1 つ。古い方は pm_workflow_abandon |
| カスタム template が builtin を上書きしない | ファイル名が一致しているか (development.yaml)、.pm/workflow_templates/ 直下に置いてあるか |
11.1 builtin template の探索パス確認
> pm_status の diagnostics を見せて # → diagnostics.builtin_templates_dir.path に builtin の絶対 path # diagnostics.builtin_templates_dir.template_count で件数 (現在 3)
11.2 関連リンク
- 架構の workflow 図 → Architecture Section 5
- workflow と日常運用 → User Guide Section 4
- workflow テンプレ source →
src/pm_server/templates/workflows/*.yaml - engine source →
src/pm_server/workflow.py - model schema →
src/pm_server/models.py(WorkflowStep / WorkflowTemplate)