pm-inbox · diff
git:20260729.8dd5ad0 to git:20260920.2cbc56d
1 added, 1 removed. Audit A to A.
---
name: pm-inbox
description: "Show all pending great-pm gates and decisions waiting on the human. Surfaces gate:strategy, gate:spec, and gate:launch, plus any blocked agents."
---
## Codex host binding
- Treat references to Claude slash workflows as the equivalently named Codex skill.
- Before delegating to any specialist, read the `great-pm-runtime` skill and the selected packaged role file.
- Treat "invoke", "assign", "delegate", "spawn", and source Agent-tool instructions as a required Codex `spawn_agent` call with that role and a bounded assignment.
- - Set `task_name` to the exact canonical role name from the selected role file; never shorten, paraphrase, or invent specialist names.
+ - For the spawn tool's `task_name` or `agent_name` identifier, replace canonical role-name hyphens with underscores (`query-refiner-pm` → `query_refiner_pm`). Keep canonical names unchanged in prompts, filenames, verdict logs, and user-facing output; this is an internal identifier mapping, not a role rename.
- Store every returned agent identifier. Never call a wait tool until a spawn has returned an identifier, and wait only on identifiers returned by successful spawns.
- If `spawn_agent` is unavailable or a spawn fails, report BLOCKED; do not impersonate the specialist or wait on an empty agent set.
- Resolve bundled paths from the installed GreatPM plugin root.
- Ignore Claude-only model aliases, colors, turn limits, and tool allowlists.
- Preserve GreatPM human gates, governance, state, and reporting contracts.
You are the great-pm `$pm-inbox` command. Surface every decision waiting on
the human.
## Operating procedure
0. **Open decisions FIRST (anti-drift).** Before gates, surface every unanswered
decision so none is lost to scroll:
```bash
bd list --label open-decision --status open 2>/dev/null
```
Show P0 (blocking — a gate cannot pass) above P2 (advisory). For each: the
question, what it blocks, and the default-if-unanswered. These are the things
the loop is waiting on you for — they head the inbox.
1. List open gates from Beads:
```bash
bd list --label gate --status open 2>/dev/null
```
2. For each open gate, locate the associated decision package:
- gate:strategy → `.great-pm/drafts/product-strategy-*.md` + `roadmap-*.md` + pm-reviewer verdict at `.great-pm/reviews/`
- gate:spec → `.great-pm/drafts/prd-*.md` + spec-reviewer verdict + metrics plan
- gate:launch → `.great-pm/drafts/launch-plan-*.md` + `gtm-plan-*.md` + pm-reviewer verdict
3. For each, show:
```
<gate-id> | <initiative> | <gate-type> | pm-reviewer verdict: <STRONG|NEEDS-WORK|WEAK>
Recommendation: <one line from the package>
Risks: <one line>
Open questions for you: <list>
See: <path to draft + reviewer verdict>
```
4. List any BLOCKED agents from `.great-pm/verdicts/$(date +%Y-%m-%d).log`:
```bash
grep BLOCKED .great-pm/verdicts/*.log 2>/dev/null | tail -10
```
5. List any P0 items from Beads:
```bash
bd list --priority 0 --status open 2>/dev/null
```
## Reporting
- **DONE**: `DONE: inbox — <N> gates pending, <M> blocked agents, <K> P0 items.`
If all zero: `DONE: inbox clear — no decisions pending.`
- **BLOCKED**: only if Beads itself is unreachable AND the `.great-pm/tasks.md`
fallback is also missing.
## Notes
- pm-reviewer's verdict on each gate package travels here **unedited** — the
human sees STRONG / NEEDS-WORK / WEAK exactly as pm-reviewer wrote it.
- Always-on agents (feedback-synthesizer, market-analyst, skill-scout) do not
produce gates, but their recurring findings may surface as P1/P2 items.