skills/requirements/SKILL.md
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.
npx skillsauth add ddaanet/agent-core requirementsInstall 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.
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 basisdevelopment
Verify a Python function against its intended behavior by writing an icontract contract and checking it with `edify check` (CrossHair), repairing in a loop. Triggers on "formalize", "verify this function", "add a contract and check it", or after writing a function whose correctness matters. The in-context agent holds intent and asks the user when behavior is ambiguous; CrossHair owns the deduction.
tools
Manage git worktrees for parallel task execution. Triggers on "create a worktree", "set up parallel work", "merge a worktree", "branch off a task", or uses the `wt`, `wt merge`, or `wt-rm` shortcuts. Worktree lifecycle: creation, focused sessions, merge ceremony, cleanup, parallel task setup.
testing
Recall behavioral knowledge from project decisions. Triggers on "when to do X", situational patterns, or decision content for recognized situations. Invoke with "/when <trigger>".
tools
Sync edify fragments and portable justfile to match the current plugin version. Detects user-edited files and warns instead of overwriting. Use --force to overwrite conflicts.