TEA (Test Engineering Architect) is a standalone BMAD module that delivers risk-based test strategy, test automation guidance, and release gate decisions. It provides a single expert agent (Murat, Master Test Architect and Quality Advisor) and nine workflows spanning Teach Me Testing (TEA Academy), framework setup, test design, ATDD, automation, traceability, NFR assessment, CI guidance, and test review.
Docs: https://bmad-code-org.github.io/bmad-method-test-architecture-enterprise/
- Risk-based testing with measurable quality gates
- Consistent, knowledge-base driven outputs
- Clear prioritization (P0-P3) and traceability
- Optional Playwright Utils, CLI, and MCP browser automation
BMad works because it turns big, fuzzy work into repeatable workflows. Each workflow is broken into small steps with clear instructions, so the AI follows the same path every time. It also uses a shared knowledge base (standards and patterns) so outputs are consistent, not random. In short: structured steps + shared standards = reliable results.
TEA plugs into BMad the same way a specialist plugs into a team. It uses the same stepβbyβstep workflow engine and shared standards, but focuses exclusively on testing and quality gates. That means you get a riskβbased test plan, automation guidance, and go/noβgo decisions that align with the rest of the BMad process.
BMad is a small agent + workflow engine. There is no external orchestrator β everything runs inside the LLM context window through structured instructions.
TEA has two layers of files, and each has a specific job:
| File / Scope | What it does | When it loads |
|---|---|---|
src/agents/bmad-tea/SKILL.md |
Murat's persona β identity, principles, critical actions, capabilities table | First β activates the TEA agent |
src/agents/bmad-tea/customize.toml |
Agent customization surface β menu items, persistent facts, activation hooks | During agent activation |
src/workflows/testarch/<workflow>/SKILL.md |
Workflow entrypoint β resolves workflow customization, picks mode, routes to the first step | When a TEA workflow is invoked |
src/workflows/testarch/<workflow>/customize.toml |
Workflow customization surface β activation hooks, persistent facts, optional on_complete behavior |
During workflow activation |
src/workflows/testarch/<workflow>/workflow.yaml |
Machine-readable workflow metadata β descriptions, defaults, tool hints, output paths | Used by installer/tooling and workflow metadata lookups |
instructions.md |
Workflow-specific summary and operator notes | On demand |
steps-c/*.md |
Create steps β primary execution, 5-9 sequential files | One at a time (just-in-time) |
steps-e/*.md |
Edit steps β always 2 files: assess target, apply edit | One at a time |
steps-v/*.md |
Validate steps β always 1 file: evaluate against checklist | On demand |
checklist.md |
Validation criteria β what "done" looks like for this workflow | Read by steps-v |
*-template.md |
Output skeleton with {PLACEHOLDER} vars β steps fill these in to produce the final artifact |
Read by steps-c when generating output |
src/agents/bmad-tea/resources/tea-index.csv |
Knowledge fragment index β id, name, tags, tier (core/extended/specialized), file path | Read to decide which shared TEA fragments to load |
resources/knowledge/*.md |
Reusable fragments β standards, patterns, API references | Selectively read into context based on tier + config |
flowchart LR
U[User] --> A[Agent Persona]
A --> W[Workflow Entry: workflow SKILL.md]
W --> S[Step Files: steps-c / steps-e / steps-v]
S --> K[Knowledge Fragments<br/>tea-index.csv β knowledge/*.md]
S --> T[Templates & Checklists<br/>*-template.md, checklist.md]
S --> O[Outputs: docs/tests/reports<br/>when a step writes output]
O --> V[Validation: checklist + report]
- Trigger β Direct commands are
/bmad:tea:automate(Claude/Cursor/Windsurf) and$bmad-tea-testarch-automate(Codex). Load the conversational TEA menu with$bmad-teain Codex.TAis an agent-menu trigger available only after TEA is activated; the capabilities table inSKILL.mdmapsTAto thebmad-testarch-automateskill. - Agent loads β
SKILL.mdinjects the persona (identity, principles, critical actions) into the context window. - Workflow loads β The workflow's
SKILL.mdbecomes the entrypoint. It resolves the workflow block fromcustomize.toml, loads persistent facts and config, decides the mode (Create / Edit / Validate), then routes to the first step file. - Step-by-step execution β Only the current step file is in context (just-in-time loading). Each step explicitly names the next one with a
{skill-root}-anchored path. The LLM reads, executes, saves output, then loads the next step. No future steps are ever preloaded. - Knowledge injection β Step-01 reads
tea-index.csvand selectively loads fragments by tier (core = always, extended = on-demand, specialized = only when relevant) and config flags (e.g.,tea_use_pactjs_utils). This is deliberate context engineering: a backend project loads ~1,800 lines of fragments; a fullstack project loads ~4,500 lines. Conditional loading cuts context usage by 40-50%. - Templates β When a step produces output (e.g., a traceability matrix or test review report), it reads the
*-template.mdfile and fills in the{PLACEHOLDER}values with computed results. The template provides consistent structure; the step provides the content. - Subagent isolation β Heavy workflows (e.g.,
automate) spawn parallel subagents that each run in an isolated context. Subagents write structured JSON to temp files. An aggregation step reads the JSON outputs β only the results enter the main context, not the full subagent history. - Progress tracking β Each step appends to an output file with YAML frontmatter (
stepsCompleted,lastStep,lastSaved). Resume mode reads this frontmatter and routes to the next incomplete step. - Validation β The
steps-v/mode readschecklist.mdand evaluates the workflow's output against its criteria, producing a pass/fail validation report.
BMad workflows and Claude Code Skills solve different problems at different scales:
| Capability | Claude Code Skills | BMad Workflows |
|---|---|---|
| Execution | Single prompt, one shot | 5-9 sequential steps with explicit handoffs |
| State | Stateless | YAML frontmatter tracking (stepsCompleted, lastStep) with resume |
| Knowledge | Whatever fits in one prompt | Tiered index (40 fragments), conditional loading by config + stack detection |
| Context mgmt | Everything in one shot | Just-in-time step loading, subagent isolation (separate contexts) |
| Output | Freeform | Templates with {PLACEHOLDER} vars filled by specific steps |
| Validation | None | Dedicated mode (steps-v/) evaluating against checklists |
| Configuration | None | module.yaml with prompted config flags driving conditional behavior |
| Modes | None | Create / Edit / Validate β three separate step chains per workflow |
The key insight is that there is no external runtime engine β the LLM is the engine. BMad workflows are structured markdown that the LLM follows as instructions: "read this file, execute it completely, save your output, load the next file." Skills are a single tool in a toolbox; BMad workflows are a workshop with a process manual.
How workflows become commands. When you run npx bmad-method install, the installer generates tool-specific artifacts for your runtime (for example, Claude Code uses .claude/commands/, while Codex uses .agents/skills/). Those launchers bridge into the installed TEA agent or workflow package. Once invoked, the workflow's SKILL.md is the conversational entrypoint, and the step-file process takes over from there.
.claude/commands/ # Generated by installer
βββ bmad-tea.md # /tea β loads agent persona + menu
βββ bmad-tea-testarch-automate.md # /automate β invokes the automate workflow package
βββ bmad-tea-testarch-test-design.md # /test-design β ...
βββ bmad-bmm-create-prd.md # /create-prd β BMM workflow
βββ ... (61 commands total across all installed modules)
The BMAD-METHOD source repo also has standalone .claude/skills/ (e.g., bmad-os-release-module, bmad-os-gh-triage) for its own maintenance workflows. External tools can register skills too (e.g., playwright-cli install --skills). The installer supports 10+ platforms: Claude Code, Cursor, GitHub Copilot, Codex, Gemini, Windsurf, Cline, and more.
npx bmad-method install
# Select: Test Architect (TEA)Note: TEA is automatically added to party mode after installation. Use /party to collaborate with TEA alongside other BMad agents.
| Tool | Invocation style | Example |
|---|---|---|
| Claude Code / Cursor / Windsurf | Slash command | /bmad:tea:automate |
| Codex | $ skill from .agents/skills |
$bmad-tea or $bmad-tea-testarch-automate |
- Install TEA (above)
- Load the TEA menu with
$bmad-teaif you want a conversational entrypoint. - Run one of the core workflows:
TD//bmad:tea:test-design/$bmad-tea-testarch-test-designβ test design and risk assessmentAT//bmad:tea:atdd/$bmad-tea-testarch-atddβ failing acceptance tests first (TDD red phase)TA//bmad:tea:automate/$bmad-tea-testarch-automateβ expand automation coverage
- Or use in party mode:
/partyto include TEA with other agents
- No TEA: Use your existing testing approach
- TEA Solo: Standalone use on non-BMad projects
- TEA Lite: Start with
automateonly for fast onboarding - Integrated (BMad Method / Enterprise): Use TEA in Phases 3β4 and release gates
| Trigger | Slash Command | Codex Skill | Purpose |
|---|---|---|---|
| TMT | /bmad:tea:teach-me-testing |
$bmad-tea-teach-me-testing |
Teach Me Testing (TEA Academy) |
| TF | /bmad:tea:framework |
$bmad-tea-testarch-framework |
Scaffold test framework (frontend, backend, or fullstack) |
| CI | /bmad:tea:ci |
$bmad-tea-testarch-ci |
Set up CI/CD quality pipeline (multi-platform) |
| TD | /bmad:tea:test-design |
$bmad-tea-testarch-test-design |
System-level or epic-level test design |
| AT | /bmad:tea:atdd |
$bmad-tea-testarch-atdd |
Generate failing acceptance tests + checklist |
| TA | /bmad:tea:automate |
$bmad-tea-testarch-automate |
Expand test automation coverage |
| RV | /bmad:tea:test-review |
$bmad-tea-testarch-test-review |
Review test quality and score |
| TR | /bmad:tea:trace |
$bmad-tea-testarch-trace |
Trace requirements to tests + gate decision |
| NR | /bmad:tea:nfr-assess |
$bmad-tea-testarch-nfr |
Assess non-functional requirements |
TEA variables are defined in src/module.yaml and prompted during install:
test_artifactsβ base output folder for test artifactstea_use_playwright_utilsβ enable Playwright Utils integration (boolean)tea_use_pactjs_utilsβ enable Pact.js Utils integration for contract testing when your project explicitly uses Pact (boolean)tea_pact_mcpβ SmartBear MCP for PactFlow/Broker interaction when broker integration is needed: mcp, none (string)tea_browser_automationβ browser automation mode: auto, cli, mcp, none (string)test_frameworkβ detected or configured test framework (Playwright, Cypress, Jest, Vitest, pytest, JUnit, Go test, dotnet test, RSpec)test_stack_typeβ detected or configured stack type (frontend, backend, fullstack)ci_platformβ CI platform (auto, github-actions, gitlab-ci, jenkins, azure-devops, harness, circle-ci)risk_thresholdβ risk cutoff for mandatory testing (future)test_design_output,test_review_output,trace_outputβ subfolders undertest_artifacts
TEA relies on a curated testing knowledge base:
- Index:
src/agents/bmad-tea/resources/tea-index.csv - Fragments:
src/agents/bmad-tea/resources/knowledge/
Workflows load only the fragments required for the current task to stay focused and compliant.
src/
βββ module.yaml
βββ agents/
β βββ bmad-tea/
β βββ SKILL.md
β βββ customize.toml
β βββ resources/
β βββ tea-index.csv
β βββ knowledge/
βββ workflows/
β βββ testarch/
β βββ bmad-teach-me-testing/
β βββ bmad-testarch-atdd/
β βββ bmad-testarch-automate/
β βββ bmad-testarch-ci/
β βββ bmad-testarch-framework/
β βββ bmad-testarch-nfr/
β βββ bmad-testarch-test-design/
β βββ bmad-testarch-test-review/
β βββ bmad-testarch-trace/
Custom workflows are still compatible with TEA, but they are no longer implicitly absorbed into TEA core. The supported path is:
- Package the workflow as custom content or a custom module.
- Attach it to
bmad-teausing the agent customization flow. - Reinstall/update BMAD so the new menu item and workflow are registered.
See Extend TEA with Custom Workflows and the BMAD customization guide at BMAD-METHOD/docs/how-to/customize-bmad.md.
See CONTRIBUTING.md for guidelines.
π¦ Release Guide (for Maintainers)
TEA uses an automated publish workflow modeled after the main BMAD-METHOD repo. It supports:
nextprereleases published automatically frommain- manual stable releases on the
latestdist-tag - trusted npm publishing (no
NPM_TOKENsecret) - metadata sync for
package.json,package-lock.json, and.claude-plugin/marketplace.json
-
npm Trusted Publishing:
- In npm package settings for
bmad-method-test-architecture-enterprise, configure Trusted Publishers for this GitHub repository - Allow publishes from the
bmad-code-org/bmad-method-test-architecture-enterpriserepo and the.github/workflows/publish.yamlworkflow - GitHub Actions must be able to request an OIDC token (
id-token: write), which the workflow already does
- In npm package settings for
-
GitHub App Secrets for Stable Releases:
- Add
RELEASE_APP_ID - Add
RELEASE_APP_PRIVATE_KEY - Install the corresponding GitHub App on this repository with contents write access
- If
mainis protected, ensure the app is allowed to push the release commit and tag - These are used only for manual stable releases so the workflow can push the version bump commit and tag back to
main
- Add
-
Verify Package Configuration:
# Check package.json settings cat package.json | grep -A 3 "publishConfig" # Should show: "access": "public" if grep -Eq '"private"[[:space:]]*:[[:space:]]*true' package.json; then echo 'β package.json must not set "private": true' else echo 'β package.json is publishable ("private": true not present)' fi
From your local terminal after merging to main:
# Publish the next prerelease from current main
npm run release:next
# Publish a stable patch release
npm run release:patch
# Publish a stable minor release
npm run release:minor
# Publish a stable major release
npm run release:major- Go to Actions tab in GitHub
- Click "Publish" workflow
- Click "Run workflow"
- Choose the branch to release, typically
main - Select channel:
nextfor a prerelease publishlatestfor a stable release
- If using
latest, choose the bump type (patch,minor,major) - Click "Run workflow"
The workflow performs these steps:
- β
Validation: Runs the full
npm testsuite, including schema checks, install tests, knowledge checks, linting, markdown linting, formatting, and release metadata validation - β
Version Bump:
next: derives the next prerelease version and publishes it with dist-tagnextlatest: bumps the stable version (patch,minor, ormajor)
- β
Metadata Sync: Updates
.claude-plugin/marketplace.jsonto match the package version before publishing - β
Publish: Publishes to npm with provenance enabled
nextβnpm publish --tag next --provenancelatestβnpm publish --tag latest --provenance
- β
Stable Release Finalization: For
latest, creates a version bump commit, tags it, pushes it tomain, and creates a GitHub Release
next: prerelease channel for the newest merged changeslatest: stable channel for intentional releasespatch: bug fixes, no breaking changesminor: new features, backwards compatiblemajor: breaking changes
Recommended Release Path:
- Merge releasable work to
main - Let
nextpublish for early validation - When ready, cut a stable
latestrelease viapatch,minor, ormajor
Check NPM:
npm view bmad-method-test-architecture-enterprise
npm view bmad-method-test-architecture-enterprise dist-tagsInstall TEA:
npx bmad-method install
# Select "Test Architect (TEA)"Test Workflows:
# In your project
tea # Load agent
test-design # Test workflowIf you need to unpublish a version:
# Unpublish specific version (within 72 hours)
npm unpublish bmad-method-test-architecture-enterprise@1.13.2-next.0
# Deprecate version (preferred for older releases)
npm deprecate bmad-method-test-architecture-enterprise@1.13.2-next.0 "Use version X.Y.Z instead"Trusted publishing failed:
- Verify npm Trusted Publishing is configured for this repository and workflow
- Verify the workflow has
id-token: write - Confirm the publish is running from the canonical repository, not a fork
"Package already exists":
- Check if package name is already taken on NPM
- Update
nameinpackage.jsonif needed
"Version push failed":
- Verify
RELEASE_APP_IDandRELEASE_APP_PRIVATE_KEYare configured - Verify the GitHub App is installed on this repository with contents write access
- If branch protection is enabled on
main, verify the app is allowed to push the release commit and tag
"Tests failed":
- Fix failing tests before release
- Run
npm testlocally to verify
"Git push failed (protected branch)":
- This is not expected once the release GitHub App is configured correctly
- Verify branch protection allows the app to push the release commit and tag
- If needed, create the GitHub Release manually after resolving the app permissions
Before releasing:
- All tests passing:
npm test - Documentation up to date
- CHANGELOG.md updated
- No uncommitted changes
- On
mainbranch - npm Trusted Publishing configured
-
RELEASE_APP_IDandRELEASE_APP_PRIVATE_KEYconfigured - Package name available on NPM
After releasing:
- Verify NPM publication:
npm view bmad-method-test-architecture-enterprise - Test installation:
npx bmad-method install - Verify workflows work
- Check GitHub Release created
- Monitor for issues
- Discord β Get help, share ideas, collaborate
- YouTube β Tutorials, master class, and more
- X / Twitter
- Website
BMad is free for everyone and always will be. Star this repo, buy me a coffee, or email contact@bmadcode.com for corporate sponsorship.
See LICENSE.