Consort — spec-first, test-driven agentic development on Lakebase branches
Consort keeps AI-written code clean and correct: spec-first and test-driven, driven by a deterministic state machine with human-approval gates and immutable tests. Every “green” is a real test run on a live Lakebase database branch, enforced by hard rules rather than soft prompts — so engineering discipline is not left to the whim of a model.
Consort takes its name from music: a consort is an ensemble that plays in concert, each musician holding one part while a conductor keeps them in time. Applied to software, a set of agents each take on one familiar lifecycle role while a deterministic conductor keeps them in sequence and a human approves every gate. No agent plays another’s part.
Why it uses Lakebase
The database is the hardest dependency to get right, because it is the one you can’t cheaply branch: it gets faked with mocks that drift from production, or shared across a staging box the tests quietly diverge from. Lakebase removes that constraint — a database branch is a real, governed, copy-on-write copy created in about a second. Consort builds on that to make an agent’s “done” checkable:
- Verified against real data — “green” means a real test runner passed against a live Lakebase database branch, not an agent’s say-so.
- Independently reviewed — the agent that writes the code is never the one that judges it.
- Spec-first and immutable — intent is frozen at a hashed gate; within a unit of work, tests can’t be edited to force a pass.
- Deterministically driven — the control loop is codified, so it can’t drift, skip a step, or get lost after a long session.
- Human-gated — gates fail closed; nothing advances without your approval.
The ensemble
Each agent owns one concern and communicates only through the artifacts it produces and consumes, in the order a lifecycle would run them.
| Agent | Lifecycle role | Owns |
|---|---|---|
| Product Owner | Product | the backlog and each story’s acceptance criteria |
| Spec Author | Analysis | the structured, testable specification |
| Architect Reviewer | Architecture | the layering lens, NFRs, persistence invariants |
| DBA | Data | the physical schema and per-story migration plan |
| Test Strategist | Test design | the ordered master test list drawn from the ACs |
| UX Designer | Experience | the interface design, for user-facing work |
| Navigator | Test + review | the failing test (RED), and review of the code |
| Driver | Implementation | the code that passes the test (GREEN), then refactors |
How it runs
Consort drives a spec-first design lane and then a branched-database TDD build lane, stopping at every gate:
- at the design gate, you approve the frozen spec — stories and acceptance criteria, the ordered test list, and the DBA’s schema plan;
- through the build, each cycle writes a failing test, makes it pass against a live Lakebase database branch, then refactors;
- at the deploy and promote gates, you approve the release and the migration to the parent tier.
Getting started
# 0. Bootstrap and run the environment doctor (needs a Lakebase-enabled workspace)
bash <(curl -sL https://raw.githubusercontent.com/databricks-solutions/consort/main/bootstrap.sh)
# 1. Install the Claude Code plugin
claude plugin marketplace add databricks-solutions/consort
claude plugin install consort@databricks-solutions
# 2. Launch Claude Code and run /consort:start in the session
Then walk the
examples/first-project/
step-by-step first session using the StockFlow sample warehouse app. Other
coding agents (Cursor, Genie Code, MCP clients) are supported via install.sh.