Skip to content
Back to skills

Project Manager

ASecurity

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.

  • 2 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added June 6, 2026
developmentgorailsgitapi

Works with

  • cli
  • api

Security analysis

A100/100

Pro scans all 20 files and shows the line behind each finding

Scanned June 6, 2026

npx -y skills add senu-nk/project-manager --skill project-manager --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Project Manager?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Project Manager
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/senu-nk-project-manager/badge)](https://www.skillsdirectory.com/skills/senu-nk-project-manager)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
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.

Files in this skill

  • SKILL.md7.9 KB
  • assets/output-templates/API_SPEC.md365 B
  • assets/output-templates/ARCHITECTURE.md741 B
  • assets/output-templates/CLAUDE.md656 B
  • assets/output-templates/DATA_MODEL.md415 B
  • assets/output-templates/DECISIONS.md291 B
  • assets/output-templates/LLM_INSTRUCTIONS.md1.7 KB
  • assets/output-templates/REQUIREMENTS.md675 B
  • assets/output-templates/SECURITY.md627 B
  • assets/output-templates/SRS.md591 B
  • assets/output-templates/open-questions.md263 B
  • assets/output-templates/plan.md620 B
  • assets/output-templates/spec.md902 B
  • references/classification-signals.md2.1 KB
  • references/gap-checklist.md1.2 KB
  • references/question-banks/ai-llm-product.md1.3 KB
  • references/question-banks/api-platform.md1.1 KB
  • references/question-banks/automation.md1.2 KB
  • references/question-banks/broad-early-stage.md804 B
  • references/question-banks/cli.md669 B

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.