~/aakash
Writing ← Portfolio
Agentic AI March 29, 2026

Spec Before Code: How I Built a 9-Skill Framework for AI-Driven Development

How I stopped re-explaining my project every session — nine structured workflows that give Claude full context from day one, and a review gate that keeps it honest.

01

The Groundhog Day Problem

Every developer who works seriously with an AI coding agent knows the ritual. You open a fresh session, and before any real work happens, you perform the recap: here's the stack, here's the architecture, here's what we decided last week, please don't use that library again. Ten minutes of re-explaining, every single session — and the agent still occasionally "improves" something you explicitly told it to leave alone.

The model wasn't the problem. Claude is an exceptional engineer when it has context. The problem was that the context lived in my head and in scrollback, and both of those evaporate. A chat transcript is not a project memory. The context window is a desk, not a filing cabinet — whatever isn't written down somewhere durable gets re-litigated tomorrow.

So I stopped trying to prompt better and started building a system. The result is the vibe-* framework: nine purpose-built skills for Claude Code that cover the full development lifecycle, all anchored to one rule — nothing gets built before it gets written down. It now runs on live client projects at BetaCraft, and it's the closest thing I've found to giving an AI agent an actual long-term memory and a work ethic.

02

The Principle: Spec Before Code

The core insight is almost embarrassingly simple. Human teams solved the amnesia problem decades ago — not with bigger brains, but with documents. Specs, architecture decision records, task boards. The vibe-* framework just applies that discipline to the AI: every project gets a vibe/ folder, and every skill reads from and writes to it.

  • BRIEF.md: What we're building and why — produced by the brainstorm skill, validated before anything else happens. Scope lives here, so scope arguments end here.
  • ARCHITECTURE.md: The patterns, the stack, the principles. Read at the start of every agent session; every code decision is measured against it.
  • SPEC.md & PLAN.md: Acceptance criteria and the phased build plan. The agent doesn't decide what "done" means — the spec does.
  • TASKS.md: The single human-facing progress file. One glance tells you what's shipped, what's active, and what's blocked.
  • DECISIONS.md: An append-only log of every scope change and trade-off. The agent consults history instead of re-arguing it.
Pull Quote · 02

The context window is a desk, not a filing cabinet. Files are the memory — the agent just needs to be taught to use them.

03

The Nine Skills

Each skill is a structured workflow with a natural-language trigger. You don't configure anything — you just talk, and the right process kicks in. Together they cover the lifecycle from "I have an idea" to "this is reviewed and shipped."

Skill Trigger What It Does
vibe-brainstorm brainstorm: Turns a raw idea into a validated, buildable BRIEF.md — separate paths for personal and client projects.
vibe-architect architect: Locks structure, patterns, and principles into ARCHITECTURE.md before a single line is written. Runs on every project, no exceptions.
vibe-new-app new: Full greenfield setup — generates CLAUDE.md and the complete vibe/ folder, reusing the brief and architecture so nothing is asked twice.
vibe-add-feature feature: Spec-driven feature work: FEATURE_SPEC, FEATURE_PLAN, FEATURE_TASKS — cross-checked against the existing SPEC.md before drafting.
vibe-fix-bug bug: Severity triage first, diagnosis always before the fix, and a regression test written before the fix code. Every time.
vibe-change-spec change: Scope changes with an impact assessment before any file is touched — additions, removals, and reverts all leave a paper trail.
vibe-design design: Visual work only — styling passes governed by DESIGN_SYSTEM.md, kept strictly separate from logic changes.
vibe-review review: The mandatory gate. Evidence-based code review — every finding backed by a file path and line number. No P0s, no progress.
vibe-progress progress: A read-only ASCII dashboard from TASKS.md and git log — phases, blockers, and last activity at a glance.

The Chain

The skills compose into a pipeline: brainstorm:architect:new:, then loops of feature: / bug: / change:, each one closed by review:. Order matters — every downstream skill reads the documents its predecessors wrote, which is exactly why no step ever starts from zero context.

04

Anatomy of a Build

Here's what a real project looks like under the framework. After brainstorm: and architect: have run, new: scaffolds the workspace — and from that point on, every Claude session begins by reading this folder instead of asking me to repeat myself:

my-project/
├── CLAUDE.md            ← agent's standing orders, read every session
└── vibe/
    ├── BRIEF.md         ← what & why (from brainstorm:)
    ├── ARCHITECTURE.md  ← how, structurally (from architect:)
    ├── SPEC.md          ← acceptance criteria
    ├── PLAN.md          ← phased build plan
    ├── TASKS.md         ← human-facing progress view
    ├── DECISIONS.md     ← append-only decision log
    └── features/
        └── 2026-03-12-payments/
            ├── FEATURE_SPEC.md
            ├── FEATURE_PLAN.md
            └── FEATURE_TASKS.md

The discipline shows up at the boundaries. A phase cannot proceed while the review gate reports a P0 issue. A bug fix cannot be written before its regression test exists. A scope change cannot touch code before its impact assessment is logged. None of this slows the agent down — it slows down the mistakes. The agent works at full speed inside the rails; the rails just make sure full speed points in the right direction.

Pull Quote · 04

The framework doesn't slow the agent down. It slows the mistakes down.

The Gate Phase N cannot reach Phase N+1 with an open P0. That single rule pays for the whole system.

05

What Changed

After running this across live BetaCraft client work and my own side projects (both Promptly and ctx/window were built end-to-end on the chain), the differences are concrete:

  • Session startup went from minutes to seconds: No recap ritual. The agent reads CLAUDE.md and the vibe/ folder and already knows the project better than a new hire would after a week.
  • Drift died: When every decision is written down and re-read each session, the agent stops "creatively" replacing libraries or reinventing patterns. The spec is law because the spec is present.
  • Review caught what eyeballs miss: Forcing evidence-based review between phases — file paths and line numbers, not vibes — surfaced the class of bugs that compiles fine and fails in week three.
  • Handoffs became trivial: Any developer (or any fresh agent instance) can pick up a project cold, because the project's entire memory is in the repo, not in someone's chat history.

The honest caveat: the framework front-loads effort. Writing a brief and an architecture doc before coding feels slow on day one. It stops feeling slow the first time a scope change lands mid-build and the impact assessment takes five minutes instead of a week of archaeology.

06

Steal This

You don't need my exact nine skills — you need the principle they encode. Give your agent durable, versioned documents instead of ephemeral prompts. Make it read them at the start of every session. Put a review gate between phases. Log decisions where they can't be lost. Whether you build that as Claude Code skills, as a folder convention, or as team habit, the payoff is the same: an AI partner that remembers, and a codebase that can prove it.

The full framework — all skills, docs, and an interactive walkthrough — is published at aakashdhar.me/vibe-skill, free to clone and adapt.

Takeaway

Don't prompt harder. Write the spec down, make the agent read it every session, and let the documents do the remembering.