Spec-driven development was one of the most consistent practices among working developers this autumn, usually in a light form: write the spec with the agent, split it into tickets, build each ticket with a test, review against the spec. This loadout encodes that flow without a framework: when a spec is needed, what a testable acceptance criterion looks like, ticket rules that make parallel work safe, and what to do when the spec turns out to be wrong. It points to Spec Kit and OpenSpec for teams that want more.
What's in it
- When a spec is required and when it is not
- SPEC.md and TASKS.md templates with testable acceptance criteria
- Interview skill: at most five questions at a time, each with a recommended answer
- Implementation in dependency waves, test first, one commit per ticket
- Spec drift rule: stop and update the spec instead of improvising
Verification
| Check | Result | What we found |
|---|---|---|
| Listinglisting.yaml matches the schema and declares every file in the folder. | Pass | Schema valid; 6 files declared, none missing or extra
|
| Files parseJSON parses; SKILL.md and .mdc front matter is valid YAML with the fields each agent needs; code fences are closed. | Pass | All 6 files parse; front matter valid |
| AdaptersCLAUDE.md imports @AGENTS.md, GEMINI.md imports @./AGENTS.md, and both match the generator. | Pass | CLAUDE.md and GEMINI.md import AGENTS.md and are up to date
|
| Install pathsEvery file lands where each agent documents it, with no collisions, and the laid-out project is re-discovered correctly. | Pass | Correct paths for all 6 agents; layouts re-discovered
|
| MCP configmcp.json is structurally valid, converts to each agent's format, declares no literal secrets, and referenced packages exist on npm/PyPI. | Not applicable | No MCP servers in this loadout |
| Safety scanThe intake scanner finds no credentials, risky shell, hidden Unicode or prompt-injection wording, and the listing's network flag is honest. | Pass | Clean: no credentials, risky shell or hidden text
|
| ReferencesLinks and file paths between the loadout's files resolve, including for each agent's installed layout. | Pass | 3 references between files resolve for every agent |
| Size limitsFile count and sizes are within the submission limits; SKILL.md bodies stay under 500 lines. | Pass | 6 files, 5.4 KB total; largest AGENTS.md 1.5 KB
|
| LicenceA recognised SPDX licence, with the licence text available. | Pass | MIT, by Agent Loadout; text in the repository LICENSE |
| Starter buildA minimal fixture project with the loadout applied installs and builds or type-checks, and the loadout's own code examples compile. | Not applicable | Not applicable: stack-agnostic workflow rules with no project or code to build
|
What this means: a script checked the files themselves: they parse, they install where each agent looks, any MCP config is sound, the safety scan is clean, references between files resolve, and, where a free and repeatable fixture exists, a small starter project builds with the loadout applied. No AI agent was run. Per-agent results ("tested with agent") are separate and stay untested until an agent actually runs.
Install
Choose your agent. Run the commands from your project root, or download a zip already laid out in the right folders.
Claude Code reads CLAUDE.md (imports AGENTS.md with @AGENTS.md) and skills from .claude/skills/.
curl -fsSL --create-dirs -o AGENTS.md https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/AGENTS.md curl -fsSL --create-dirs -o CLAUDE.md https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/CLAUDE.md curl -fsSL --create-dirs -o .claude/skills/write-spec/SKILL.md https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/skills/write-spec/SKILL.md curl -fsSL --create-dirs -o .claude/skills/write-spec/references/spec-template.md https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/skills/write-spec/references/spec-template.md curl -fsSL --create-dirs -o .claude/skills/implement-spec/SKILL.md https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/skills/implement-spec/SKILL.md
| File | Goes to |
|---|---|
AGENTS.md | AGENTS.md |
CLAUDE.md | CLAUDE.md |
skills/write-spec/SKILL.md | .claude/skills/write-spec/SKILL.md |
skills/write-spec/references/spec-template.md | .claude/skills/write-spec/references/spec-template.md |
skills/implement-spec/SKILL.md | .claude/skills/implement-spec/SKILL.md |
Already have an AGENTS.md or CLAUDE.md? The commands above overwrite it — download the file instead and merge the sections you want.
Codex CLI reads AGENTS.md and skills from .agents/skills/.
curl -fsSL --create-dirs -o AGENTS.md https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/AGENTS.md curl -fsSL --create-dirs -o .agents/skills/write-spec/SKILL.md https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/skills/write-spec/SKILL.md curl -fsSL --create-dirs -o .agents/skills/write-spec/references/spec-template.md https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/skills/write-spec/references/spec-template.md curl -fsSL --create-dirs -o .agents/skills/implement-spec/SKILL.md https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/skills/implement-spec/SKILL.md
| File | Goes to |
|---|---|
AGENTS.md | AGENTS.md |
skills/write-spec/SKILL.md | .agents/skills/write-spec/SKILL.md |
skills/write-spec/references/spec-template.md | .agents/skills/write-spec/references/spec-template.md |
skills/implement-spec/SKILL.md | .agents/skills/implement-spec/SKILL.md |
Already have an AGENTS.md or CLAUDE.md? The commands above overwrite it — download the file instead and merge the sections you want.
Cursor reads AGENTS.md + .cursor/rules/*.mdc and skills from .agents/skills/.
curl -fsSL --create-dirs -o AGENTS.md https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/AGENTS.md curl -fsSL --create-dirs -o .agents/skills/write-spec/SKILL.md https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/skills/write-spec/SKILL.md curl -fsSL --create-dirs -o .agents/skills/write-spec/references/spec-template.md https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/skills/write-spec/references/spec-template.md curl -fsSL --create-dirs -o .agents/skills/implement-spec/SKILL.md https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/skills/implement-spec/SKILL.md
| File | Goes to |
|---|---|
AGENTS.md | AGENTS.md |
skills/write-spec/SKILL.md | .agents/skills/write-spec/SKILL.md |
skills/write-spec/references/spec-template.md | .agents/skills/write-spec/references/spec-template.md |
skills/implement-spec/SKILL.md | .agents/skills/implement-spec/SKILL.md |
Already have an AGENTS.md or CLAUDE.md? The commands above overwrite it — download the file instead and merge the sections you want.
Gemini CLI reads GEMINI.md (imports AGENTS.md with @./AGENTS.md) and skills from .agents/skills/.
curl -fsSL --create-dirs -o AGENTS.md https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/AGENTS.md curl -fsSL --create-dirs -o GEMINI.md https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/GEMINI.md curl -fsSL --create-dirs -o .agents/skills/write-spec/SKILL.md https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/skills/write-spec/SKILL.md curl -fsSL --create-dirs -o .agents/skills/write-spec/references/spec-template.md https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/skills/write-spec/references/spec-template.md curl -fsSL --create-dirs -o .agents/skills/implement-spec/SKILL.md https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/skills/implement-spec/SKILL.md
| File | Goes to |
|---|---|
AGENTS.md | AGENTS.md |
GEMINI.md | GEMINI.md |
skills/write-spec/SKILL.md | .agents/skills/write-spec/SKILL.md |
skills/write-spec/references/spec-template.md | .agents/skills/write-spec/references/spec-template.md |
skills/implement-spec/SKILL.md | .agents/skills/implement-spec/SKILL.md |
Already have an AGENTS.md or CLAUDE.md? The commands above overwrite it — download the file instead and merge the sections you want.
Antigravity CLI reads AGENTS.md (read natively; GEMINI.md is also read) and skills from .agents/skills/.
curl -fsSL --create-dirs -o AGENTS.md https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/AGENTS.md curl -fsSL --create-dirs -o .agents/skills/write-spec/SKILL.md https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/skills/write-spec/SKILL.md curl -fsSL --create-dirs -o .agents/skills/write-spec/references/spec-template.md https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/skills/write-spec/references/spec-template.md curl -fsSL --create-dirs -o .agents/skills/implement-spec/SKILL.md https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/skills/implement-spec/SKILL.md
| File | Goes to |
|---|---|
AGENTS.md | AGENTS.md |
skills/write-spec/SKILL.md | .agents/skills/write-spec/SKILL.md |
skills/write-spec/references/spec-template.md | .agents/skills/write-spec/references/spec-template.md |
skills/implement-spec/SKILL.md | .agents/skills/implement-spec/SKILL.md |
Already have an AGENTS.md or CLAUDE.md? The commands above overwrite it — download the file instead and merge the sections you want.
GitHub Copilot reads AGENTS.md and skills from .agents/skills/.
curl -fsSL --create-dirs -o AGENTS.md https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/AGENTS.md curl -fsSL --create-dirs -o .agents/skills/write-spec/SKILL.md https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/skills/write-spec/SKILL.md curl -fsSL --create-dirs -o .agents/skills/write-spec/references/spec-template.md https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/skills/write-spec/references/spec-template.md curl -fsSL --create-dirs -o .agents/skills/implement-spec/SKILL.md https://loadout.jnw-it.com/raw/spec-first-tickets/1.0.0/skills/implement-spec/SKILL.md
| File | Goes to |
|---|---|
AGENTS.md | AGENTS.md |
skills/write-spec/SKILL.md | .agents/skills/write-spec/SKILL.md |
skills/write-spec/references/spec-template.md | .agents/skills/write-spec/references/spec-template.md |
skills/implement-spec/SKILL.md | .agents/skills/implement-spec/SKILL.md |
Already have an AGENTS.md or CLAUDE.md? The commands above overwrite it — download the file instead and merge the sections you want.
Files
Rules AGENTS.md Spec, ticket and implementation rules. 28 lines
# AGENTS.md: spec first, then tickets, then code
For any change bigger than a small fix, agree a written spec with the human before writing code, then implement it
as small tickets with checkable acceptance criteria.
## When a spec is required
- New feature, new endpoint or screen, schema change, cross-module refactor, or anything estimated over ~200 lines.
- Not required: bug fixes with a failing test, copy changes, dependency bumps, one-file refactors.
## Files
- Specs: `specs/<yyyy-mm-dd>-<slug>/SPEC.md`. Tickets: `TASKS.md` in the same folder. Both committed.
- The spec is the source of truth. If implementation reveals the spec is wrong, stop, update the spec and tell the human.
## Spec rules
- Problem and goal first; the solution second. Name what is out of scope.
- Acceptance criteria are observable and testable: "GET /api/orders?status=open returns only open orders, newest first".
Not "orders are filtered correctly".
- List open questions instead of guessing. Do not start implementation while any are unanswered.
- Keep it short: one to two screens.
## Ticket rules
- Each ticket is independently testable and small (under ~200 changed lines), lists the files it touches, and maps to
one or more acceptance criteria.
- Mark dependencies. Tickets with no shared files and no dependency can run in parallel.
- A ticket is done when its criteria pass in a test, not when the code compiles.
Use the `write-spec` skill to draft the spec and tickets, and the `implement-spec` skill to build them. Adapter CLAUDE.md Imports AGENTS.md for Claude Code. 10 lines
# CLAUDE.md
@AGENTS.md
## Claude Code notes
- Skills from this loadout live in `.claude/skills/`: `write-spec`, `implement-spec`. Use them when their description matches the task.
- Follow AGENTS.md above; where this file and AGENTS.md disagree, AGENTS.md wins.
<!-- From the Agent Loadout "Spec first, then tickets" v1.0.0 — https://loadout.jnw-it.com/loadouts/spec-first-tickets/ --> Adapter GEMINI.md Imports AGENTS.md for Gemini CLI. 10 lines
# GEMINI.md
@./AGENTS.md
## Gemini CLI notes
- Skills from this loadout live in `.agents/skills/`: `write-spec`, `implement-spec`. Use them when their description matches the task.
- Follow AGENTS.md above; where this file and AGENTS.md disagree, AGENTS.md wins.
<!-- From the Agent Loadout "Spec first, then tickets" v1.0.0 — https://loadout.jnw-it.com/loadouts/spec-first-tickets/ --> Skill skills/write-spec/SKILL.md Research, interview and write SPEC.md and TASKS.md. 17 lines
---
name: write-spec
description: Interview the human and research the codebase to write SPEC.md and TASKS.md for a feature before any code. Use when asked to plan or build a non-trivial feature.
---
# Write a spec
1. **Research first, quietly.** Read the relevant code (delegate broad reading to a read-only subagent where available).
Note existing patterns, data models and tests the feature must fit.
2. **Interview.** Ask the human at most five questions at a time, only ones the code cannot answer: users, edge cases,
limits, what is out of scope. Offer a recommended answer with each question.
3. **Draft** `specs/<date>-<slug>/SPEC.md` from `references/spec-template.md`. Every acceptance criterion must be testable.
4. **Split into tickets** in `TASKS.md` (format in the template): small, file-scoped, mapped to criteria, dependencies marked.
5. **Review with the human.** Show the spec and tickets; list open questions. Change nothing in source code until the human
approves the spec.
6. **Commit** the spec folder on its own: `docs(spec): <slug>`. Skill file skills/write-spec/references/spec-template.md SPEC.md and TASKS.md templates. 35 lines
# SPEC.md template
```markdown
# <Feature name>
Status: draft | approved | done · Owner: <human> · Date: <yyyy-mm-dd>
## Problem
<who has the problem, what happens today, why it matters>
## Goal
<one or two sentences>
## Out of scope
- <explicitly not doing>
## Design
<data model changes, endpoints or screens, key decisions and the alternatives rejected>
## Acceptance criteria
- AC1: <observable, testable statement>
- AC2: ...
## Open questions
- Q1: <question> (recommended answer: <...>)
```
# TASKS.md template
```markdown
# Tasks for <feature>
- [ ] T1 <title> · covers AC1 · files: src/api/orders.ts, tests/api/orders.test.ts · depends on: none
- [ ] T2 <title> · covers AC2 · files: ... · depends on: T1
``` Skill skills/implement-spec/SKILL.md Build tickets test-first in waves and review against the spec. 22 lines
---
name: implement-spec
description: Build an approved SPEC.md ticket by ticket with tests for each acceptance criterion, in parallel where tickets are independent, then review against the spec. Use after a spec has been approved.
---
# Implement a spec
1. **Check approval.** `SPEC.md` status must be `approved` and open questions empty. Otherwise stop.
2. **Plan waves.** From `TASKS.md`, group tickets with no dependencies and no shared files into waves.
3. **Per ticket** (yourself, or one subagent or worktree per ticket in a wave):
- Write the test for the ticket's acceptance criteria first and see it fail.
- Implement until it passes; run the full test suite.
- Tick the ticket in `TASKS.md` and commit: `feat(<slug>): T<n> <title>`.
4. **Between waves** pull in finished work and run the full suite before starting the next wave.
5. **Spec drift.** If a ticket cannot meet its criterion as written, stop that ticket, propose a spec change to the human,
and continue only with unaffected tickets.
6. **Final review** against the spec, by a reviewer that did not write the code: every AC has a passing test, nothing out of
scope was built. Set `Status: done` in `SPEC.md`.
Heavier frameworks exist if the team wants more structure: GitHub Spec Kit (`specify` CLI) and OpenSpec
(`npx @fission-ai/openspec`). Use them only if the repository already does; do not mix formats. All files: source zip · Licence MIT · By Agent Loadout · First listed
Credits
Public work that inspired this loadout. The wording here is our own; follow the links for the originals.
Installing and testing
How do I install Spec first, then tickets in Claude Code?
From your project root, put AGENTS.md, CLAUDE.md, skills/write-spec/SKILL.md at .claude/skills/write-spec/SKILL.md, skills/write-spec/references/spec-template.md at .claude/skills/write-spec/references/spec-template.md, skills/implement-spec/SKILL.md at .claude/skills/implement-spec/SKILL.md. The "Claude Code" tab on this page has the curl commands, or download https://loadout.jnw-it.com/download/spec-first-tickets/claude-code.zip, which is already laid out. Do not overwrite an existing AGENTS.md or CLAUDE.md; merge it.
How do I install Spec first, then tickets in Codex CLI?
From your project root, put AGENTS.md, skills/write-spec/SKILL.md at .agents/skills/write-spec/SKILL.md, skills/write-spec/references/spec-template.md at .agents/skills/write-spec/references/spec-template.md, skills/implement-spec/SKILL.md at .agents/skills/implement-spec/SKILL.md. The "Codex CLI" tab on this page has the curl commands, or download https://loadout.jnw-it.com/download/spec-first-tickets/codex.zip, which is already laid out. Do not overwrite an existing AGENTS.md or CLAUDE.md; merge it.
How do I install Spec first, then tickets in Cursor?
From your project root, put AGENTS.md, skills/write-spec/SKILL.md at .agents/skills/write-spec/SKILL.md, skills/write-spec/references/spec-template.md at .agents/skills/write-spec/references/spec-template.md, skills/implement-spec/SKILL.md at .agents/skills/implement-spec/SKILL.md. The "Cursor" tab on this page has the curl commands, or download https://loadout.jnw-it.com/download/spec-first-tickets/cursor.zip, which is already laid out. Do not overwrite an existing AGENTS.md or CLAUDE.md; merge it.
How do I install Spec first, then tickets in Gemini CLI?
From your project root, put AGENTS.md, GEMINI.md, skills/write-spec/SKILL.md at .agents/skills/write-spec/SKILL.md, skills/write-spec/references/spec-template.md at .agents/skills/write-spec/references/spec-template.md, skills/implement-spec/SKILL.md at .agents/skills/implement-spec/SKILL.md. The "Gemini CLI" tab on this page has the curl commands, or download https://loadout.jnw-it.com/download/spec-first-tickets/gemini-cli.zip, which is already laid out. Do not overwrite an existing AGENTS.md or CLAUDE.md; merge it.
How do I install Spec first, then tickets in Antigravity CLI?
From your project root, put AGENTS.md, skills/write-spec/SKILL.md at .agents/skills/write-spec/SKILL.md, skills/write-spec/references/spec-template.md at .agents/skills/write-spec/references/spec-template.md, skills/implement-spec/SKILL.md at .agents/skills/implement-spec/SKILL.md. The "Antigravity CLI" tab on this page has the curl commands, or download https://loadout.jnw-it.com/download/spec-first-tickets/antigravity-cli.zip, which is already laid out. Do not overwrite an existing AGENTS.md or CLAUDE.md; merge it.
How do I install Spec first, then tickets in GitHub Copilot?
From your project root, put AGENTS.md, skills/write-spec/SKILL.md at .agents/skills/write-spec/SKILL.md, skills/write-spec/references/spec-template.md at .agents/skills/write-spec/references/spec-template.md, skills/implement-spec/SKILL.md at .agents/skills/implement-spec/SKILL.md. The "GitHub Copilot" tab on this page has the curl commands, or download https://loadout.jnw-it.com/download/spec-first-tickets/copilot.zip, which is already laid out. Do not overwrite an existing AGENTS.md or CLAUDE.md; merge it.
Has Spec first, then tickets been tested?
It passed the Level 1 automated install checks on 2026-10-17: the files parse, install to each agent's documented paths, and pass the safety scan. No AI agent has run it yet, so no agent pass or fail is claimed.
More for Claude Code, Codex, Cursor, Gemini CLI, Antigravity CLI and GitHub Copilot.