/pm
Generate a PM through guided PM-focused interview with automatic question classification. Use when the user says 'ooo pm', 'prd', 'product requirements', or wants to create a PRD/PM document.
$ npx -y skills add Q00/ouroboros --skill pm --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/pm
Context preview
The summary Claude sees to decide when to auto-load this skill.
Generate a PM through guided PM-focused interview with automatic question classification. Use when the user says 'ooo pm', 'prd', 'product requirements', or wants to create a PRD/PM document.
SKILL.md
pm.SKILL.mdname: pm
description: "Generate a PM through guided PM-focused interview with automatic question classification. Use when the user says 'ooo pm', 'prd', 'product requirements', or wants to create a PRD/PM document."
/ouroboros:pm
PM-focused Socratic interview that produces a Product Requirements Document.
Instructions
Step 0: Version Check (runs before the PM interview)
Before starting the PM interview, check if a newer version is available:
# Fetch latest release tag from GitHub (timeout 3s to avoid blocking)
curl -s --max-time 3 https://api.github.com/repos/Q00/ouroboros/releases/latest | grep -o '"tag_name": "[^"]*"' | head -1
Compare the result with the current version in the active runtime's local plugin metadata (for Claude installs this is `.claude-plugin/plugin.json`).
- If a newer version exists, ask the user through the active runtime's `ask_user` capability:
{
"questions": [{
"question": "Ouroboros <latest> is available (current: <local>). Update before starting?",
"header": "Update",
"options": [
{"label": "Update now", "description": "Update plugin to latest version (restart required to apply)"},
{"label": "Skip, start PM interview", "description": "Continue with current version"}
],
"multiSelect": false
}]
}- If "Update now":
- On Claude-plugin installs only:
1. Run `claude plugin marketplace update ouroboros` via the active runtime's `run_shell` capability (refresh marketplace index). If this fails, tell the user "⚠️ Marketplace refresh failed, continuing…" and proceed. 2. Run `claude plugin update ouroboros@ouroboros` via the active runtime's `run_shell` capability (update plugin/skills). If this fails, inform the user and stop — do NOT proceed to the package-manager step.
- On non-Claude runtimes, skip Claude plugin commands and proceed directly to the package-manager step for `ouroboros-ai`; do not require Claude-only commands or tools.
3. Detect the user's Python package manager and upgrade the MCP server:
- Check which tool installed `ouroboros-ai` by running these in order:
- `uv tool list 2>/dev/null | grep "^ouroboros-ai "` → if found, use `uv tool upgrade ouroboros-ai`
- `pipx list 2>/dev/null | grep "^ ouroboros-ai "` → if found, use `pipx upgrade ouroboros-ai`
- Otherwise, print: "Also upgrade the MCP server: `pip install --upgrade ouroboros-ai`" (do NOT run pip automatically)
4. Tell the user: "Updated! Restart your session to apply, then run `ooo pm` again."
- If "Skip": proceed immediately.
- If versions match, the check fails (network error, timeout, rate limit 403/429), or parsing fails/returns empty: **silently skip** and proceed.
Step 1: Load MCP Tool
tool discovery query: "+ouroboros pm_interview"
**CRITICAL — deferred-schema guard (prevents "Invalid tool parameters"):** This is a multi-turn loop and each turn runs in a fresh tool context. A deferred tool's schema loaded on one turn is NOT guaranteed to still be loaded on the next. Calling `ouroboros_pm_interview` while its schema is unloaded in the **current** turn makes the runtime reject it with **"Invalid tool parameters"** every message. Therefore **re-run `tool discovery query: "+ouroboros pm_interview"` immediately before EVERY `ouroboros_pm_interview` call** below (idempotent — a no-op if already loaded). If the load ever returns no matching tool (and the tool is not already callable — an empty load for an already-exposed tool is an expected no-op, not absence), follow the not-found diagnosis below instead of retrying the failing call.
If not found → fail closed without inspecting or mutating `~/.claude/mcp.json`. Standalone Claude SDK setup requires MCP 1.x and cannot activate the Ouroboros MCP 2 server with its configured backend. Explain:
The PM interview MCP tool is unavailable in this runtime.
Configure a supported CLI-backed host with:
ouroboros setup --runtime <codex|opencode|kiro|copilot|hermes>
Then restart that host and retry ooo pm. Claude SDK profiles ([claude] and
[claude-sdk]) stay on MCP 1.x; the separate [mcp] server uses [claude-cli]. Do
not combine both MCP majors or add a direct Python fallback.
Stop.
Step 2: Start Interview
Tool: ouroboros_pm_interview
Arguments:
initial_context: <user's topic or idea>
cwd: <current working directory>
**This response carries the first question, so Step 3 applies to it** — including the fan-out in 3-A2. The first question is the one most likely to be answered from memory, so it is the last one to skip evidence on.
Step 3: Loop
Apply this to **every** MCP response that carries a question, including the one Step 2 returned and any question re-shown on resume.
**A. Show alerts** (if present in `meta`):
- `meta.deferred_this_round` → print `[DEV → deferred] "question"`
- `meta.decide_later_this_round` → print `[DEV → decide-later] "question"`
- `meta.pending_reframe` → print `ℹ️ Reframed from technical question.`
**A2. Fan out the evidence lanes — required before you ask the user anything.**
**You do not look at the repositories yourself. Ever.** This skill has no code-answer path: there is no step where you run Read/Glob/Grep or a docs MCP to answer a PM question, and finding the answer quickly on your own is the failure, not a shortcut past it. Evidence the PM cannot trace back to a lane is evidence the record does not contain — it is not bound to the question, not bounded by the roster, and not checked against the answer contract. This skill is self-contained: everything you need is here and in the tool response, so do not go looking for exploration rules in another skill's file.
**When `meta.question_advisory_subagents` is present you MUST fan out.** Show the question text to the user first, then treat each entry as a spawn-ready payload with `title`, `agent`, `prompt`, and `context`, and dispatch every payload
Read more
name: pm description: "Generate a PM through guided PM-focused interview with automatic question classification. Use when the user says 'ooo pm', 'prd', 'product requirements', or wants to create a PRD/PM document."
/ouroboros:pm
PM-focused Socratic interview that produces a Product Requirements Document.
Instructions
Step 0: Version Check (runs before the PM interview)
Before starting the PM interview, check if a newer version is available:
# Fetch latest release tag from GitHub (timeout 3s to avoid blocking) curl -s --max-time 3 https://api.github.com/repos/Q00/ouroboros/releases/latest | grep -o '"tag_name": "[^"]*"' | head -1
Compare the result with the current version in the active runtime's local plugin metadata (for Claude installs this is `.claude-plugin/plugin.json`).
- If a newer version exists, ask the user through the active runtime's `ask_user` capability:
{
"questions": [{
"question": "Ouroboros <latest> is available (current: <local>). Update before starting?",
"header": "Update",
"options": [
{"label": "Update now", "description": "Update plugin to latest version (restart required to apply)"},
{"label": "Skip, start PM interview", "description": "Continue with current version"}
],
"multiSelect": false
}]
}- If "Update now":
- On Claude-plugin installs only:
1. Run `claude plugin marketplace update ouroboros` via the active runtime's `run_shell` capability (refresh marketplace index). If this fails, tell the user "⚠️ Marketplace refresh failed, continuing…" and proceed. 2. Run `claude plugin update ouroboros@ouroboros` via the active runtime's `run_shell` capability (update plugin/skills). If this fails, inform the user and stop — do NOT proceed to the package-manager step.
- On non-Claude runtimes, skip Claude plugin commands and proceed directly to the package-manager step for `ouroboros-ai`; do not require Claude-only commands or tools.
3. Detect the user's Python package manager and upgrade the MCP server:
- Check which tool installed `ouroboros-ai` by running these in order:
- `uv tool list 2>/dev/null | grep "^ouroboros-ai "` → if found, use `uv tool upgrade ouroboros-ai`
- `pipx list 2>/dev/null | grep "^ ouroboros-ai "` → if found, use `pipx upgrade ouroboros-ai`
- Otherwise, print: "Also upgrade the MCP server: `pip install --upgrade ouroboros-ai`" (do NOT run pip automatically)
4. Tell the user: "Updated! Restart your session to apply, then run `ooo pm` again."
- If "Skip": proceed immediately.
- If versions match, the check fails (network error, timeout, rate limit 403/429), or parsing fails/returns empty: **silently skip** and proceed.
Step 1: Load MCP Tool
tool discovery query: "+ouroboros pm_interview"
**CRITICAL — deferred-schema guard (prevents "Invalid tool parameters"):** This is a multi-turn loop and each turn runs in a fresh tool context. A deferred tool's schema loaded on one turn is NOT guaranteed to still be loaded on the next. Calling `ouroboros_pm_interview` while its schema is unloaded in the **current** turn makes the runtime reject it with **"Invalid tool parameters"** every message. Therefore **re-run `tool discovery query: "+ouroboros pm_interview"` immediately before EVERY `ouroboros_pm_interview` call** below (idempotent — a no-op if already loaded). If the load ever returns no matching tool (and the tool is not already callable — an empty load for an already-exposed tool is an expected no-op, not absence), follow the not-found diagnosis below instead of retrying the failing call.
If not found → fail closed without inspecting or mutating `~/.claude/mcp.json`. Standalone Claude SDK setup requires MCP 1.x and cannot activate the Ouroboros MCP 2 server with its configured backend. Explain:
The PM interview MCP tool is unavailable in this runtime. Configure a supported CLI-backed host with: ouroboros setup --runtime <codex|opencode|kiro|copilot|hermes> Then restart that host and retry ooo pm. Claude SDK profiles ([claude] and [claude-sdk]) stay on MCP 1.x; the separate [mcp] server uses [claude-cli]. Do not combine both MCP majors or add a direct Python fallback.
Stop.
Step 2: Start Interview
Tool: ouroboros_pm_interview Arguments: initial_context: <user's topic or idea> cwd: <current working directory>
**This response carries the first question, so Step 3 applies to it** — including the fan-out in 3-A2. The first question is the one most likely to be answered from memory, so it is the last one to skip evidence on.
Step 3: Loop
Apply this to **every** MCP response that carries a question, including the one Step 2 returned and any question re-shown on resume.
**A. Show alerts** (if present in `meta`):
- `meta.deferred_this_round` → print `[DEV → deferred] "question"`
- `meta.decide_later_this_round` → print `[DEV → decide-later] "question"`
- `meta.pending_reframe` → print `ℹ️ Reframed from technical question.`
**A2. Fan out the evidence lanes — required before you ask the user anything.**
**You do not look at the repositories yourself. Ever.** This skill has no code-answer path: there is no step where you run Read/Glob/Grep or a docs MCP to answer a PM question, and finding the answer quickly on your own is the failure, not a shortcut past it. Evidence the PM cannot trace back to a lane is evidence the record does not contain — it is not bound to the question, not bounded by the roster, and not checked against the answer contract. This skill is self-contained: everything you need is here and in the tool response, so do not go looking for exploration rules in another skill's file.
**When `meta.question_advisory_subagents` is present you MUST fan out.** Show the question text to the user first, then treat each entry as a spawn-ready payload with `title`, `agent`, `prompt`, and `context`, and dispatch every payload
Other skills on ouroboros.
- /auto
Automatically converge from goal to A-grade Seed and execute it
Open skill - /brownfield
Scan and manage brownfield repository/worktree defaults for interviews
Open skill - /cancel
Cancel stuck or orphaned executions
Open skill - /config
Open or drive the Ouroboros settings GUI (browser, TUI, or conversational fallback)
Open skill - /evaluate
Evaluate execution with three-stage verification pipeline
Open skill - /evolve
Start or monitor an evolutionary development loop
Open skill

