PM Decision Router
Purpose
Classify incoming evidence before starting a heavier workflow so the kit can decide what to do inside its own system: update a task, create a task, run discovery, challenge scope, prioritize, create a document, log a decision, archive-only, or ask the user for missing intent.
The router is a preflight, not a replacement for downstream workflows. After routing, the selected workflow still owns durable writes and validation.
Router Schema
Every routing pass returns exactly these fields:
{
"intent": "task_update | new_task | discovery | scope_challenge | prioritize | create_doc | decision_log | archive_only | ask_user",
"routing_target": ".agent/workflows/<workflow>.md",
"confidence": 0.0,
"evidence": [],
"candidate_updates": [],
"blocking_questions": []
}
Use system/scripts/pm_decision_router.py --text "<input>" for deterministic classification when input text is available. For screenshots or binary files, extract visible text first, then route the text.
Routing Rules
task_update: existing task ID, explicit progress, blocker, owner, due-date, or status signal. Route to /track and update the existing task before creating anything new.
new_task: actionable request without an existing task match. Route to /track and apply the task-manager Priority Gate before acceptance.
discovery: problem-space, assumptions, user research, opportunity, experiment, or validation work. Route to /discover.
scope_challenge: scope creep, PO-level filler, day-to-day engineering support, release ownership, legacy integration/UI work, or unclear PM ownership. Route to /track for Priority Gate handling, but do not create an active task until the user confirms.
prioritize: ranking, scoring, cut-line, RICE, ICE, Kano, MoSCoW, or capacity allocation. Route to /prioritize.
create_doc: PRD, spec, one-pager, six-pager, brief, or stakeholder-ready document request. Route to /create.
decision_log: explicit decision, go/no-go, tradeoff, alignment, or option selection. Route through /track to 5. Trackers/DECISION_LOG.md.
archive_only: FYI, reference-only, no-action note, or evidence with no current work signal. Route to /archive or the relevant local evidence archive.
ask_user: insufficient signal. Return concrete blocking questions instead of guessing.
Quality Bar
For task_update, new_task, discovery, prioritize, create_doc, and decision_log, carry forward:
- outcome metric
- owner
- due date or gate date
- scope boundary
- evidence strength
- dependency
- next decision gate
If these are missing for committed work, list them in blocking_questions or candidate updates. Do not silently convert ambiguous work into active task state.
Obsidian MCP
Obsidian is optional read/search context only. Use system/scripts/obsidian_mcp_health.py to check whether a local Obsidian MCP endpoint is configured.
- Allowed v1 behavior: search, read, list, get document map, get active file path, list tags, open a file in Obsidian.
- Disallowed v1 behavior: write, append, patch, delete, move, execute arbitrary Obsidian commands, or use Obsidian as the task source of truth.
- If Obsidian MCP is unavailable, fall back to repo-local
rg searches over the canonical kit files.
1---2name: pm-decision-router3description: Classify messy PM input before workflow execution. Use for task intake, transcripts, communication refreshes, discovery, planning, prioritization, PRD creation, decision logging, and scope-boundary challenges.4priority: P05triggers:6 - "/paste"7 - "/track"8 - "/transcript"9 - "/beats-comms"10 - "/discover"11 - "/create"12 - "/plan"13 - "/prioritize"14 - "scope"15 - "discovery"16 - "decision"17 - "prioritize"18version: 1.0.019author: Beats PM Brain20---2122# PM Decision Router2324## Purpose2526Classify incoming evidence before starting a heavier workflow so the kit can decide what to do inside its own system: update a task, create a task, run discovery, challenge scope, prioritize, create a document, log a decision, archive-only, or ask the user for missing intent.2728The router is a preflight, not a replacement for downstream workflows. After routing, the selected workflow still owns durable writes and validation.2930## Router Schema3132Every routing pass returns exactly these fields:3334```json35{36 "intent": "task_update | new_task | discovery | scope_challenge | prioritize | create_doc | decision_log | archive_only | ask_user",37 "routing_target": ".agent/workflows/<workflow>.md",38 "confidence": 0.0,39 "evidence": [],40 "candidate_updates": [],41 "blocking_questions": []42}43```4445Use `system/scripts/pm_decision_router.py --text "<input>"` for deterministic classification when input text is available. For screenshots or binary files, extract visible text first, then route the text.4647## Routing Rules4849- `task_update`: existing task ID, explicit progress, blocker, owner, due-date, or status signal. Route to `/track` and update the existing task before creating anything new.50- `new_task`: actionable request without an existing task match. Route to `/track` and apply the task-manager Priority Gate before acceptance.51- `discovery`: problem-space, assumptions, user research, opportunity, experiment, or validation work. Route to `/discover`.52- `scope_challenge`: scope creep, PO-level filler, day-to-day engineering support, release ownership, legacy integration/UI work, or unclear PM ownership. Route to `/track` for Priority Gate handling, but do not create an active task until the user confirms.53- `prioritize`: ranking, scoring, cut-line, RICE, ICE, Kano, MoSCoW, or capacity allocation. Route to `/prioritize`.54- `create_doc`: PRD, spec, one-pager, six-pager, brief, or stakeholder-ready document request. Route to `/create`.55- `decision_log`: explicit decision, go/no-go, tradeoff, alignment, or option selection. Route through `/track` to `5. Trackers/DECISION_LOG.md`.56- `archive_only`: FYI, reference-only, no-action note, or evidence with no current work signal. Route to `/archive` or the relevant local evidence archive.57- `ask_user`: insufficient signal. Return concrete blocking questions instead of guessing.5859## Quality Bar6061For `task_update`, `new_task`, `discovery`, `prioritize`, `create_doc`, and `decision_log`, carry forward:6263- outcome metric64- owner65- due date or gate date66- scope boundary67- evidence strength68- dependency69- next decision gate7071If these are missing for committed work, list them in `blocking_questions` or candidate updates. Do not silently convert ambiguous work into active task state.7273## Obsidian MCP7475Obsidian is optional read/search context only. Use `system/scripts/obsidian_mcp_health.py` to check whether a local Obsidian MCP endpoint is configured.7677- Allowed v1 behavior: search, read, list, get document map, get active file path, list tags, open a file in Obsidian.78- Disallowed v1 behavior: write, append, patch, delete, move, execute arbitrary Obsidian commands, or use Obsidian as the task source of truth.79- If Obsidian MCP is unavailable, fall back to repo-local `rg` searches over the canonical kit files.