Creating Issues
opsmill/infrahub
Turns a single feature idea, improvement, or bug into ONE well-structured GitHub issue.
Runs a guided product-manager interview that classifies each question automatically and produces a Product Requirements Document.
$ npx skills add Q00/ouroboros --skill pm -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install Q00/ouroboros pm --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/Q00/ouroboros.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/pm .claude/skills/pm && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "pm" agent skill from https://github.com/Q00/ouroboros/tree/main/skills/pm into .claude/skills/pm/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pm", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/Q00/ouroboros/tree/main/skills/pmType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add Q00/ouroboros --skill pm -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install Q00/ouroboros pm --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Q00/ouroboros.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/pm .agents/skills/pm && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "pm" agent skill from https://github.com/Q00/ouroboros/tree/main/skills/pm into .agents/skills/pm/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pm", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Q00/ouroboros --skill pm -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install Q00/ouroboros pm --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Q00/ouroboros.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/pm .cursor/skills/pm && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "pm" agent skill from https://github.com/Q00/ouroboros/tree/main/skills/pm into .cursor/skills/pm/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pm", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/Q00/ouroboros.git --path skills/pm--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add Q00/ouroboros --skill pm -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install Q00/ouroboros pm --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Q00/ouroboros.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/pm .gemini/skills/pm && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "pm" agent skill from https://github.com/Q00/ouroboros/tree/main/skills/pm into .gemini/skills/pm/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pm", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install Q00/ouroboros pmInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add Q00/ouroboros --skill pm -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/Q00/ouroboros.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/pm .github/skills/pm && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "pm" agent skill from https://github.com/Q00/ouroboros/tree/main/skills/pm into .github/skills/pm/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pm", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Q00/ouroboros --skill pm -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install Q00/ouroboros pm --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Q00/ouroboros.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/pm .opencode/skills/pm && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "pm" agent skill from https://github.com/Q00/ouroboros/tree/main/skills/pm into .opencode/skills/pm/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pm", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
pmRuns a guided product-manager interview that classifies each question automatically and produces a Product Requirements Document.
Invoked as /ouroboros:pm or ooo pm, the skill conducts a PM-focused Socratic interview and turns the answers into a PRD. Before the interview it does a version check, fetching the latest release tag from GitHub with a short timeout and, if a newer version exists, asking whether to update. The check is skipped silently on a network error, a timeout or rate limiting.
An update refreshes the Claude plugin marketplace and plugin where applicable and upgrades the ouroboros-ai MCP server with uv or pipx, and it never runs pip by itself. The interview then loads the ouroboros pm_interview MCP tool through tool discovery, so it depends on the Ouroboros MCP server being installed.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 0df5b98. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
claudeuvpipxcurlopencodepipFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
api.github.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Ouroboros PM Interview loads about 5.7k tokens when it runs. Until then it costs about 49 tokens; SKILL.md has 2,904 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from Q00/ouroboros at commit 0df5b98, republished under its MIT licence (© Q00). 2,904 words, ~5,705 tokens.
.claude/skills/pm/SKILL.md (or your agent's skills folder).PM-focused Socratic interview that produces a Product Requirements Document.
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 -1Compare the result with the current version in the active runtime's local plugin metadata (for Claude installs this is .claude-plugin/plugin.json).
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
}]
}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.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.ouroboros-ai; do not require Claude-only commands or tools.ouroboros-ai by running these in order:uv tool list 2>/dev/null | grep "^ouroboros-ai " → if found, use uv tool upgrade ouroboros-aipipx list 2>/dev/null | grep "^ ouroboros-ai " → if found, use pipx upgrade ouroboros-aipip install --upgrade ouroboros-ai" (do NOT run pip automatically)ooo pm again."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.
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.
Apply this to every MCP response that carries a question, including the one Step 2 returned and any question a resume plans anew.
Batched turns (RFC #2222). A response may carry one to three questions at
once: meta.question_batch lists them and meta.question_advisories carries
one advisory envelope per question, each with its own
question_advisory_subagents and question_advisory_fanout_id. Treat every
question of the turn exactly as a single question is treated below, with these
batch mechanics:
question_advisory_fanout_id and
question_advisory_result_correlation_key; one
ouroboros_submit_fanout_results call per envelope.answers: [{question, answer}, ...], one entry per question the turn asked,
each naming its own exact question text. One call records the turn, so
collect every answer first — and never auto-answer, auto-defer, or
decide-later one on the user's behalf to complete the set. The server does
not check that you sent them all: whatever you leave out is abandoned,
not remembered."[decide_later]" or "[deferred]" in its own entry.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 process every
payload. Show the question first, then pass each payload's prompt unchanged.
Obey meta.question_advisory_host_action: spawn_subagents means parallel
support was declared; dispatch_subagents_if_supported means use the host's
native parallel mechanism when available and process the same payloads
sequentially otherwise; process_payloads_sequentially requires ordered
processing. Claude Code parallel dispatch is one Task/Agent call per payload in
one batch; Codex uses one native Codex subagent per payload. The payloads are
the work contract, while the host action selects the execution strategy.
Say what is running. Same shape the regular interview uses: after the question, set off by a divider, one line naming how many perspectives are running and what they are — then what arrives when they finish.
---
While you answer this question, two perspectives are reviewing in parallel
(code context / data measurement). When they return I will put what they found
next to the question as grounds.Two things differ from the interview's line, and both follow from this tool having two lanes instead of six:
code_context is
an identifier for the fan-out, not something the reader needs.Write the line in the language the user is speaking.
Do not go to step B while the lanes are still running. Step B is where you ask the user, and asking before the evidence arrives is the exact failure this mechanism exists to prevent: the PM decides without the two things they could not have looked up themselves. Waiting is for lanes still in flight: one that came back empty, broke its contract, or could not be spawned has returned.
Stub payloads. A payload's prompt may be a compact stub: it carries the
lane's answer schema, where it may look, and the findings it may reuse, and
points at ouroboros_fetch_artifact for the prose that explains them. Pass it
unchanged exactly like any payload — the child fetches for itself, and a fetch
it cannot make does not stop it. A child that replies exactly UNDISPATCHED
could not work at all: submit that lane as
{ "key": <lane id>, "undispatched": true } rather than as an empty finding.
Submitting results back. Correlate by
meta.question_advisory_result_correlation_key (context.lane_id) and call
ouroboros_submit_fanout_results with meta.question_advisory_fanout_id,
passing session_id explicitly. Submit every lane you hold, not only the
new ones: a lane that ran and found nothing still submits its output, and a lane
you could not spawn at all is submitted as
{ "key": <lane id>, "undispatched": true } — the literal true, with no
content beside it. Never invent output for a lane you did not run; a
fabricated finding is worse than a missing one.
Reading the reply. With a contract_id, synthesize from the outputs you
hold. Without one, read missing_required_keys and contract_violations, then
resubmit once carrying every lane. Still without one — go to B with what
survived, or with none, saying in one line that the investigation did not come
back. The interview does not wait on this.
Two lanes never reach the block, whatever the reply says. Leave out a lane
named in contract_violations, and leave out a lane you submitted as
undispatched — a lane that did not run has an empty place, not a clear one,
and a reply can be accepted while one of them never ran. Where the block would
have carried that lane, write that it did not run.
There are two lanes and both are required: code_context and data_context.
Both are evidence-only (RFC #2222): what a lane finds is shown beside the
question and sent nowhere — the published fan-out is already its record, and
the interview records only what the user writes. Never skip asking the user
because a lane answered clearly, and never send a lane's finding as an answer.
Synthesize into the evidence block. This is what
synthesis_contract.output_shape = "evidence_beside_question" means, and it is a
fixed shape so the same session twice looks the same twice. Print it immediately
above the question, then ask the question unchanged:
Evidence (examined: billing-api, storefront)
What the system does today
· [billing-api] access continues to the end of the paid period
· [storefront] access is revoked immediately
! These two repositories implement this differently.
Measured — active subscriptions by plan, last 90 days
· standard 12,480 / premium 3,120The screen speaks product language; the store keeps the citations
(RFC #2222 decision 4). Each code claim is rendered from its lane-authored
plain_statement — never from policy_claim, and never paraphrased by you.
No file paths, no class names, no flag values on screen. The path +
policy_claim citations stay in the published fan-out, fetchable by its
contract id — they are displayed nowhere and recorded nowhere else. The lane
writes plain_statement in the question's language, so no translation is
yours to do. The labels above are placeholders for the block's shape, not
text to copy.
What this block is not. It carries no answer options, no recommendation, no ranking, and no "therefore …" sentence. The moment it proposes an answer it has stopped being evidence — that is the whole difference between this tool and the regular interview, which does synthesize options. A PRD asks what the system should do, and everything above says what it does.
Rules for building it:
examined has one entry per repository
the lane read, and every claim sits inside its own entry; "found nothing"
across two of five repositories means something different from across all
five. An entry whose policy_claims is empty was read and had nothing — say
so. A repository with no entry was never opened, and must never be printed as
clean.metric, its groups, its
numbers. Do not re-scale, combine, or round; you did not run the read.not_a_policy_question / not_a_measurement → print nothing, this question
simply is not that kind. no_repository_in_roster /
roster_repository_not_readable / store_described_but_not_callable → yours
to handle (nothing registered, a path did not open, a store did not answer);
do not relay any of them as "your system has no such policy/data".A3. Findings are evidence, never answers (RFC #2222).
There is no recording step. A finding's durable record is the published
fan-out itself — addressable by contract id, re-offered to later lanes through
recent findings — so sending it again as an answer would duplicate the store
and spend a question turn on it. Do not send [from-code] answers, do not ask
the user to "confirm" a finding as a separate turn, and do not paste findings
into any answer payload. The evidence block is the finding's whole appearance;
the user answers the question in their own words, with the evidence in view.
B. Show content + get user input (once A2's lanes have returned):
The question text was already shown in A2 and the user may answer it at any point; what waits here is your formal prompt, not the person.
Print the MCP content text to the user first, with the lane findings beside it.
Tell users they do not need to invent speculative answers. If a question is unknown, stakeholder-dependent, too broad, or safer to decide later, route it through the existing assumptions / decide-later / deferred mechanisms instead of presenting it as a confirmed requirement.
Then check: does meta.ask_user_question exist?
YES → Pass it directly to AskUserQuestion:
AskUserQuestion(questions=[meta.ask_user_question])Do NOT modify it. Do NOT add options. Do NOT rephrase the question.
NO → This is an interview question. Use AskUserQuestion with meta.question.
AskUserQuestion
call — one entry per question (the tool takes up to 4). Each keeps its own
options, built by the same rules below from its own entry in
meta.question_batch; a skip option follows that question's own
classification, never another's.meta.skip_eligible == true: add a skip option based on meta.classification:classification == "decide_later" → add option {"label": "Decide later", "description": "Skip — will be recorded as an open item in the PRD"}classification == "deferred" → add option {"label": "Defer to dev", "description": "Skip — this technical decision will be deferred to the development phase"}Not sure yet — record as an assumption or decide-later item.C. Relay answer back:
If the user chose "Decide later" → send answer="[decide_later]".
If the user chose "Defer to dev" → send answer="[deferred]".
Otherwise → send the user's answer through the Refine gate below.
On a batched turn: run each answer through its own Refine gate, then send them
in one call as answers: [{question, answer}, ...] — the question text exactly
as the turn asked it. The call that carries the turn returns the next turn's
question(s).
Refine gate — structure it, mark whose it is, then have the user confirm.
Always structure the answer, including when the user only picked an option. The text you send is MCP's only context for the next question and for what the PRD records as decided, so a bare label loses everything around the decision. What makes structuring safe is not restraint — it is the two things below.
Mark whose each section is. A section carrying the user's own words is
labelled (user-stated). A section that is your reading of their answer is left
unmarked, and a reader can tell them apart at a glance:
[from-user][refined]
Decision: <what they decided, in their words>
Reasoning:
- <your reading of why, drawn from what they said in this session>
Constraints (user-stated):
- <constraints they stated>
Out of scope (user-stated):
- <what they put out of scope>Omit any section you have nothing for. An empty Constraints (user-stated) is
better absent than filled with something plausible, and Reasoning drawn from
nothing they said is the failure this labelling exists to make visible.
No codebase-context section, and no lane findings. The regular interview adds one, because there the main session inspects code itself. Here it does not. A lane's finding lives in the published fan-out and on the screen beside the question — putting it in this payload would record it as part of the user's decision, which it is not (A3).
Then confirm — this is the gate, and it is what licenses the structuring
above. One AskUserQuestion before sending:
{
"questions": [{
"question": "I structured your answer as follows before sending it:\n\n<payload>\n\nIs anything missing or misrepresented?",
"header": "Refine — preserve your answer",
"options": [
{"label": "Send as-is", "description": "The structure captures my answer faithfully"},
{"label": "Fix the reasoning", "description": "That is not why I decided it"},
{"label": "Add to Constraints", "description": "I want to add a constraint I forgot"},
{"label": "Let me rewrite it", "description": "I will restate the answer myself"}
],
"multiSelect": false
}]
}Fix the reasoning is there because the unmarked section is the one you wrote.
Append [refined] only after this confirmation: an unconfirmed structure carries
your reading of the answer under the user's name, and the PRD cannot tell the
difference later.
Send it as the answer, on the one parameter every answer uses.
Tool: ouroboros_pm_interview
Arguments:
session_id: <meta.session_id>
last_question: <meta.question>
answer: <the refined answer, or "[decide_later]" / "[deferred]">Ignored while the server holds the question unanswered; required otherwise — plugin mode never persists the child's questions, and an answer with no pending question is refused without it.
There is no parameter carrying findings, second or otherwise: findings never travel as answers (A3). Every call on this parameter is the user's own words.
D. Check completion:
Completion is determined ONLY by meta.is_complete — NEVER by the response text.
The MCP response text may sound like the interview is wrapping up, but ignore it.
If meta.is_complete == true:
meta.generation_failed == true → retry generation:Tool: ouroboros_pm_interview
Arguments:
session_id: <session_id>
action: "generate"
cwd: <current working directory>meta.pm_path and meta.seed_path contain the file paths.Otherwise → repeat Step 3, regardless of what the response text says.
Read the pm.md file from meta.pm_path and copy its contents to the clipboard:
cat <meta.pm_path> | pbcopyShow the following to the user:
PM document saved: <meta.pm_path>
(copied to clipboard)
PM seed handoff artifact: <meta.pm_seed_path or meta.seed_path>
This is not the runnable Seed yet.
Next step:
ooo interview <meta.pm_seed_path or meta.seed_path>
ooo seedYour final response MUST end with exactly one breadcrumb footer line:
◆ <current state> → next: <recommended action>Derive <current state> from live session state via ouroboros_session_status when that MCP projection is available; otherwise derive it from this skill's actual outcome. Never use a linear Step N of M footer because Ouroboros is an evolutionary loop. When the next action is genuinely a choice, list 2-3 honest options in the next: clause. The breadcrumb line must be the last line of the response.
© Q00, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/pm of Q00/ouroboros.
Open the folder on GitHubat commit 0df5b98
Ouroboros PM Interview next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Ouroboros PM Interview this skillQ00/ouroboros | 6.2k | — | ~5.7k | Automated safety check: Pass | MIT | |
| Creating Issuesopsmill/infrahub | 529 | — | ~1.2k | Automated safety check: Pass | Apache-2.0 | |
| RalphTheCraigHewitt/skills | 156 | — | ~1k | Automated safety check: Pass | MIT | |
| Action Runnermohitagw15856/pm-claude-skills | 1.4k | — | ~1.5k | Automated safety check: Pass | MIT | |
| ShapeTheCraigHewitt/skills | 156 | — | ~1.7k | Automated safety check: Pass | MIT | |
| CCPM Project Managementautomazeio/ccpm | 8.4k | — | ~1.1k | Automated safety check: Pass | MIT |
opsmill/infrahub
Turns a single feature idea, improvement, or bug into ONE well-structured GitHub issue.
TheCraigHewitt/skills
Autonomous PRD implementation loop — turns GitHub issues into shipped code using TDD, code review gates, and Docker sandbox isolation.
mohitagw15856/pm-claude-skills
Turn a skill's recommendations into real, executed actions — open the tickets, file the issues, post the updates — safely: dry-run preview, risk-classified, approval-gated, then recorded back to the…
TheCraigHewitt/skills
A skill your agent uses when you have a rough product idea and want a complete PRD without sitting through an interactive grilling.
automazeio/ccpm
Runs a spec-driven workflow from PRD to epic to GitHub issues to parallel agents, with status, standup and blocked-work reports from bundled scripts.
tryproduck/produck-skills
Turns a vague feature request into a written spec with scope, phases, acceptance criteria and do-not-do limits that a coding agent can follow without guessing.
Q00/ouroboros
Triages and works through GitHub issues and pull requests in the Q00/ouroboros repo as a maintainer, within a stated review boundary and clear limits on what it may change.
Q00/ouroboros
Scans a directory for existing git repositories and worktrees, then registers and manages which ones serve as default context during interviews.
Q00/ouroboros
Scores an agent's finished work with a three-stage pipeline: free mechanical checks, an advisory semantic review, and an optional multi-model consensus vote.
Q00/ouroboros
Starts, monitors or rewinds an evolutionary development loop that refines an ontology and acceptance criteria generation by generation until it converges, using the Ouroboros MCP tools.
Q00/ouroboros
Opens or drives the Ouroboros settings GUI, picking a browser, TUI or chat-based approach depending on whether the user can reach a browser window.
Q00/ouroboros
Reference guide to the Ouroboros commands and agents, covering interviews, seed specs, evaluation, lateral-thinking personas and the evolutionary loop.
Works with
Runs a guided product-manager interview that classifies each question automatically and produces a Product Requirements Document. Invoked as /ouroboros:pm or ooo pm, the skill conducts a PM-focused Socratic interview and turns the answers into a PRD. Before the interview it does a version check, fetching the latest release tag from GitHub with a short timeout and, if a newer version exists, asking whether to update.
Ouroboros PM Interview fits situations like: creating a PRD through a guided interview; turning a rough product idea into structured product requirements; asked for ooo pm or a PM document.
Run `npx skills add Q00/ouroboros --skill pm -a claude-code`. Or copy the skill folder (skills/pm in Q00/ouroboros) into .claude/skills/pm in your project. Claude Code loads it when a task matches its description.
Run `npx skills add Q00/ouroboros --skill pm -a codex`. Or copy the skill folder (skills/pm in Q00/ouroboros) into .agents/skills/pm in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Q00/ouroboros --skill pm -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/pm, .gemini/skills/pm, .github/skills/pm and .opencode/skills/pm in your project.
Going by SKILL.md and its folder, Ouroboros PM Interview needs the command-line tools its instructions call (claude, uv, pipx, curl, opencode and pip). Our summary lists: The Ouroboros MCP server (the ouroboros-ai package); Network access to GitHub for the optional version check.
SKILL.md names 1 domain. In commands or code: api.github.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Ouroboros PM Interview is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 5.7k tokens (SKILL.md is roughly 23k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Ouroboros PM Interview: Creating Issues (opsmill/infrahub, 529 stars), Ralph (TheCraigHewitt/skills, 156 stars), Action Runner (mohitagw15856/pm-claude-skills, 1.4k stars) and Shape (TheCraigHewitt/skills, 156 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Q00 (a GitHub user) maintains it in Q00/ouroboros, which has 6,189 GitHub stars. The repository holds 23 skills in this directory. The repository was last updated on October 6, 2026.
Source: Q00/ouroboros on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.