Project manager
Turn vague ideas into developer-ready specs and vertical-slice build plans — one question at a time. A gated, resumable interview that adapts its depth to project complexity. It never invents requirements: unknowns become traceable Open Questions tied directly to affected build slices. Delivered as a Claude Code skill.
npx -y skills add senu-nk/project-manager --skill project-managerAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
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.
SKILL.md
7.9 KB, as published. Nobody here has run it
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.gitignoreexists at the project root and does not already containdocs/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:
--- 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,
Readit 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:
- 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.
- Flush. Write
docs/specs/.session/draft.mdwith the state header (pm_phase: 0) and a# Vision Briefsection containing the captured fields. - 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)
Readreferences/classification-signals.md(and nothing else this phase).- 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
Readreferences/question-banks/broad-early-stage.mdand run MVP-shaping first, then re-attempt inference with the sharpened brief. If still unclassifiable, tagbroad-early-stageand note reduced confidence inpm_type_tags.
- Fuzzy check: if no type's signals clearly dominate (per the fuzzy
threshold in classification-signals.md), DO NOT assert a type. Instead
- If signals split evenly between two types, ask exactly ONE disambiguating question whose answer selects the type.
- 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.
- 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
Readreferences/universal-questions.md.- Walk the universal dimensions one question at a time. For each:
- Use
AskUserQuestionwith 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.
- Use
- 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
- For each confirmed tag in
pm_type_tags,ReadONLYreferences/question-banks/<tag>.md. Never load banks for unconfirmed types. - 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.
- 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
Readreferences/gap-checklist.md.- 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. - Record checklist pass/log status in the draft; flush.
Exit condition: every checklist item is satisfied or logged.
Phase 5 — Synthesis & output
Readreferences/synthesis-rules.mdand only the templates the chosen tier needs.- Select the complexity tier from the draft signals; STATE the tier + rationale to the user.
- 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.
- ALWAYS render
plan.mdas 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. - Emit the traceability table; flag any orphan FR. Update header
pm_phase: 5. - Tell the user the run is complete and list the files written.
Exit condition: output set + plan.md written; traceability complete; user informed.