skills/to-prd/SKILL.md
Synthesize current conversation context and codebase understanding into a PRD artifact (markdown file by default, GitHub issue via flag). Trigger when the user asks for a PRD, requirements doc, feature spec, or wants to crystallize an in-flight discussion into a durable artifact before planning. PRD precedes implementation planning.
npx skillsauth add outlinedriven/odin-codex-plugin to-prdInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Synthesize a PRD from what you already know. Do NOT interview — extract from context, codebase exploration, and prior decisions. Iterate the artifact in place; commit when the user signs off.
Default (file mode): Write to <project-root>/docs/prd/<feature>.md. Idempotent — overwrite on rerun. Use file mode when no flag is passed, when working offline, when the repo has no GitHub remote, or when the user explicitly wants a tracked file.
Flag mode (--emit-issue): Submit via gh issue create --title "PRD: <feature>" --body-file <tmp>. Use only when the user explicitly opts in or the project's convention is issue-tracked PRDs (check <project-root>/CONTRIBUTING.md and .github/ISSUE_TEMPLATE/).
When ambiguous, default to file mode and ask the user one targeted question rather than guessing.
If conversation context already covers domain language, naming conventions, and module shape, skip discovery and proceed to step 2. Otherwise dispatch an Explore agent over the codebase. Goal: current architectural state, naming conventions, ADRs, domain language. Read CONTEXT.md, AGENTS.md, docs/adr/, and any UBIQUITOUS_LANGUAGE.md. Use fd -e md . docs/ then bat -P -p -n -r for targeted reads.
Sketch modules to build or modify. Prefer deep modules — large functionality behind a narrow, stable interface — over shallow modules. Surface 3-7 candidates and their interfaces. Recommend which modules deserve isolated tests; defer to user on edge cases.
If the module breakdown is unambiguous from prior context, skip this step and proceed to writing. Ask the user only when an axis (scope, depth, or test coverage) is genuinely unresolved or when a decision is reversible-but-costly. Surface one unresolved axis at a time with a recommendation; never ask three default-bound axes at once.
Render the template below. In file mode, write to docs/prd/<feature>.md and git add it. In flag mode, write to /tmp/prd-<feature>.md then gh issue create --body-file /tmp/prd-<feature>.md.
# PRD: <feature>
## Problem Statement
The user-visible problem, framed from the user's perspective. No internal jargon.
## Solution
The user-visible resolution. Behavior, not implementation.
## User Stories
Numbered, exhaustive. Format: `As an <actor>, I want <feature>, so that <benefit>`.
## Implementation Decisions
- Modules to build/modify and their interface contracts
- Architectural decisions (no file paths, no code snippets — they go stale)
- Schema changes, API contracts, key interactions
## Testing Decisions
- What makes a test durable: assert on observable behavior through public interfaces, not internal state
- Which modules earn tests
- Prior art: link to similar tests already in the codebase by name (not path)
## Out of Scope
Explicit non-goals.
## Further Notes
Open questions, follow-ups, deferred decisions.
User-story examples across stacks:
PRD is a living artifact. On every rerun: diff current artifact against latest context (difft if file mode); extend or revise sections; never silently drop existing content; bump Last-revised: <ISO date> footer.
The PRD file produced here is the input contract for downstream implementation planning. Implementation planners read docs/prd/<feature>.md (or fetch the issue body in flag mode) and produce the implementation plan. Hand off the path or issue URL explicitly.
testing
ODIN's compress-operations dispatcher under the Compressor/Extender role. Invoke on "tidy", "clean up", "tidy this file/memory/workspace/git/docs", or when active context (current file, diff, stack, memory directory) has structural rot to resolve before touching behavior. Detects target domain from context and routes to the sibling skill. Requires explicit target or clear active-context signal — do not invoke speculatively.
development
Cross-domain taste skill — apply distinctive judgment to any artifact (prose, code, design, decisions) instead of converging to AI defaults. Two modes — `audit` (judge work against the two-sided charter and portable anchors) and `anchor` (load register before producing). Auto-detects by phrasing; override via `/taste audit | anchor`. Trigger on "is this slop?", "overkill?", "elegant?", "taste-test this".
tools
One-shot bootstrap of strict-mode tooling per ecosystem plus per-task GOALS.md scaffolding so an agentic loop can self-verify. Writes typechecker/linter/schema-validator config for TS (strict + noUncheckedIndexedAccess + exactOptionalPropertyTypes), Python (Pyright strict, Ruff strict), Rust (Clippy deny-correctness), Go (golangci-lint with staticcheck), OCaml (dune --release); establishes `.agent-tasks/<id>/GOALS.md` per-task convention distinct from project-stable AGENTS.md. C++/Java/Kotlin and framework specifics (Spring Boot, Nest, React-strict) are out of scope. Trigger on new project bootstrap, agentic-task setup, "make this self-verifying", "set the loop's goal", "scaffold goals for this issue". Pairs with `llm-self-loop` runtime.
tools
Install git pre-commit hooks via the project's hook tool — Husky+lint-staged (JS), pre-commit (Python/OCaml), lefthook (Go), cargo-husky (Rust). Use when the user wants commit-time formatting, linting, type-checking, or test gates. Detects ecosystem first.