14 KiB
14 KiB
Agent Messenger Protocol
Inter-Persona Communication System for Claude Code Integration
The Agent Messenger enables seamless communication between BMAD personas when working within Claude Code, allowing for collaborative problem-solving and knowledge sharing.
Message Format Specification
Standard Message Structure
message:
header:
id: "{uuid}"
timestamp: "{iso-8601}"
sender: "{persona-name}"
recipients: ["{persona-names}"]
type: "consultation|broadcast|response|escalation"
priority: "critical|high|normal|low"
context:
project_phase: "{discovery|design|implementation|testing|deployment}"
task_id: "{task-identifier}"
related_artifacts: ["{file-paths}"]
claude_code_session: "{session-context}"
body:
subject: "{message-subject}"
content: "{message-content}"
required_expertise: ["{expertise-areas}"]
response_deadline: "{iso-8601}"
claude_tools_used: ["{tool-names}"]
metadata:
thread_id: "{conversation-thread}"
parent_message: "{parent-id}"
tags: ["{relevant-tags}"]
claude_code_context: "{current-workspace}"
Communication Patterns for Claude Code
1. Multi-Tool Consultation Pattern
async def consult_multiple_personas_with_tools(problem_context):
"""
Consult multiple personas using Claude Code tools for comprehensive analysis
"""
# Architect consultation using code analysis tools
architect_consultation = {
'message_type': 'consultation',
'sender': 'orchestrator',
'recipient': 'architect',
'context': problem_context,
'request': {
'analyze_files': await glob_pattern_files("**/*.{ts,tsx}"),
'assess_architecture': await read_architecture_files(),
'recommend_patterns': 'based_on_codebase_analysis'
}
}
# Security consultation using security scanning tools
security_consultation = {
'message_type': 'consultation',
'sender': 'orchestrator',
'recipient': 'security',
'context': problem_context,
'request': {
'scan_vulnerabilities': await grep_security_patterns(),
'assess_dependencies': await analyze_package_json(),
'recommend_fixes': 'prioritized_by_risk'
}
}
# QA consultation using testing tools
qa_consultation = {
'message_type': 'consultation',
'sender': 'orchestrator',
'recipient': 'qa',
'context': problem_context,
'request': {
'analyze_test_coverage': await run_coverage_report(),
'identify_test_gaps': await analyze_test_files(),
'recommend_testing': 'comprehensive_strategy'
}
}
# Send consultations in parallel using Claude Code's concurrent capabilities
responses = await asyncio.gather(
send_persona_consultation(architect_consultation),
send_persona_consultation(security_consultation),
send_persona_consultation(qa_consultation)
)
# Synthesize responses for unified recommendation
unified_response = synthesize_persona_responses(responses)
return unified_response
async def collaborative_code_review(file_paths):
"""
Coordinate multi-persona code review using Claude Code tools
"""
# Read files for analysis
file_contents = await asyncio.gather(*[
claude_code_read(file_path) for file_path in file_paths
])
# Create collaboration workspace
collaboration_session = {
'session_id': generate_uuid(),
'participants': ['architect', 'security', 'qa', 'dev'],
'files_under_review': file_paths,
'review_criteria': ['architecture', 'security', 'quality', 'performance']
}
# Coordinate parallel review by each persona
review_requests = []
for persona in collaboration_session['participants']:
review_request = create_review_request(
persona,
file_contents,
collaboration_session
)
review_requests.append(review_request)
# Execute reviews in parallel
review_responses = await asyncio.gather(*[
execute_persona_review(request) for request in review_requests
])
# Consolidate reviews and identify consensus/conflicts
consolidated_review = consolidate_review_feedback(
review_responses,
collaboration_session
)
# Generate unified review report using Write tool
await write_review_report(consolidated_review, file_paths)
return consolidated_review
2. Progressive Problem-Solving Pattern
async def progressive_problem_solving(initial_problem):
"""
Solve complex problems through progressive persona engagement
"""
solution_context = {
'problem': initial_problem,
'current_phase': 'analysis',
'accumulated_insights': [],
'next_steps': []
}
# Phase 1: Analyst examines the problem
analyst_insights = await engage_persona('analyst', {
'task': 'problem_analysis',
'context': solution_context,
'tools_available': ['WebSearch', 'Read', 'Task'],
'deliverable': 'comprehensive_problem_breakdown'
})
solution_context['accumulated_insights'].append(analyst_insights)
solution_context['current_phase'] = 'design'
# Phase 2: Architect designs solution based on analysis
architect_design = await engage_persona('architect', {
'task': 'solution_design',
'context': solution_context,
'previous_insights': analyst_insights,
'tools_available': ['Write', 'Edit', 'MultiEdit'],
'deliverable': 'technical_architecture'
})
solution_context['accumulated_insights'].append(architect_design)
solution_context['current_phase'] = 'validation'
# Phase 3: Security validates the design
security_validation = await engage_persona('security', {
'task': 'security_validation',
'context': solution_context,
'previous_insights': [analyst_insights, architect_design],
'tools_available': ['Grep', 'Bash', 'WebFetch'],
'deliverable': 'security_assessment'
})
solution_context['accumulated_insights'].append(security_validation)
solution_context['current_phase'] = 'implementation'
# Phase 4: Developer implements with QA oversight
implementation_plan = await collaborative_implementation(
solution_context,
['dev', 'qa']
)
return {
'solution_path': solution_context,
'final_implementation': implementation_plan,
'quality_assurance': 'multi_persona_validated'
}
Message Priority and Routing
Intelligent Message Routing
routing_strategy:
priority_based_routing:
critical_messages:
- immediate_delivery: "Interrupt current task"
- all_hands_notification: "Alert all relevant personas"
- escalation_chain: "Notify management personas"
high_priority:
- fast_track_processing: "Priority queue handling"
- relevant_persona_notification: "Alert specific experts"
- context_preservation: "Maintain full context"
normal_priority:
- standard_processing: "Regular queue handling"
- context_aware_delivery: "Deliver when persona available"
- batch_similar_messages: "Group related communications"
expertise_based_routing:
automatic_routing:
- security_questions: "Route to security persona"
- performance_issues: "Route to architect and qa"
- user_experience: "Route to design-architect"
- deployment_problems: "Route to platform-engineer"
multi_expert_consultation:
- complex_decisions: "Engage multiple relevant experts"
- conflicting_requirements: "Mediated discussion"
- innovation_opportunities: "Creative collaboration"
Context-Aware Communication
Claude Code Context Integration
async def context_aware_message_handling():
"""
Handle messages with full awareness of Claude Code context
"""
# Get current Claude Code workspace context
current_context = {
'active_files': await get_currently_open_files(),
'recent_commands': await get_recent_tool_usage(),
'project_structure': await analyze_project_structure(),
'git_status': await get_git_status(),
'todo_context': await get_current_todos()
}
# Enhance message routing with context
def enhance_message_with_context(message):
message['claude_code_context'] = current_context
message['relevant_files'] = identify_relevant_files(
message['content'],
current_context['active_files']
)
message['suggested_tools'] = suggest_tools_for_message(
message['content'],
current_context['recent_commands']
)
return message
# Process incoming messages with context awareness
async def process_contextual_message(message):
enhanced_message = enhance_message_with_context(message)
# Route to appropriate persona with full context
persona_response = await route_to_persona(
enhanced_message['recipient'],
enhanced_message
)
# Include context in response for better continuity
persona_response['context_continuation'] = maintain_context_continuity(
enhanced_message,
persona_response
)
return persona_response
return process_contextual_message
Error Handling and Recovery
Robust Communication Patterns
error_handling:
message_delivery_failures:
retry_mechanisms:
- exponential_backoff: "Increasing delays between retries"
- circuit_breaker: "Prevent cascade failures"
- alternative_routing: "Try different delivery paths"
fallback_strategies:
- degrade_gracefully: "Provide partial functionality"
- queue_for_later: "Retry when conditions improve"
- manual_intervention: "Alert user to communication failure"
persona_unavailability:
substitution_strategies:
- similar_expertise: "Route to persona with overlapping skills"
- collaborative_replacement: "Multiple personas cover missing expert"
- knowledge_base_lookup: "Provide stored expertise"
context_corruption:
recovery_mechanisms:
- context_reconstruction: "Rebuild from available information"
- partial_context_warning: "Inform about missing information"
- fresh_context_request: "Ask for context reestablishment"
Integration with Claude Code TodoWrite System
Enhanced Todo-Based Coordination
async def coordinate_with_claude_todos(message, todo_context):
"""
Integrate persona communication with Claude Code's TodoWrite system
"""
# Analyze message for todo implications
todo_implications = analyze_message_for_todos(message)
if todo_implications['creates_tasks']:
# Create todos for identified tasks
new_todos = []
for task in todo_implications['tasks']:
todo_item = {
'id': generate_uuid(),
'content': task['description'],
'status': 'pending',
'priority': task['priority'],
'assigned_persona': task['best_suited_persona'],
'dependencies': task.get('dependencies', []),
'message_thread': message['thread_id']
}
new_todos.append(todo_item)
# Update Claude Code todos
await claude_code_todo_write(new_todos)
# Notify relevant personas about their assignments
for todo in new_todos:
await notify_persona_of_assignment(
todo['assigned_persona'],
todo,
message['thread_id']
)
if todo_implications['updates_status']:
# Update existing todo status based on message content
todo_updates = todo_implications['status_updates']
await update_todos_from_message(todo_updates, message)
return {
'todos_created': todo_implications.get('creates_tasks', False),
'todos_updated': todo_implications.get('updates_status', False),
'coordination_complete': True
}
Communication Commands for Claude Code
# Inter-persona communication commands
bmad message send --to "architect" --subject "API design review" --priority "high"
bmad collaborate --personas "architect,security,qa" --task "feature-implementation"
bmad consult --expert "security" --about "authentication-strategy"
# Communication management
bmad messages list --unread --persona "current"
bmad conversation --thread-id "uuid" --show-history
bmad broadcast --all-personas --message "project-update"
# Context-aware communication
bmad discuss --file "src/api/auth.ts" --with "security,architect"
bmad review --collaborative --files "src/**/*.ts"
bmad handoff --from "design" --to "development" --context "feature-spec"
This Agent Messenger system transforms Claude Code into a collaborative environment where multiple AI personas can work together seamlessly, each contributing their specialized expertise while maintaining awareness of the development context and tool usage.