@nudata/nu-claude-pm 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,98 @@
1
+ #!/usr/bin/env node
2
+
3
+ import fs from "fs";
4
+ import path from "path";
5
+ import os from "os";
6
+ import { fileURLToPath } from "url";
7
+
8
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
9
+ const COMMANDS_SRC = path.join(__dirname, "..", "commands");
10
+
11
+ const args = process.argv.slice(2);
12
+ const command = args[0];
13
+ const isLocal = args.includes("--local");
14
+ const isGlobal = args.includes("--global") || !isLocal;
15
+
16
+ function getTargetDir() {
17
+ if (isLocal) {
18
+ return path.join(process.cwd(), ".claude", "commands");
19
+ }
20
+ return path.join(os.homedir(), ".claude", "commands");
21
+ }
22
+
23
+ function listCommands() {
24
+ return fs.readdirSync(COMMANDS_SRC).filter((f) => f.endsWith(".md"));
25
+ }
26
+
27
+ function install() {
28
+ const targetDir = getTargetDir();
29
+ fs.mkdirSync(targetDir, { recursive: true });
30
+
31
+ const files = listCommands();
32
+ for (const file of files) {
33
+ const src = path.join(COMMANDS_SRC, file);
34
+ const dest = path.join(targetDir, file);
35
+ fs.copyFileSync(src, dest);
36
+ console.log(` installed: ${file}`);
37
+ }
38
+
39
+ const scope = isLocal ? "project (.claude/commands/)" : "global (~/.claude/commands/)";
40
+ console.log(`\n✓ ${files.length} commands installed ${scope}`);
41
+ console.log(" Reload Claude Code to pick up new commands.");
42
+ }
43
+
44
+ function uninstall() {
45
+ const targetDir = getTargetDir();
46
+ const files = listCommands();
47
+ let removed = 0;
48
+
49
+ for (const file of files) {
50
+ const dest = path.join(targetDir, file);
51
+ if (fs.existsSync(dest)) {
52
+ fs.unlinkSync(dest);
53
+ console.log(` removed: ${file}`);
54
+ removed++;
55
+ }
56
+ }
57
+
58
+ if (removed === 0) {
59
+ console.log("No nu-pm commands found to remove.");
60
+ } else {
61
+ console.log(`\n✓ ${removed} commands removed.`);
62
+ }
63
+ }
64
+
65
+ function printHelp() {
66
+ console.log(`
67
+ nu-claude-pm — install Claude Code PM commands
68
+
69
+ Usage:
70
+ nu-claude-pm install [--global|--local]
71
+ nu-claude-pm uninstall [--global|--local]
72
+ nu-claude-pm list
73
+
74
+ Options:
75
+ --global Install to ~/.claude/commands/ (default)
76
+ --local Install to .claude/commands/ in the current project
77
+
78
+ Commands:
79
+ install Copy nu-pm-* commands into your Claude Code commands directory
80
+ uninstall Remove nu-pm-* commands from your Claude Code commands directory
81
+ list List available commands
82
+ `);
83
+ }
84
+
85
+ switch (command) {
86
+ case "install":
87
+ install();
88
+ break;
89
+ case "uninstall":
90
+ uninstall();
91
+ break;
92
+ case "list":
93
+ listCommands().forEach((f) => console.log(` /` + f.replace(".md", "")));
94
+ break;
95
+ default:
96
+ printHelp();
97
+ break;
98
+ }
@@ -0,0 +1,64 @@
1
+ ---
2
+ name: nu-pm-continue
3
+ description: Resume work on a project by reading now.md, milestones.md, and roadmap.md. Default directory is product/. Pass a different path as argument if needed.
4
+ ---
5
+
6
+ You are helping the user resume work on a software project after a break or context reset. Work through the following steps in order.
7
+
8
+ ## 1. Locate the product docs
9
+
10
+ The target directory is: `$ARGUMENTS` (use `product/` if empty or not provided).
11
+
12
+ Look for these files in the target directory:
13
+ - `now.md` — current focus, next action, what was recently completed
14
+ - `milestones.md` — task checklist across all milestones
15
+ - `roadmap.md` — architecture and design decisions (skim only, don't summarise at length)
16
+
17
+ If none of these files exist in the given directory, search the repo for files with these names and ask the user to confirm which project they want to resume.
18
+
19
+ ## 2. Gather supporting context
20
+
21
+ - If `<dir>/how-to/nu-pm-continue.md` exists, read it now and follow any project-specific context-gathering steps listed there (e.g. reading a cluster state file, checking additional infra docs) before proceeding.
22
+ - Run `git log --oneline -8` to see recent commits
23
+ - Run `git status` to surface any uncommitted or untracked changes
24
+
25
+ ## 3. Find the active task
26
+
27
+ In `milestones.md`:
28
+ - Find the first milestone marked `🔄 in progress`
29
+ - Within that milestone, find the first task marked `[~]` (in progress) or `[ ]` (not yet done)
30
+ - That is the task to resume
31
+
32
+ ## 4. Load design context if present
33
+
34
+ If `now.md` contains a `Design doc:` field referencing a PRD, and a `Current story:` field:
35
+ - Read the referenced PRD
36
+ - Locate the current story's section
37
+ - Extract its scope, files touched, decisions, and validation criteria — this is the working context for the session
38
+
39
+ ## 5. Present the resume brief
40
+
41
+ Output a short, scannable summary — aim for something the user can read in 30 seconds:
42
+
43
+ ```
44
+ ## Resume Brief
45
+
46
+ **Milestone**: <milestone name and status>
47
+ **Active story**: <story title (from PRD if present, otherwise task from milestones.md)>
48
+ **Story scope**: <1–2 sentence summary of what the story does and its exit criteria>
49
+
50
+ **Recently completed**:
51
+ - <2–3 bullet points from now.md "What Was Just Done">
52
+
53
+ **Infrastructure state**: <up / hibernated / unknown — from how-to/nu-pm-continue.md context if available>
54
+ **Uncommitted changes**: <none / list files if any>
55
+ **Recent commits**: <last 3–4 one-liners from git log>
56
+ ```
57
+
58
+ ## 6. Propose the next action
59
+
60
+ State clearly what to do next — the exact command to run, the file to edit, or the decision to make. Ask the user if they want to proceed with that, or if something has changed since the docs were last updated.
61
+
62
+ ## 7. Offer to update now.md
63
+
64
+ If the user confirms the current state is accurate, offer to update `now.md` with today's date and any corrections. If the state has changed (e.g. a task was completed offline), update `milestones.md` checkboxes and `now.md` before proceeding.
@@ -0,0 +1,55 @@
1
+ ---
2
+ name: nu-pm-elevator-pitch
3
+ description: Generate a short elevator pitch for the project. Produces 3 variants at different lengths, then iterates with the user until it's sharp.
4
+ ---
5
+
6
+ You are helping the user craft a tight elevator pitch for their project. This is a collaborative, iterative process — generate options, get feedback, refine.
7
+
8
+ The target directory is: `$ARGUMENTS` (use `product/` if empty or not provided).
9
+
10
+ ## 1. Gather source material
11
+
12
+ Read all of these in parallel:
13
+ - `<dir>/vision.md` — problem, customer, north star (primary source)
14
+ - `<dir>/one-pager.md` — if it exists, use it as a condensed starting point
15
+ - `<dir>/now.md` — current milestone state (for credibility signals: "we've already proven X")
16
+
17
+ If neither `vision.md` nor `one-pager.md` exist, read `roadmap.md` as a fallback.
18
+
19
+ ## 2. Generate 3 pitch variants
20
+
21
+ Produce three pitches targeting different contexts. Label them clearly.
22
+
23
+ **Tweet (≤ 280 chars)**
24
+ One sentence that captures the problem and the product. No jargon. Must make a skeptic want to know more.
25
+
26
+ **30-second verbal (≤ 75 words)**
27
+ The version you'd say out loud to someone you just met. Covers: who has the problem, what the pain costs them, what you've built, and one proof point. Conversational tone, no bullet points.
28
+
29
+ **60-second investor / stakeholder (≤ 150 words)**
30
+ Adds: market context, what makes this defensible or timely, and current traction (what's been proven, not just planned). Still a single paragraph — no headers, no lists.
31
+
32
+ ## 3. Present and prompt
33
+
34
+ Show all three variants. Then ask:
35
+
36
+ **"Which of these is closest to what you need? I can adjust the tone, sharpen the hook, add a specific number, make it more technical or less, or write a version targeting a specific audience (investor, customer, recruiter, partner)."**
37
+
38
+ ## 4. Iterate
39
+
40
+ Work through changes one at a time. After each round, show the updated variant only (not all three again) unless the user asks for a full reset.
41
+
42
+ Common refinement passes:
43
+ - **Sharpen the hook** — lead with the pain or the surprise, not the product name
44
+ - **Add a number** — a concrete metric beats any adjective ("93% cache hit rate" > "fast prefix caching")
45
+ - **Audience swap** — rewrite for a specific reader (a CTO, a VC, a potential customer)
46
+ - **Cut jargon** — flag any term that requires insider knowledge; offer a plain-language swap
47
+ - **Strengthen the "why us / why now"** — add one sentence about what makes this timely or defensible
48
+
49
+ Keep iterating until the user is satisfied or asks to save.
50
+
51
+ ## 5. Save when ready
52
+
53
+ When the user confirms a variant is ready, write it to `<dir>/elevator-pitch.md` with all three final variants (or just the one they chose — ask if unclear). Tell them the file was written.
54
+
55
+ Do not write the file until the user explicitly says to save or approves it.
@@ -0,0 +1,108 @@
1
+ ---
2
+ name: nu-pm-halt
3
+ description: Wrap up the current work session cleanly. Updates docs, writes a session report, commits and pushes. Reads product/how-to/nu-pm-halt.md for project-specific shutdown steps (infrastructure hibernation, etc.).
4
+ ---
5
+
6
+ Wrap up the current work session cleanly.
7
+
8
+ The target directory is: `$ARGUMENTS` (use `product/` if empty or not provided).
9
+
10
+ Work through these steps in order:
11
+
12
+ ## 1. Gather current state
13
+
14
+ Read all of:
15
+ - `<dir>/now.md` — what was just done, what's next
16
+ - `<dir>/milestones.md` — task checklist
17
+ - `git log --oneline -10` — recent commits
18
+ - `git status` — uncommitted changes
19
+
20
+ ## 2. Assess checkpoint readiness
21
+
22
+ A good checkpoint is one where:
23
+ - No task is mid-execution (no benchmark half-run, no deploy half-applied)
24
+ - All completed work is reflected in docs and committed, OR you are about to do that now
25
+ - The next person (or future session) can resume cleanly from now.md
26
+
27
+ If NOT at a good checkpoint, warn the user: explain what's in-flight, and ask if they want to wait, skip, or force-halt anyway.
28
+
29
+ ## 3. Update milestones.md
30
+
31
+ Go through the active milestone task list. For each task completed this session, change `[ ]` to `[x]`. For any task in progress but not done, use `[~]`. Be conservative — only check off tasks that are verifiably complete.
32
+
33
+ If the milestone has a `Design:` reference, note the current story for now.md but do not modify the PRD.
34
+
35
+ ## 4. Update now.md
36
+
37
+ - Rewrite "What Was Just Done" with 3–5 bullets from this session
38
+ - Update "Next action" to the first unchecked task in milestones.md
39
+ - If the milestone has a PRD: update "Current story" to the next incomplete story
40
+ - Update any infra state section if infrastructure changed
41
+ - Update the "Recent Commits" block
42
+
43
+ ## 5. Write session report
44
+
45
+ Create or append to `<dir>/reports/YYYY-MM-DD.md` (today's date).
46
+
47
+ If the file already exists, append a new section:
48
+ ```
49
+ ## Session End — HH:MM UTC
50
+
51
+ **Duration**: <start to now if known, otherwise omit>
52
+ **Git commits this session**: <list new commits>
53
+
54
+ ### Completed
55
+ - <bullet list of what was accomplished>
56
+
57
+ ### Key numbers (if any benchmarks or significant runs happened)
58
+ | Metric | Value |
59
+ |--------|-------|
60
+
61
+ ### Bugs / Surprises
62
+ - <anything unexpected>
63
+
64
+ ### Left in progress
65
+ - <anything started but not finished>
66
+
67
+ ### Next session starts at
68
+ <first unchecked task from milestones.md>
69
+ ```
70
+
71
+ If the file does not exist, create it with a header first:
72
+ ```markdown
73
+ # Session Report — YYYY-MM-DD
74
+ ```
75
+ Then append the Session End section.
76
+
77
+ ## 6. Commit and push
78
+
79
+ Stage all modified files:
80
+ - `<dir>/now.md`
81
+ - `<dir>/milestones.md`
82
+ - `<dir>/reports/YYYY-MM-DD.md`
83
+ - Any other modified tracked files surfaced by git status
84
+ - New untracked files that are clearly intentional (reports, design docs, config files)
85
+
86
+ Write a commit message summarising what was accomplished:
87
+ ```
88
+ session: <one-line summary of what was done>
89
+
90
+ - <bullet 1>
91
+ - <bullet 2>
92
+ ```
93
+
94
+ Push to origin main.
95
+
96
+ ## 7. Project-specific shutdown
97
+
98
+ Check if `<dir>/how-to/nu-pm-halt.md` exists. If it does, read it and execute all steps described there. These are project-specific teardown steps such as infrastructure hibernation, scaling down services, or other environment cleanup.
99
+
100
+ If the file does not exist, skip this step silently.
101
+
102
+ ## 8. Report back
103
+
104
+ Confirm:
105
+ - ✅ Docs updated (milestones.md, now.md)
106
+ - ✅ Session report written to `<dir>/reports/YYYY-MM-DD.md`
107
+ - ✅ Committed and pushed (show `git log --oneline -3`)
108
+ - Any project-specific shutdown steps completed (from how-to file, if present)
@@ -0,0 +1,81 @@
1
+ ---
2
+ name: nu-pm-one-pager
3
+ description: Create or update a one-pager.md for the project. Synthesises vision, roadmap, and milestone state into a crisp single-page summary, then iterates with the user.
4
+ ---
5
+
6
+ You are helping the user create or refine a one-pager for their project. This is an interactive, iterative process — generate a draft, present it, then work through changes together.
7
+
8
+ The target directory is: `$ARGUMENTS` (use `product/` if empty or not provided).
9
+
10
+ ## 1. Gather source material
11
+
12
+ Read all of these in parallel:
13
+ - `<dir>/vision.md` — problem, customer, north star (primary source)
14
+ - `<dir>/roadmap.md` — architecture, delivery phases, key decisions (skim)
15
+ - `<dir>/milestones.md` — what's done vs in-progress vs pending (current state)
16
+ - `<dir>/now.md` — most recent completed work (for "where we are" section)
17
+
18
+ If `<dir>/one-pager.md` already exists, read it too — you'll be updating it, not replacing it from scratch.
19
+
20
+ ## 2. Check for an existing one-pager
21
+
22
+ - If `<dir>/one-pager.md` exists: load it, note what's stale or missing, and propose targeted updates rather than a full rewrite.
23
+ - If it doesn't exist: generate a fresh draft using the structure below.
24
+
25
+ ## 3. Draft structure
26
+
27
+ Write a one-pager that fits on a single printed page (~400–600 words). Use this structure:
28
+
29
+ ```
30
+ # <Project Name> — One-Pager
31
+
32
+ ## The Problem
33
+ <2–3 sentences. What pain exists, for whom, and why it matters now.>
34
+
35
+ ## What We're Building
36
+ <2–3 sentences. The product in plain language — what it does, who uses it, how it's different.>
37
+
38
+ ## How It Works
39
+ <3–5 bullets. Key technical or product mechanisms — enough to be credible, not a deep dive.>
40
+
41
+ ## Where We Are
42
+ <Current milestone + 1–2 sentences on what's proven so far.>
43
+
44
+ ## What's Next
45
+ <Next 1–2 milestones in plain language — what they unlock.>
46
+
47
+ ## Why Now
48
+ <1–2 sentences. The timing argument — market window, infrastructure readiness, or strategic moment.>
49
+
50
+ ## Key Numbers
51
+ <3–5 concrete metrics — benchmark results, cost figures, customer counts, or performance numbers pulled from source docs.>
52
+ ```
53
+
54
+ Adapt section names if the project's vocabulary suggests better ones. Keep every section tight — cut anything that doesn't help a reader decide whether to care.
55
+
56
+ ## 4. Present the draft
57
+
58
+ Show the full draft. Then immediately below it, list:
59
+
60
+ ```
61
+ ### Suggested improvements
62
+ - <specific thing that could be sharper, more concrete, or better evidenced>
63
+ - <section that is weak or missing a number>
64
+ - <anything that sounds vague or that a skeptical reader would question>
65
+ ```
66
+
67
+ Limit suggestions to 3–5 — don't overwhelm. Focus on the highest-leverage improvements.
68
+
69
+ ## 5. Iterate
70
+
71
+ Ask the user: **"What would you like to change? I can also expand any section, add a section, sharpen the language, or update numbers."**
72
+
73
+ Make changes as requested. After each round, show only the updated section(s) unless the user asks to see the full doc again.
74
+
75
+ Keep iterating until the user says they're happy with it or asks to save.
76
+
77
+ ## 6. Save when ready
78
+
79
+ When the user confirms the draft is ready, write it to `<dir>/one-pager.md`. Tell them the file was written and that it can be regenerated any time by running `/nu-pm-one-pager`.
80
+
81
+ Do not write the file until the user explicitly says to save or approves it.
@@ -0,0 +1,151 @@
1
+ ---
2
+ name: nu-pm-research
3
+ description: Create a structured research document for market research, competitive analysis, or technology deep-dives. Guides the investigation interactively and writes findings to product/research/ or product/market-research/.
4
+ ---
5
+
6
+ You are helping the user conduct and document a structured research investigation. This produces a permanent artifact in the project — not a one-time answer, but a document that informs a decision.
7
+
8
+ The target directory is: `$ARGUMENTS` (use `product/` if empty or not provided).
9
+
10
+ ---
11
+
12
+ ## Step 1 — Check for existing research
13
+
14
+ List any files in `<dir>/research/` and `<dir>/market-research/` so the user knows what's already been done. If either directory doesn't exist, note it but continue.
15
+
16
+ Ask: **"What are you researching?"** Wait for the answer before proceeding.
17
+
18
+ ---
19
+
20
+ ## Step 2 — Classify the research type
21
+
22
+ Based on the user's answer, determine the type (or ask if unclear):
23
+
24
+ | Type | Description | Output directory |
25
+ |------|-------------|-----------------|
26
+ | `market` | Market size, customer segments, buying behavior, pricing | `<dir>/market-research/` |
27
+ | `competitive` | Specific competitors, their positioning, features, pricing, weaknesses | `<dir>/market-research/` |
28
+ | `technology` | Evaluating a technology, framework, protocol, or approach for use in the project | `<dir>/research/` |
29
+ | `user` | User interviews, surveys, behavioral patterns, workflow analysis | `<dir>/market-research/` |
30
+ | `domain` | Understanding a domain, industry, or regulatory context relevant to the product | `<dir>/research/` |
31
+
32
+ Confirm with the user: **"I'll file this as [type] research in [directory] — does that sound right?"**
33
+
34
+ ---
35
+
36
+ ## Step 3 — Frame the research
37
+
38
+ Ask these questions one at a time. Don't ask all at once.
39
+
40
+ 1. **"What specific question does this research need to answer?"**
41
+ Help them sharpen it if it's too broad. "How big is the market?" is weak. "Is there a segment of platform engineering teams managing >10 GPU workloads who are currently unserved by managed options?" is strong.
42
+
43
+ 2. **"What decision does this inform — and by when?"**
44
+ This prevents research from becoming an end in itself. Acceptable answers: "whether to price by seat or by GPU-hour (before M5)", "whether to build our own routing layer or use LiteLLM (this week)".
45
+
46
+ 3. **"What do we already know or believe?"**
47
+ Capture existing assumptions so the research can confirm or challenge them, not just collect neutral facts.
48
+
49
+ 4. **"What would change if the answer is X vs Y?"**
50
+ Forces the research to be decision-relevant. If both answers lead to the same action, the research isn't needed.
51
+
52
+ ---
53
+
54
+ ## Step 4 — Draft the research document
55
+
56
+ Generate a filename: `YYYY-MM-DD-<slug>.md` where slug is a 3-5 word kebab-case title derived from the question. Use today's date.
57
+
58
+ Write the document to the appropriate directory with this structure:
59
+
60
+ ```markdown
61
+ # <Research Title>
62
+
63
+ **Type**: <market / competitive / technology / user / domain>
64
+ **Status**: 🔄 in progress
65
+ **Question**: <the sharpened question from Step 3>
66
+ **Decision it informs**: <what changes based on the answer, and by when>
67
+ **Started**: YYYY-MM-DD
68
+
69
+ ---
70
+
71
+ ## What We Already Know
72
+
73
+ <Assumptions and prior knowledge going into this research. These are the things this research will confirm, challenge, or add nuance to.>
74
+
75
+ ---
76
+
77
+ ## Approach
78
+
79
+ <How this will be investigated — sources, methods, scope limits. Be honest about what won't be covered.>
80
+
81
+ ---
82
+
83
+ ## Findings
84
+
85
+ > Fill this in as research progresses. Structure by sub-question or theme, not by source.
86
+
87
+ ---
88
+
89
+ ## Recommendation
90
+
91
+ > Complete this last. State the answer to the research question directly, then explain.
92
+
93
+ **Answer**: <direct answer to the research question>
94
+
95
+ **Rationale**: <2–3 sentences — what the findings show and why they support this answer>
96
+
97
+ **Confidence**: <high / medium / low — and why>
98
+
99
+ **What this changes**: <specific impact on vision, roadmap, or a milestone decision>
100
+
101
+ ---
102
+
103
+ ## Sources
104
+
105
+ | Source | Type | Key takeaway |
106
+ |--------|------|-------------|
107
+ | | | |
108
+
109
+ ---
110
+
111
+ ## Open Questions
112
+
113
+ <Things this research raised but didn't answer. These may become their own research docs or spike investigations.>
114
+ ```
115
+
116
+ Show the user the created document path and tell them the structure is ready to fill in.
117
+
118
+ ---
119
+
120
+ ## Step 5 — Begin the investigation collaboratively
121
+
122
+ Ask: **"Do you want to work through this together now, or do you have findings to add?"**
123
+
124
+ **If working together now**: help the user think through the research systematically. For competitive research, work through competitors one by one. For technology research, evaluate against the project's specific requirements. For market research, help estimate from first principles rather than citing vague statistics. Push back on weak evidence. Fill in Findings and Recommendation collaboratively.
125
+
126
+ **If they have findings to add**: take what they give you and help structure it into the document. Ask clarifying questions to get to the Recommendation section — don't let the document end with findings but no answer.
127
+
128
+ ---
129
+
130
+ ## Step 6 — Complete the document
131
+
132
+ When findings are sufficient to answer the research question:
133
+
134
+ 1. Fill in the **Recommendation** section — answer the question directly
135
+ 2. Change **Status** from `🔄 in progress` to `✅ concluded`
136
+ 3. Fill in **What this changes** — this is the most important field: what specifically in the project should change as a result?
137
+
138
+ If the research reveals something significant that affects `vision.md` or `roadmap.md`, flag it:
139
+ > "This finding suggests [X] should change in your roadmap/vision. Want to run `/nu-pm-roadmap` or `/nu-pm-vision` to review?"
140
+
141
+ ---
142
+
143
+ ## Step 7 — If research can't be concluded today
144
+
145
+ If the user needs to stop before the research is complete, leave **Status** as `🔄 in progress` and add a note under Findings:
146
+
147
+ ```markdown
148
+ > **Paused YYYY-MM-DD**: <what was found so far, what remains to investigate>
149
+ ```
150
+
151
+ Tell the user: "This research doc is in `<path>`. Resume it any time by running `/nu-pm-research` — it will show you open research at the start."