Spec-Driven, multi-agent SDLC for Claude Code: PO β PM β BA β Design β Build β QA β Deploy β Review, with a living BRD, a project constitution, and per-phase slash commands under the
sdlc:namespace.
Requirements: Claude Code + bash (macOS/Linux, or WSL/Git Bash on Windows). The default stack needs Node 20+ / pnpm.
# 1) Via npx (recommended) β install into the current repo, interactive
npx helmforge init
# Non-interactive (CI / one-liner):
npx helmforge init . --yes --fe nextjs --be next-api --ai vercel-ai-sdk --vcs github
# 2) Or run straight from GitHub, no npm publish needed
npx github:dangphamv/helmforge init
# 3) Or curl | bash (no Node)
curl -fsSL https://raw.githubusercontent.com/dangphamv/helmforge/main/install.sh | bash
# 4) Or manually
git clone https://github.com/dangphamv/helmforge.git
cd your-repo && bash /path/to/helmforge/setup.shAfter installing, open Claude Code in the repo:
/sdlc:init <product description> # new project (greenfield)
/sdlc:onboard # existing repo (brownfield)
/sdlc <ticket> # run the full pipeline for one feature
Type /sdlc to see the whole command family. Details: docs/COMMANDS.md.
βΉοΈ
setup.shis the bootstrap (it installs.claude/+ commands into the repo), so it runs from the terminal/CLI, not as a slash command. Slash commands only exist after install.npx helmforge initis just a thin wrapper that callssetup.shwith--targetset to your repo.
Every agent loads the expert-voice skill first. It bans all the AI tells:
- β Opener clichΓ©s ("I'd be happy to...", "Certainly!", "Let me walk you through...")
- β Hedge padding ("It's worth noting that...", "You might want to consider...")
- β Hollow words (leverage, robust, scalable, seamless, comprehensive, intuitive)
- β Marketing-speak (world-class, production-ready without SLOs, state-of-the-art)
- β Closer clichΓ©s ("In summary...", "Let me know if you have any questions")
- β Symmetric 3-bullet lists where prose flows
Outputs must have:
- β Specifics: numbers + units + names + versions + file paths + error codes
- β Owned trade-offs: pick a side, name what you gave up
- β Calibrated confidence: strong claims with evidence; admit real uncertainty
- β Restraint: cut padding; silence where AI would over-explain
Before/after β a PR description from frontend-engineer:
β AI default:
This PR implements a robust forgot password flow leveraging Next.js Server Actions and Prisma to ensure a seamless user experience. The implementation follows industry best practices for security.
β Expert voice:
Adds /forgot-password and /reset-password/[token]. Server Action validates with Zod schema from packages/contracts. Token: SHA-256 of 32 random bytes, 30-min TTL, single-use (DB-enforced via used_at). Rate limit 3/hour/email β own bucket, separate from /login's 5/min/IP. No account enumeration: identical 200 response for valid/invalid email. Lighthouse: a11y 98, perf 92. Route JS: 142KB (under 170KB budget).
Each agent also has its own # Voice β Role-Specific Anti-Slop section with rules + examples for that role (a PO writes differently from a PM, which differs from a Reviewer).
| Count | Source | |
|---|---|---|
| Agents | 10 specialists, ~250 lines each | Local .claude/agents/*.md |
| External skills (from skills.sh) | 27 | Installed via npx skills add |
| Local skills (project-specific) | 10 | Bundled in .claude/skills/ |
| Hooks | 2 (block-dangerous, protect-secrets) | Bundled in .claude/hooks/ |
| Mode | Command | When |
|---|---|---|
| Init a new project | /sdlc:init <description> |
Empty repo, build from zero β solution-architect scaffolds the skeleton + ADRs + conventions, then implements the first feature |
| Implement a feature | /sdlc <ticket> |
Add a feature to an existing codebase |
| Fix a bug | /sdlc <ticket> / @claude |
Fix a defect |
Human-action guides: when a task depends on something a human must do (sign up for an account, get an API key, configure DNS), the agent generates step-by-step instructions at docs/human-actions/, stubs the code to fail fast, and surfaces it in the PR. See .claude/skills/human-action-guide/SKILL.md.
You create a ticket / @claude mention
β
1. π£ product-owner β product-brief.md
skills: to-prd, brainstorming, marketing-psychology
2. π΅ project-manager β plan.md + tasks.yaml
skills: writing-plans, dispatching-parallel-agents,
subagent-driven-development, to-issues
3. π· business-analyst β openapi.yaml + schema.prisma + acceptance.feature
skills: to-prd, openapi-3.1, prisma-6-migration
4. πΈ ux-ui-designer β prototypes/<feature>/ + ux-spec.md
skills: ui-ux-pro-max β, frontend-design,
web-design-guidelines, impeccable,
wcag-2.2-aa, design-tokens
5a. π frontend-engineer β Next.js + tests
skills: vercel-react-best-practices,
next-best-practices, vercel-composition-patterns,
shadcn, prototype
5b. π’ backend-engineer β NestJS + Prisma + tests
skills: supabase-postgres-best-practices,
nestjs-11-module, prisma-6-migration
6. π‘ qa-engineer β Playwright + axe-core
skills: webapp-testing, tdd,
systematic-debugging, playwright-agents
7. βͺ devops-engineer β preview + Sentry + migration gates
skills: github-actions-docs,
secure-linux-web-hosting, handoff
8. π΄ code-reviewer β OWASP 2025 review β APPROVE
skills: grill-me, grill-with-docs, diagnose,
improve-codebase-architecture,
requesting-code-review, owasp-top10-2025
β
PR ready for you to merge
tar -xzf helmforge.tar.gz
cd helmforge
./setup.shsetup.sh asks step by step and configures things for you:
- Auto-detects whether the project is NEW (greenfield) or EXISTING β you confirm or change it
- Asks for project name, description, package prefix (
@<slug>), default branch - For existing projects: reads package.json to guess the stack + package manager, which you confirm
- Copies
.claude/+.github/+.helmforge/(auto-backs up if they already exist) - Generates CLAUDE.md from your inputs (no more
π΄ EDIT THISplaceholders) - Asks whether to run
.helmforge/install-skills.sh(27 skills) now - Asks whether to configure MCP servers now (GitHub PAT, Context7 key, Playwright...) β paste a key and the script runs
claude mcp add - Prints the next step (
/sdlc:initfor greenfield,/sdlcfor existing)
For an existing project that already has a CLAUDE.md, the script lets you choose: backup-and-overwrite / keep-as-is / append the SDLC section at the end.
npm install -g @anthropic-ai/claude-code@latest
claude --version # β₯ v2.1.100
claude # OAuth logincd /path/to/your-project
tar -xzf helmforge.tar.gz
cp -r helmforge/.claude .
cp -r helmforge/.github .
cp -r helmforge/.helmforge .
cp helmforge/CLAUDE.md.template ./CLAUDE.md # then edit the π΄ EDIT THIS lines
cp helmforge/constitution.md .
chmod +x .claude/hooks/*.sh .helmforge/*.sh .helmforge/scripts/*.sh.helmforge/install-skills.shThis script runs npx skills add ... for 27 skills:
- Product/PM/Marketing:
to-prd,brainstorming,marketing-psychology,writing-plans,to-issues,dispatching-parallel-agents,subagent-driven-development - Design:
ui-ux-pro-maxβ (193K installs, 50+ styles, 161 palettes),frontend-design,web-design-guidelines,impeccable - Frontend:
vercel-react-best-practices(440K installs),next-best-practices,vercel-composition-patterns,shadcn,prototype - Backend:
supabase-postgres-best-practices - QA:
webapp-testing,tdd,systematic-debugging - DevOps:
github-actions-docs,secure-linux-web-hosting,handoff - Review:
grill-me,grill-with-docs,diagnose,improve-codebase-architecture,requesting-code-review
.helmforge/install-skills.sh. Note: the ui-ux-pro-max skill fails the Agent Trust Hub audit but passes Socket + Snyk. Review the SKILL.md after install if your project is sensitive.
# Core (required)
claude mcp add --transport http github https://api.githubcopilot.com/mcp/ \
-H "Authorization: Bearer $GITHUB_PAT"
claude mcp add --scope user context7 -- npx -y @upstash/context7-mcp \
--api-key $CONTEXT7_KEY
claude mcp add sequential-thinking -- npx -y @modelcontextprotocol/server-sequential-thinking
# Engineering (FE/BE/QA)
claude mcp add postgres -- docker run -i --rm crystaldba/postgres-mcp-pro:latest \
--connection-uri "$DATABASE_URL" --access-mode=restricted
claude mcp add playwright -- npx @playwright/mcp@latest
cd /your/project && npx playwright init-agents --loop=claude
# Production (DevOps)
claude mcp add --transport http vercel https://mcp.vercel.com
claude mcp add --transport http sentry https://mcp.sentry.dev/mcp
Open CLAUDE.md and edit the π΄ EDIT THIS lines to match your real stack.
claude setup-token
# Copy the output sk-ant-oat01-...
# GitHub β Settings β Secrets β Actions β CLAUDE_CODE_OAUTH_TOKENNot every repo needs all 10 agents. A pure Next.js repo doesn't need backend-engineer; a pure NestJS repo doesn't need ux-ui-designer + frontend-engineer. Control this with .helmforge/agents.config.yaml + the .helmforge/configure-agents.sh script.
# Show current status
.helmforge/configure-agents.sh --status
# Set a profile (sticky β written to .helmforge/agents.config.yaml)
.helmforge/configure-agents.sh --profile frontend # DISABLE backend-engineer
.helmforge/configure-agents.sh --profile backend # DISABLE ux-ui-designer + frontend-engineer
.helmforge/configure-agents.sh --profile fullstack # enable all 10
# Pick agents yourself
.helmforge/configure-agents.sh --interactiveMechanism: ACTIVE agents live in .claude/agents/; disabled agents move to .claude/agents-disabled/, so Claude Code won't call them. The /sdlc and /sdlc:init commands are taught to run only ACTIVE agents (e.g. backend-only β the skeleton has just API + DB, no web pages).
| Profile | Enabled | Disabled |
|---|---|---|
fullstack |
all 10 | β |
frontend |
9 | backend-engineer |
backend |
8 | ux-ui-designer, frontend-engineer |
custom |
per .helmforge/agents.config.yaml |
up to you |
You can also edit .helmforge/agents.config.yaml directly (set profile: custom then toggle each true/false flag), then run .helmforge/configure-agents.sh. On each run, the "Active Agents" block in CLAUDE.md updates itself.
setup.sh also asks for this profile at install time (pre-suggested based on the stack detected from package.json).
claude
> /sdlc Add forgot password flow. Users click "Forgot password?" on /login, enter email, receive reset link valid 30min, set new password. Rate limit 3/hour per email.> Use the ux-ui-designer subagent to design a dashboard for tracking subscription revenue.
> (Agent will pull ui-ux-pro-max product-type "Dashboard" pattern, choose palette + typography)- Create an issue describing the ticket
- Comment
@claude /sdlc implement this - A PR opens automatically
your-project/
βββ CLAUDE.md β π΄ EDIT for your project
βββ constitution.md β non-negotiable principles (code-reviewer enforces)
βββ .helmforge/ β all kit machinery (hidden)
β βββ agents.config.yaml Β· stack.config.yaml Β· pipeline.config.yaml
β βββ configure-agents.sh Β· install-skills.sh
β βββ scripts/ (preflight.sh, brd.sh)
β βββ ci-templates/
βββ .claude/
β βββ settings.json β hooks + permission rules
β βββ agents/ β agent definitions (10 active + mobile/ai optional)
β β βββ product-owner.md π£
β β βββ project-manager.md π΅
β β βββ business-analyst.md π·
β β βββ ux-ui-designer.md πΈ
β β βββ frontend-engineer.md π
β β βββ backend-engineer.md π’
β β βββ mobile-engineer.md π¦ (Flutter/RN β off by default, enabled via .helmforge/stack.config.yaml)
β β βββ qa-engineer.md π‘
β β βββ devops-engineer.md βͺ
β β βββ code-reviewer.md π΄
β βββ skills/ β local skills (project-specific)
β β βββ expert-voice/ β β anti-AI-slop voice guide (loaded by ALL agents)
β β βββ wcag-2.2-aa/ β WCAG checklist
β β βββ owasp-top10-2025/ β security review checklist
β β βββ openapi-3.1/ β API contract conventions
β β βββ nestjs-11-module/ β NestJS patterns
β β βββ prisma-6-migration/ β expand-contract safety
β β βββ design-tokens/ β Tailwind v4 OKLCH tokens
β β βββ playwright-agents/ β Playwright 1.56 Agents
β β βββ ... + external skills from skills.sh
β βββ hooks/
β β βββ block-dangerous.sh
β β βββ protect-secrets.sh
β βββ commands/
β βββ sdlc.md β /sdlc orchestrator
β βββ sdlc/ β /sdlc:vision β¦ /sdlc:review, init, onboard, etc.
βββ .github/workflows/
βββ claude.yml
Local skills (10) β project-specific, override-able, focused on safety + voice:
expert-voiceβ β anti-AI-slop style guide; loaded FIRST by every agent. Bans hedge padding, hollow words ("leverage/robust/scalable"), symmetric bullets, mirror-the-prompt openers. Outputs read like a senior practitioner.wcag-2.2-aaβ full 86-SC accessibility checklistowasp-top10-2025β security review checklist with 2025 changes (A02 β #2, A03/A10 new)openapi-3.1β API contract conventions for THIS projectnestjs-11-moduleβ NestJS module patternsprisma-6-migrationβ expand-and-contract safety patternsdesign-tokensβ Tailwind v4 @theme + OKLCH conventionsplaywright-agentsβ Playwright 1.56 planner/generator/healer specifics
External skills (27) β general expertise from skills.sh, maintained by domain experts. Browse all at https://www.skills.sh
Strategy: external skills provide industry best practices; local skills enforce project-specific rules. Both load together when an agent runs.
frontend-engineer, backend-engineer and mobile-engineer read .helmforge/stack.config.yaml to learn the framework, then pull docs via Context7 + apply the matching idioms. The engineering discipline (types, tests, structure, expert-voice, perf budget) stays the same; only the framework primitives change.
# .helmforge/stack.config.yaml
frontend:
framework: nextjs # nextjs|nuxt|sveltekit|remix|react-router-7|angular|astro|react-vite|none
backend:
framework: nestjs # nestjs|express|fastify|hono|django|fastapi|rails|go-gin|spring-boot|laravel|none
language: typescript # typescript|python|ruby|go|java|php
mobile:
framework: none # flutter|react-native|none| Layer | Frameworks supported out of the box (Context7 docs + idioms) |
|---|---|
| Web (frontend-engineer π ) | Next.js (default), Nuxt, SvelteKit, Remix/React Router 7, Angular, Astro, React+Vite |
| API (backend-engineer π’) | NestJS (default), Express, Fastify, Hono, Django, FastAPI, Rails, Go (Gin/Echo), Spring Boot, Laravel β or API inside Next.js (next-api), Nuxt (nuxt-server), SvelteKit, Remix |
| Mobile (mobile-engineer π¦) | Flutter (Dart), React Native (Expo) |
| AI features (ai-engineer π©) | Vercel AI SDK 6 (chatbot/streaming), Mastra (multi-agent/RAG/eval), LangGraph β provider: Anthropic/OpenAI/Google/Gateway |
Change stacks: edit .helmforge/stack.config.yaml + the ## Stack section in CLAUDE.md to match, then:
.helmforge/configure-agents.sh --sync-skillsThis rewrites the skills: block of FE/BE/mobile to match the framework β dropping irrelevant skills (e.g. a Django repo no longer loads nestjs-11-module/prisma-6-migration; a Nuxt repo doesn't load React skills). It only keeps skills that actually exist (local or in the installer), so no broken references; for a framework without a dedicated skill, the agent pulls docs via Context7. setup.sh and every .helmforge/configure-agents.sh run also sync automatically. If a dedicated skill exists on skills.sh (e.g. vue-best-practices, django), install it and it'll be kept on the next sync.
mobile-engineer is OFF by default (most repos have no mobile). It auto-enables when .helmforge/stack.config.yaml sets mobile.framework: flutter or react-native, then you run .helmforge/configure-agents.sh. For an "API + mobile, no web" repo: set frontend.framework: none + mobile.framework: flutter, profile backend β the pipeline is PO/PM/BA/architect/backend/mobile/qa/devops/reviewer.
Mobile-engineer handles: navigation (go_router / Expo Router), state (Riverpod/BLoC or Zustand/Redux), offline cache, push, secure token storage, permission flows, store-release human-action guides, tests (widget/integration or Jest+RNTL/Maestro), 60fps profiling + cold start.
A very common shape: a single Next.js app, the API is route handlers + Server Actions, data via Supabase (Postgres + Auth + Storage + RLS). Config:
# .helmforge/stack.config.yaml
frontend: { framework: nextjs, ui_kit: shadcn }
backend: { framework: next-api, language: typescript, orm: supabase-js, database: supabase }.helmforge/configure-agents.sh --profile fullstack # both agents work in the one Next.js repoClear division so they don't collide: frontend-engineer does UI + Server Components (read); backend-engineer does Server Actions (write) + route handlers (app/api/*) + Supabase schema/RLS/migrations + auth (@supabase/ssr). They meet at typed action signatures + Zod contracts. Supabase keys become a human-action guide (docs/human-actions/<id>-supabase.md). Want an ORM instead of supabase-js directly: set orm: drizzle or prisma.
Important distinction: the kit's SDLC agents (PO, FE, BE...) are build-time tools β they run inside Claude Code to WRITE your app's code. The chatbot/multi-agent you want for end-users is a runtime feature in your app, using an LLM API + a runtime framework. The kit builds that feature; it isn't itself that feature.
ai-engineer (π©) is the agent that builds the AI runtime. It's OFF by default and auto-enables when:
# .helmforge/stack.config.yaml
ai:
framework: vercel-ai-sdk # chatbot/streaming | mastra (multi-agent/RAG/eval) | langgraph | none
provider: anthropic # anthropic | openai | google | gateway
features: "chat,rag" # chat | agents | rag | extractionIt handles: streaming route (app/api/chat/route.ts), tool calling (Zod, RLS-scoped), agent loop / multi-agent workflow, RAG via Supabase pgvector, structured output (generateObject+Zod), evals (an eval set runs in CI), and guardrails (loop bounds, token/cost logging, prompt-injection defense, rate limits). The LLM key becomes a human-action guide that reminds you to set a spend cap. frontend-engineer handles the chat UI (useChat).
2026 recommendation: Vercel AI SDK 6 for chatbot/in-app AI; Mastra (TS-native, built on the AI SDK, pgvector, evals included) for multi-agent/workflow/RAG β a good match for the Next.js + Supabase stack.
The kit follows the standard real-project flow: PO β PM β BA β Design β Build β QA β DevOps β Review. There are 3 kinds of command (details: docs/COMMANDS.md). All live under the sdlc: namespace β type /sdlc to see the group in the menu; /sdlc <ticket> runs everything automatically, /sdlc:<phase> runs one phase.
Per-phase (run one phase then stop β manual control):
| Command | Phase | Agent |
|---|---|---|
/sdlc:vision |
Vision / scope / KPI | product-owner |
/sdlc:plan |
Plan / DAG / risk / tier | project-manager |
/sdlc:brd |
Requirements / BRD / acceptance / API / schema | business-analyst |
/sdlc:clarify |
Resolve spec ambiguities (asks the human, folds back) | business-analyst (+PO) |
/sdlc:design |
UX/UI + a11y | ux-ui-designer |
/sdlc:build |
Implementation | FE/BE/mobile/ai |
/sdlc:qa |
Test + bugs | qa-engineer |
/sdlc:deploy |
Deploy + CI gate/auto-fix | devops-engineer |
/sdlc:review |
OWASP + perf + spec (final gate) | code-reviewer |
Each command runs one phase, is order-flexible (proceeds from whatever artifacts exist β you can run /sdlc:brd before /sdlc:plan), is ACTIVE-agent + stack aware, updates pipeline-state.yaml (resumable), and STOPS telling you the next step. /sdlc:vision, /sdlc:plan, /sdlc:brd accept an MVP/epic scope (multiple stories) β build the whole BRD, review, then /sdlc:design + /sdlc:build.
Orchestrator: /sdlc <ticket> runs the WHOLE flow in standard order (the 8 phases above) + triage/budget/CI-loop β the phase commands are the single source of truth; /sdlc just chains them, it doesn't redefine them. /sdlc:quick = lite (1-3 agents). /sdlc:resume = continue an interrupted pipeline.
Setup (run once per repo β NOT redundant): /sdlc:init (greenfield: scaffold + skeleton + CLAUDE.md + BRD init β hands off to the phase flow), /sdlc:onboard (brownfield: analyze the repo β CLAUDE.md/architecture-map/BRD seed β hand off). They do SETUP (a different layer), then reuse the phase commands for feature work β so no overlap.
Governance: /sdlc:constitution creates/amends constitution.md β the non-negotiable principles (spec-before-code, tests required, OWASP/WCAG baseline, perf/cost budgets, brownfield-match, human gates). Every agent reads it; code-reviewer enforces it as a gate (a violation = request-changes). Unlike CLAUDE.md (conventions/how), this is "the law".
2 ways to work a feature: auto /sdlc Add forgot-password; or manual spec-first: /sdlc:visionβ/sdlc:planβ/sdlc:brd (whole MVP) β review the BRD β /sdlc:designβ/sdlc:buildβ/sdlc:qaβ/sdlc:deployβ/sdlc:review.
A single .helmforge/pipeline.config.yaml controls how /sdlc runs β right-sized to the ticket so it doesn't burn Max quota.
Tier (pick pipeline depth): /sdlc triages the ticket β trivial / small / standard / large, running only the right number of agents. A small change doesn't drag in all 12 agents.
| Tier | Agents | Use for |
|---|---|---|
| trivial | 1β2 (implementer + review) | text fix, config, 1-2 lines |
| small | 3-4 (light BA + impl + QA + review) | bug fix, small well-defined change |
| standard | full | typical feature |
| large | full + human checkpoints | architecture/security/payments change |
/sdlc:quick <ticket> # force lite path (1-3 agents) for small work
/sdlc <ticket> # auto-triage tier; asks for confirmation if over budget.confirm_if_agents_over
/sdlc --tier standard <ticket> # force a tier
/sdlc:resume <ticket> # continue a paused/failed pipeline (don't restart from scratch)Budget: max_agents_per_ticket (hard ceiling β STOP if exceeded), confirm_if_agents_over (ask before spending), effort_by_tier (low tiers use low effort = cheap). /cost.
Resume (#3): the pipeline writes docs/specs/<ticket>/pipeline-state.yaml after every phase and after every deliverable (the checkpoint-resume skill). Stop mid-agent (Ctrl-C, crash, maxTurns, out of context) β /sdlc:resume reads phase_progress, skips deliverables already written to disk, and continues at the next one β not just between phases, but inside an agent too. Done work is never redone; only the remaining unfinished deliverable may need to continue (shrink it by writing/committing to disk often).
CI auto-fix (#4): after opening a PR + reviewer APPROVE, devops reads CI; if red β the agent fixes, pushes, re-checks, bounded by max_fix_attempts (default 2) then escalates (prevents a quota-burning loop). It never auto-merges.
Preflight (#5): .helmforge/scripts/preflight.sh checks the repo installs/typechecks/lints/builds/tests cleanly BEFORE agents code. A broken baseline (not the agent's fault) β STOP, tell the human. /sdlc runs this automatically; setup.sh also offers to run it for existing repos.
Multi-VCS (#6): vcs.provider = github | gitlab | bitbucket | azure-devops. GitHub has the deepest integration (MCP + @claude); the rest use git + a provider CLI (glab...) + templates in .helmforge/ci-templates/. See .helmforge/ci-templates/README.md.
This is the main use case, not an exception. There are 3 modes:
| Command | When | Special agent |
|---|---|---|
/sdlc:init <description> |
Empty repo, build from zero | solution-architect (greenfield scaffold) |
/sdlc:onboard |
Existing repo β run once before adding features | solution-architect (brownfield-audit) + BA |
/sdlc <ticket> |
Add a feature / fix a bug (existing repo) | β |
Workflow for an existing repo:
./setup.sh # detects "existing", installs the kit, no scaffold
claude
> /sdlc:onboard # analyze the repo: stack, structure, conventions, tests, risk areas
# β generate CLAUDE.md + docs/architecture-map.md FROM REAL CODE (merge if present)
# β set .helmforge/stack.config.yaml from what's detected; suggest a profile
> /sdlc Add feature X .../sdlc:onboard uses the codebase-analysis skill: reads README/manifest/CI, maps the structure 2-3 levels deep, extracts the conventions actually in use (response shape, naming, ORM, state lib, auth, import style), finds tests/coverage, builds a dependency/impact map, and flags under-tested areas. If the repo has an API, the BA reverse-engineers api/openapi.yaml from existing routes. An existing CLAUDE.md is merged, not overwritten over human-written notes.
Brownfield discipline (FE/BE/mobile/ai agents all have this section): read before writing β follow existing conventions, don't impose the kit's greenfield structure β impact analysis (grep callers) before touching shared code β minimal diff, no gratuitous refactor/format β don't add a library when one already does the job β use the existing migration mechanism β write characterization tests before touching untested code. Golden rule: the existing repo's conventions BEAT the kit's defaults β only migrate structure when the ticket explicitly asks and a human approves.
For each feature, business-analyst records requirements in a living registry at docs/brd/ (committed to git), with global IDs + status + traceability:
docs/brd/requirements.yamlβ source of truth: one record per requirement (FR-AUTH-001,NFR-PERF-003...),status(proposed/planned/in-progress/shipped/deprecated), priority, statement, andacceptance/ticket/prlinks.docs/brd/brd.mdβ a human-readable view (overview + per-domain tables + traceability), auto-generated by.helmforge/scripts/brd.sh report(don't edit by hand).
.helmforge/scripts/brd.sh init "My Product" # create docs/brd/ (/sdlc:init & /sdlc:onboard call this)
.helmforge/scripts/brd.sh next-id AUTH FR # next global ID β FR-AUTH-002 (avoids collisions)
.helmforge/scripts/brd.sh report # regenerate brd.md from the registry
.helmforge/scripts/brd.sh validate # check for duplicate IDs + required fields (doctor runs this too)Append-as-you-go (existing repo with no BRD yet): /sdlc:onboard creates an empty skeleton (it doesn't back-fill old code). From there every feature you build via /sdlc (or /sdlc:quick) is recorded in the BRD with a global ID, status: shipped on merge. The BRD grows exactly with the parts of the product the kit has touched β accurate, not invented. To record a pre-existing area, add it manually with status: shipped + a pre-existing note.
Difference from per-ticket docs/specs/<ticket>/requirements.md: that's a per-ticket snapshot (local IDs); docs/brd/ is the unified, always-current, global-ID, cross-traceable document β registered in CLAUDE.md so every agent reads it.
Consolidated story-spec (best practice): beyond the registry, the BA emits docs/specs/<ticket>/<US-ID>-spec.md β a human-readable doc following the brd-authoring skill (INVEST, testable + measurable, WHAT/HOW separation, scope IN/OUT, NFR checklist, mermaid user-flow, error/edge cases, assumptions/risks, Depends/Blocks from the BRD graph). It links to canonical artifacts (openapi.yaml, migration, acceptance.feature) instead of copying DDL/API tables into prose β anti-drift. This is the "like your example, but with traceability + runnable acceptance + no duplication" version.
Framework not in the table? The agent still runs: it pulls docs via Context7 from an ID you add to the agent, or you add a line to the "Framework Adaptation" table in .claude/agents/<agent>.md. Edit .helmforge/install-skills.sh to swap in a matching skill.
| Problem | Fix |
|---|---|
npx skills not found |
Need Node 20+ and internet to fetch the skills package |
| Skill doesn't load when an agent runs | Verify .claude/skills/<name>/SKILL.md exists; restart claude |
| Agent doesn't self-delegate | The description must have a "MUST BE USED for X" pattern |
| Cost burns fast | Lower effort: high β medium in the agent frontmatter |
| Hook doesn't fire | chmod +x .claude/hooks/*.sh |
- skills.sh leaderboard: https://www.skills.sh
- ui-ux-pro-max skill: https://www.skills.sh/nextlevelbuilder/ui-ux-pro-max-skill/ui-ux-pro-max
- frontend-design (Anthropic): https://www.skills.sh/anthropics/skills/frontend-design
- Vercel React skills: https://www.skills.sh/vercel-labs/agent-skills
- Mattpocock skills: https://www.skills.sh/mattpocock/skills
- Security audits: https://www.skills.sh/audits