Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Initialize a PM Brain — a markdown-native second brain for a product operator (PM, product lead, founder, or anyone accountable for one product or initiative) doing judgment-heavy work with scattered inputs. Detects greenfield vs. migration mode, runs a focused interview, copies the deterministic scaffold into the working directory, populates placeholders from interview answers, runs a self-test, and commits. Use when invoked via `/pm-brain` or when the user asks to set up a PM Brain.
.claude/skills/phuryn-pm-brain/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-08 | ✗→✓ | ▲ Improved | 68% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 53% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 66% | 0% |
| case-16 | ✗→✓ | ▲ Improved | 9% | 0% |
| case-17 | ✗→✓ | ▲ Improved | 39% | 0% |
This skill scaffolds and initializes a PM Brain in the current working directory. The scaffold is deterministic (static files copied as-is from scaffold/). The reasoning is adaptive (loaded from prompts/ per phase).
| Layer | Where it lives | Why | | --- | --- | --- | | Static structure — schemas, CLAUDE.md, INDEX.md, folder tree, file templates | scaffold/ | Deterministic. Same every time. No generation needed. | | Adaptive reasoning — mode detection, migration, interview, post-scaffold self-test | prompts/ | Probabilistic. Depends on what's in the directory and what the PM says. | | Orchestration — when to do what | This file | Glue. |
Behavior evolves independently from structure. Schemas can change without touching reasoning. Reasoning can improve without rewriting schemas.
/pm-brain (or pastes a setup request like "set up a PM Brain here").Do not invoke this skill for routine PM Brain operations after init (ingestion, prep, review). Those are handled by the seeded CLAUDE.md operating manual in the target repo.
Load prompts/mode-detection.md. Inspect the current working directory. Decide: greenfield (empty), migration (PM artifacts present), or active-repo (working repo — pause and ask).
Announce the detected mode to the operator in one line. For active-repo mode, do not proceed without confirmation.
Load prompts/migration.md. Copy (do not move) pre-existing PM artifacts into a source/ folder. Bulk-ingest with epistemic caution. Record cross-document conflicts for the post-scaffold contradictions block.
Load prompts/interview.md. Ask the 5 batches (greenfield) or only the gaps not covered by source artifacts (migration). Confirm back what you heard before scaffolding.
Copy every file and folder from scaffold/ into the current working directory — including the hidden .claude/ directory (hooks + per-brain settings) and dotfiles (.gitignore, .gitkeep). Preserve structure.
Use the form of copy that picks up dotfiles by default:
cp -R scaffold/. <dest>/ (the trailing /. is what makes dotfiles come along)Copy-Item -Recurse -Force scaffold\* <dest>\ followed by Copy-Item -Recurse -Force scaffold\.* <dest>\ (the second pass picks up .claude/ and .gitignore; Copy-Item -Recurse scaffold\* alone will silently drop them)After copying, verify the install by listing the destination — .claude/, .gitignore, and every top-level area folder (hypotheses/, decisions/, source/, ingestion/, knowledge/, stakeholders/, rules/, maintenance/, docs/) must all be present. If .claude/ is missing the hook won't fire on agent writes and schema violations will go uncaught — re-do the copy.
Critical rules:
.gitkeep files in empty folders..claude/hooks/validate_brain_file.py and .claude/settings.json exactly as shipped — they're what makes schema enforcement happen in-loop as the agent edits brain files.scaffold/ and re-version the skill.Walk the copied files and substitute interview answers. Use the full Batch → file mapping in prompts/interview.md § What the answers feed — that table is the canonical destination map. Every Batch answer has a documented home; do not silently drop any.
Highlights:
knowledge/strategy.md — north-star metric, priorities (Batch A). Non-goals start empty if PM didn't volunteer them; flag in next moves.knowledge/product/features/<slug>.md — one file per active feature (Batch C Q1), populated from the feature schema.knowledge/product/roadmap.md — Now / Next sections from Batch C.stakeholders/<slug>.md — one file per stakeholder (Batch B Q1); influence + friction tagged from Batch B Q2.knowledge/org/team.md, knowledge/org/rituals.md, knowledge/org/tools.md — from Batch B Q3 + Batch D Q1.knowledge/market/landscape.md and/or trends.md — from Batch D Q3.rules/discovery.md, rules/data.md — from Batch D Q1-2.CLAUDE.md § Operating preferences — autonomy mode + maintenance cadence (Batch E Q1-2).CLAUDE.md § Off-limits — Batch E Q3.For schema-templated files: copy the schema structure as-is, fill in what the interview provided, leave the rest with the placeholder comments intact.
Provenance: every populated field should be traceable back to either a Batch question or a source artifact. When a value came from a source artifact, link to it inline.
Load prompts/post-scaffold.md. Run:
git rev-parse --is-inside-work-tree in the current working directory.feat: initialize PM brain.git init in the current working directory, then stage and commit.Lead with the habit loop, not the scaffold. See prompts/post-scaffold.md § 7 for the exact ordering:
/review Friday) — specific slug + day.Do not lead with a folder map or "your scaffold is ready." Lead with what produces value in the next 24 hours.
Then stop and wait for the operator's first real task.
scaffold/ is that it's deterministic. If you find yourself rewriting CLAUDE.md or a schema from scratch during init, stop — copy from scaffold/ instead.pm-brain/ subfolder. The current working directory is the project root.pm-brain-skill/
├── SKILL.md # This file. Orchestration.
├── scaffold/ # Deterministic static structure. Copy as-is.
│ ├── .claude/ # Per-brain Claude Code config (hooks + settings)
│ │ ├── hooks/
│ │ │ └── validate_brain_file.py # PostToolUse schema validator
│ │ ├── commands/ # Slash commands shipped with the brain
│ │ └── settings.json # Wires the hook to Write|Edit
│ ├── .gitignore
│ ├── CLAUDE.md
│ ├── INDEX.md
│ ├── README.md
│ ├── knowledge/ # strategy, product, users, market, org
│ ├── stakeholders/
│ ├── hypotheses/
│ ├── decisions/
│ ├── rules/
│ ├── source/ # Verbatim audit anchors
│ ├── ingestion/ # Synthesized records
│ ├── maintenance/
│ └── docs/
└── prompts/ # Adaptive reasoning. Loaded per phase.
├── mode-detection.md
├── migration.md
├── interview.md
└── post-scaffold.md| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 24,822 | 7,497 | -70% | 1 | 1 | 0% | 3,995 | 3,216 | -19% | 0 | 0 | — |
case-02 | fail→fail | 10,878 | 4,140 | -62% | 1 | 1 | 0% | 1,979 | 2,426 | +23% | 0 | 0 | — |
case-03 | fail→fail | 10,708 | 4,166 | -61% | 1 | 1 | 0% | 1,872 | 2,250 | +20% | 0 | 0 | — |
case-04 | fail→fail | 10,857 | 8,319 | -23% | 1 | 1 | 0% | 1,819 | 3,513 | +93% | 0 | 0 | — |
case-05 | pass→fail | 16,100 | 2,953 | -82% | 1 | 1 | 0% | 2,224 | 2,250 | +1% | 0 | 0 | — |
case-06 | fail→fail | 7,150 | 5,479 | -23% | 1 | 1 | 0% | 1,046 | 2,284 | +118% | 0 | 0 | — |
case-15 | pass→fail | 4,528 | 1,910 | -58% | 1 | 1 | 0% | 737 | 2,365 | +221% | 0 | 0 | — |
case-07 | fail→fail | 9,514 | 3,596 | -62% | 1 | 1 | 0% | 1,412 | 2,658 | +88% | 0 | 0 | — |
case-08 | fail→pass | 10,600 | 5,592 | -47% | 1 | 1 | 0% | 1,849 | 3,098 | +68% | 0 | 0 | — |
case-09 | pass→pass | 8,233 | 4,589 | -44% | 1 | 1 | 0% | 1,492 | 2,864 | +92% | 0 | 0 | — |
case-10 | fail→pass | 9,540 | 2,701 | -72% | 1 | 1 | 0% | 1,633 | 2,493 | +53% | 0 | 0 | — |
case-11 | pass→pass | 10,338 | 10,197 | -1% | 1 | 1 | 0% | 1,695 | 3,688 | +118% | 0 | 0 | — |
case-12 | fail→pass | 9,450 | 2,703 | -71% | 1 | 1 | 0% | 1,461 | 2,429 | +66% | 0 | 0 | — |
case-13 | fail→fail | 6,546 | 2,860 | -56% | 1 | 1 | 0% | 1,054 | 2,579 | +145% | 0 | 0 | — |
case-14 | pass→fail | 4,486 | 3,350 | -25% | 1 | 1 | 0% | 753 | 2,672 | +255% | 0 | 0 | — |
case-16 | fail→pass | 14,262 | 3,061 | -79% | 1 | 1 | 0% | 2,333 | 2,549 | +9% | 0 | 0 | — |
case-17 | fail→pass | 11,856 | 3,710 | -69% | 1 | 1 | 0% | 1,889 | 2,617 | +39% | 0 | 0 | — |
case-18 | fail→pass | 7,442 | 2,793 | -62% | 1 | 1 | 0% | 1,179 | 2,566 | +118% | 0 | 0 | — |
case-19 | fail→pass | 10,875 | 1,895 | -83% | 1 | 1 | 0% | 1,783 | 2,347 | +32% | 0 | 0 | — |
case-20 | fail→fail | 10,973 | 2,584 | -76% | 1 | 1 | 0% | 1,829 | 2,473 | +35% | 0 | 0 | — |
case-21 | fail→pass | 10,441 | 3,409 | -67% | 1 | 1 | 0% | 1,683 | 2,605 | +55% | 0 | 0 | — |
case-22 | fail→fail | 10,252 | 3,596 | -65% | 1 | 1 | 0% | 1,734 | 2,689 | +55% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 19 counted toward the lift figure. The other 3 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +23 percentage points is the difference between those two pass rates over the 19 comparable cases. 4 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.