| Distills ANY messy input — brain dump, transcript, long PRD, stakeholder notes, feature request, voice memo — into a tight five-field SPEC.md kernel that any Constraints, Non-Goals, Success Metrics. Use when the user says "create a spec", "write a spec for", "distill this into a spec", "I have a brain dump", "turn this into something structured", "clean up these notes", "make a SPEC from", "I want to define the problem", "help me scope this", "summarize what we're building", "I have a PRD but need a kernel", "what are we actually solving?", or drops raw text/transcript and asks for structure. Also use when starting any new initiative and a clean shared definition is missing.
npx skills add https://github.com/aj-geddes/claude-code-bmad-skills --skill bmad-spec
Function: Accept messy, unstructured, or verbose input and produce a lean
SPEC.md kernel (five fields, no more) that anchors every downstream planning
workflow. This is a planning skill. It never writes application code, runs
tests, or builds anything.
A single file under the configured output folder (default bmad-output/):
bmad-output/
└── SPEC.md # the five-field kernel
The kernel is intentionally small — a SPEC is not a PRD, not a brief, not an
architecture doc. It is the shared definition of what is being built and why.
Every downstream skill (PRD, tech-spec, architecture) loads it as the ground
truth for scope.
| Field | Purpose |
|---|---|
| Problem | The one thing that hurts right now and why it matters |
| Capabilities | What the solution must be able to do (outcome-framed) |
| Constraints | Hard limits that are not negotiable (budget, tech, time, compliance) |
| Non-Goals | Scope that is explicitly out — prevents creep and confusion |
| Success Metrics | Observable signals that confirm the problem is solved |
See templates/spec.template.md for the exact template with guidance and examples.
Accept whatever the user hands over:
Read it)If the input exceeds a few hundred words, briefly acknowledge what you received
before proceeding. Do not ask the user to reformat it — that is the skill's job.
Read the input and locate signal for each field:
as capabilities ("users can …", "the system supports …").
regulatory mentions, team-size limits.
is explicitly ruled out? What is deferred?
observable behaviors, thresholds.
Write a concise draft of all five fields and show it to the user in the chat
before writing to disk. Keep each field tight:
After presenting, ask one targeted question: "Does anything here need to change
before I write SPEC.md?"
Once the user confirms (or revises), write SPEC.md using the template:
${CLAUDE_PLUGIN_ROOT}/skills/bmad-spec/templates/spec.template.md
Output path: <outputFolder>/SPEC.md (read bmad-output/config.yaml if it
exists to find the configured output folder; fall back to bmad-output/).
Append a new entry to bmad-output/decision-log.md (create it if absent):
## SPEC created — <ISO date>
- Source: <one-line description of the input, e.g. "stakeholder brain dump">
- Key scope decision: <the single most important Non-Goal or Constraint>
After writing, tell the user what the SPEC unlocks:
bmad-tech-spec to turn the kernel into adeployable spec.
bmad-product-brief or thePM role (bmad-prfaq) for a full PRD.
/bmad-planning-orchestrator:bmad-initfirst to pick a track.
SPEC.md (the common case).SPEC.md, apply the changes, present a diff-style summary, confirm, then
overwrite. Record the change in decision-log.md.
SPEC.md against the five-field contract: are all fieldspresent and non-empty? Is the Problem one coherent statement? Are Capabilities
outcome-framed (not feature-list)? Are Non-Goals unambiguous? Flag any gaps and
offer to fix them.
Follow these when mapping noisy input to the five fields:
| Input pattern | Maps to |
|---|---|
| "we need to fix / users complain / it's broken" | Problem |
| "it should / users can / the system supports" | Capabilities |
| "we can't / no budget / must use / by deadline" | Constraints |
| "not in scope / later / out of v1 / won't do" | Non-Goals |
| "if X% then / we'll know it works when / target" | Success Metrics |
When a constraint sounds aspirational (e.g., "we'd like to finish in Q3"), move
it to Non-Goals or flag it as a soft constraint and note the ambiguity.
When capabilities sound like features rather than outcomes, rephrase: "add a
search bar" → "users can find any record within 3 keystrokes".
When no success metrics appear in the input, use the Problem statement to derive
proxy metrics: if the problem is "users can't find X", a metric is "time-to-find
X reduced by Y%".
not fit the five fields, note it as context in the file header and direct the
user to expand it in the PRD or tech-spec stage.
choices. Architecture, tech stack, and approach live downstream.
SPEC.md. It does not createstories, write code, or produce acceptance criteria. Hand those to downstream
skills.
See REFERENCE.md for extended distillation patterns and edge cases.
> ---
> Part of the BMAD Planning & Orchestrator plugin — a Claude Code harness for the BMAD Method by the BMAD Code Organization (https://github.com/bmad-code-org/BMAD-METHOD). Implements the spirit of bmad-spec. All methodology credit belongs to the BMAD Code Organization.
Automate YouTube tasks via Rube MCP (Composio): upload videos, manage playlists, search content, get analytics, and handle comments. Always search tools first for current schemas.
Create and audit truthful, accessible, publication-ready scientific figures with Matplotlib, Seaborn, or Plotly. Use for figure design, multi-panel layouts, uncertainty and missing-data displays, color/contrast review, image metadata validation, and journal export planning.
This skill should be used when comparing two videos to analyze compression results or quality differences. Generates interactive HTML reports with quality metrics (PSNR, SSIM) and frame-by-frame visual comparisons. Triggers when users mention "compare videos", "video quality", "compression analysis", "before/after compression", or request quality assessment of compressed videos.
Python bridge to ImageJ2/Fiji for macros, plugins (Bio-Formats, TrackMate, Analyze Particles), NumPy↔ImagePlus/ImgLib2 exchange, and ImageJ Ops. Automates Fiji headlessly from Python. Use scikit-image for pure Python without Fiji plugins; napari for visualization.
Create 3D scenes, interactive experiences, and visual effects using Three.js. Use when user requests 3D graphics, WebGL experiences, 3D visualizations, animations, or interactive 3D elements.
Generate publication-quality PNG chart images from data, supporting line, bar, area, candlestick, pie, and heatmap charts. Triggers when the user asks to visualize data, create a graph, plot a time series, or generate a chart for a report, alert, or dashboard. Runs as a lightweight, headless Node.js process without a browser.
Performs deep Root Cause Analysis (RCA) on NVIDIA TAO Visual ChangeNet classification experiments with image-evidence-driven investigation. Use when analyzing ChangeNet model failures, investigating poor recall / FAR / PASS-NO_PASS metrics, auditing visual inspection pipeline quality, or running an RCA report for an AOI defect-detection model. Trigger phrases include "RCA on my ChangeNet model", "why is my AOI model failing", "audit ChangeNet predictions", "investigate FAR regressions", "root cause analysis on visual-changenet".
Build 3D web apps with Three.js (WebGL/WebGPU). Use for 3D scenes, animations, custom shaders, PBR materials, VR/XR experiences, games, data visualizations, product configurators.
Take aj-geddes/bmad-spec from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.