BMAD Commands
Overview
BMAD Commands provide atomic, testable command primitives that BMAD skills compose into workflows. Each command follows a strict contract with typed inputs/outputs, structured error handling, and built-in telemetry.
Design Principles:
- •Deterministic: Same inputs always produce same outputs
- •Testable: Pure functions with JSON I/O
- •Observable: All commands emit telemetry data
- •Composable: Commands are building blocks for skills
Available Commands
read_file
Read file contents with metadata.
Usage:
python scripts/read_file.py --path <file-path> --output json
Inputs:
- •
path(required): Path to file to read
Outputs:
- •
content: File contents as text - •
line_count: Number of lines - •
size_bytes: File size in bytes - •
path: Absolute path to file
Example:
python .claude/skills/bmad-commands/scripts/read_file.py \ --path workspace/tasks/task-001.md \ --output json
Returns:
{
"success": true,
"outputs": {
"content": "# Task Specification\n...",
"line_count": 45,
"size_bytes": 1024,
"path": "/absolute/path/to/task-001.md"
},
"telemetry": {
"command": "read_file",
"duration_ms": 12,
"timestamp": "2025-01-15T10:30:00Z",
"path": "workspace/tasks/task-001.md",
"line_count": 45
},
"errors": []
}
run_tests
Execute tests with specified framework and return structured results.
Usage:
python scripts/run_tests.py --path <test-path> --framework <jest|pytest> --timeout <seconds> --output json
Inputs:
- •
path(required): Directory containing tests - •
framework(optional): Test framework (default: jest) - •
timeout(optional): Timeout in seconds (default: 120)
Outputs:
- •
passed: Whether all tests passed (boolean) - •
summary: Human-readable summary - •
total_tests: Total number of tests - •
passed_tests: Number passed - •
failed_tests: Number failed - •
coverage_percent: Coverage percentage (0-100) - •
junit_path: Path to JUnit report
Example:
python .claude/skills/bmad-commands/scripts/run_tests.py \ --path . \ --framework auto \ --timeout 120 \ --output json
Returns:
{
"success": true,
"outputs": {
"passed": true,
"summary": "10/10 tests passed",
"total_tests": 10,
"passed_tests": 10,
"failed_tests": 0,
"coverage_percent": 87,
"junit_path": "./junit.xml"
},
"telemetry": {
"command": "run_tests",
"framework": "jest",
"duration_ms": 4523,
"timestamp": "2025-01-15T10:30:00Z",
"total_tests": 10,
"passed_tests": 10,
"failed_tests": 0
},
"errors": []
}
generate_architecture_diagram
Generate architecture diagrams from architecture documents (C4 model, deployment, sequence diagrams).
Usage:
python scripts/generate_architecture_diagram.py --architecture <file-path> --type <diagram-type> --output <output-dir>
Inputs:
- •
architecture(required): Path to architecture document - •
type(required): Diagram type (c4-context, c4-container, c4-component, deployment, sequence) - •
output(optional): Output directory (default: docs/diagrams)
Outputs:
- •
diagram_path: Path to generated diagram file - •
diagram_type: Type of diagram generated - •
diagram_format: Format (svg, png) - •
architecture_source: Source architecture document
Example:
python .claude/skills/bmad-commands/scripts/generate_architecture_diagram.py \ --architecture docs/architecture.md \ --type c4-context \ --output docs/diagrams
Returns:
{
"success": true,
"outputs": {
"diagram_path": "/path/to/docs/diagrams/c4-context-20250131.svg",
"diagram_type": "c4-context",
"diagram_format": "svg",
"architecture_source": "docs/architecture.md"
},
"telemetry": {
"command": "generate_architecture_diagram",
"diagram_type": "c4-context",
"duration_ms": 450,
"timestamp": "2025-01-31T10:30:00Z"
},
"errors": []
}
analyze_tech_stack
Analyze technology stack from architecture document, validate compatibility, identify risks.
Usage:
python scripts/analyze_tech_stack.py --architecture <file-path> --output <json|summary>
Inputs:
- •
architecture(required): Path to architecture document - •
output(optional): Output format (default: json)
Outputs:
- •
technologies: List of detected technologies with categories - •
tech_count: Number of technologies detected - •
categories: Technology categories (frontend, backend, database, etc.) - •
compatibility: Compatibility analysis and warnings - •
architecture_source: Source architecture document
Example:
python .claude/skills/bmad-commands/scripts/analyze_tech_stack.py \ --architecture docs/architecture.md \ --output json
Returns:
{
"success": true,
"outputs": {
"technologies": [
{"name": "React", "category": "frontend", "version": "18+"},
{"name": "Node.js", "category": "backend", "version": "20+"},
{"name": "PostgreSQL", "category": "database", "version": "15+"}
],
"tech_count": 3,
"categories": ["frontend", "backend", "database"],
"compatibility": {
"issues": [],
"warnings": [],
"recommendations": ["Verify versions are compatible"]
},
"architecture_source": "docs/architecture.md"
},
"telemetry": {
"command": "analyze_tech_stack",
"tech_count": 3,
"duration_ms": 180,
"timestamp": "2025-01-31T10:30:00Z"
},
"errors": []
}
extract_adrs
Extract Architecture Decision Records (ADRs) from architecture document into separate files.
Usage:
python scripts/extract_adrs.py --architecture <file-path> --output <output-dir>
Inputs:
- •
architecture(required): Path to architecture document - •
output(optional): Output directory for ADR files (default: docs/adrs)
Outputs:
- •
adrs_extracted: Number of ADRs extracted - •
adrs: List of ADRs with number, title, and file path - •
output_directory: Directory where ADRs were saved - •
architecture_source: Source architecture document
Example:
python .claude/skills/bmad-commands/scripts/extract_adrs.py \ --architecture docs/architecture.md \ --output docs/adrs
Returns:
{
"success": true,
"outputs": {
"adrs_extracted": 5,
"adrs": [
{
"number": "001",
"title": "Technology Stack Selection",
"file": "/path/to/docs/adrs/ADR-001-technology-stack-selection.md"
},
{
"number": "002",
"title": "Database Choice",
"file": "/path/to/docs/adrs/ADR-002-database-choice.md"
}
],
"output_directory": "/path/to/docs/adrs",
"architecture_source": "docs/architecture.md"
},
"telemetry": {
"command": "extract_adrs",
"adrs_count": 5,
"duration_ms": 120,
"timestamp": "2025-01-31T10:30:00Z"
},
"errors": []
}
validate_patterns
Validate architectural patterns against best practices, check appropriateness for requirements.
Usage:
python scripts/validate_patterns.py --architecture <file-path> [--requirements <file-path>] --output <json|summary>
Inputs:
- •
architecture(required): Path to architecture document - •
requirements(optional): Path to requirements document - •
output(optional): Output format (default: json)
Outputs:
- •
detected_patterns: List of architectural patterns found - •
validation: Validation results including warnings and recommendations - •
architecture_source: Source architecture document - •
requirements_source: Source requirements document (if provided)
Example:
python .claude/skills/bmad-commands/scripts/validate_patterns.py \ --architecture docs/architecture.md \ --requirements docs/prd.md \ --output json
Returns:
{
"success": true,
"outputs": {
"detected_patterns": [
{
"name": "Microservices",
"category": "architectural",
"validated": true,
"warnings": []
},
{
"name": "Repository Pattern",
"category": "architectural",
"validated": true,
"warnings": []
}
],
"validation": {
"patterns_validated": 2,
"patterns_appropriate": 2,
"anti_patterns_detected": 0,
"warnings": [],
"recommendations": [
"Validate pattern complexity matches team expertise",
"Ensure pattern choice aligns with scale requirements"
]
},
"architecture_source": "docs/architecture.md",
"requirements_source": "docs/prd.md"
},
"telemetry": {
"command": "validate_patterns",
"patterns_count": 2,
"anti_patterns_count": 0,
"duration_ms": 210,
"timestamp": "2025-01-31T10:30:00Z"
},
"errors": []
}
Response Format
All commands return JSON with this structure:
{
"success": boolean,
"outputs": {
// Command-specific outputs
},
"telemetry": {
"command": string,
"duration_ms": number,
"timestamp": string,
// Command-specific telemetry
},
"errors": [
// Array of error strings (empty if success=true)
]
}
Exit Codes:
- •
0: Command succeeded (success: true) - •
1: Command failed (success: false)
Using Commands from Skills
To use commands from other skills, execute the script and parse the JSON output.
Example in a skill's SKILL.md:
### Step 1: Read Task Specification
Execute the read_file command:
python .claude/skills/bmad-commands/scripts/read_file.py \
--path workspace/tasks/{task_id}.md \
--output json
Parse the JSON response and extract `outputs.content` for the task specification.
### Step 2: Run Tests
Execute the run_tests command:
python .claude/skills/bmad-commands/scripts/run_tests.py \
--path . \
--framework auto \
--output json
Parse the JSON response and check `outputs.passed` to verify tests passed.
Error Handling
All commands handle errors gracefully and return structured error information:
{
"success": false,
"outputs": {},
"telemetry": {
"command": "read_file",
"duration_ms": 5,
"timestamp": "2025-01-15T10:30:00Z"
},
"errors": ["file_not_found"]
}
Common Errors:
- •
file_not_found: File doesn't exist - •
path_is_not_file: Path is a directory - •
permission_denied: Insufficient permissions - •
timeout: Operation exceeded timeout - •
invalid_path: Path validation failed - •
unexpected_error: Unexpected error occurred
Telemetry
All commands emit telemetry data for observability:
- •
command: Command name - •
duration_ms: Execution time in milliseconds - •
timestamp: ISO 8601 timestamp - •Command-specific metrics (e.g., line_count, test_count)
This telemetry enables:
- •Performance monitoring
- •Usage analytics
- •Debugging workflows
- •Production observability
Command Contracts
Full command contracts (inputs, outputs, errors, telemetry) are documented in:
references/command-contracts.yaml
Reference this file when:
- •Creating new commands
- •Updating existing commands
- •Integrating commands into skills
- •Understanding command behavior
Testing Commands
Test commands independently before using in workflows:
# Test read_file python .claude/skills/bmad-commands/scripts/read_file.py \ --path README.md \ --output json # Test run_tests (if you have a test suite) python .claude/skills/bmad-commands/scripts/run_tests.py \ --path . \ --framework auto \ --output json
Verify:
- •JSON output is valid
- •Exit code is 0 for success, 1 for failure
- •Telemetry data is present
- •Errors are structured
Extending Commands
To add new commands:
- •Create
scripts/<command_name>.py - •Follow the standard response format
- •Add command contract to
references/command-contracts.yaml - •Update this SKILL.md with usage documentation
- •Make script executable:
chmod +x scripts/<command_name>.py - •Test independently before integrating
Philosophy
Commands are the foundation layer of BMAD's 3-layer architecture:
- •Commands (this skill): Atomic, testable primitives
- •Skills: Compose commands into workflows
- •Subagents: Orchestrate skills with routing and guardrails
By keeping commands deterministic and testable, we enable:
- •Unit testing of the framework itself
- •Reliable skill composition
- •Observable workflows
- •Production-ready operations
Utility Scripts
In addition to command primitives, this skill includes utility scripts for UX and system management:
bmad-wizard.py
Interactive command wizard to help users find the right command for their task.
Usage:
python .claude/skills/bmad-commands/scripts/bmad-wizard.py python .claude/skills/bmad-commands/scripts/bmad-wizard.py --list-all python .claude/skills/bmad-commands/scripts/bmad-wizard.py --subagent alex
Features:
- •Goal-based recommendations
- •Interactive command selection
- •Browse all commands
- •Filter by subagent
Documentation: See docs/UX-IMPROVEMENTS-GUIDE.md
error-handler.py
Professional error handling system with structured errors and remediation guidance.
Usage:
python .claude/skills/bmad-commands/scripts/error-handler.py
Features:
- •10 predefined error templates
- •Structured error format
- •Remediation steps
- •Color-coded severity levels
- •JSON output support
Documentation: See docs/UX-IMPROVEMENTS-GUIDE.md
progress-visualizer.py
Real-time progress tracking for workflows with multiple visualization styles.
Usage:
python .claude/skills/bmad-commands/scripts/progress-visualizer.py
Features:
- •7-step workflow tracking
- •4 visualization styles (bar, spinner, dots, minimal)
- •ETA calculation
- •Elapsed time tracking
- •Real-time updates
Documentation: See docs/UX-IMPROVEMENTS-GUIDE.md
monitor-skills.py
Skill validation and monitoring tool for ensuring all skills are properly loaded.
Usage:
python .claude/skills/bmad-commands/scripts/monitor-skills.py python .claude/skills/bmad-commands/scripts/monitor-skills.py --validate-only python .claude/skills/bmad-commands/scripts/monitor-skills.py --category planning python .claude/skills/bmad-commands/scripts/monitor-skills.py --skill implement-feature python .claude/skills/bmad-commands/scripts/monitor-skills.py --json output.json
Features:
- •Discover and validate all skills
- •Check YAML frontmatter
- •Verify workflow steps
- •Export to JSON
- •Category filtering
Documentation: See docs/SKILL-LOADING-MONITORING.md
health-check.sh
Quick health check to validate system configuration and skill loading.
Usage:
./.claude/skills/bmad-commands/scripts/health-check.sh
Features:
- •Check project structure
- •Validate skills by category
- •Check Python environment
- •Validate required packages
- •Check configuration
- •Disk space check
Documentation: See docs/SKILL-LOADING-MONITORING.md
deploy-to-project.sh
Smart deployment script for deploying BMAD Enhanced to other projects.
Usage:
./.claude/skills/bmad-commands/scripts/deploy-to-project.sh <target-directory> ./.claude/skills/bmad-commands/scripts/deploy-to-project.sh --full <target-directory> ./.claude/skills/bmad-commands/scripts/deploy-to-project.sh --dry-run <target-directory>
Features:
- •Minimal or full deployment modes
- •Dry-run mode
- •Force overwrite option
- •Symlink support for full mode
- •Post-deployment instructions
Documentation: See docs/DEPLOYMENT-TO-PROJECTS.md