Skip to main content

Spec Driven Development with ralph-starter

· 4 min read
Ruben Marcus
Creator of ralph-starter

Spec Driven Development is the biggest shift in AI coding since agents learned to run tests. Here is how ralph-starter fits in.

The problem with "just prompt it"

Most people use AI coding agents the same way: type a sentence, hit enter, hope for the best. "Add user auth." "Fix the sidebar." Three words and vibes.

I did this for weeks. The agent would generate something that looked plausible but missed what I actually wanted. I blamed the tool, but the problem was me. I was not giving it enough context.

Then I started writing specs -- not essays, just 10-20 lines describing what I actually wanted, how to verify it, and where things should go. The difference was night and day. 2 loops instead of 5. $0.50 instead of $3. Correct output instead of close-but-wrong.

This pattern has a name now: Spec Driven Development (SDD).

The SDD landscape

Three frameworks are leading the SDD conversation:

ToolPhilosophyLock-in
OpenSpec (Fission AI)Lightweight, fluid, tool-agnosticNone
Spec-Kit (GitHub)Heavyweight, rigid 5-phase gatesGitHub ecosystem
Kiro (AWS)Full IDE with built-in agentsAWS account required

OpenSpec organizes specs into changes with proposal.md, design.md, tasks.md, and requirement specs using RFC 2119 keywords (SHALL, MUST, SHOULD). It is the lightest of the three.

Spec-Kit enforces five phases: constitution, specification, plan, tasks, implement. Thorough but heavy.

Kiro bundles everything into a VS Code fork with agent hooks and EARS notation. Powerful but locked to AWS.

Where ralph-starter fits

ralph-starter takes a different angle: your specs already exist somewhere.

They are in GitHub Issues. Linear tickets. Notion docs. Figma designs. OpenSpec directories. Why rewrite them in a new format?

ralph-starter pulls specs from where they already live:

# From GitHub issues
ralph-starter run --from github --project myorg/myrepo --label "ready"

# From OpenSpec directories
ralph-starter run --from openspec:add-auth

# From Linear tickets
ralph-starter run --from linear --project "Mobile App"

# From a Notion doc
ralph-starter run --from notion --project "https://notion.so/spec-abc123"

Then it runs autonomous loops: build context, spawn agent, collect output, run validation (lint/build/test), commit, repeat until done.

New in v0.5.0: OpenSpec + spec validation

We just shipped native OpenSpec support and a spec validator:

# List all OpenSpec changes in the project
ralph-starter spec list

# Validate spec completeness (0-100 score)
ralph-starter spec validate

# Validate before running -- stops if spec is too thin
ralph-starter run --from openspec:my-feature --spec-validate

The validator checks for:

  • Proposal or rationale section (why are we building this?)
  • RFC 2119 keywords (SHALL, MUST -- formal requirements)
  • Given/When/Then acceptance criteria (testable conditions)
  • Design section (how to build it)
  • Task breakdown (implementation steps)

A spec scoring below 40/100 gets flagged before the agent starts. This saves tokens on underspecified work.

The new spec command

ralph-starter spec gives you a CLI for spec operations:

# Validate all specs in the project
ralph-starter spec validate

# List available specs (auto-detects OpenSpec, Spec-Kit, or raw)
ralph-starter spec list

# Show completeness summary
ralph-starter spec summary

It auto-detects whether you are using OpenSpec format, GitHub Spec-Kit format, or plain markdown specs.

The numbers

MetricWithout specsWith specs
Loops per task52
Cost per task~$3.00~$0.50
Output accuracyHit or missConsistent
Time writing spec0 min3 min

The 3 minutes spent writing a spec save 15 minutes of iteration and debugging. The spec is the leverage.

What is next

We are working on:

  • Spec coverage tracking -- which requirements have been implemented?
  • Spec-to-test generation -- Given/When/Then to test stubs
  • Living specs -- specs that update as implementation diverges

SDD is not a fad. It is the natural evolution of AI-assisted coding. The spec is the interface between human intent and machine execution. The clearer the spec, the better the output.

ralph-starter is open source, MIT licensed: github.com/multivmlabs/ralph-starter