skills/jira-spec-driven-development/SKILL.md
Creates specs before coding with mandatory Jira MCP validation and story-key grounding. Use when starting a Jira-tracked feature or significant change and requirements are unclear, ambiguous, or incomplete.
npx skillsauth add SystangoTechnologies/agent-skills jira-spec-driven-developmentInstall 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.
Write a structured specification before writing any code. This is the same spec-first discipline as spec-driven-development, with one mandatory addition: validate Jira MCP connectivity and anchor the spec to a Jira story/task key.
The spec is the shared source of truth between you and the human engineer - it defines what we're building, why, and how we'll know it's done. Code without a spec is guessing.
When NOT to use: Single-line fixes, typo corrections, or changes where requirements are unambiguous and self-contained.
Jira spec-driven development has four phases. Do not advance to the next phase until the current one is validated.
SPECIFY ──→ PLAN ──→ TASKS ──→ IMPLEMENT
│ │ │ │
▼ ▼ ▼ ▼
Human Human Human Human
reviews reviews reviews reviews
Start with a high-level vision. Ask the human clarifying questions until requirements are concrete.
Mandatory Jira pre-check. Before listing assumptions or writing spec content:
VS-10)VS-11, PROJ-245).Ground yourself in project context first. If .context/ files exist (from brownfield-discovery), read them before listing assumptions:
.context/project.md - project purpose, users, non-goals.context/stack.md - tech stack, dependencies, environment.context/architecture.md - existing design decisions and constraints.context/conventions.md - coding standards, gotchas.context/concerns.md - known risks and technical debtThis replaces guessing with known facts.
Surface assumptions immediately. Before writing any spec content, list what you're assuming:
ASSUMPTIONS I'M MAKING:
1. This is a web application (not native mobile)
2. Authentication uses session-based cookies (not JWT)
3. The database is PostgreSQL (based on existing Prisma schema)
4. We're targeting modern browsers only (no IE11)
→ Correct me now or I'll proceed with these.
Don't silently fill in ambiguous requirements. The spec's entire purpose is to surface misunderstandings before code gets written - assumptions are the most dangerous form of misunderstanding.
Write a spec document covering these six core areas:
Objective - What are we building and why? Who is the user? What does success look like?
Commands - Full executable commands with flags, not just tool names.
Build: npm run build
Test: npm test -- --coverage
Lint: npm run lint --fix
Dev: npm run dev
Project Structure - Where source code lives, where tests go, where docs belong.
src/ → Application source code
src/components → React components
src/lib → Shared utilities
tests/ → Unit tests
e2e/ → End-to-end tests
docs/ → Documentation
Code Style - One real code snippet showing your style beats three paragraphs describing it. Include naming conventions, formatting rules, and examples of good output.
Testing Strategy - What framework, where tests live, coverage expectations, which test levels for which concerns.
Boundaries - Three-tier system:
Spec template:
# Spec: [{story-id}] [Project/Feature Name]
## Objective
[What we're building and why. User stories or acceptance criteria.]
## Tech Stack
[Framework, language, key dependencies with versions]
## Commands
[Build, test, lint, dev — full commands]
## Project Structure
[Directory layout with descriptions]
## Code Style
[Example snippet + key conventions]
## Testing Strategy
[Framework, test locations, coverage requirements, test levels]
## Boundaries
- Always: [...]
- Ask first: [...]
- Never: [...]
## Success Criteria
[How we'll know this is done — specific, testable conditions]
## Open Questions
[Anything unresolved that needs human input]
Storage rule: Save the spec to jira-spec/{story-id}/spec-{story-id}.md (example: jira-spec/VS-10/spec-VS-10.md).
Reframe instructions as success criteria. When receiving vague requirements, translate them into concrete conditions:
REQUIREMENT: "Make the dashboard faster"
REFRAMED SUCCESS CRITERIA:
- Dashboard LCP < 2.5s on 4G connection
- Initial data load completes in < 500ms
- No layout shift during load (CLS < 0.1)
→ Are these the right targets?
This lets you loop, retry, and problem-solve toward a clear goal rather than guessing what "faster" means.
With the validated spec, generate a technical implementation plan:
The plan should be reviewable: the human should be able to read it and say "yes, that's the right approach" or "no, change X."
Break the plan into discrete, implementable tasks:
Task template:
- [ ] Task: [Description]
- Acceptance: [What must be true when done]
- Verify: [How to confirm — test command, build, manual check]
- Files: [Which files will be touched]
Execute tasks one at a time following incremental-implementation and test-driven-development skills. Use context-engineering to load the right spec sections and source files at each step rather than flooding the agent with the entire spec.
The spec is a living document, not a one-time artifact:
| Rationalization | Reality | |---|---| | "This is simple, I don't need a spec" | Simple tasks don't need long specs, but they still need acceptance criteria. A two-line spec is fine. | | "I'll write the spec after I code it" | That's documentation, not specification. The spec's value is in forcing clarity before code. | | "The spec will slow us down" | A 15-minute spec prevents hours of rework. Waterfall in 15 minutes beats debugging in 15 hours. | | "Requirements will change anyway" | That's why the spec is a living document. An outdated spec is still better than no spec. | | "The user knows what they want" | Even clear requests have implicit assumptions. The spec surfaces those assumptions. | | "I'll skip Jira for now and map it later" | Jira context is mandatory in this skill; skipping it breaks traceability and creates requirement drift. | | "I can ignore related tickets mentioned in description" | Related tickets often carry hidden dependencies or constraints; skipping them creates incomplete specs. | | "I'll create specs for every dependency ticket while I'm here" | Dependency tickets provide context; spec creation remains focused on the single ticket the user requested. |
jira-spec/{story-id}/spec-{story-id}.mdBefore proceeding to implementation, confirm:
jira-spec/{story-id}/spec-{story-id}.mddevops
Prepares production launches and updates Jira ticket/task comments. Use when preparing to deploy to production and when launch readiness/progress must be communicated in Jira.
tools
Breaks Jira story work into ordered tasks. Use when you have a story spec and need to break work into implementable tasks with story-scoped files under `jira-spec/{story-id}/`. Use when a task feels too large to start, when you need to estimate scope, or when parallel work is possible.
development
Discovers and invokes agent skills. Use when starting a session or when you need to discover which skill applies to the current task. This is the meta-skill that governs how all other skills are discovered and invoked.
development
Creates specs before coding. Use when starting a new project, feature, or significant change and no specification exists yet. Use when requirements are unclear, ambiguous, or only exist as a vague idea.