""" Hybrid Communication Flows Example This example demonstrates advanced communication patterns in Agency Swarm by combining two different communication mechanisms: SendMessage tools and handoffs. ## Agents and Their Roles - **ProjectManager**: Coordinates projects using custom context-aware messaging - **Developer**: Implements features and transfers to security expert when needed - **SecurityExpert**: Performs security audits and vulnerability assessments ## Communication Flow The agency demonstrates a real-world software development workflow: 1. ProjectManager delegates tasks with project context and priority 2. Developer implements features and reviews code quality 3. Developer can transfer to SecurityExpert for security-sensitive work 4. SecurityExpert performs audits and returns findings ## Usage Run this example with: python examples/hybrid_communication_flows.py It will open the TUI for the agency, where you can interact with the agency. Ask ProjectManager to implement a new feature with code quality review and security audit. For example, you can use the following input query: ''' We need to implement a user authentication system for our web application. This is a high priority item for our security review phase. Please implement the feature and ensure it meets security standards. ''' """ import logging import os import sys # Path setup so the example can be run standalone sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "src"))) from pydantic import Field from agency_swarm import Agency, Agent, ModelSettings, function_tool from agency_swarm.tools.send_message import Handoff, SendMessage # Setup logging logging.basicConfig(level=logging.WARNING) logging.getLogger("agency_swarm").setLevel( logging.DEBUG if os.getenv("DEBUG_LOGS", "False").lower() == "true" else logging.WARNING ) # Define tools for the agents @function_tool def review_code_quality(code_snippet: str) -> str: """Review code for quality, best practices, and potential improvements.""" return f"Code quality review complete for {len(code_snippet)} characters. Found 2 minor improvements: variable naming and error handling." @function_tool def implement_feature(feature_name: str) -> str: """Implement a software feature with basic structure.""" return f"Feature '{feature_name}' implemented with authentication middleware, input validation, and error handling." @function_tool def security_audit(component: str) -> str: """Perform comprehensive security audit of a component.""" return f"Security audit complete for {component}. Found: 1 SQL injection vulnerability, 2 XSS risks, authentication bypass potential. Recommendations provided." @function_tool def vulnerability_scan(target: str) -> str: """Scan for known vulnerabilities and security weaknesses.""" return f"Vulnerability scan of {target} complete. Detected 3 medium-risk issues: outdated dependencies, weak encryption, missing rate limiting." # Custom SendMessage that adds project context class SendMessageWithProjectContext(SendMessage): """SendMessage with project context tracking.""" tool_name = "send_message_with_context" project_phase: str = Field( description=( "Current phase of the project (planning, development, testing, security_review, deployment). " "This helps the recipient understand the urgency and focus area for their response." ) ) priority_level: str = Field( description=( "Priority level of this task. Critical items need immediate attention, " "high priority items should be completed within the day." ) ) project_manager = Agent( name="ProjectManager", description="Coordinates software development projects and ensures quality delivery", instructions=( "You are a Project Manager responsible for coordinating software development projects. " "Your role is to delegate tasks, track progress, and ensure deliverables meet requirements. " "When delegating work, always specify the project phase and priority level. " "CRITICAL: When you receive responses from team members, include their complete " "findings and recommendations in your final output to maintain transparency." ), model_settings=ModelSettings(temperature=0), ) developer = Agent( name="Developer", description="Software developer who implements features and coordinates with security experts", instructions=( "You are a Senior Developer responsible for implementing software features. " "You have access to code quality review and feature implementation tools. " "When working on security-sensitive features, you must consult the SecurityExpert using handoff (transfer) tool. " "Always provide detailed technical responses including any tool outputs. " "When performing handoffs, transfer complete context including all technical details." ), tools=[review_code_quality, implement_feature], model_settings=ModelSettings(temperature=0), ) security_expert = Agent( name="SecurityExpert", description="Security specialist who performs audits and vulnerability assessments", instructions=( "You are a Security Expert specializing in application security audits. " "You have access to security audit and vulnerability scanning tools. " "Provide comprehensive security assessments with specific recommendations. " "Always run appropriate security tools and include complete findings in your response. " "Focus on practical, actionable security improvements." ), tools=[security_audit, vulnerability_scan], model_settings=ModelSettings(temperature=0), ) agency = Agency( project_manager, communication_flows=[ (project_manager > developer > security_expert, Handoff), ], shared_instructions="Focus on delivering secure, high-quality software. Use project context to prioritize work.", ) if __name__ == "__main__": agency.tui()