create-pmos 0.1.0 → 0.1.2
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.
- package/README.md +219 -19
- package/package.json +1 -1
- package/payload/KIT-VERSION +1 -1
- package/payload/README.md +43 -0
package/README.md
CHANGED
|
@@ -1,30 +1,230 @@
|
|
|
1
1
|
# create-pmos
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
**A product manager's operating system you can adopt in five minutes — no coding expertise
|
|
4
|
+
required.** One command puts a disciplined, eval-driven PM workflow inside your own repo:
|
|
5
|
+
initiative → PRD → eval rubric → agreed contract → build → three gates. Your AI coding agent
|
|
6
|
+
(e.g. Claude Code) does the building. You do the judging. Everything stays in your folder — no
|
|
7
|
+
database, no account, no network calls, no telemetry.
|
|
8
|
+
|
|
9
|
+
## Whose task is what
|
|
10
|
+
|
|
11
|
+
This kit is built on a simple separation of tasks:
|
|
12
|
+
|
|
13
|
+
- **Your task** is direction and judgment: choose the goals, say what "good" means *before* the
|
|
14
|
+
work starts, and accept or return what comes back. That's it — and no one else can do it.
|
|
15
|
+
- **The agent's task** is the building: code, documents, analysis, following the written protocol.
|
|
16
|
+
- **The kit's task** is keeping both of you honest: gates that can't be sweet-talked, records that
|
|
17
|
+
don't rely on memory, and metrics that show the red first.
|
|
18
|
+
|
|
19
|
+
You never need to write code. You need the courage to say what you want, and the final word on
|
|
20
|
+
whether you got it — which you already have.
|
|
21
|
+
|
|
22
|
+
## Getting started (5 minutes)
|
|
23
|
+
|
|
24
|
+
**Have an existing project?**
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
cd my-product
|
|
28
|
+
npx create-pmos@latest
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
**Starting from nothing but an idea?**
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
mkdir my-product && cd my-product
|
|
35
|
+
git init # git is required (its branches/merges ARE the workflow); GitHub is optional
|
|
36
|
+
npx create-pmos@latest
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
What you'll see:
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
✅ PMOS kit vendored at /home/you/my-product/pmos (kernel-source: pmos@1740a5e)
|
|
43
|
+
|
|
44
|
+
Next steps in /home/you/my-product:
|
|
45
|
+
1. cp pmos/templates/pmos-gate.yml .github/workflows/pmos-gate.yml (only if on GitHub)
|
|
46
|
+
2. Add to the repo's CLAUDE.md: "This product is PMOS-managed (file mode) — read pmos/AGENTS.md before any work."
|
|
47
|
+
3. Commit the pmos/ folder. Then follow pmos/AGENTS.md for every run.
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Do those three lines and setup is over. A fresh kit with zero history is not behind — it is
|
|
51
|
+
exactly where every product starts.
|
|
52
|
+
|
|
53
|
+
### Behind a corporate proxy? (403 on install)
|
|
54
|
+
|
|
55
|
+
On many work laptops, npm goes through a company registry mirror — and a brand-new public package
|
|
56
|
+
gets **403 Forbidden** until it's been vetted (a sandboxed AI session's network proxy can do the
|
|
57
|
+
same). That's your environment being careful, not something broken — and there are three clean
|
|
58
|
+
ways through:
|
|
59
|
+
|
|
60
|
+
1. **Try a plain terminal first** — if the 403 came from inside an AI-session sandbox, the normal
|
|
61
|
+
terminal may just work.
|
|
62
|
+
2. **Ask IT to allowlist `create-pmos`** — a routine request, and an easy one: public npm, MIT,
|
|
63
|
+
zero dependencies, no install scripts, no network code.
|
|
64
|
+
3. **The registry-free install** — the package is just a file, so skip the registry entirely.
|
|
65
|
+
From any allowed network, download
|
|
66
|
+
`https://registry.npmjs.org/create-pmos/-/create-pmos-<version>.tgz`, move it to the work
|
|
67
|
+
machine, then:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
tar xzf create-pmos-*.tgz
|
|
71
|
+
node package/bin/create-pmos.js my-product
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Same result, byte-identical kit, no proxy involved. (Which is fitting — keeping your work
|
|
75
|
+
inside your own boundary is the whole point of this kit.)
|
|
76
|
+
|
|
77
|
+
## Your first conversation
|
|
78
|
+
|
|
79
|
+
Open the folder with your coding agent and talk to it like a colleague — clear about the goal,
|
|
80
|
+
open about what you don't know. Copy-paste starters:
|
|
81
|
+
|
|
82
|
+
**You have an existing product** (let the agent learn it first):
|
|
83
|
+
|
|
84
|
+
> Read pmos/AGENTS.md. Then follow pmos/skills/ingest-repo.skill: scan this repository read-only
|
|
85
|
+
> and draft what you learn under pmos/okf/product/ for my review. Don't change any product code.
|
|
86
|
+
|
|
87
|
+
**You have only an idea:**
|
|
88
|
+
|
|
89
|
+
> Read pmos/AGENTS.md. This is a new product: [two sentences on what it is and who it serves].
|
|
90
|
+
> Help me seed pmos/planning/okrs/ with one objective and 2–3 key results, then propose one small
|
|
91
|
+
> first initiative — optimized for a fast first win, not for completeness.
|
|
92
|
+
|
|
93
|
+
**You know exactly what you want built:**
|
|
94
|
+
|
|
95
|
+
> Read pmos/AGENTS.md. I want: [describe the outcome]. Create the initiative file, then draft the
|
|
96
|
+
> PRD and the eval rubric for my approval before you build anything.
|
|
97
|
+
|
|
98
|
+
## The rhythm (every piece of work)
|
|
99
|
+
|
|
100
|
+
1. **Name the work.** An initiative file is created in `pmos/state/initiatives/` — anchored to one
|
|
101
|
+
of your goals, so nothing exists "just because."
|
|
102
|
+
2. **Define "good" first.** The agent drafts a PRD and a scoring rubric; you approve the contract
|
|
103
|
+
(`PM_approved: true`) before any building. Deciding the standard in advance is your task —
|
|
104
|
+
it is also what makes the agent's verdicts mean something later.
|
|
105
|
+
3. **The agent builds** on its own branch and opens the work for review. A gate checks that every
|
|
106
|
+
change is anchored. If someone (including the agent) skips the protocol, you'll see:
|
|
107
|
+
|
|
108
|
+
```
|
|
109
|
+
❌ initiative gate FAILED — Not anchored. Name the branch 'initiative/<id>' or add
|
|
110
|
+
'Initiative: <id>' to the PR body ... See pmos/AGENTS.md.
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
The gate isn't scolding anyone — it's protecting your standard when you're not looking.
|
|
114
|
+
(No GitHub? Run it yourself before merging:
|
|
115
|
+
`HEAD_REF=$(git branch --show-current) bash pmos/scripts/gate-initiative.sh`)
|
|
116
|
+
4. **An evaluator scores the work** against your rubric — adversarial by design, and advisory:
|
|
117
|
+
|
|
118
|
+
> Read pmos/AGENTS.md, then follow pmos/skills/evaluator.skill: score the work on branch
|
|
119
|
+
> initiative/[id] against its rubric. Be skeptical — try to refute it. Append your verdict to
|
|
120
|
+
> pmos/state/evals.jsonl.
|
|
121
|
+
|
|
122
|
+
5. **You accept — or return it.** Your merge is the final gate. Returning imperfect work is not
|
|
123
|
+
conflict; it's the job. Record your call:
|
|
124
|
+
|
|
125
|
+
> I accept this run. Append the acceptance to pmos/state/acceptances.jsonl with pm_label
|
|
126
|
+
> "pass" and corrections: [how many things you had to fix].
|
|
127
|
+
|
|
128
|
+
## Your weekly ten minutes
|
|
7
129
|
|
|
8
130
|
```bash
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
131
|
+
python3 pmos/scripts/metrics.py
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
What you'll see:
|
|
135
|
+
|
|
12
136
|
```
|
|
137
|
+
PMOS kit metrics — 4 run(s), 4 eval(s), 3 acceptance record(s)
|
|
138
|
+
|
|
139
|
+
B1 north star: 0.33 human corrections per accepted run (over 3 accepted run(s); lower is better)
|
|
140
|
+
B2 throughput: 3 accepted run(s)
|
|
141
|
+
eval pass rate: 75% (3/4)
|
|
142
|
+
B4 calibration (n=3): raw agreement 100%, TPR 100%, TNR n/a — no PM fails seen (leniency blind spot), ...
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Reds print first, on purpose — facing facts without flinching is how the numbers stay honest. On
|
|
146
|
+
day one it says `UNMEASURABLE — no accepted runs yet`. That's not failure; that's a truthful
|
|
147
|
+
starting line. And if the evaluator starts passing everything while you keep fixing things, a
|
|
148
|
+
tripwire fires and tells you the judge has gone soft. A weekly prompt, if you'd rather talk than
|
|
149
|
+
read:
|
|
150
|
+
|
|
151
|
+
> Read pmos/state/discoveries.md and run pmos/scripts/metrics.py. Tell me: what's red, what
|
|
152
|
+
> friction appeared more than once, and what one improvement you'd propose. Don't change anything
|
|
153
|
+
> yet.
|
|
13
154
|
|
|
14
|
-
|
|
15
|
-
it is the whole protocol. `pmos/README.md` is the operator guide; `pmos/scripts/metrics.py`
|
|
16
|
-
prints your north-star metrics from the recorded state.
|
|
155
|
+
## How it guardrails the SDLC
|
|
17
156
|
|
|
18
|
-
|
|
157
|
+
Each stage of the loop has a mechanism behind it — not a promise, a mechanism:
|
|
158
|
+
|
|
159
|
+
| Without the kit | With the kit |
|
|
160
|
+
|---|---|
|
|
161
|
+
| Work starts because someone felt like it | **Nothing exists without an initiative** anchored to a goal — the gate rejects unanchored work, automatically on GitHub, by one command locally |
|
|
162
|
+
| "Good" gets defined after seeing the output (so everything looks fine) | **The rubric and contract are written first** — building is blocked until you've flipped `PM_approved: true` |
|
|
163
|
+
| The builder grades their own homework | **A separate adversarial evaluator scores against your rubric** — and even its verdict is advisory; the merge is yours alone |
|
|
164
|
+
| History gets quietly rewritten | **State files are append-only** — corrections are added, never erased; git keeps the audit trail |
|
|
165
|
+
| Metrics flatter you | **Reds print first**, and a tripwire fires if the evaluator passes everything while you keep fixing things — a green that hides red gets caught |
|
|
166
|
+
| Tool updates overwrite your data | **Kernel updates never touch your records** — `state/`, `planning/`, `okf/product/` are structurally off-limits to `--update` |
|
|
167
|
+
|
|
168
|
+
Notice none of these guardrails restrict *you* — they restrict the process, so your judgment is
|
|
169
|
+
exercised at the two moments it matters: defining "good" and accepting the result.
|
|
170
|
+
|
|
171
|
+
## Staying on the path (drift protection)
|
|
172
|
+
|
|
173
|
+
Drift never announces itself — it's always "just this once, it's small." The kit assumes that and
|
|
174
|
+
defends structurally rather than relying on discipline:
|
|
175
|
+
|
|
176
|
+
- **The protocol is re-taught, not remembered.** The `CLAUDE.md` line makes every fresh agent
|
|
177
|
+
session read `pmos/AGENTS.md` before working — so a new session, a new model, or a new teammate
|
|
178
|
+
starts on-protocol by default instead of drifting from a stale memory.
|
|
179
|
+
- **The gate makes skipping visible.** On GitHub it's a failing check nobody can miss; locally
|
|
180
|
+
it's the one command before a merge. Keep the `no-initiative` escape hatch for genuine chores
|
|
181
|
+
only — if you find yourself reaching for it weekly, that's a signal, not a shortcut.
|
|
182
|
+
- **The weekly ten minutes is the ritual.** Put `metrics.py` + the discoveries scan on your
|
|
183
|
+
calendar. A friction that shows up twice with no decision gets promoted to a rule — that's how
|
|
184
|
+
the process improves instead of eroding.
|
|
185
|
+
- **Ask the agent to audit itself.** Any time you feel drift:
|
|
186
|
+
|
|
187
|
+
> List every merge in the last two weeks. For each: which initiative anchors it, did the rubric
|
|
188
|
+
> exist before the build, and is there an acceptance record? Report gaps without fixing them.
|
|
189
|
+
|
|
190
|
+
- **A lapse is data, not a verdict.** If you skipped the ritual for a month, the files show
|
|
191
|
+
exactly where the record stops — restart from there. The kit never shames a gap; it just makes
|
|
192
|
+
the gap visible enough that you can choose to close it.
|
|
193
|
+
|
|
194
|
+
## See your workflow — build your own dashboard
|
|
195
|
+
|
|
196
|
+
The entire state is plain, open files (`state/*.jsonl`, `state/initiatives/*.md`) — which means
|
|
197
|
+
**any AI platform can turn it into a dashboard on demand.** No product to buy, no service to
|
|
198
|
+
connect. In Claude (or Claude Code) in your product folder, paste:
|
|
199
|
+
|
|
200
|
+
> Read pmos/state/initiatives/*.md, pmos/state/runs.jsonl, evals.jsonl, acceptances.jsonl, and
|
|
201
|
+
> pmos/state/discoveries.md. Generate a single, self-contained HTML file at pmos/dashboard.html —
|
|
202
|
+
> no external scripts or network calls — showing: (1) a board with initiatives as cards in columns
|
|
203
|
+
> by stage (intake / spec / build / eval / accepted); (2) the north star (corrections per accepted
|
|
204
|
+
> run) and eval pass rate as stat tiles; (3) a recent-runs timeline with verdicts; (4) open
|
|
205
|
+
> frictions. Reds and gaps first, then greens.
|
|
206
|
+
|
|
207
|
+
Open `pmos/dashboard.html` in a browser. Regenerate it whenever you want a fresh view (or ask for
|
|
208
|
+
it weekly as part of the ritual) — it's disposable by design. On other platforms the same works:
|
|
209
|
+
upload or paste the state files to ChatGPT/Gemini and ask for the same artifact. Two rules keep
|
|
210
|
+
this safe: the dashboard is a **read-only view, never the system of record** (the files stay the
|
|
211
|
+
truth), and if your product is confidential, generate it with a tool that runs where the files
|
|
212
|
+
live rather than uploading them elsewhere.
|
|
213
|
+
|
|
214
|
+
## Keeping the kit fresh
|
|
215
|
+
|
|
216
|
+
```bash
|
|
217
|
+
npx create-pmos@latest --update
|
|
218
|
+
```
|
|
19
219
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
- `pmos/scripts/` — a fail-closed CI gate for unanchored PRs, metrics, kernel updater
|
|
24
|
-
- `pmos/state/` — your append-only operational record (initiatives, runs, evals, acceptances)
|
|
220
|
+
Refreshes the skills, concepts, and scripts only. Your records — `state/`, `planning/`,
|
|
221
|
+
`okf/product/` — are yours, and an update never touches them. `pmos/KIT-VERSION` always says
|
|
222
|
+
exactly what you're running.
|
|
25
223
|
|
|
26
224
|
## Scope & support
|
|
27
225
|
|
|
28
|
-
This package contains only the PMOS workflow
|
|
29
|
-
contacts, any
|
|
30
|
-
upstream, updated when the maintainer publishes.
|
|
226
|
+
This package contains only the PMOS workflow kernel. It holds no reference to, and never
|
|
227
|
+
contacts, any external backend — the publish pipeline verifies that on every release. MIT,
|
|
228
|
+
provided as-is: a snapshot from a private upstream, updated when the maintainer publishes.
|
|
229
|
+
Issues/PRs are not currently monitored — the kit is deliberately self-sufficient; everything it
|
|
230
|
+
needs to teach you is in `pmos/AGENTS.md` and `pmos/README.md`.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-pmos",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "Scaffold the PMOS portable kit — run the PMOS product-management workflow (initiative → PRD → eval rubric → contract → build → three gates) entirely inside your own repo, with all state as git-versioned files. No database, no network, no telemetry.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"bin": {
|
package/payload/KIT-VERSION
CHANGED
package/payload/README.md
CHANGED
|
@@ -30,6 +30,21 @@ printed next steps (wire the CI workflow, point CLAUDE.md at `pmos/AGENTS.md`, c
|
|
|
30
30
|
From a PMOS checkout the equivalent is `kit/build-kit.sh <this-repo-root>`; the npm package's
|
|
31
31
|
payload is assembled by that same script at publish time, so the two never drift.
|
|
32
32
|
|
|
33
|
+
**Empty folder / no repo yet?** `git init` first — git is required (branches and merges ARE the
|
|
34
|
+
workflow: `initiative/<id>` branches, merge = Acceptance), but GitHub is optional. With no
|
|
35
|
+
existing code there is nothing to ingest: start by seeding `planning/okrs/` (the okr skill) and a
|
|
36
|
+
first right-sized initiative; the product's code grows in the same folder.
|
|
37
|
+
|
|
38
|
+
**403 on `npx` (corporate proxy/mirror)?** Try a plain terminal (not a sandboxed AI session); ask
|
|
39
|
+
IT to allowlist `create-pmos` (zero deps, no install scripts, no network code); or install
|
|
40
|
+
registry-free — download the `.tgz` from `registry.npmjs.org/create-pmos/-/create-pmos-<v>.tgz`
|
|
41
|
+
on any allowed network, then `tar xzf create-pmos-*.tgz && node package/bin/create-pmos.js <dir>`.
|
|
42
|
+
|
|
43
|
+
**No GitHub?** Skip the workflow file and run the gate by hand before merging any initiative
|
|
44
|
+
branch: `HEAD_REF=$(git branch --show-current) bash pmos/scripts/gate-initiative.sh` — green means
|
|
45
|
+
anchored; your local `git merge` is the Acceptance Gate. If the repo later lands on GitHub, copy
|
|
46
|
+
`templates/pmos-gate.yml` into `.github/workflows/` and the gate becomes automatic.
|
|
47
|
+
|
|
33
48
|
## Operate (every piece of work)
|
|
34
49
|
|
|
35
50
|
1. Create `pmos/state/initiatives/<id>.md` (stage `intake`, anchored to a KR in `planning/okrs/`).
|
|
@@ -42,6 +57,34 @@ payload is assembled by that same script at publish time, so the two never drift
|
|
|
42
57
|
5. Acceptance Gate: the **human PM** merges and disposes; append to `state/acceptances.jsonl`
|
|
43
58
|
(`accepted`, `pm_label`, corrections). Weekly: run `scripts/metrics.py`, read the red first.
|
|
44
59
|
|
|
60
|
+
## Sample prompts (copy-paste, no coding required)
|
|
61
|
+
|
|
62
|
+
Talk to your agent like a colleague; your task is direction and judgment, its task is the build.
|
|
63
|
+
|
|
64
|
+
- **Onboard an existing product:** "Read pmos/AGENTS.md. Then follow pmos/skills/ingest-repo.skill:
|
|
65
|
+
scan this repository read-only and draft what you learn under pmos/okf/product/ for my review.
|
|
66
|
+
Don't change any product code."
|
|
67
|
+
- **Greenfield:** "Read pmos/AGENTS.md. This is a new product: [two sentences]. Seed
|
|
68
|
+
pmos/planning/okrs/ with one objective and 2–3 key results, then propose one small first
|
|
69
|
+
initiative — fast first win, not completeness."
|
|
70
|
+
- **Start a piece of work:** "Read pmos/AGENTS.md. I want: [outcome]. Create the initiative file,
|
|
71
|
+
then draft the PRD and eval rubric for my approval before you build anything."
|
|
72
|
+
- **Review Gate:** "Follow pmos/skills/evaluator.skill: score the work on branch initiative/[id]
|
|
73
|
+
against its rubric. Be skeptical — try to refute it. Append the verdict to pmos/state/evals.jsonl."
|
|
74
|
+
- **Acceptance:** "I accept this run. Append the acceptance to pmos/state/acceptances.jsonl with
|
|
75
|
+
pm_label 'pass' and corrections: [n]."
|
|
76
|
+
- **Weekly review:** "Read pmos/state/discoveries.md and run pmos/scripts/metrics.py. Tell me
|
|
77
|
+
what's red, what friction appeared more than once, and one improvement you'd propose. Don't
|
|
78
|
+
change anything yet."
|
|
79
|
+
- **Drift audit:** "List every merge in the last two weeks. For each: which initiative anchors it,
|
|
80
|
+
did the rubric exist before the build, and is there an acceptance record? Report gaps without
|
|
81
|
+
fixing them."
|
|
82
|
+
- **Dashboard on demand:** "Read pmos/state/ (initiatives, runs.jsonl, evals.jsonl,
|
|
83
|
+
acceptances.jsonl, discoveries.md). Generate a self-contained pmos/dashboard.html — no external
|
|
84
|
+
scripts or network — with a stage-column board of initiatives, north-star + pass-rate tiles, a
|
|
85
|
+
recent-runs timeline, and open frictions. Reds and gaps first." (Read-only view — the files stay
|
|
86
|
+
the system of record.)
|
|
87
|
+
|
|
45
88
|
## Update the kernel (occasionally)
|
|
46
89
|
|
|
47
90
|
`npx create-pmos@latest --update` (or `pmos/scripts/kit-update.sh <path-to-pmos-checkout>` from a
|