Build a complete project from zero using the full framework โ every role, every ceremony, every command
โฑ ~60 min ยท 1 Sprint ยท Solo Mode ยท Beginner
This is not a coding tutorial. It's a process tutorial. You'll see exactly how a solo developer uses the agile framework to go from an idea ("I want a todo app") to a deployed, tested, reviewed API โ with every role simulated by the AI.
You drive the process. The framework guides it. Every command needs YOUR input โ your requirements, your decisions, your context. The AI doesn't invent features; it structures what YOU describe. The AI doesn't pick technologies; @arch evaluates options and YOU choose.
| Role | What they do in this project | When |
|---|---|---|
๐ @po | Structures your requirements into proper user stories with acceptance criteria | Story creation, sprint review, acceptance |
๐ @sm | Facilitates sprint planning, tracks progress, runs retrospective | Sprint ceremonies |
๐๏ธ @arch | Evaluates architecture options, recommends tech approach | Project setup |
๐จโ๐ป @lead | Reviews code quality (SOLID, Clean Code), approves PRs | Code review |
โจ๏ธ @dev | Implements features with TDD, creates branches and PRs | Implementation |
๐งช @qa | Verifies Definition of Done, checks test coverage | DoD verification |
๐ @devops | Runs CI pipeline, handles deployment | CI/CD, deploy |
You start with nothing โ just an idea and an empty folder.
You do:
mkdir todo-api && cd todo-api
git init
cp -r /path/to/agile/* .claude/
Claude Code now reads .claude/CLAUDE.md automatically. All /agile-* commands are available.
"I want to build a simple REST API for managing personal todo tasks. I'm working solo. Help me set up the project."
Claude reads CLAUDE.md, detects this is a greenfield project (empty repo), and routes to workflows/new_project.md. This triggers Sprint 0 โ a setup sprint where no features are built, only foundations.
/agile-explore-brainstormBefore writing any code, @arch needs to understand what you're building so they can recommend the right approach. You provide the context.
/agile-explore-brainstorm I need a REST API for a todo app. Simple CRUD operations. Will be used locally at first, maybe deployed later. I want something lightweight and easy to test.
๐๏ธ @arch evaluates 3-5 approaches based on YOUR constraints. They don't just pick one โ they score each option and explain trade-offs:
๐๏ธ @arch responds with a scoring matrix (example):
## /agile-explore-brainstorm โ Results
### Problem Statement
REST API for personal todo management. Constraints:
lightweight, easy to test, simple CRUD, local-first.
### Scoring Matrix
| Approach | Feasibility | Maintainability | Performance | Risk | Total |
|-------------------|------------|-----------------|-------------|------|-------|
| Express + SQLite | 9/10 | 8/10 | 7/10 | 9/10 | 33 |
| Fastify + SQLite | 8/10 | 8/10 | 9/10 | 8/10 | 33 |
| Go + net/http | 7/10 | 9/10 | 10/10 | 6/10 | 32 |
| Python Flask | 9/10 | 7/10 | 6/10 | 9/10 | 31 |
### Recommendation
Express + SQLite or Fastify + SQLite โ both score equally.
Express has larger ecosystem; Fastify has better performance.
### What Would Change This
- If performance is critical โ Fastify or Go
- If you prefer Python โ Flask is viable
"Let's go with Express + SQLite. I'm familiar with Node.js."
This is the key: @arch presents options with data. You make the decision. The framework never forces a technology.
/agile-setup-initNow that you've chosen the stack, create the project skeleton and let the framework scan it.
"Set up the Express + SQLite project with a test framework. Then run /agile-setup-init to populate the memory."
Claude (as @dev) scaffolds the project: package.json, src/ folder, test config, .gitignore. Then /agile-setup-init scans everything:
๐ @sm + ๐๏ธ @arch + โจ๏ธ @dev scan results:
## /agile-setup-init โ Results
| Memory File | Status | Confidence |
|-------------------------|-------------|------------|
| semantic/project.md | โ
Populated | 95% |
| semantic/architecture.md| โ
Populated | 90% |
| semantic/conventions.md | โ
Populated | 85% |
| semantic/codebase.md | โ
Populated | 95% |
| semantic/testing.md | โ
Populated | 90% |
### Detected Stack
- Language: JavaScript (Node.js 20)
- Framework: Express 4.x
- Database: SQLite via better-sqlite3
- Test Framework: Jest + Supertest
- Package Manager: npm
/agile-setup-onboard + /agile-setup-health/agile-setup-onboard โ Generates coding rules from detected conventions
/agile-setup-health โ Verifies everything is green (โ
All checks pass)
Phase 1 complete. You have a scaffolded project, initialized memory, and coding rules. Zero features built yet โ that's correct. Sprint 0 is about foundations.
/agile-story-create does NOT invent features. You describe what you need, and @po structures it into a proper story with acceptance criteria. Without your input, the command has nothing to work with.
/agile-story-create I need an endpoint where I can create a new task by sending a title and an optional description. The task should be saved and returned with an ID.
๐ @po takes your raw requirement and structures it:
๐ @po responds:
## /agile-story-create โ Story Created
### Story US-001
**As a** todo user,
**I want** to create a new task with a title and optional description,
**so that** I can track things I need to do.
### Acceptance Criteria
**AC-1: Happy path โ create task with title and description**
- **Given** the API is running
- **When** I send POST /tasks with {"title": "Buy groceries",
"description": "Milk, eggs, bread"}
- **Then** I receive 201 with the created task including an ID,
title, description, and status "pending"
**AC-2: Edge case โ create task with title only**
- **Given** the API is running
- **When** I send POST /tasks with {"title": "Call dentist"}
(no description)
- **Then** I receive 201 with description as null or empty string
**AC-3: Error case โ missing title**
- **Given** the API is running
- **When** I send POST /tasks with {} (no title)
- **Then** I receive 400 with an error message
"title is required"
### INVEST Check
| Criterion | Status |
|-------------|--------|
| Independent | โ
|
| Negotiable | โ
|
| Valuable | โ
|
| Estimable | โ
|
| Small | โ
|
| Testable | โ
|
### Metadata
- **Status**: Unrefined
- **Created**: 2026-04-05
> Added to: .memory/backlog/product.md
Notice: @po added the error case (AC-3) that you didn't mention. That's the value โ the framework ensures stories are complete with happy path, edge case, AND error case.
You repeat /agile-story-create for each feature, always providing YOUR requirements:
๐ฌ /agile-story-create I need to list all my tasks,
with the ability to filter by status (pending, done)
โ @po creates US-002: "List and filter tasks"
๐ฌ /agile-story-create I need to mark a task as done
and also be able to delete tasks I no longer need
โ @po creates US-003: "Update task status and delete tasks"
@po might split your last request into two stories if it violates the "Small" INVEST criterion. That's the framework working โ each story should do one thing well.
/agile-story-estimate/agile-story-estimate
โจ๏ธ @dev estimates each story using Fibonacci points (1, 2, 3, 5, 8, 13). The estimation considers complexity, uncertainty, and effort:
## /agile-story-estimate โ Results
| Story | Title | Points | Rationale |
|--------|-----------------------|--------|------------------------------------|
| US-001 | Create a task | 3 | CRUD + validation + DB schema |
| US-002 | List and filter tasks | 2 | Read-only + query params |
| US-003 | Update and delete | 3 | Two operations but straightforward |
**Total backlog**: 8 points
/agile-sprint-planning/agile-sprint-planning
๐ @sm facilitates the planning ceremony. Since this is your first sprint, there's no historical velocity โ @sm sets a conservative initial capacity:
๐ @sm facilitates:
## Sprint Planning Output
### Sprint Goal
"Deliver a working CRUD API for task management"
### Sprint Backlog
| Story | Title | Points | Priority |
|--------|-----------------------|--------|----------|
| US-001 | Create a task | 3 | P1 |
| US-002 | List and filter tasks | 2 | P1 |
| US-003 | Update and delete | 3 | P1 |
### Capacity Check
- Team velocity (first sprint): 8 points (conservative)
- Committed this sprint: 8 points
- Capacity utilization: 100%
### Risks
- First sprint โ no historical velocity to compare against
๐ @po confirms the sprint goal. ๐ @sm confirms scope. You're ready to build.
This is where all the roles work together. Every story follows this exact loop:
/agile-code-branch/agile-code-branch feature US-001 create-task
โจ๏ธ @dev: Branch created
- Branch: feature/US-001-create-task
- From: develop (up to date)
- Linked to: US-001
/agile-story-plan/agile-story-plan US-001
๐จโ๐ป @lead creates an implementation plan โ what to build, in what order, but no code yet:
๐จโ๐ป @lead: Implementation Plan for US-001
Phase 1: Database schema
- Create tasks table (id, title, description, status, created_at)
Phase 2: Route + handler
- POST /tasks route
- Request validation (title required)
- Insert into database
- Return created task with 201
Phase 3: Error handling
- 400 for missing title
- 500 for database errors
Confidence: 9/10 โ straightforward CRUD
/agile-code-tdd/agile-code-tdd US-001
โจ๏ธ @dev implements using Red โ Green โ Refactor, one acceptance criterion at a time:
// test/tasks.test.js
test('POST /tasks creates a task with title and description', async () => {
const res = await request(app)
.post('/tasks')
.send({ title: 'Buy groceries', description: 'Milk, eggs' });
expect(res.status).toBe(201);
expect(res.body).toHaveProperty('id');
expect(res.body.title).toBe('Buy groceries');
expect(res.body.status).toBe('pending');
});
// Result: โ FAIL โ route doesn't exist yet
// src/routes/tasks.js
router.post('/', (req, res) => {
const { title, description } = req.body;
const task = db.prepare(
'INSERT INTO tasks (title, description, status) VALUES (?, ?, ?)'
).run(title, description || null, 'pending');
res.status(201).json({
id: task.lastInsertRowid,
title, description, status: 'pending'
});
});
// Result: โ
PASS
// Extract DB logic to a repository (Clean Code)
// Tests still pass โ
โจ๏ธ @dev repeats Red โ Green โ Refactor for AC-2 (no description) and AC-3 (missing title validation).
/agile-code-ci๐ @devops: CI Pipeline Results
Build: โ
Tests: โ
6/6 passing
Lint: โ
0 errors
Security: โ
No vulnerabilities
/agile-code-commitโจ๏ธ @dev: Commit created
feat(tasks): add create task endpoint
- POST /tasks with title and optional description
- Returns 201 with created task including ID
- Validates title is required (400 if missing)
Ref: US-001
/agile-code-prโจ๏ธ @dev: PR created
Title: feat(tasks): add create task endpoint (#US-001)
Branch: feature/US-001-create-task โ develop
CI: โ
Green
/agile-code-pr-review๐จโ๐ป @lead reviews the PR against SOLID and Clean Code standards:
๐จโ๐ป @lead: PR Review
| # | Severity | File | Finding | Fix |
|---|----------|---------------|----------------------------|--------------------------|
| 1 | ๐ก S2 | routes/tasks.js:8 | Magic string 'pending' | Extract to constant |
| 2 | ๐ต S3 | routes/tasks.js:3 | Missing JSDoc on handler | Add function description |
Score: 8/10
Verdict: โ
APPROVED (no S0/S1 findings)
/agile-code-mergeโจ๏ธ @dev: Merge complete
Strategy: Squash merge (feature โ develop)
Branch feature/US-001-create-task deleted
CI on develop: โ
Green
/agile-story-dod๐งช @qa checks the full DoD checklist:
๐งช @qa: Definition of Done โ US-001
| # | Criterion | Status |
|---|------------------------|--------|
| 1 | All ACs covered by tests | โ
|
| 2 | CI pipeline green | โ
|
| 3 | Code reviewed by @lead | โ
|
| 4 | No S0/S1 findings open | โ
|
| 5 | Merged to develop | โ
|
| 6 | Test coverage โฅ 80% | โ
94%|
Verdict: โ
DONE โ ready for acceptance
/agile-story-accept๐ @po verifies each acceptance criterion against the actual implementation:
๐ @po: Acceptance Review โ US-001
| AC | Description | Status |
|------|-----------------------|--------|
| AC-1 | Create with title+desc | โ
|
| AC-2 | Create with title only | โ
|
| AC-3 | Error on missing title | โ
|
Verdict: โ
ACCEPTED
Story counts toward sprint velocity: 3 points
You just went through the full loop: branch โ plan โ TDD โ CI โ commit โ PR โ review โ merge โ DoD โ accept. This exact loop repeats for every story.
The process is identical. Here's the abbreviated flow:
/agile-code-branch feature US-002 list-tasks
/agile-story-plan US-002
/agile-code-tdd US-002
๐ด Test: GET /tasks returns all tasks โ โ
๐ข Implement handler โ โ
๐ด Test: GET /tasks?status=done filters โ โ
๐ข Add query param filtering โ โ
/agile-code-ci โ โ
All green
/agile-code-commit โ feat(tasks): add list and filter endpoints
/agile-code-pr โ PR created
/agile-code-pr-review โ โ
Approved (no findings)
/agile-code-merge โ Squash merged to develop
/agile-story-dod โ โ
DONE
/agile-story-accept โ โ
ACCEPTED (2 points)
/agile-code-branch feature US-003 update-delete
/agile-story-plan US-003
/agile-code-tdd US-003
๐ด Test: PUT /tasks/:id updates status โ โ
๐ข Implement update handler โ โ
๐ด Test: DELETE /tasks/:id removes task โ โ
๐ข Implement delete handler โ โ
๐ด Test: PUT /tasks/999 returns 404 โ โ
๐ข Add not-found check โ โ
/agile-code-ci โ โ
All green
/agile-code-commit โ feat(tasks): add update and delete endpoints
/agile-code-pr โ PR created
/agile-code-pr-review โ โ
Approved
(๐ก S2: suggest extracting "not found" check to middleware)
/agile-code-merge โ Squash merged to develop
/agile-story-dod โ โ
DONE
/agile-story-accept โ โ
ACCEPTED (3 points)
/agile-sprint-review/agile-sprint-review
๐ @po and ๐ @sm run the review. โจ๏ธ @dev demos working software:
## Sprint Review Report
### Sprint Goal: "Deliver a working CRUD API for task management"
### Sprint Goal Met: โ
Yes
| Story | Title | Points | Status |
|--------|-----------------------|--------|------------|
| US-001 | Create a task | 3 | โ
Accepted |
| US-002 | List and filter tasks | 2 | โ
Accepted |
| US-003 | Update and delete | 3 | โ
Accepted |
### Velocity
- Committed: 8 points
- Completed: 8 points (100%)
- First sprint โ this becomes the baseline
/agile-sprint-retro๐ @sm facilitates reflection:
## Retrospective Report
### What Went Well
- TDD caught the missing validation early (AC-3)
- All stories accepted on first pass
### What To Improve
- Could extract common error handling to middleware
- Should set up integration tests for the full request cycle
### Action Items
| Action | Owner | Due |
|-----------------------------------|-------|------------|
| Extract error middleware | @dev | Sprint 2 |
| Add integration test template | @qa | Sprint 2 |
/agile-memory-learn๐ @sm: Learnings captured
โ Saved to: .memory/episodic/learnings.md
- Sprint 1 velocity baseline: 8 points
- TDD effectiveness: all stories accepted first pass
- Action items tracked for Sprint 2
/agile-ship-changelog## Changelog: v1.0.0 โ 2026-04-05
### Added
- POST /tasks โ create a task with title and description (US-001)
- GET /tasks โ list all tasks with status filter (US-002)
- PUT /tasks/:id โ update task status (US-003)
- DELETE /tasks/:id โ delete a task (US-003)
/agile-ship-release๐ @devops: Release v1.0.0
Branch: release/v1.0.0 from develop
CI: โ
Green
Merged to main โ
Tagged: v1.0.0 โ
Back-merged to develop โ
/agile-ship-deploy๐ @devops: Deployed v1.0.0
Smoke tests: โ
All endpoints responding
Health check: โ
| Metric | Value |
|---|---|
| Stories completed | 3/3 |
| Story points delivered | 8/8 |
| Sprint goal met | โ Yes |
| Release version | v1.0.0 |
| Test coverage | 94% |
| Roles involved | @po, @sm, @arch, @lead, @dev, @qa, @devops |
You drove every decision. You described features โ @po structured them. You chose the tech stack โ @arch evaluated options. You reviewed the code โ @lead found improvements. No command runs without your input. The framework amplifies your decisions โ it doesn't replace them.
This is the core loop. Every project, no matter how complex, repeats this cycle: create stories โ plan sprint โ branch โ TDD โ CI โ PR โ review โ merge โ accept โ release.
What does /agile-story-create need from you?
Who decides the technology stack?