pm-claude-skills 43.0.0 → 45.0.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.
Files changed (68) hide show
  1. package/README.md +46 -10
  2. package/bin/chain.mjs +113 -0
  3. package/bin/cli.mjs +45 -1
  4. package/bin/council.mjs +94 -0
  5. package/bin/init.mjs +111 -0
  6. package/bin/install.mjs +179 -0
  7. package/bin/lib/providers.mjs +64 -0
  8. package/bin/migrate.mjs +88 -0
  9. package/bin/reckoning.mjs +112 -0
  10. package/bin/verify.mjs +56 -0
  11. package/connectors/mcp-pairings.md +13 -0
  12. package/exports/README.md +1 -1
  13. package/exports/aider/README.md +4 -1
  14. package/exports/aider/pm-calculators/cohort-curve-model/cohort-curve-model.md +44 -0
  15. package/exports/aider/pm-calculators/pricing-sensitivity-model/pricing-sensitivity-model.md +44 -0
  16. package/exports/aider/pm-calculators/runway-monte-carlo/runway-monte-carlo.md +44 -0
  17. package/exports/chatgpt/README.md +4 -1
  18. package/exports/chatgpt/pm-calculators/cohort-curve-model/SYSTEM_PROMPT.md +44 -0
  19. package/exports/chatgpt/pm-calculators/pricing-sensitivity-model/SYSTEM_PROMPT.md +44 -0
  20. package/exports/chatgpt/pm-calculators/runway-monte-carlo/SYSTEM_PROMPT.md +44 -0
  21. package/exports/cline/README.md +4 -1
  22. package/exports/cline/pm-calculators/cohort-curve-model/cohort-curve-model.md +44 -0
  23. package/exports/cline/pm-calculators/pricing-sensitivity-model/pricing-sensitivity-model.md +44 -0
  24. package/exports/cline/pm-calculators/runway-monte-carlo/runway-monte-carlo.md +44 -0
  25. package/exports/continue/README.md +4 -1
  26. package/exports/continue/pm-calculators/cohort-curve-model/cohort-curve-model.md +49 -0
  27. package/exports/continue/pm-calculators/pricing-sensitivity-model/pricing-sensitivity-model.md +49 -0
  28. package/exports/continue/pm-calculators/runway-monte-carlo/runway-monte-carlo.md +49 -0
  29. package/exports/cursor/README.md +4 -1
  30. package/exports/cursor/pm-calculators/cohort-curve-model/cohort-curve-model.mdc +50 -0
  31. package/exports/cursor/pm-calculators/pricing-sensitivity-model/pricing-sensitivity-model.mdc +50 -0
  32. package/exports/cursor/pm-calculators/runway-monte-carlo/runway-monte-carlo.mdc +50 -0
  33. package/exports/gemini/README.md +4 -1
  34. package/exports/gemini/pm-calculators/cohort-curve-model/GEM_INSTRUCTIONS.md +48 -0
  35. package/exports/gemini/pm-calculators/pricing-sensitivity-model/GEM_INSTRUCTIONS.md +48 -0
  36. package/exports/gemini/pm-calculators/runway-monte-carlo/GEM_INSTRUCTIONS.md +48 -0
  37. package/exports/kilocode/README.md +4 -1
  38. package/exports/kilocode/pm-calculators/cohort-curve-model/cohort-curve-model.md +44 -0
  39. package/exports/kilocode/pm-calculators/pricing-sensitivity-model/pricing-sensitivity-model.md +44 -0
  40. package/exports/kilocode/pm-calculators/runway-monte-carlo/runway-monte-carlo.md +44 -0
  41. package/exports/obsidian/README.md +4 -1
  42. package/exports/obsidian/pm-calculators/cohort-curve-model/cohort-curve-model.md +59 -0
  43. package/exports/obsidian/pm-calculators/pricing-sensitivity-model/pricing-sensitivity-model.md +59 -0
  44. package/exports/obsidian/pm-calculators/runway-monte-carlo/runway-monte-carlo.md +59 -0
  45. package/exports/roo/README.md +4 -1
  46. package/exports/roo/pm-calculators/cohort-curve-model/cohort-curve-model.md +44 -0
  47. package/exports/roo/pm-calculators/pricing-sensitivity-model/pricing-sensitivity-model.md +44 -0
  48. package/exports/roo/pm-calculators/runway-monte-carlo/runway-monte-carlo.md +44 -0
  49. package/exports/windsurf/README.md +4 -1
  50. package/exports/windsurf/pm-calculators/cohort-curve-model/cohort-curve-model.md +49 -0
  51. package/exports/windsurf/pm-calculators/pricing-sensitivity-model/pricing-sensitivity-model.md +49 -0
  52. package/exports/windsurf/pm-calculators/runway-monte-carlo/runway-monte-carlo.md +49 -0
  53. package/exports/zed/README.md +4 -1
  54. package/exports/zed/pm-calculators/cohort-curve-model/cohort-curve-model.md +44 -0
  55. package/exports/zed/pm-calculators/pricing-sensitivity-model/pricing-sensitivity-model.md +44 -0
  56. package/exports/zed/pm-calculators/runway-monte-carlo/runway-monte-carlo.md +44 -0
  57. package/mcp/README.md +5 -0
  58. package/mcp/server.mjs +69 -0
  59. package/package.json +1 -1
  60. package/skills/cohort-curve-model/SKILL.md +49 -0
  61. package/skills/cohort-curve-model/scripts/cohort_model.py +148 -0
  62. package/skills/pricing-sensitivity-model/SKILL.md +49 -0
  63. package/skills/pricing-sensitivity-model/scripts/van_westendorp.py +168 -0
  64. package/skills/runway-monte-carlo/SKILL.md +49 -0
  65. package/skills/runway-monte-carlo/scripts/runway_sim.py +159 -0
  66. package/templates/apprentice/README.md +26 -0
  67. package/templates/apprentice/index.mjs +65 -0
  68. package/templates/apprentice/package.json +10 -0
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # 🧠 PM Skills — 451 Professional Agent Skills for Claude, ChatGPT, Gemini, Cursor, Codex & Hermes
1
+ # 🧠 PM Skills — 454 Professional Agent Skills for Claude, ChatGPT, Gemini, Cursor, Codex & Hermes
2
2
 
3
3
  [![In the official Anthropic plugin directory](https://img.shields.io/badge/Anthropic%20Plugin%20Directory-Published-D97757?logo=anthropic&logoColor=white)](#-quick-install-2-minutes)
4
4
  [![Stars](https://img.shields.io/github/stars/mohitagw15856/pm-claude-skills?style=social)](https://github.com/mohitagw15856/pm-claude-skills/stargazers)
@@ -9,7 +9,8 @@
9
9
  [![MCP](https://img.shields.io/badge/MCP-registry-0098FF?logo=modelcontextprotocol&logoColor=white)](https://github.com/mohitagw15856/pm-claude-skills#-use-it-anywhere--the-ai-ecosystem)
10
10
  [![Remote MCP](https://img.shields.io/badge/ChatGPT%20%C2%B7%20Claude.ai-connector-10A37F)](mcp-remote/)
11
11
  [![Smithery](https://smithery.ai/badge/mohit15856/pm-skills)](https://smithery.ai/servers/mohit15856/pm-skills)
12
- [![Skills](https://img.shields.io/badge/skills-451-blue)](https://github.com/mohitagw15856/pm-claude-skills)
12
+ [![Skills](https://img.shields.io/badge/skills-454-blue)](https://github.com/mohitagw15856/pm-claude-skills)
13
+ [![Free runs served](https://img.shields.io/endpoint?url=https%3A%2F%2Fpm-skills-mcp.pm-claude-skills.workers.dev%2Ftry%2Fstats&cacheSeconds=300)](https://mohitagw15856.github.io/pm-claude-skills/)
13
14
  [![eval](https://img.shields.io/badge/eval--scored-208%20%C2%B7%20avg%204.8%2F5-brightgreen)](https://mohitagw15856.github.io/pm-claude-skills/leaderboard.html)
14
15
  [![Subagents](https://img.shields.io/badge/subagents-4-blueviolet)](agents/)
15
16
  [![Commands](https://img.shields.io/badge/slash%20commands-21-blueviolet)](commands/)
@@ -25,7 +26,7 @@
25
26
 
26
27
  <p align="center">
27
28
  <a href="https://mohitagw15856.github.io/pm-claude-skills/">
28
- <img src="https://readme-typing-svg.demolab.com?font=Inter&weight=600&size=24&pause=900&color=D97757&center=true&vCenter=true&width=720&lines=451+pro+AI+skills;PRDs%2C+roadmaps%2C+launches+%E2%80%94+done+right;Run+any+one+free+in+your+browser" alt="PM Skills" />
29
+ <img src="https://readme-typing-svg.demolab.com?font=Inter&weight=600&size=24&pause=900&color=D97757&center=true&vCenter=true&width=720&lines=454+pro+AI+skills;PRDs%2C+roadmaps%2C+launches+%E2%80%94+done+right;Run+any+one+free+in+your+browser" alt="PM Skills" />
29
30
  </a>
30
31
  </p>
31
32
 
@@ -74,11 +75,11 @@
74
75
  </details>
75
76
 
76
77
  > **PM stands for Professional, not just Product Management.**
77
- > 451 professional skills + 4 agent templates across 65 bundles covering 25 professions. Built for Claude Code — and now portable to ChatGPT, Gemini, and Hermes Agent. Built by a PM, used by everyone.
78
+ > 454 professional skills + 4 agent templates across 65 bundles covering 25 professions. Built for Claude Code — and now portable to ChatGPT, Gemini, and Hermes Agent. Built by a PM, used by everyone.
78
79
 
79
80
  A community-built library of professional skills for every field — product management, engineering, customer success, marketing, social media, writers, design, legal, finance, HR, sales, operations, research, and more. Each skill is a structured `SKILL.md` file that teaches an AI assistant how to produce professional-grade outputs for your workflows. Skills run natively in **Claude Code** and **Hermes Agent** (same open `SKILL.md` standard), and ship as ready-to-paste exports for **ChatGPT** and **Gemini** — see [Works With](#-works-with--cross-tool-compatibility).
80
81
 
81
- **🆕 v43.0.0 — the local-first & learning wave:** 🗂 connect the [Firm](https://mohitagw15856.github.io/pm-claude-skills/firm.html) & [Boardroom](https://mohitagw15856.github.io/pm-claude-skills/boardroom.html) to a **real folder on disk** (minutes, verdicts & predictions land as markdown Claude Code can read), 🔗 share a whole Boardroom session as a **replay link** (the URL *is* the data — no server), 🪑 swappable **bench presets** (🦈 fundraising / 🏥 healthcare / 🚀 seed-stage) + build-your-own executives + [bench packs in the registry](community/), 🎤 **[The Panel](https://mohitagw15856.github.io/pm-claude-skills/hiring.html)** YOU interview an AI candidate with a hidden archetype and a coach scores your questioning, 🎓 **[The Academy](https://mohitagw15856.github.io/pm-claude-skills/academy.html)** — 18 anti-pattern drills across 3 tracks with live arena exams (no key needed), 🎁 **[Wrapped](https://mohitagw15856.github.io/pm-claude-skills/wrapped.html)** your practice as an animated story + share card, 🩺 `npx pm-claude-skills doctor`, 🧬 a blind-judged [evolution loop](scripts/evolve-skills.mjs), and [Teams as a folder convention](docs/TEAMS-DECISION.md). Plus the gap-closing skills wave: **🧭 [`pm-method`](plugins/pm-method)** (8 process-discipline skills: `interview-me`, `brainstorming`, `writing-plans`/`executing-plans`, `verification-before-completion`…), real **Office file production** (stdlib `xlsx`/`docx`/`pptx` toolsno pip installs), and design craft (`frontend-design`, `brand-guidelines`). *Earlier — v42:* depth (`references/` + `templates/`) on all Production-Ready skills, 🔊 Theatre voices, Firm calibration & the CI smoke suite. *Earlier — v41, the modern skills wave:* two new domains — **🤖 [`pm-agentnative`](plugins/pm-agentnative)** (build for non-human users: [`mcp-server-spec`](skills/mcp-server-spec/SKILL.md), [`agent-readiness-audit`](skills/agent-readiness-audit/SKILL.md), [`agent-era-pricing`](skills/agent-era-pricing/SKILL.md), [`human-in-the-loop-design`](skills/human-in-the-loop-design/SKILL.md), [`voice-agent-design`](skills/voice-agent-design/SKILL.md)) and **🧑‍💼 [`pm-aiwork`](plugins/pm-aiwork)** (the questions every manager has this year: [`ai-roi-audit`](skills/ai-roi-audit/SKILL.md), [`role-redesign-for-ai`](skills/role-redesign-for-ai/SKILL.md), [`ai-usage-policy`](skills/ai-usage-policy/SKILL.md), [`ai-assisted-performance-review`](skills/ai-assisted-performance-review/SKILL.md), [`ai-content-audit`](skills/ai-content-audit/SKILL.md)) — plus 5 singles ([`ai-code-review`](skills/ai-code-review/SKILL.md), [`synthetic-user-research`](skills/synthetic-user-research/SKILL.md), [`async-decision-memo`](skills/async-decision-memo/SKILL.md), [`brand-impersonation-response`](skills/brand-impersonation-response/SKILL.md), [`feature-sunset-plan`](skills/feature-sunset-plan/SKILL.md)). Also: 🌠 Galaxy shooting stars + a 🎲 Warp button, 🎓 frameable [certificates](web/export-doc.js) from the arena pages, and 🔌 [MCP pairings](connectors/mcp-pairings.md) — skills that act through your connected servers. *Earlier — v40: [The Firm](https://mohitagw15856.github.io/pm-claude-skills/firm.html). v39 (three waves):* ⚡ *Superpowers:* [SkillBench](skillbench/) (the professional-work benchmark for models) · the [community registry](community/) (npm-for-skills) · the [Interview Gauntlet](https://mohitagw15856.github.io/pm-claude-skills/gauntlet.html) · [CI recipes](action/examples/) + [ambient hooks](hooks/) · Hugging Face [dataset publishing](dataset/) · [localization to 8 languages](i18n/). 🤯 *Breathtaking:* [living artifacts](https://mohitagw15856.github.io/pm-claude-skills/), [Document X-ray](https://mohitagw15856.github.io/pm-claude-skills/xray.html), [The Gym](https://mohitagw15856.github.io/pm-claude-skills/gym.html), [`pm-vision`](plugins/pm-vision), [`style-fingerprint`](skills/style-fingerprint/SKILL.md), [`evidence-lock`](skills/evidence-lock/SKILL.md). ✨ *Revamped:* the playground command bar + Galaxy 2.0 with a guided Sky tour. **451 skills · 65 bundles · 25 professions.** → [CHANGELOG](CHANGELOG.md) · [all releases](https://github.com/mohitagw15856/pm-claude-skills/releases).
82
+ **🆕 v45.0.0 — the spectacle release:** ⚔️ **Duels** challenge a friend to the *identical* Gym negotiation or Panel candidate (same hidden state, side-by-side scorecard), 🎓 **[The Charter](https://mohitagw15856.github.io/pm-claude-skills/charter.html)** the performance-based, cryptographically verifiable certification, and **the library in 3D**: 🌌 [Galaxy 3D](https://mohitagw15856.github.io/pm-claude-skills/galaxy3d.html) (fly a bloom-lit starfield where your used skills burn brighter), 🏗 **[the Tower of Claims](https://mohitagw15856.github.io/pm-claude-skills/tower.html)** (your document as a physics tower data is steel, assumptions are glass, watch it stand or **collapse**), 🏛 [the Stage](https://mohitagw15856.github.io/pm-claude-skills/stage.html) (Boardroom replays as cinema with a cracking hologram), holo persona cards, 🏆 [the Trophy Forge](https://mohitagw15856.github.io/pm-claude-skills/trophy.html), 🌃 [Skill City](https://mohitagw15856.github.io/pm-claude-skills/city.html), ☄️ the Reckoning orrery. Plus the record going public: **first official [SkillBench results](skillbench/results.json)** (Haiku 4.5 vs Sonnet 4.6), evolution loop run #1 (all champions held under blind judging), 3 sha256-pinned [registry packs](packs/), and a live **free-runs-served badge**. *Earlier — v44, the legendary release:* Campaign mode, the Professional Work Handbook (2,237-rule Anti-Pattern Almanac), the Reckoning, the ecosystem package manager, zero-key MCP sampling, pm-skills-tools, the SkillSpec badge & the census. *Earlierv43, the local-first & learning wave:* the 🗂 workspace bridge, Boardroom replay links & bench packs, 🎤 The Panel, 🎓 The Academy, 🎁 Wrapped, the evolution loop & pm-method. *Earlier — v42:* depth (`references/` + `templates/`) on all Production-Ready skills, 🔊 Theatre voices, Firm calibration & the CI smoke suite. *Earlier — v41, the modern skills wave:* two new domains — **🤖 [`pm-agentnative`](plugins/pm-agentnative)** (build for non-human users: [`mcp-server-spec`](skills/mcp-server-spec/SKILL.md), [`agent-readiness-audit`](skills/agent-readiness-audit/SKILL.md), [`agent-era-pricing`](skills/agent-era-pricing/SKILL.md), [`human-in-the-loop-design`](skills/human-in-the-loop-design/SKILL.md), [`voice-agent-design`](skills/voice-agent-design/SKILL.md)) and **🧑‍💼 [`pm-aiwork`](plugins/pm-aiwork)** (the questions every manager has this year: [`ai-roi-audit`](skills/ai-roi-audit/SKILL.md), [`role-redesign-for-ai`](skills/role-redesign-for-ai/SKILL.md), [`ai-usage-policy`](skills/ai-usage-policy/SKILL.md), [`ai-assisted-performance-review`](skills/ai-assisted-performance-review/SKILL.md), [`ai-content-audit`](skills/ai-content-audit/SKILL.md)) — plus 5 singles ([`ai-code-review`](skills/ai-code-review/SKILL.md), [`synthetic-user-research`](skills/synthetic-user-research/SKILL.md), [`async-decision-memo`](skills/async-decision-memo/SKILL.md), [`brand-impersonation-response`](skills/brand-impersonation-response/SKILL.md), [`feature-sunset-plan`](skills/feature-sunset-plan/SKILL.md)). Also: 🌠 Galaxy shooting stars + a 🎲 Warp button, 🎓 frameable [certificates](web/export-doc.js) from the arena pages, and 🔌 [MCP pairings](connectors/mcp-pairings.md) — skills that act through your connected servers. *Earlier — v40: [The Firm](https://mohitagw15856.github.io/pm-claude-skills/firm.html). v39 (three waves):* ⚡ *Superpowers:* [SkillBench](skillbench/) (the professional-work benchmark for models) · the [community registry](community/) (npm-for-skills) · the [Interview Gauntlet](https://mohitagw15856.github.io/pm-claude-skills/gauntlet.html) · [CI recipes](action/examples/) + [ambient hooks](hooks/) · Hugging Face [dataset publishing](dataset/) · [localization to 8 languages](i18n/). 🤯 *Breathtaking:* [living artifacts](https://mohitagw15856.github.io/pm-claude-skills/), [Document X-ray](https://mohitagw15856.github.io/pm-claude-skills/xray.html), [The Gym](https://mohitagw15856.github.io/pm-claude-skills/gym.html), [`pm-vision`](plugins/pm-vision), [`style-fingerprint`](skills/style-fingerprint/SKILL.md), [`evidence-lock`](skills/evidence-lock/SKILL.md). ✨ *Revamped:* the playground command bar + Galaxy 2.0 with a guided Sky tour. **454 skills · 65 bundles · 25 professions.** → [CHANGELOG](CHANGELOG.md) · [all releases](https://github.com/mohitagw15856/pm-claude-skills/releases).
82
83
 
83
84
  ### ▶ See it in action — [try the live Skill Playground](https://mohitagw15856.github.io/pm-claude-skills/)
84
85
 
@@ -134,7 +135,7 @@ In Claude Code, [`/firm`](commands/firm.md) runs the same session natively — g
134
135
  <tr>
135
136
  <td width="50%">
136
137
  <a href="https://mohitagw15856.github.io/pm-claude-skills/"><img src="web/docs-assets/showcase/cmdbar.png" alt="The command bar — describe your task in plain words and get matched to the right skill instantly" /></a>
137
- <b>🪄 <a href="https://mohitagw15856.github.io/pm-claude-skills/">The command bar</a></b> — don't browse 451 cards; just say it: <i>"a blameless postmortem for Friday's outage"</i> → the top three skills, instantly, locally, before you've even entered a key. Enter opens the best match.
138
+ <b>🪄 <a href="https://mohitagw15856.github.io/pm-claude-skills/">The command bar</a></b> — don't browse 454 cards; just say it: <i>"a blameless postmortem for Friday's outage"</i> → the top three skills, instantly, locally, before you've even entered a key. Enter opens the best match.
138
139
  </td>
139
140
  <td width="50%">
140
141
  <a href="https://mohitagw15856.github.io/pm-claude-skills/galaxy.html"><img src="web/docs-assets/showcase/galaxy.png" alt="Skill Galaxy — the library as a living star map with a guided sky tour" /></a>
@@ -228,7 +229,7 @@ Generic AI forgets everything between sessions, so you re-paste context forever
228
229
  <details>
229
230
  <summary>Read more ↓</summary>
230
231
 
231
- These 451 skills aren't a random catalog — they cover the **full arc of professional work**, end to end. Wherever you are in the loop, there's a skill for it:
232
+ These 454 skills aren't a random catalog — they cover the **full arc of professional work**, end to end. Wherever you are in the loop, there's a skill for it:
232
233
 
233
234
  ```mermaid
234
235
  flowchart LR
@@ -349,6 +350,41 @@ Connect the Firm or the Boardroom to a **real folder on disk** (the 🗂 chip, C
349
350
 
350
351
  ---
351
352
 
353
+ ### 🌌 The library in 3D
354
+
355
+ - **[Galaxy 3D](https://mohitagw15856.github.io/pm-claude-skills/galaxy3d.html)** — 454 skills as a bloom-lit starfield you fly through; **your sky is yours** (stars you've run burn brighter). **[Skill City](https://mohitagw15856.github.io/pm-claude-skills/city.html)** — the same idea as a dusk skyline: windows light up in buildings you've used.
356
+ - **[The Tower of Claims](https://mohitagw15856.github.io/pm-claude-skills/tower.html)** — your document as a physics tower: data is steel, assumptions are glass, and the stress test shows the argument stand or **collapse**. Keyless demo built in.
357
+ - **[The Stage](https://mohitagw15856.github.io/pm-claude-skills/stage.html)** — any Boardroom replay as a cinematic 3D scene: the hologram document cracks as objections land; the verdict seals it gold or shatters it.
358
+ - **⚔️ Duels** — challenge links from the Gym and the Panel: your friend faces the *identical* hidden scenario, side-by-side scorecard at the end. **[The Charter](https://mohitagw15856.github.io/pm-claude-skills/charter.html)** — the performance-based, cryptographically verifiable certification. **[The Trophy Forge](https://mohitagw15856.github.io/pm-claude-skills/trophy.html)** — cast it in spinning gold.
359
+
360
+ ### 🗺 The Campaign, the Book, and the Ledger
361
+
362
+ - **[Your First 90 Days](https://mohitagw15856.github.io/pm-claude-skills/campaign.html)** — campaign mode: one story across every arena. You join a fictional Series A startup, and your *real* arena scores write the plot — lose the Gym negotiation and the account churns; get fooled in the Panel and the bad hire haunts Week 10. Replayable, saves locally, certificate at Day 90.
363
+ - **[The Professional Work Handbook](https://mohitagw15856.github.io/pm-claude-skills/handbook.html)** — the library as a book: 11 chapters of craft (the Production-Ready tier in full) + **the Anti-Pattern Almanac: 2,237 rules of professional judgment** from all 454 skills. Printable ([PDF](web/docs-assets/handbook.pdf)), free, regenerated every release.
364
+ - **[The Reckoning](https://mohitagw15856.github.io/pm-claude-skills/reckoning.html)** — your prediction ledger: confidences, due dates, resurfacing, and a personal **calibration curve with a Brier score**. Also in the CLI: `npx pm-claude-skills reckoning`. When you say 80%, does it happen 80% of the time? Now you'll know.
365
+ - **🔏 The chain of trust** — security scan → [sha256 content pinning](community/README.md#-trust--integrity--the-full-chain) in the registry → install lockfile + `npx pm-claude-skills verify` drift detection → npm provenance. Verifiable end to end, no trust in us required.
366
+
367
+ ### 🌐 Infrastructure for the whole ecosystem
368
+
369
+ - **[`pm-skills-tools`](tools-pkg/)** — all 454 skills as **agent tools**: OpenAI function schemas, Vercel AI SDK adapters, `pick()`/`search()` runtime. `npm i pm-skills-tools` and your agent wields the library.
370
+ - **[The SkillSpec badge](skillspec/README.md#the-badge)** — any skills repo can wear its live-graded conformance level: `![SkillSpec](https://img.shields.io/endpoint?url=…/badge?repo=you/yours)`.
371
+ - **[The State of Agent Skills](docs/reports/)** — the census of the public SKILL.md ecosystem (counts, conformance pyramid, security hits), regenerated from GitHub code search. The observatory, not just a participant.
372
+ - **[Every protocol](connectors/mcp-pairings.md#every-protocol-one-library)** — MCP (with zero-key sampling) · A2A · AGENTS.md · function calling · REST.
373
+ - **[The Apprentice](templates/apprentice/)** — a ready-to-run Agent SDK agent grounded in your brain and your skills' Quality Checks. Fork it.
374
+ - **`council`** (cross-vendor adversarial review) · **`migrate`** (convert prompt libraries into skills) · **[chief-of-staff hook](hooks/)** (every session opens with your predictions due and latest verdicts).
375
+
376
+ ### 📦 The ecosystem toolchain — beyond this library
377
+
378
+ - **`npx pm-claude-skills install <owner/repo>`** — install skills from **any public GitHub repo**, security-scanned and [SkillSpec](SKILLSPEC.md)-graded on the way in; flagged skills are never installed. The package manager for the whole skills ecosystem, with auditing as the value add.
379
+ - **`npx pm-claude-skills chain <workflow>`** — run a whole recipe headless (`chain --list`): each skill feeds the next, and `--deck`/`--doc` finish with a **real .pptx/.docx**. Raw notes in, board-ready deck out, one command.
380
+ - **`npx pm-claude-skills init`** — the 60-second professional workspace: `brain/`, standing context, arena folders, CLAUDE.md wiring. Then `doctor` keeps it healthy.
381
+ - **`run_skill` over MCP with zero API key** — the [MCP server](mcp/) executes skills via **MCP sampling**: the generation runs on your client's model, no key needed by anyone.
382
+ - **[`skillspec-check`](skillspec/)** — the eslint for SKILL.md, as a standalone npm package + [pre-commit hook](.pre-commit-hooks.yaml): lint ANY repo's skills against the standard (`--min-level 2` as a CI gate).
383
+ - **[Boardroom doc review in CI](action/examples/doc-review-boardroom.yml)** — PRs touching docs get a CFO/CTO/CCO critique with a 🟢/🟡/🔴 Chair verdict as a PR comment. Documents get code review.
384
+ - **🧮 Skills that do math** — [`cohort-curve-model`](skills/cohort-curve-model/SKILL.md), [`runway-monte-carlo`](skills/runway-monte-carlo/SKILL.md), [`pricing-sensitivity-model`](skills/pricing-sensitivity-model/SKILL.md): each ships a stdlib script that **computes** (curve fitting, 5,000-path simulation, survey crossings) and emits a **real .xlsx with live formulas**.
385
+
386
+ ---
387
+
352
388
  ## 🧠 Skill Memory — set your context once, every skill uses it
353
389
 
354
390
  <details>
@@ -429,7 +465,7 @@ Most skill repos are a folder of prompts. This one is a **system** — measured,
429
465
 
430
466
  | | **PM Skills** | Typical skill repo |
431
467
  |---|:---:|:---:|
432
- | Skills | **451**, across 25 professions | a handful → dozens, usually one domain |
468
+ | Skills | **454**, across 25 professions | a handful → dozens, usually one domain |
433
469
  | Quality | **eval-scored** on a rubric + a public [benchmark](https://mohitagw15856.github.io/pm-claude-skills/benchmark.html) | trust the README |
434
470
  | Improves itself | ✅ eval → critique → rewrite (kept only if it scores higher) | ✗ |
435
471
  | Grounded in frameworks | ✅ each cites its source (RICE, JTBD, Pyramid Principle…) | rarely |
@@ -907,7 +943,7 @@ More templates will follow. If you want to contribute one, see the [template con
907
943
  <details>
908
944
  <summary>Read more ↓</summary>
909
945
 
910
- **Latest: v43.0.0 — the local-first & learning wave: the workspace bridge to a real folder, Boardroom replay links & bench packs, The Panel (you're the interviewer), The Academy, Wrapped, `doctor`, the evolution loop, plus `pm-method` + real Office-file production (451 skills, 65 bundles)** · *v42:* depth on all Production-Ready skills, arena voices, Firm calibration & the web-tests safety net · *v41, modern skills:* [`pm-agentnative`](plugins/pm-agentnative) + [`pm-aiwork`](plugins/pm-aiwork) (15 skills for the agent era), Galaxy cosmic events, 🎓 certificates & [MCP pairings](connectors/mcp-pairings.md) · *v40: [The Firm](https://mohitagw15856.github.io/pm-claude-skills/firm.html) · v39, three waves:* [SkillBench](skillbench/), the [community registry](community/), the [Interview Gauntlet](https://mohitagw15856.github.io/pm-claude-skills/gauntlet.html), [living artifacts](https://mohitagw15856.github.io/pm-claude-skills/), [Document X-ray](https://mohitagw15856.github.io/pm-claude-skills/xray.html), [The Gym](https://mohitagw15856.github.io/pm-claude-skills/gym.html), pm-vision, i18n, HF publishing, CI recipes & the Galaxy Sky tour. 451 skills across 65 bundles, 25 professions. Every tagged release has complete notes on the **[Releases page](https://github.com/mohitagw15856/pm-claude-skills/releases)**.
946
+ **Latest: v45.0.0 — the spectacle release: ⚔️ Duels, 🎓 the verifiable Charter, and the library in 3D (Galaxy 3D, the collapsing Tower of Claims, the Stage, holo cards, the Trophy Forge, Skill City, the orrery) plus the first official SkillBench results and the first evolution-loop run (454 skills, 65 bundles)** · *v44:* Campaign mode, the Handbook, the Reckoning, the ecosystem package manager, zero-key MCP sampling, pm-skills-tools, the badge & the census · *v43:* the workspace bridge, replay links & bench packs, The Panel, The Academy, Wrapped, the evolution loop & pm-method · *v42:* depth on all Production-Ready skills, arena voices, Firm calibration & the web-tests safety net · *v41, modern skills:* [`pm-agentnative`](plugins/pm-agentnative) + [`pm-aiwork`](plugins/pm-aiwork) (15 skills for the agent era), Galaxy cosmic events, 🎓 certificates & [MCP pairings](connectors/mcp-pairings.md) · *v40: [The Firm](https://mohitagw15856.github.io/pm-claude-skills/firm.html) · v39, three waves:* [SkillBench](skillbench/), the [community registry](community/), the [Interview Gauntlet](https://mohitagw15856.github.io/pm-claude-skills/gauntlet.html), [living artifacts](https://mohitagw15856.github.io/pm-claude-skills/), [Document X-ray](https://mohitagw15856.github.io/pm-claude-skills/xray.html), [The Gym](https://mohitagw15856.github.io/pm-claude-skills/gym.html), pm-vision, i18n, HF publishing, CI recipes & the Galaxy Sky tour. 454 skills across 65 bundles, 25 professions. Every tagged release has complete notes on the **[Releases page](https://github.com/mohitagw15856/pm-claude-skills/releases)**.
911
947
 
912
948
  Full [Keep a Changelog](https://keepachangelog.com/)-format history — every release back to the start — is in **[CHANGELOG.md](CHANGELOG.md)**.
913
949
 
@@ -1018,7 +1054,7 @@ Every skill, grouped by profession. **[Browse the full per-skill catalog → SKI
1018
1054
  <details>
1019
1055
  <summary>Read more ↓</summary>
1020
1056
 
1021
- Building and maintaining 451 skills across 65 bundles takes real time — testing skills against new model releases, building new ones from community requests, writing the article series, and keeping documentation current.
1057
+ Building and maintaining 454 skills across 65 bundles takes real time — testing skills against new model releases, building new ones from community requests, writing the article series, and keeping documentation current.
1022
1058
 
1023
1059
  If these skills save you time at work — or you're a company that wants your logo in front of the PMs, engineers, and operators who use them daily — **[become a sponsor →](https://github.com/sponsors/mohitagw15856)** (or [☕ buy me a coffee](https://www.buymeacoffee.com/mohit15856)).
1024
1060
 
package/bin/chain.mjs ADDED
@@ -0,0 +1,113 @@
1
+ // `pm-claude-skills chain <workflow>` — run a whole workflow recipe headless:
2
+ // every skill in the chain executes in order, each output carried forward as
3
+ // context for the next. Raw notes in, a folder of finished artifacts out —
4
+ // optionally including REAL Office files via the stdlib document tools.
5
+ //
6
+ // pm-claude-skills chain --list
7
+ // pm-claude-skills chain run-discovery --input notes.txt
8
+ // pm-claude-skills chain ship-a-feature --text "referral program for B2B" --out-dir ./artifacts
9
+ // cat notes.md | pm-claude-skills chain close-the-quarter --deck # + a real .pptx at the end
10
+ //
11
+ // Needs ANTHROPIC_API_KEY (your key, one call per step). Pure Node + optional
12
+ // python3 only for --deck/--doc (the same zero-dependency scripts the document
13
+ // skills ship).
14
+ import { readFileSync, existsSync, writeFileSync, mkdirSync } from 'node:fs';
15
+ import { join, dirname } from 'node:path';
16
+ import { fileURLToPath } from 'node:url';
17
+ import { spawnSync } from 'node:child_process';
18
+ import { complete, parseSkill } from './lib/anthropic.mjs';
19
+
20
+ const PKG_ROOT = dirname(dirname(fileURLToPath(import.meta.url)));
21
+ const getArg = (argv, name, def) => { const i = argv.indexOf('--' + name); return i !== -1 && argv[i + 1] ? argv[i + 1] : def; };
22
+
23
+ const SUFFIX =
24
+ '\n\n---\nExecute this skill now on the material below and produce the complete output. ' +
25
+ 'Do not ask follow-up questions — work with what is given and note any reasonable assumptions.';
26
+
27
+ async function readStdin() {
28
+ if (process.stdin.isTTY) return '';
29
+ const chunks = [];
30
+ for await (const c of process.stdin) chunks.push(c);
31
+ return Buffer.concat(chunks).toString('utf8').trim();
32
+ }
33
+
34
+ function loadWorkflows() {
35
+ try { return JSON.parse(readFileSync(join(PKG_ROOT, 'workflows.json'), 'utf8')).workflows || []; }
36
+ catch { return []; }
37
+ }
38
+
39
+ export async function run(argv) {
40
+ const workflows = loadWorkflows();
41
+ const id = argv[0] && !argv[0].startsWith('--') ? argv[0] : '';
42
+
43
+ if (argv.includes('--list') || (!id && !argv.includes('--help'))) {
44
+ console.log('Workflow chains — run several skills as one pipeline, each output feeding the next:\n');
45
+ for (const w of workflows) console.log(` ${w.id.padEnd(22)} ${w.steps.map((s) => s.skill).join(' → ')}`);
46
+ console.log('\nRun one: pm-claude-skills chain <id> --text "…" | --input <file> | stdin [--out-dir <dir>] [--model <m>] [--deck] [--doc]');
47
+ console.log('--deck / --doc additionally produce a real .pptx / .docx from the final artifact (needs python3, no pip installs).');
48
+ return id ? 0 : (argv.includes('--list') ? 0 : 1);
49
+ }
50
+ if (argv.includes('--help') || argv.includes('-h')) return run(['--list']);
51
+
52
+ const w = workflows.find((x) => x.id === id);
53
+ if (!w) { console.error(`Unknown chain "${id}". See them all: pm-claude-skills chain --list`); return 1; }
54
+
55
+ const apiKey = process.env.ANTHROPIC_API_KEY || '';
56
+ if (!apiKey) { console.error('Set ANTHROPIC_API_KEY to run a chain (one API call per step).'); return 1; }
57
+
58
+ let input = getArg(argv, 'text', '');
59
+ const inFile = getArg(argv, 'input');
60
+ if (!input && inFile) {
61
+ if (!existsSync(inFile)) { console.error(`Input file not found: ${inFile}`); return 1; }
62
+ input = readFileSync(inFile, 'utf8');
63
+ }
64
+ if (!input) input = await readStdin();
65
+ if (!input.trim()) { console.error('No input. Provide --text "…", --input <file>, or pipe via stdin.'); return 1; }
66
+
67
+ const model = getArg(argv, 'model', 'claude-sonnet-4-6');
68
+ const outDir = getArg(argv, 'out-dir', `./${w.id}-artifacts`);
69
+ mkdirSync(outDir, { recursive: true });
70
+
71
+ console.error(`⛓ ${w.name} — ${w.steps.length} steps, model ${model}\n ${w.steps.map((s) => s.skill).join(' → ')}\n`);
72
+ let carried = `THE ORIGINAL BRIEF / RAW MATERIAL:\n\n${input}`;
73
+ const outputs = [];
74
+
75
+ for (let i = 0; i < w.steps.length; i++) {
76
+ const step = w.steps[i];
77
+ const file = join(PKG_ROOT, 'skills', step.skill, 'SKILL.md');
78
+ if (!existsSync(file)) { console.error(` ✗ step ${i + 1}: skill "${step.skill}" not found — skipping`); continue; }
79
+ const { body } = parseSkill(readFileSync(file, 'utf8'));
80
+ process.stderr.write(` ${i + 1}/${w.steps.length} ${step.skill} … `);
81
+ const t0 = Date.now();
82
+ const out = await complete({ apiKey, model, system: body + SUFFIX, messages: [{ role: 'user', content: carried }], maxTokens: 8192 });
83
+ const fname = `${String(i + 1).padStart(2, '0')}-${step.skill}.md`;
84
+ writeFileSync(join(outDir, fname), out + '\n');
85
+ outputs.push({ skill: step.skill, file: fname, out });
86
+ console.error(`✔ ${((Date.now() - t0) / 1000).toFixed(1)}s → ${fname}`);
87
+ // Carry forward: the original material + this step's artifact (the chain's contract).
88
+ carried += `\n\n---\nOUTPUT OF THE PREVIOUS STEP (${step.skill} — ${step.produces}):\n\n${out}`;
89
+ if (carried.length > 150000) carried = carried.slice(-150000); // context hygiene on long chains
90
+ }
91
+
92
+ if (!outputs.length) { console.error('\nNo steps ran.'); return 1; }
93
+ const last = outputs[outputs.length - 1];
94
+
95
+ // ── Optional: real Office files from the final artifact (stdlib python) ────
96
+ for (const [flag, script, ext, label] of [
97
+ ['--deck', join(PKG_ROOT, 'skills', 'slide-deck', 'scripts', 'pptx_tool.py'), 'pptx', 'deck'],
98
+ ['--doc', join(PKG_ROOT, 'skills', 'word-document', 'scripts', 'docx_tool.py'), 'docx', 'document'],
99
+ ]) {
100
+ if (!argv.includes(flag)) continue;
101
+ if (!existsSync(script)) { console.error(` (${flag}: tool script missing — skipped)`); continue; }
102
+ const target = join(outDir, `${w.id}.${ext}`);
103
+ const args = ext === 'pptx'
104
+ ? [script, 'build', target, '--outline-file', join(outDir, last.file)]
105
+ : [script, 'create', target, '--text-file', join(outDir, last.file)];
106
+ const r = spawnSync('python3', args, { encoding: 'utf8' });
107
+ if (r.status === 0) console.error(` 📎 real ${label}: ${target}`);
108
+ else console.error(` (${flag} failed: ${(r.stderr || r.stdout || '').split('\n')[0]})`);
109
+ }
110
+
111
+ console.error(`\n✅ ${outputs.length} artifacts in ${outDir}/ — final: ${last.file}`);
112
+ return 0;
113
+ }
package/bin/cli.mjs CHANGED
@@ -246,6 +246,13 @@ Usage:
246
246
  npx pm-claude-skills add --agent <claude|hermes|codex|openclaw|cursor|windsurf|aider> [--target <path>] [--link] [--dry-run]
247
247
  npx pm-claude-skills run <skill> [--text "…" | --input <file>] [--model <m>] [--out <file>]
248
248
  npx pm-claude-skills search [query…] [--json] [--limit <n>]
249
+ npx pm-claude-skills install <owner/repo> # install skills from ANY GitHub repo — security-scanned + SkillSpec-graded
250
+ npx pm-claude-skills verify # integrity check: detect drift in anything "install" brought in
251
+ npx pm-claude-skills chain <workflow> # run a whole multi-skill pipeline (chain --list to see them)
252
+ npx pm-claude-skills council <skill> # author -> cross-vendor critique -> arbiter (2+ provider keys)
253
+ npx pm-claude-skills migrate <dir> # convert a folder of prompts/SOPs into SkillSpec skills
254
+ npx pm-claude-skills init # scaffold the professional workspace here (brain/, context, arena folders)
255
+ npx pm-claude-skills reckoning # your prediction ledger: due calls, hit rate, calibration curve, Brier score
249
256
  npx pm-claude-skills doctor # checkup: what's installed, what's stale, what to fix (read-only)
250
257
  npx pm-claude-skills list
251
258
  npx pm-claude-skills --version
@@ -261,6 +268,8 @@ Examples:
261
268
 
262
269
  npx pm-claude-skills run prd-template --text "a referral program for B2B users" # run a skill (needs ANTHROPIC_API_KEY)
263
270
  cat notes.txt | npx pm-claude-skills run meeting-notes --out summary.md # pipe input, write the artifact
271
+ cat notes.txt | npx pm-claude-skills chain run-discovery --deck # notes → 4 artifacts + a real .pptx
272
+ npx pm-claude-skills install acme/their-skills --dry-run # audit a third-party skill repo
264
273
  npx pm-claude-skills generate --from <url|file> # turn your docs into a SKILL.md (needs ANTHROPIC_API_KEY)
265
274
 
266
275
  ${STAR}
@@ -269,10 +278,45 @@ ${STAR}
269
278
  const opts = parse(process.argv.slice(2));
270
279
  const cmd = opts._[0];
271
280
  if (opts.version) console.log(VERSION);
272
- else if (!cmd || cmd === 'help' || (opts.help && cmd !== 'run' && cmd !== 'generate')) console.log(HELP);
281
+ else if (!cmd || cmd === 'help' || (opts.help && !['run', 'generate', 'install', 'chain', 'init', 'reckoning', 'council', 'migrate'].includes(cmd))) console.log(HELP);
273
282
  else if (cmd === 'list') list();
274
283
  else if (cmd === 'search') search(opts);
275
284
  else if (cmd === 'add') add(opts);
285
+ else if (cmd === 'migrate') {
286
+ const { run } = await import('./migrate.mjs');
287
+ try { process.exit(await run(process.argv.slice(3))); }
288
+ catch (e) { console.error(`Error: ${e.message}`); process.exit(1); }
289
+ }
290
+ else if (cmd === 'council') {
291
+ const { run } = await import('./council.mjs');
292
+ try { process.exit(await run(process.argv.slice(3))); }
293
+ catch (e) { console.error(`Error: ${e.message}`); process.exit(1); }
294
+ }
295
+ else if (cmd === 'verify') {
296
+ const { run } = await import('./verify.mjs');
297
+ try { process.exit(await run(process.argv.slice(3))); }
298
+ catch (e) { console.error(`Error: ${e.message}`); process.exit(1); }
299
+ }
300
+ else if (cmd === 'reckoning') {
301
+ const { run } = await import('./reckoning.mjs');
302
+ try { process.exit(await run(process.argv.slice(3))); }
303
+ catch (e) { console.error(`Error: ${e.message}`); process.exit(1); }
304
+ }
305
+ else if (cmd === 'init') {
306
+ const { run } = await import('./init.mjs');
307
+ try { process.exit(await run(process.argv.slice(3))); }
308
+ catch (e) { console.error(`Error: ${e.message}`); process.exit(1); }
309
+ }
310
+ else if (cmd === 'chain') {
311
+ const { run } = await import('./chain.mjs');
312
+ try { process.exit(await run(process.argv.slice(3))); }
313
+ catch (e) { console.error(`Error: ${e.message}`); process.exit(1); }
314
+ }
315
+ else if (cmd === 'install') {
316
+ const { run } = await import('./install.mjs');
317
+ try { process.exit(await run(process.argv.slice(3))); }
318
+ catch (e) { console.error(`Error: ${e.message}`); process.exit(1); }
319
+ }
276
320
  else if (cmd === 'doctor') {
277
321
  const { run } = await import('./doctor.mjs');
278
322
  try { process.exit(await run()); }
@@ -0,0 +1,94 @@
1
+ // `pm-claude-skills council <skill>` — the second-opinion machine. One model
2
+ // AUTHORS the artifact, a DIFFERENT vendor's model CRITIQUES it against the
3
+ // skill's own Quality Checks and Anti-Patterns, and a third (or the first)
4
+ // ARBITRATES, producing the final artifact with the critique addressed.
5
+ //
6
+ // Cross-provider adversarial review: vendor blind spots don't overlap, so the
7
+ // critic catches what the author's family reliably misses.
8
+ //
9
+ // pm-claude-skills council prd-template --text "usage-based pricing for the API tier"
10
+ // pm-claude-skills council exec-summary --input notes.md --models anthropic,openai,gemini
11
+ // pm-claude-skills council prd-template --text "…" --dry-run # plan only, no calls
12
+ //
13
+ // Keys from env: ANTHROPIC_API_KEY, OPENAI_API_KEY, GEMINI_API_KEY (needs ≥2
14
+ // providers to be a council; 3 calls total). Output → stdout or --out <file>.
15
+ import { readFileSync, existsSync, writeFileSync } from 'node:fs';
16
+ import { join, dirname } from 'node:path';
17
+ import { fileURLToPath } from 'node:url';
18
+ import { complete, available, provider } from './lib/providers.mjs';
19
+
20
+ const PKG_ROOT = dirname(dirname(fileURLToPath(import.meta.url)));
21
+ const getArg = (argv, n, d) => { const i = argv.indexOf('--' + n); return i >= 0 && argv[i + 1] ? argv[i + 1] : d; };
22
+
23
+ async function readStdin() {
24
+ if (process.stdin.isTTY) return '';
25
+ const chunks = []; for await (const c of process.stdin) chunks.push(c);
26
+ return Buffer.concat(chunks).toString('utf8').trim();
27
+ }
28
+
29
+ export async function run(argv) {
30
+ const skill = argv[0] && !argv[0].startsWith('--') ? argv[0] : '';
31
+ if (!skill || argv.includes('--help')) {
32
+ console.log(`The Council — cross-provider adversarial review. Author → critic (different vendor) → arbiter.
33
+
34
+ Usage: pm-claude-skills council <skill> [--text "…" | --input <file> | stdin] [--models a,b,c] [--out <file>] [--dry-run]
35
+ Providers by env key: ANTHROPIC_API_KEY, OPENAI_API_KEY, GEMINI_API_KEY (≥2 required; 3 API calls total).`);
36
+ return skill ? 0 : 1;
37
+ }
38
+ const file = join(PKG_ROOT, 'skills', skill, 'SKILL.md');
39
+ if (!existsSync(file)) { console.error(`Unknown skill "${skill}" — see: pm-claude-skills list`); return 1; }
40
+ const text = readFileSync(file, 'utf8');
41
+ const body = (text.match(/^---\r?\n[\s\S]*?\r?\n---\r?\n?([\s\S]*)$/) || [, text])[1].trim();
42
+ const qc = (body.match(/##\s*Quality Checks\s*\n([\s\S]*?)(?=\n##\s|$)/i) || [, '(none declared)'])[1].trim();
43
+ const ap = (body.match(/##\s*Anti-Patterns\s*\n([\s\S]*?)(?=\n##\s|$)/i) || [, '(none declared)'])[1].trim();
44
+
45
+ let input = getArg(argv, 'text', '');
46
+ const inFile = getArg(argv, 'input');
47
+ if (!input && inFile && existsSync(inFile)) input = readFileSync(inFile, 'utf8');
48
+ if (!input) input = await readStdin();
49
+ if (!input.trim()) { console.error('No input. Provide --text, --input <file>, or pipe via stdin.'); return 1; }
50
+
51
+ const wanted = (getArg(argv, 'models', '') || '').split(',').map((s) => s.trim()).filter(Boolean);
52
+ const avail = available();
53
+ const roster = wanted.length ? wanted : avail;
54
+ const dryRun = argv.includes('--dry-run');
55
+
56
+ if (roster.length < 2) {
57
+ console.error(`The Council needs ≥2 providers; ${avail.length ? 'available: ' + avail.join(', ') : 'no provider keys set'}.` +
58
+ ' Set at least two of ANTHROPIC_API_KEY / OPENAI_API_KEY / GEMINI_API_KEY.' + (dryRun ? '' : ' (--dry-run works without keys.)'));
59
+ if (!dryRun) return 1;
60
+ }
61
+ const [author, critic, arbiter] = [roster[0] || 'anthropic', roster[1] || 'openai', roster[2] || roster[0] || 'anthropic'];
62
+ console.error(`⚖️ The Council on "${skill}" — author: ${author} · critic: ${critic} · arbiter: ${arbiter}`);
63
+
64
+ if (dryRun) {
65
+ console.error(`[dry-run] 3 calls would run:
66
+ 1. ${author} (${provider(author).defaultModel}) authors the artifact from the skill (${body.length} chars of instructions).
67
+ 2. ${critic} (${provider(critic).defaultModel}) critiques it against the skill's OWN bar — Quality Checks (${qc.split('\n').length} items) + Anti-Patterns (${ap.split('\n').length} items) — verdict per check, quoting the draft.
68
+ 3. ${arbiter} arbitrates: final artifact with every upheld objection addressed, and a changelog of what the critique changed.
69
+ No API calls made.`);
70
+ return 0;
71
+ }
72
+
73
+ // 1. Author
74
+ console.error(` 1/3 ${author} authoring…`);
75
+ const draft = await complete(author, { system: body + '\n\n---\nExecute this skill now on the input and produce the complete artifact. No questions; state assumptions.', user: input, maxTokens: 8192 });
76
+
77
+ // 2. Cross-vendor critique against the skill's own bar
78
+ console.error(` 2/3 ${critic} critiquing…`);
79
+ const critique = await complete(critic, {
80
+ system: `You are the adversarial reviewer on a council. A DIFFERENT model produced a draft using a skill; judge the draft strictly against that skill's OWN declared bar — nothing else.\n\nTHE SKILL'S QUALITY CHECKS:\n${qc}\n\nTHE SKILL'S ANTI-PATTERNS:\n${ap}\n\nFor each quality check: PASS/FAIL + one line quoting the draft. For each anti-pattern: CLEAN/VIOLATED + where. End with "## Priority repairs" — the 3 fixes that most improve the artifact. Be specific; no praise padding.`,
81
+ user: `THE ORIGINAL INPUT:\n${input.slice(0, 8000)}\n\nTHE DRAFT UNDER REVIEW:\n${draft}`, maxTokens: 3000 });
82
+
83
+ // 3. Arbitration → final
84
+ console.error(` 3/3 ${arbiter} arbitrating…`);
85
+ const final = await complete(arbiter, {
86
+ system: body + '\n\n---\nYou are the arbiter of a council. Below: the original input, a draft, and a cross-examination of that draft against this skill\'s own quality bar. Produce the FINAL artifact: keep what survived, repair every upheld objection, ignore critiques that misread the input. Then append "## Council changelog" — 3-6 bullets on what the critique changed.',
87
+ user: `INPUT:\n${input.slice(0, 8000)}\n\nDRAFT (${author}):\n${draft}\n\nCRITIQUE (${critic}):\n${critique}`, maxTokens: 8192 });
88
+
89
+ const outFile = getArg(argv, 'out');
90
+ const full = final + `\n\n---\n*Council: ${author} authored · ${critic} critiqued · ${arbiter} arbitrated — pm-claude-skills*\n`;
91
+ if (outFile) { writeFileSync(outFile, full); console.error(`✅ ${outFile}`); }
92
+ else process.stdout.write(full);
93
+ return 0;
94
+ }
package/bin/init.mjs ADDED
@@ -0,0 +1,111 @@
1
+ // `pm-claude-skills init` — scaffold the 60-second professional workspace in the
2
+ // current directory: the brain, your standing context, the arena folders the web
3
+ // tools write into, and a CLAUDE.md section that wires it all together. Doctor
4
+ // diagnoses; init prescribes and executes.
5
+ //
6
+ // npx pm-claude-skills init # scaffold (never overwrites anything)
7
+ // npx pm-claude-skills init --dry-run # show what would be created
8
+ //
9
+ // Idempotent by design: every file is create-if-missing; existing files are
10
+ // left untouched and reported. Pure Node, writes only inside the current dir.
11
+ import { existsSync, mkdirSync, writeFileSync, readFileSync, appendFileSync, cpSync } from 'node:fs';
12
+ import { join, dirname } from 'node:path';
13
+ import { fileURLToPath } from 'node:url';
14
+
15
+ const PKG_ROOT = dirname(dirname(fileURLToPath(import.meta.url)));
16
+ const STAR = '⭐ Find this useful? Star the repo: https://github.com/mohitagw15856/pm-claude-skills';
17
+
18
+ const CLAUDE_MD_SECTION = `
19
+ ## PM Skills — this project's professional setup
20
+
21
+ - **Standing context**: read \`brain/context.md\` before professional-writing tasks (audience, voice, metrics). Honour the provenance tags in \`brain/\` — strongest to weakest: \`[data] [interview] [external] [verbal] [hunch]\`.
22
+ - **Durable memory**: \`brain/\` holds decisions, hypotheses, stakeholders, and knowledge. After significant outcomes, append a dated line to the right file rather than letting the fact evaporate.
23
+ - **Web arena artifacts**: \`firm-minutes/\` and \`boardroom/\` receive minutes, verdicts, and transcripts written by the pm-skills web tools (workspace bridge). Treat them as inputs — e.g. read the latest Boardroom verdict before revising the document it judged.
24
+ - **Skills**: if the pm-skills library is installed (\`npx pm-claude-skills add --agent claude\`), prefer its skills for professional artifacts (PRDs, updates, postmortems…) over improvising structure.
25
+ `;
26
+
27
+ const AGENTS_MD = `# AGENTS.md
28
+
29
+ Guidance for AI coding agents (Codex, Jules, and anything that reads this file) working in this repository.
30
+
31
+ ## Professional context
32
+
33
+ - Read \`brain/context.md\` before drafting any professional artifact — it holds the company, audience, voice, and the metrics that matter. Honour the provenance tags in \`brain/\` (strongest → weakest): \`[data] [interview] [external] [verbal] [hunch]\`.
34
+ - Durable memory lives in \`brain/\` (decisions, hypotheses, stakeholders, knowledge). Append dated lines after significant outcomes.
35
+
36
+ ## Skills
37
+
38
+ - Professional skills (PRDs, updates, postmortems, models…) are available via the pm-claude-skills library. Discover and apply them instead of improvising document structure:
39
+ - CLI: \`npx pm-claude-skills search <task>\` then \`npx pm-claude-skills run <skill> --input <file>\`
40
+ - MCP: the \`pm-skills\` server exposes \`search_skills\` / \`get_skill\` / \`run_skill\`
41
+ - A skill's Quality Checks and Anti-Patterns sections are the acceptance criteria for its output — verify against them before declaring done.
42
+
43
+ ## Artifacts
44
+
45
+ - \`firm-minutes/\` and \`boardroom/\` contain minutes, verdicts, and transcripts written by the pm-skills web arenas. Treat them as inputs: read the latest Boardroom verdict before revising the document it judged.
46
+ - Predictions live in \`brain/predictions/\` — settle due ones honestly (\`npx pm-claude-skills reckoning\`).
47
+ `;
48
+
49
+ export async function run(argv) {
50
+ const dryRun = argv.includes('--dry-run');
51
+ const cwd = process.cwd();
52
+ const made = [], kept = [];
53
+
54
+ const mk = (rel, content) => {
55
+ const p = join(cwd, rel);
56
+ if (existsSync(p)) { kept.push(rel); return; }
57
+ if (!dryRun) { mkdirSync(dirname(p), { recursive: true }); writeFileSync(p, content); }
58
+ made.push(rel);
59
+ };
60
+ const mkdir = (rel) => {
61
+ const p = join(cwd, rel);
62
+ if (existsSync(p)) { kept.push(rel + '/'); return; }
63
+ if (!dryRun) mkdirSync(p, { recursive: true });
64
+ made.push(rel + '/');
65
+ };
66
+
67
+ console.log(`${dryRun ? '[dry-run] ' : ''}Scaffolding the professional workspace in ${cwd}\n`);
68
+
69
+ // ── The brain: durable memory the skills read and write ────────────────────
70
+ const brainTpl = join(PKG_ROOT, 'templates', 'brain');
71
+ if (existsSync(brainTpl)) {
72
+ if (existsSync(join(cwd, 'brain'))) kept.push('brain/');
73
+ else { if (!dryRun) cpSync(brainTpl, join(cwd, 'brain'), { recursive: true }); made.push('brain/ (context, knowledge/, decisions/, hypotheses, stakeholders, entities — from templates)'); }
74
+ } else {
75
+ mk('brain/context.md', '# context.md — the standing facts every skill should know\n\n## Company / product\n- **Company:** <one line>\n- **Product:** <one line>\n\n## Audience & voice\n- **Primary readers:** <who>\n- **Tone:** <crisp/direct/…>\n\n## Metrics that matter\n- <the 3 numbers leadership actually tracks>\n');
76
+ for (const s of ['decisions', 'knowledge']) mkdir('brain/' + s);
77
+ for (const f of ['hypotheses', 'stakeholders', 'entities']) mk('brain/' + f + '.md', `# ${f}\n\n<!-- append dated, provenance-tagged lines: - [data] 2026-07-06 … -->\n`);
78
+ }
79
+ mkdir('brain/predictions');
80
+
81
+ // ── Standing context for the skills (pm-context.md, the older single-file form)
82
+ const ctxTpl = join(PKG_ROOT, 'templates', 'pm-context.example.md');
83
+ mk('pm-context.md', existsSync(ctxTpl) ? readFileSync(ctxTpl, 'utf8') : '# pm-context.md\n\nFill in who you are, your product, audience, and voice.\n');
84
+
85
+ // ── Arena folders the web workspace bridge writes into ─────────────────────
86
+ mkdir('firm-minutes');
87
+ mkdir('boardroom');
88
+
89
+ // ── AGENTS.md (--agents-md, or always create if missing alongside CLAUDE.md) ──
90
+ if (argv.includes('--agents-md') || !existsSync(join(cwd, 'AGENTS.md'))) mk('AGENTS.md', AGENTS_MD);
91
+
92
+ // ── CLAUDE.md wiring (append a section; never rewrite an existing file) ────
93
+ const claudeMd = join(cwd, 'CLAUDE.md');
94
+ if (!existsSync(claudeMd)) { mk('CLAUDE.md', '# Project notes for Claude\n' + CLAUDE_MD_SECTION); }
95
+ else if (readFileSync(claudeMd, 'utf8').includes('## PM Skills — this project')) kept.push('CLAUDE.md (section already present)');
96
+ else { if (!dryRun) appendFileSync(claudeMd, '\n' + CLAUDE_MD_SECTION); made.push('CLAUDE.md (PM Skills section appended)'); }
97
+
98
+ // ── Report ──────────────────────────────────────────────────────────────────
99
+ for (const m of made) console.log(` ✔ ${dryRun ? 'would create' : 'created'} ${m}`);
100
+ for (const k of kept) console.log(` ↷ kept ${k}`);
101
+
102
+ console.log(`\nNext steps:
103
+ 1. Fill in brain/context.md (2 minutes) — every skill output gets sharper.
104
+ 2. Install the skills: npx pm-claude-skills add --agent claude
105
+ 3. Wire the ambient hooks: see hooks/settings.example.json in the repo (session briefs, skill suggestions, doc quality gate).
106
+ 4. Point the web arenas here: open the Firm or Boardroom → 🗂 Connect a folder → choose THIS directory.
107
+ 5. Checkup anytime: npx pm-claude-skills doctor
108
+
109
+ ${STAR}`);
110
+ return 0;
111
+ }