From edify
Capture and document requirements for implementation. Triggers on "capture requirements", "document requirements", "what do I want to build", or feature discussions without clear documentation. Produces requirements.md artifact for design and planning phases.
How this skill is triggered — by the user, by Claude, or both
Slash command
/edify:requirementsThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Dual-mode requirements capture: extract from conversation or elicit through semi-structured questions. Produces `plans/<job>/requirements.md` artifact consumed by `/design` and `/runbook`.
Dual-mode requirements capture: extract from conversation or elicit through semi-structured questions. Produces plans/<job>/requirements.md artifact consumed by /design and /runbook.
Opus required. Extract mode requires synthesizing nuanced conversation context; sonnet misses implicit requirements.
/requirements <job-name>
Skill automatically detects appropriate mode based on conversation history.
Primary signal: Glob: plans/<job>/requirements.md — if file exists, Read it and use as base for update/refinement (extract mode with existing artifact). If absent, fall through to conversation heuristic.
Conversation heuristic (fallback):
Runs after mode detection, before either procedure. Ground extraction in existing infrastructure, patterns, and decisions — prevents naive requirements.
Invoke /recall all (deep + broad, topic-scoped). This is a skill invocation — /recall handles memory-index scanning, batch resolution, and tail-recursion. Derive topic from job name, conversation context, and any existing plans/<job>/ artifacts.
Gate anchor: The /recall all Skill invocation is the structural anchor — a tool call on both paths. When no relevant entries are found, write the recall artifact with an explicit null entry (see format below). Downstream consumers batch-resolve it via edify _recall resolve null — the tool call fires on both paths without consumer-side conditional logic.
Boundaries:
After recall completes, write plans/<job>/recall-artifact.md. Entry keys only — downstream consumers resolve fresh content at consumption time.
Format:
# Recall Artifact: <Job Name>
Resolve entries via `edify _recall resolve` — do not use inline summaries.
## Entry Keys
<trigger phrase> — <1-line relevance note>
<trigger phrase> — <1-line relevance note>
Null artifact (no relevant entries): Write null — no relevant entries found as the sole entry. Downstream consumers batch-resolve it via edify _recall resolve null (silent exit) — the tool call anchors the gate without consumer-side empty-section handling. Augmenting consumers (/design A.1, /runbook Phase 0.5) remove the null entry when adding real ones.
Selection criteria: Include entries that informed requirements or constrain implementation. Exclude entries read but proved irrelevant — the artifact is curated, not exhaustive.
Output: plans/<job>/recall-artifact.md
When conversation contains requirements signals:
Extract from conversation history:
Critical rule: Extract from what was said, do NOT infer unstated requirements. Hallucination risk — if not discussed, flag as Open Question rather than inventing.
Quick scan to ground requirements (runs after extraction, so scan is targeted):
Discovery actions (guideline: ~5 tool calls, flexible based on complexity):
Glob for plans/*/requirements.md and plans/*/design.md — find related workGrep for key terms from extracted requirements — check what existsRead existing patterns in relevant area — inform constraintsBoundaries:
plans/prototypes/ (not tmp/) — they are referenced artifacts, not ephemeraDiscovery via Glob/Grep may surface domains not anticipated during the initial recall pass. Re-scan memory-index (already in context from recall pass) for entries relevant to areas discovered during codebase exploration.
Gate anchor (D+B — tool call required):
edify _recall resolve "when <trigger>" ... — resolve into context, update recall artifact with new entry keysedify _recall resolve null — proves gate was reachedFormat into standard artifact (see Standard Format section below):
Check for empty critical sections:
Critical sections (ask if empty):
Non-critical sections (note absence, don't ask):
Question budget (applies to both Extract and Elicit modes):
Use AskUserQuestion tool for gap-fill:
questions: [
{
question: "What should the system do? (Functional requirements)",
header: "Functional",
options: [
// Generate context-relevant options from job name and conversation
// Example for job "git-hook-validator":
{label: "Validate hook scripts before commit", description: "Parse and check hooks for common errors"},
{label: "Block commits with invalid hooks", description: "Fail commit if hooks malformed"},
{label: "Report hook validation errors", description: "Show clear error messages for failures"},
...
],
multiSelect: true
}
]
Invoke /proof plans/<job>/requirements.md — structured reword-accumulate-sync loop on the requirements draft. Present artifact path, summarize sections populated, note Open Questions.
/proof handles the iterative validation loop. No corrector dispatch for requirements (user-validated directly). On terminal action "apply", accumulated decisions are applied to the artifact.
After user validation:
plans/<job>/requirements.md (create directory if needed)When conversation lacks requirements context:
Use AskUserQuestion for each critical section (Functional Requirements, Scope Boundaries) with domain-relevant options. Add optional Constraints/Dependencies questions if job suggests them. Adaptive follow-ups: 1-2 clarifying questions based on responses. Total budget: 4-6 questions.
After elicitation, follow Extract mode steps 2-6 (Codebase Discovery, Structure, Gap Detection, Present Draft, Write Artifact).
# <Job Name>
## Requirements
### Functional Requirements
**FR-1: <requirement title>**
<description, acceptance criteria>
**FR-2: <requirement title>**
<description, acceptance criteria>
### Non-Functional Requirements
**NFR-1: <requirement title>**
<description>
### Constraints
**C-1: <constraint title>**
<rationale>
### Out of Scope
- <item> — <rationale>
### Dependencies
- <dependency> — <impact on implementation>
### Open Questions
- Q-1: <unresolved item — what needs investigation>
### References
- `plans/<job-name>/reports/explore-<topic>.md` — codebase exploration findings
- `plans/reports/<topic>.md` — grounding research synthesis
- [External Paper Title](url) — informed FR-2 scope decision
Section rules:
After writing artifact, scan requirements text for skill dependency indicators:
| Indicator | Skill to Flag |
|---|---|
| "sub-agent", "delegate to agent", "agent definition" | plugin-dev:agent-development |
| "skill", "invoke skill", "skill preloaded" | plugin-dev:skill-development |
| "hook", "PreToolUse", "PostToolUse" | plugin-dev:hook-development |
| "plugin", "MCP server" | plugin-dev:plugin-structure |
If indicators found, append to artifact:
### Skill Dependencies (for /design)
- Load `plugin-dev:hook-development` before design (hooks mentioned in FR-2)
Rationale: Artifact-scoped scanning reduces A.0 scan time — planner reads requirements.md first, loads indicated skills immediately rather than scanning entire codebase.
Present artifact path and suggest next step based on completeness:
Requirements written to: plans/<job>/requirements.md
Next steps (decision criteria):
- 0-2 open questions, all critical sections populated → `/design plans/<job>/`
- 3+ open questions or empty critical sections → Standalone (revisit when clearer)
- Very clear scope + simple (Tier 1/2) → `/runbook plans/<job>/requirements.md`
- User stated explicit next step → Use that path
Workflow positioning:
/requirements <job> → /design plans/<job>/ (seeds A.0)
/requirements <job> → /handoff (document intent for later)
/requirements <job> → /runbook plans/<job>/requirements.md (direct to planning)
/requirements <job> (standalone — capture intent, no immediate follow-up)
references/empirical-grounding.md for research basisnpx claudepluginhub ddaanet/edify-pluginCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.