A deep dive into spec-driven development, from writing your first spec to shipping working code.
Zero to code in under 5 minutes.
Requires Go 1.21+ and a supported coding agent CLI (Claude Code, Bob, or Codex) installed and configured.
# install with gogo install github.com/jumppad-labs/spektacular@latest
# or download a pre-built binary from the releases page# https://github.com/jumppad-labs/spektacular/releasesRun this from the root of your codebase, naming the coding agent you want
to use (claude, bob, or codex). Creates a .spektacular/ directory
with config, knowledge base, and template files.
cd my-projectspektacular init claudeAll interaction with Spektacular is through your agent, spektacular provides the agent skills that instruct it how to perform various capabilies like creating a new specification.
To create a new specification using the agent Claude Code you can run the following command in the agents terminal:
/spek-newSpektacular will then interview you first, adaptive questions about what you’re building, before guiding you through drafting and confirming each section of the specification.
Once the specification has been created, next you move on to generate a detailed technical plan for the implementation of the specification. This is also achieved by using a skill in your agents terminal.
Note: The aim of spektacular is to make conservative use of tokens for your coding agent. It has been designed that no agent context is required from the previous steps. For this reason you should clear your agents context before running the next command to generate a plan.
/clear # Clear the agents context before generating a plan/spek-planFinally, once the plan is complete and you are happy with it, it is time to start generating code. This is also acheived by using a skill in your agents terminal.
/clear/spek-implementSpecs are plain markdown files. No special syntax, just structured sections that give the planning agent what it needs.
# Feature: User Authentication
## OverviewAdd OAuth2 login with Google and GitHubproviders to the existing Express app.
## Requirements- [ ] Users can sign in with Google OAuth2- [ ] Users can sign in with GitHub OAuth2- [ ] Session persists across browser refreshes- [ ] Logout clears session and redirects
## Constraints- Must use existing Express backend- No new dependencies over 50KB gzipped- Cannot change the /api/users schema
## Acceptance Criteria- [ ] Login redirects to provider, returns with valid session- [ ] Session cookie is httpOnly, secure, sameSite=strict- [ ] Logout flow works end-to-end
## Technical ApproachUse passport.js for OAuth2 strategy.Integrate with existing session middleware.
## Success Metrics- OAuth2 login completes in under 2 seconds- Zero increase in /api/users error rate
## Non-GoalsSocial login with Apple or Microsoft.A concise 2–3 sentence summary answering: what is being built, what problem does it solve, and who benefits? Grounds the agent before it reads anything else.
A checklist of discrete behaviours. Use active voice (“Users can…”). Each item should be independently verifiable and focus on what, not how.
Non-negotiable boundaries: existing APIs, dependency limits, performance budgets. Violations are plan failures. Leave blank if none.
Binary pass/fail conditions, each traceable to a requirement and testable by someone who didn’t write the code. These become the verification steps in the output plan.
High-level technical direction: key architectural decisions, preferred patterns, integration points, and known risks. Leave blank to let the planner propose an approach.
How you’ll know it works well after delivery. Quantitative (“p99 latency < 200ms”) or behavioural (“users complete the flow without support”). Leave blank if not applicable.
Explicitly out of scope, prevents scope creep and over-engineering. Leave blank if there are no exclusions to call out.
Three stages: write the spec, generate a plan, then implement and validate, with the agent checking its own work against the spec at each handoff.
Before Spektacular drafts a single section, it interviews you. Rather than working through a fixed script, the agent asks open questions about what you’re building, adapting each one to what you’ve already said, a technique called Flipped Interaction, drawn from prompt-engineering research on shifting conversational control to the agent.
Agent: What are you building, and who runs into the problem it solves?You: A CLI users can point at a local repo to check for outdated dependencies.Agent: Should it just report outdated packages, or offer to upgrade them too?You: Report only, for now, upgrading is a separate feature.Agent: Got it, I have enough to draft an Overview. One more thing: does this touch the docs site too, or is it CLI-only for now?The interview stops once no further question would change the draft, not once every possible detail has been asked about.
In a project with more than one registered repo, the interview already knows the full roster, so a feature that reads as focused on one repo still gets asked about impact on the others, shaped by what each one actually is:
Agent: This project also has a "docs" repo registered (role: documentation). Does exposing this as a new CLI flag mean the docs site needs a new page or section too?You: Yes, it should get its own reference page.From there, each section, Requirements, Constraints, Acceptance Criteria, and the rest, is drafted from what the interview established and presented back for you to confirm or correct, rather than asked from a blank prompt. Rejecting a draft opens a short follow-up conversation to understand why before anything changes, since a single correction can turn out to need more than one change. The spec itself stays plain markdown, no special syntax, just structured sections.
Specs don’t only start this way: during any open-ended discussion,
the agent watches for the moment it produces something spec-worthy (a
scoped decision, a multi-requirement feature) and proactively offers
to capture it, calibrated by the spec_trigger_threshold
config key. It always proposes before starting,
never begins unilaterally.
Plan turns the spec into a detailed implementation plan. It loads
your project knowledge base, explores the codebase,
and surfaces clarifying questions before writing anything. The
conventions, gotchas, decisions, and architecture it draws from the
knowledge base are woven directly into the plan, so the output reflects
how your project works rather than a generic approach. The plan, plus
supporting research and context documents, are written to
.spektacular/plans/.
Once the documents are written, the agent offers to walk through the
plan conversationally: the approach and reasoning, how the work
breaks into phases, and what was deliberately left out, before you
commit to it. You can interrupt with questions or changes at any
point; edits land directly in plan.md. Reading the documents
yourself remains just as valid; the walkthrough is optional.
Implement drives the coding agent through each phase of the plan and verifies the output against your acceptance criteria, so you know the implementation matches the spec.
Before it starts, Spektacular checks the plan’s phases against the
spec’s Requirements and Acceptance Criteria checklist: any gap must
be either filled in or explicitly accepted as a descope. After
implementation finishes, it checks the spec’s checklist against what
was actually built, and writes a changelog record of what shipped,
why, and how it differed from the plan to .spektacular/changelog/.
Once written, the spec and plan become a historical, archaeological record, not a live description of current behavior.
A coding agent asked how the system works today reads the code, not the spec: a spec and plan are a process document, not a product document, capturing the intent and scope at the time they were written, while the codebase keeps moving. Ask why something was built a particular way, though, and the agent will still open and cite the relevant spec, plan, or changelog record to explain the original reasoning.
Every spec, plan, and changelog record Spektacular writes carries the same lifecycle metadata, tracked automatically without any extra configuration.
in_progress or completed).This metadata is what makes the archaeology model workable at scale: as specs, plans, and changelog records pile up across a project’s history, status and dates are how you and your agent tell a still-active record from a closed one, or find the handful of records that matter out of hundreds. Every record supports filtering by this metadata from the CLI.
Install Spektacular and generate your first plan in minutes.
brew install jumppad-labs/homebrew-repo/spektacular