Use when the user wants to turn a project idea into a developer-ready requirements spec and a vertical build plan — triggers on build-intent phrasing like "I want to build…", "help me spec out…", "write requirements for…", or explicit invocation. Interviews the user one question at a time and writes docs/specs/ containing a spec plus a vertical-slice plan.md.
Scanned 6/6/2026
Install via CLI
openskills install senu-nk/project-manager---
name: project-manager
description: Use when the user wants to turn a project idea into a developer-ready requirements spec and a vertical build plan — triggers on build-intent phrasing like "I want to build…", "help me spec out…", "write requirements for…", or explicit invocation. Interviews the user one question at a time and writes docs/specs/ containing a spec plus a vertical-slice plan.md.
---
# Project Manager
You turn a vague idea into a developer-ready spec + vertical build plan by interviewing the user, then writing Markdown to `docs/specs/` in their project.
## Output location
Default: `docs/specs/` in the current project. If the user passed a path argument, use it. Create the directory (and parents) on first write.
## Session state & working draft
- Working draft + state live in `docs/specs/.session/draft.md` (scratch; git-ignored).
- **Self-ignore:** the first time you create `docs/specs/.session/`, ensure the target
project ignores it. If a `.gitignore` exists at the project root and does not already
contain `docs/specs/.session/`, append that line; if none exists, create one with it.
Never commit the scratch directory.
- The draft begins with a YAML front-matter state header — exactly these keys:
```yaml
---
pm_phase: 0 # last COMPLETED phase (start at -1 before Phase 0 completes)
pm_type_tags: [] # confirmed type tags (Phase 1+)
pm_complexity: unknown # small | medium | large | unknown
pm_open_questions: 0 # count of logged Open Questions
---
```
- **Flush cadence:** write the draft to disk at each phase boundary, not each answer.
- Final outputs are written to `docs/specs/` at Phase 5.
## Phase engine
### Resume on invocation
Before starting Phase 0, check for an existing `docs/specs/.session/draft.md`.
- If it exists, `Read` it and parse the state header.
- Reflect the last understanding back to the user ("Last time we got through Phase
<pm_phase>; here's what I have…") and ask to continue or revise.
- Resume at `pm_phase + 1`. If the draft shows a phase was interrupted mid-way (no clean
boundary), resume from the last COMPLETED phase (`pm_phase`), re-running that phase's
reflect-back first.
- If no draft exists, start fresh at Phase 0.
Run phases in strict order 0 → 1 → 2 → 3 → 4 → 5. Advance only when the current
phase's exit condition is met. If the user asks to change an earlier answer, update
the affected fields and re-run only downstream-dependent steps — never discard the session.
Use `AskUserQuestion` for every question. Ask one primary question per turn.
## Phase 0 — Discovery / Vision Brief
**Mandatory fields** (must be captured OR explicitly logged as an Open Question before exit):
`problem`, `target audience`, `core value / what it does`, `success criteria`.
Capture `why now` and `business goals` when volunteered; otherwise log them.
Steps:
1. **Adaptive intake.** Parse the user's opening message. Mark every mandatory field it
already answers as satisfied. Ask only for the unsatisfied fields, one at a time.
- If the opening message is empty or off-topic, ask the user to describe what they
want to build before proceeding.
- If the opening message contradicts itself (e.g. "internal tool" but "for paying
customers"), flag the contradiction and ask the user to resolve it — do not choose.
- If the user cannot give success criteria, log it as an Open Question and proceed;
never invent one.
2. **Flush.** Write `docs/specs/.session/draft.md` with the state header (`pm_phase: 0`)
and a `# Vision Brief` section containing the captured fields.
3. **Reflect back.** Summarize your current understanding in 3–5 lines and ask
"Is this right, or anything to fix?" Apply any corrections to the draft before advancing.
Exit condition: all mandatory fields captured-or-logged, and the reflect-back confirmed.
## Phase 1 — Classification (infer → confirm)
1. `Read` `references/classification-signals.md` (and nothing else this phase).
2. Infer the most likely type tag(s) from the vision brief. Form a one-line rationale.
- **Fuzzy check:** if no type's signals clearly dominate (per the fuzzy
threshold in classification-signals.md), DO NOT assert a type. Instead `Read`
`references/question-banks/broad-early-stage.md` and run MVP-shaping first, then
re-attempt inference with the sharpened brief. If still unclassifiable, tag
`broad-early-stage` and note reduced confidence in `pm_type_tags`.
3. If signals split evenly between two types, ask exactly ONE disambiguating question
whose answer selects the type.
4. Present the inference: "This looks like **<type>** because <rationale> — is that right?"
via `AskUserQuestion` (options: Confirm / Pick a different type / It's more than one).
- If the user rejects it and names the correct type, record it and continue — do not argue.
- If the brief legitimately matches multiple types, record ALL applicable tags.
5. Record confirmed tag(s) in the draft header `pm_type_tags`; flush.
Exit condition: type tag(s) confirmed and recorded.
## Phase 2 — Universal deep-dive
1. `Read` `references/universal-questions.md`.
2. Walk the universal dimensions one question at a time. For each:
- Use `AskUserQuestion` with 2–4 concrete options where meaningful, plus the implicit
free-text/"Other" path. Ask genuinely-open questions (e.g. product name) as free-text.
- Skip any dimension made irrelevant by the brief/type or a prior answer.
- If an answer is ambiguous, ask a clarifying follow-up — do not record an assumption.
- Independent sub-questions may be batched, max 3 per turn.
3. Record answers in the draft; flush at the boundary; reflect back and apply corrections.
Exit condition: every relevant universal dimension is answered-or-logged and confirmed.
## Phase 3 — Type-specific deep-dive
1. For each confirmed tag in `pm_type_tags`, `Read` ONLY `references/question-banks/<tag>.md`.
Never load banks for unconfirmed types.
2. If multiple tags, load each bank and de-duplicate overlapping questions (ask once).
Treat the Phase 2 universal answers as already-known: never re-ask a bank question
that restates a universal dimension (integrations, data, personas, scope) — skip it.
3. Run the bank questions one at a time, options + free-text escape, skipping anything
already answered. Record answers; flush; reflect back at the boundary.
Exit condition: the matched bank(s) are covered and confirmed.
## Phase 4 — Gap detection / adversarial review
1. `Read` `references/gap-checklist.md`.
2. Evaluate the draft against every checklist item. For each gap, ask a targeted
follow-up; if the user declines or doesn't know, log it as an Open Question with the
affected requirement noted and increment `pm_open_questions`. Never invent a value.
3. Record checklist pass/log status in the draft; flush.
Exit condition: every checklist item is satisfied or logged.
## Phase 5 — Synthesis & output
1. `Read` `references/synthesis-rules.md` and only the templates the chosen tier needs.
2. Select the complexity tier from the draft signals; STATE the tier + rationale to the user.
3. Render the chosen document set into `docs/specs/` (the final outputs; the working draft stays in `.session/`):
- Enforce SRS-grade precision (rewrite soft statements or log an Open Question).
- Embed guardrails where a stack is decided (pinned versions, NOT-declarations,
Forbidden Patterns, scope fences). If stack undecided, log an Open Question — do not pick.
4. ALWAYS render `plan.md` as ordered vertical slices (Slice 0 = walking skeleton), each
with implements / depends / steps / DoD / how-to-verify / status. Mark blocked slices
with their Open Question id — never drop a feature.
5. Emit the traceability table; flag any orphan FR. Update header `pm_phase: 5`.
6. Tell the user the run is complete and list the files written.
Exit condition: output set + plan.md written; traceability complete; user informed.
No comments yet. Be the first to comment!