7 battle-tested BMAD agents extracted from 500+ real sessions shipping multi-tenant SaaS products on AWS. Not theoretical — every persona encodes hard-won operational knowledge from deploy failures, permission bugs, and midnight incidents.
Each agent carries deep operational knowledge for a specific domain. They work as a team — Pirlo orchestrates, Lena plans, the specialists execute. Every persona was shaped by real production incidents.
gws CLI. Permission audits, batch unshare operations, export pipelines. Always previews before executing, always filters by ownership.
Every story goes through a 4-phase pipeline. Code that passes unit tests but fails on real infrastructure is not done. Period.
Execute tasks in order. Write unit tests for every subtask. Run full test suite after each task. Mark [x] only when tests actually pass. Never lie about test status.
AWS_PROFILE={profile} npx serverless@4 deployModule --stage dev --module {name}
If CloudFormation fails, read the error, fix, redeploy. Max 3 attempts.
Backend E2E with Cognito auth + SigV4 signed requests against real API Gateway. Frontend E2E with Playwright + data-testid contracts. If E2E fails: fix → redeploy → rerun. 3 cycles max.
Always in afterAll. Prefer API DELETE over direct DDB deletes. Use randomUUID() for unique test names. No orphaned data.
Every rule in these agents was learned the hard way. Here are some of the production incidents that shaped them.
Two concurrent deployModule calls corrupted ZIP artifacts, meta.json, and package-lock. Now Archie enforces a filesystem advisory lock with PID-alive checks and 30-min stale detection.
${arn:prefix} resolves per-module. Using it for another module's DDB table creates a table name that doesn't exist — silent 500s with no error in CloudWatch. Cost: 4 hours of debugging.
Non-awaited DynamoDB writes (.catch(() => {})) worked locally but Lambda froze the event loop after response. Zero events recorded despite the code running. Always await writes.
deployModule creates the IAM policy but never attaches it to Cognito Identity Pool roles or sets principal tags. Without all three manual steps, users get 403. Every. Single. Time.
CloudFormation's 500-resource limit hits silently. The fix requires a two-phase deploy: strip HTTP events first, deploy, then restore events and deploy again. Archie knows the dance.
bg-primary resolves to white in multi-tenant apps, not an accent color. bg-primary/95 bypasses the CSS override entirely, rendering Shadcn blue. Cost: invisible dropdowns in production for 3 tenants.
The postinstall script copies all agent files into your project's _bmad/sls-react/ directory automatically.
npm i -D @hyperdrive.bot/bmad-sls-react
This installs the package and automatically copies 19 files into _bmad/sls-react/.
Edit _bmad/sls-react/config.yaml with your project's details:
# Your name, language, output folder
user_name: "Your Name"
communication_language: "English"
# Your AWS deployment config
deploy_profile: "your-aws-profile"
deploy_region: "us-east-1"
Load any agent in your BMAD-compatible IDE (Claude Code, Cursor, Windsurf):
# In Claude Code — load Pirlo
@_bmad/sls-react/agents/pirlo.md
# Or start a planning session with Lena
@_bmad/sls-react/agents/lena.md
These agents are most valuable when your project uses the following combination. They'll still work on adjacent stacks, but the deep expertise is here.
TypeScript / Node.js on AWS Lambda via Serverless Framework v4 with composer plugin. DynamoDB single-table design. API Gateway per module.
React with TanStack Router + TanStack Query. Tailwind CSS. Multi-tenant theming via CSS variables. Amplify v6 for auth.
Multi-tenant SaaS on AWS. Cognito (per-tenant User Pools + shared Identity Pool). ABAC via principal tags. Elasticsearch per-tenant indices.
GitLab CI or GitHub Actions. Per-module deploys. E2E tests against real AWS (not mocks). Vercel for frontend previews.