PM Server — Workflow Guide

Workflow Engine の仕組み・4 builtin templates・カスタム workflow の作り方
バージョン 0.9.0 (2026-05-26) · 関連: Architecture · User Guide

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-rulesorchestration — 上記 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) として何を残すべきかが返ってくる。

Template (YAML) .pm/workflow_templates/ or builtin step: decision step: tasks step: spec step: ... Engine (workflow.py) state: ACTIVE current_step_index: 2 step "spec" → ACTIVE step "decision" → DONE step "tasks" → DONE artifacts: [ADR-019, PMSERV-094..104] Claude (LLM) pm_workflow_status() を読み "spec" step を実行 skill_hint / agent_hint に従う 完了したら advance pm_workflow_advance(artifacts=...) 次の step へ load guide advance

このループが完了するまで回る。各 advance で artifacts (ADR/task/KR の ID) を渡せば、 後で pm_workflow_status から「この workflow が生んだ artifact 一覧」が取り出せる。

3. Step Lifecycle — 4 つの status

PENDING ACTIVE DONE SKIPPED start_workflow advance proceed=true advance skip=true advance proceed=false (loop step のみ)
status意味
pendingまだ来ていない (template 初期値)
active現在この step が進行中 (engine が next_step_index と一致)
done完了 (artifacts と notes が保持される)
skippedskip=true で advance された (optional step 等)

3.1 Workflow 全体の status (instance レベル)

status意味
active進行中
completed全 step done または skipped で到達
paused一時停止 (現在 manual 操作のみ)
abandonedpm_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_researchdepth_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 で進められた。

1. decision ADR 2. tasks pm_add_task 3. spec 4. plan 5. check user_approval 6. implement 7. test 8. quality user_approval 9. issues optional

5.2 discovery (5 steps, loop あり, chain → development)

調査・ブレストの workflow。research / fact_check / proposal の 3 step が loop_group: brainstorm でループ可。proposal で user 承認後、cross_checkconfirm (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_checkrecord (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 を生成)。
builtin を上書き: .pm/workflow_templates/development.yaml を作ると、同名の builtin より優先される (storage.py:567)。組織独自の workflow を上書き運用できる。

6. YAML Schema 完全リファレンス

Template YAML は WorkflowTemplateWorkflowStep (Pydantic v2) でバリデートされる。 未知フィールドは error にせず無視 (forward compat)。

6.1 トップレベル (WorkflowTemplate)

name 必須 str

表示名。一覧で人間が読む。

例: name: Development

description 任意 str

複数行可。pm_workflow_templates 結果に含まれる。

chain_to 任意 str | null

workflow 完了時に Claude へ提案する次 template 名 (例: chain_to: development)。

steps 必須 list[WorkflowStep]

1 個以上。順序が実行順 (engine は配列順に進む)。

6.2 step レベル (WorkflowStep)

id 必須 str

template 内で一意。artifacts 参照や loop 制御で使う。

例: id: decision

name 必須 str

表示名 (人間向け)。

description 任意 str

この step で 何をすべきか。Claude はこれを判断材料にする。 「やる気の出る具体性」が大事 — 「ADR を書く」より「context / decision rationale / consequences を書く」のほうが行動可能。

tool_hint 任意 str | null

使うべき MCP ツール名 (1 個)。例: tool_hint: pm_add_decision。 Claude が auto で発火する候補。

skill_hint 任意 str | null

使うべき skill 名・skill 使い分け方針を自由記述。 例: skill_hint: Use super-research skill for technical spikes

agent_hint 任意 str | null

sub-agent (Agent tool) で何を起動すべきか。複数 agent の並列指示も OK。 例: agent_hint: Launch 3 agents in parallel: Domain Expert / Critical Analyst / Lateral Thinker.

gate 任意 str | null

承認ゲート。現状値: user_approval

loop 任意 bool = false

この step がループ可能であることを示すフラグ。実際の loop 動作は loop_group で制御。

loop_group 任意 str | null

同じ loop_group の step は集合としてループバックされる。 advance(proceed=false) 時に group 内全 step が pending にリセット + iteration +1。

optional 任意 bool = false

「skip しても workflow は valid」を示す。 advance(skip=true)status=skipped となる。

required_artifacts 任意 list[str]

この step が完了するために必要な成果物の型 (例: [ADR], [task], [KR])。 advance 時に artifacts が空だと warning。

produces 任意 list[str]

この step が生む成果物の型 (LLM への hint)。例: [ADR], [plan]

consumes 任意 list[str]

この step が前 step から受け取る成果物の型 (依存関係 hint)。

6.3 runtime state (template には書かないが instance に残る)

field意味
statuspending / active / done / skipped
artifactsadvance で渡された ID 列 (ADR-019, PMSERV-094 等)
iterationループバック回数 (0 から)
notesadvance で渡された 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
loop_group 命名のコツ: 同じ template で複数の loop を持たせる場合 (research_loop / verify_loop 等)、 名前が衝突しないよう topic ベースで命名。group をまたぐ step は loop_group を空のままにする。

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_statusknowledge field に集計される (super-research の synthesis 用)。

8.4 artifact 型の使い分け (慣例)

tool
ADRADR-019pm_add_decision
taskPMSERV-094pm_add_task
KRKR-005pm_record
memorymemory:153pm_remember
spec / plan / review_report(free-text)memory + ADR 等で間接保存

9. いつ workflow を使うか — 判断基準

9.1 使うべき場合

シナリオ理由推奨 template
新規機能の設計から実装まで 抜け漏れ (spec/test/quality) を構造的に防ぐ development
方向が決まっていない調査・ブレスト 研究→提案→承認の流れを可視化 discoverydevelopment
多面的なリサーチが必要な技術選定 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 で都度メモが効く
既に決まった単純 taskworkflow なしで pm_add_task → 実装で OK
判断式 (経験則):
2 つ以上の判断 gate があるまたは4 step 以上で構造化したい」なら workflow。
そうでなければ task だけで十分。

10. 実用例 (recipe 集)

Recipe A: 「外部 API 統合」を 1 sprint で完走

  1. pm_workflow_start(template="discovery", feature="X API integration")
  2. discovery を回して API 候補を比較 → 承認後 chain で development が起動
  3. 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 で

  1. pm_workflow_start(template="super-research", feature="DB selection for X")
  2. scope step で対象範囲を pm_remember
  3. parallel_research で 3 agent 並列起動 (Domain Expert: PostgreSQL/MySQL/SQLite/Mongo の技術比較 / Critical: 各 DB の運用罠 / Lateral: serverless DB 等の代替案)
  4. depth_check スコア < 3.0 なら loop back (parallel_research の iteration +1)
  5. 3.0 以上なら fact_check → cross_check
  6. 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)