{"id":36442367,"url":"https://github.com/danilop/strands-a2a-demo","last_synced_at":"2026-02-12T17:35:16.875Z","repository":{"id":333346897,"uuid":"1016144269","full_name":"danilop/strands-a2a-demo","owner":"danilop","description":"Demo with multiple AI agents using A2A (agent-to-agent) with the Strands Agents SDK.","archived":false,"fork":false,"pushed_at":"2025-07-16T14:35:53.000Z","size":199,"stargazers_count":15,"open_issues_count":1,"forks_count":3,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-19T01:50:21.618Z","etag":null,"topics":["a2a","agent-to-agent","demo","generative-ai","multi-agent","python","strands-agents"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/danilop.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-07-08T14:54:00.000Z","updated_at":"2025-12-16T11:48:20.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/danilop/strands-a2a-demo","commit_stats":null,"previous_names":["danilop/strands-a2a-demo"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/danilop/strands-a2a-demo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danilop%2Fstrands-a2a-demo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danilop%2Fstrands-a2a-demo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danilop%2Fstrands-a2a-demo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danilop%2Fstrands-a2a-demo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/danilop","download_url":"https://codeload.github.com/danilop/strands-a2a-demo/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danilop%2Fstrands-a2a-demo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29374128,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-12T08:51:36.827Z","status":"ssl_error","status_checked_at":"2026-02-12T08:51:26.849Z","response_time":55,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["a2a","agent-to-agent","demo","generative-ai","multi-agent","python","strands-agents"],"created_at":"2026-01-11T22:00:18.247Z","updated_at":"2026-02-12T17:35:16.868Z","avatar_url":"https://github.com/danilop.png","language":"Python","funding_links":[],"categories":["Community Projects"],"sub_categories":["For PyPI Packages"],"readme":"# Strands A2A Demo\n\nThis demo showcases multiple AI agents using the **complete official A2A (agent-to-agent) Python SDK patterns** from [google-a2a/a2a-samples](https://github.com/google-a2a/a2a-samples). The agents use the [Strands Agents Python SDK](https://strands-agents.com) for their LLM implementation, fully integrated with the official A2A SDK patterns.\n\n**About A2A Protocol**: The [A2A (Agent-to-Agent) Protocol](https://google.github.io/A2A/) was originally developed by Google and is now being [transitioned to the Linux Foundation](https://blog.google/technology/ai/google-a2a-protocol-linux-foundation/) to ensure open governance and broad industry adoption for multi-agent AI systems.\n\n\u003e **📋 Implementation Note**: This project currently uses the official A2A Python SDK directly alongside Strands Agents SDK. It does **not** use the new native A2A support that may be available in newer versions of Strands Agents. This approach demonstrates how to integrate both SDKs manually for maximum control and compatibility with official A2A patterns.\n\nThis project features a unified `a2a-client` with multiple modes of operation, including web-based UI, voice interaction capabilities, and comprehensive testing.\n\n## 🏗️ Agent Architecture\n\nThis system features **two distinct types of agents**, both configurable through `config/config.toml`:\n\n### 🔧 **Individual Agents** (`configurable_agent`)\nSpecialized agents that perform specific tasks using tools:\n- **Strands Tools**: Built-in capabilities like `calculator`, `current_time`, `file_read`, `file_write`, `editor`\n- **MCP Servers**: External integrations via Model Context Protocol (e.g., web fetch, file systems)\n- **Direct Communication**: Can be contacted directly by clients\n- **Focused Expertise**: Each agent specializes in a particular domain\n\n**Examples**: Calculator agent (math operations), Time agent (timezone queries), File Editor agent (file operations), Web Browser agent (content fetching)\n\n### 🌀 **Coordinator Agents** (`coordinator_agent`) \nMeta-agents that orchestrate multiple individual agents:\n- **No Direct Tools**: Don't use Strands tools or MCP servers directly\n- **Agent Delegation**: Route requests to appropriate individual agents\n- **Workflow Management**: Handle complex multi-step operations across agents\n- **Intelligent Routing**: Analyze requests to determine which specialist agent(s) to use\n\n**Examples**: Time \u0026 Calculator coordinator (manages math and time requests), Edit \u0026 Browse coordinator (manages file and web operations)\n\n### 🔄 **How They Work Together**\n```\nUser Request → Coordinator Agent → Individual Agent(s) → Tools/MCP → Results → User\n```\n\nBoth types are automatically discovered and can be used through any client interface (web, CLI, voice).\n\n## 📋 Table of Contents\n\n- [Quick Start](#-quick-start)\n- [A2A Client Modes Overview](#️-a2a-client-modes-overview)\n- [Complete Tutorial](#-complete-tutorial)\n- [Architecture Overview](#️-architecture-overview)\n- [Configuration Guide](#️-configuration-guide)\n- [Agent Management](#-agent-management)\n- [Troubleshooting](#-troubleshooting)\n- [API Reference](#-api-reference)\n\n## 🚀 Quick Start\n\n### Prerequisites\n- **Python 3.12+**\n- **UV package manager** (extremely fast Python package manager)\n\nInstall UV if you don't have it:\n```bash\n# macOS and Linux\ncurl -LsSf https://astral.sh/uv/install.sh | sh\n\n# Windows\npowershell -c \"irm https://astral.sh/uv/install.ps1 | iex\"\n\n# Or visit: https://docs.astral.sh/uv/getting-started/installation/\n```\n\n### Installation\n\n```bash\n# Clone the repository\ngit clone \u003crepository-url\u003e\ncd strands-a2a-demo\n\n# Install dependencies with UV\nuv sync\n```\n\n### Start All Agents\n\n```bash\n# Start all configured agents (recommended)\nuv run a2a-client agents start\n\n# Wait for agents to be ready, then use the client\nuv run a2a-client web\n```\n\nOpen `http://localhost:8080` in your browser and start chatting with your agents!\n\n## 🖥️ A2A Client Modes Overview\n\nThe `a2a-client` provides five distinct modes for interacting with A2A agents:\n\n| Mode | Command | Purpose | Best For |\n|------|---------|---------|----------|\n| **`web`** | `uv run a2a-client web` | Modern browser-based UI | General use, demos, development |\n| **`interactive`** | `uv run a2a-client interactive` | Command-line chat interface | Quick testing, scripting |\n| **`speak`** | `uv run a2a-client speak --agent \u003cname\u003e` | CLI voice interaction | Voice testing, accessibility |\n| **`webspeak`** | `uv run a2a-client webspeak` | Browser-based voice UI | Voice demos, user-friendly voice |\n| **`test`** | `uv run a2a-client test` | Comprehensive test suite | Validation, CI/CD, debugging |\n\n## 📖 Complete Tutorial\n\n### Tutorial 1: Web Interface (Recommended for Beginners)\n\nThe web interface is the most user-friendly way to interact with A2A agents.\n\n#### Step 1: Start the Agents\n```bash\n# Start all configured agents\nuv run agents start\n\n# Verify agents are running\nuv run agents status\n```\n\nYou should see output like:\n```\n✅ calculator (port 8001): Running (PID: 12345)\n✅ time (port 8002): Running (PID: 12346)\n✅ fileeditor (port 8003): Running (PID: 12347)\n✅ webbrowser (port 8004): Running (PID: 12348)\n✅ time-and-calculator (port 8005): Running (PID: 12349)\n✅ edit-and-browse (port 8006): Running (PID: 12350)\n```\n\n#### Step 2: Launch Web Interface\n```bash\n# Start the web interface (default port 8080)\nuv run a2a-client web\n\n# Or specify a custom port\nuv run a2a-client web --port 3000 --host 0.0.0.0\n```\n\n#### Step 3: Use the Interface\n1. Open `http://localhost:8080` in your browser\n2. You'll see a list of available agents with their capabilities\n3. Select an agent from the dropdown\n4. Type your message and press Enter or click Send\n5. Watch real-time responses appear in the chat\n\n#### Example Conversations:\n```\n👤 User: \"What's 25 * 47?\"\n🤖 Calculator: \"25 × 47 = 1,175\"\n\n👤 User: \"What time is it in Tokyo?\"\n🤖 Time: \"The current time in Tokyo is 2:30 PM JST (Japan Standard Time)\"\n\n👤 User: \"Create a file called hello.txt with 'Hello World'\"\n🤖 File Editor: \"✅ Created file hello.txt with content: 'Hello World'\"\n```\n\n### Tutorial 2: Interactive CLI Mode\n\nPerfect for developers and command-line users.\n\n#### Basic Usage\n```bash\n# Start interactive mode\nuv run a2a-client interactive\n\n# Start with a specific agent\nuv run a2a-client interactive --agent calculator\n\n# Use task-based communication (with push notifications)\nuv run a2a-client interactive --use-tasks\n```\n\n#### Step-by-Step Walkthrough:\n```bash\n# 1. Start interactive mode\nuv run a2a-client interactive\n\n# You'll see:\n🎭 A2A Interactive Mode (Messages)\n==================================================\n📋 Available Agents:\n  • calculator: Mathematical calculation specialist\n  • time: Time and timezone information specialist\n  ...\n\n# 2. Select an agent by typing its name\nSelect an agent (or 'list' to see all, 'quit' to exit): calculator\n\n# 3. Chat with the agent\n💬 Chat with calculator (type 'back' to change agents, 'quit' to exit)\nYou: What's the square root of 144?\n\n🤖 calculator: The square root of 144 is 12.\n\nYou: Calculate 15% tip on $50.75\n🤖 calculator: 15% tip on $50.75 is $7.61. Total with tip: $58.36\n```\n\n#### Advanced CLI Features:\n```bash\n# Send a single message and exit\nuv run a2a-client interactive --agent calculator --send \"What's 100 * 25?\"\n\n# Use asynchronous tasks (better for complex operations)\nuv run a2a-client interactive --use-tasks --agent fileeditor\n```\n\n### Tutorial 3: Voice Interaction (Speak Mode)\n\nVoice interaction using Amazon Nova Sonic for speech-to-text and text-to-speech.\n\n#### Prerequisites:\n- AWS credentials configured (for Nova Sonic)\n- Audio input/output devices\n\n#### Setup AWS Credentials:\n```bash\n# Option 1: AWS CLI\naws configure\n\n# Option 2: Environment variables\nexport AWS_ACCESS_KEY_ID=your_access_key\nexport AWS_SECRET_ACCESS_KEY=your_secret_key\nexport AWS_DEFAULT_REGION=us-east-1\n\n# Option 3: IAM role (for EC2 instances)\n# No additional setup needed\n```\n\n#### Using Speak Mode:\n```bash\n# Start voice interaction with an agent\nuv run a2a-client speak --agent calculator\n\n# Disable echo cancellation if using headphones\nuv run a2a-client speak --agent time --disable-echo-cancellation\n```\n\n#### Voice Interaction Flow:\n1. **Start speaking** - The system listens for your voice\n2. **Speech-to-text** - Your speech is converted to text using Nova Sonic\n3. **Agent processing** - The agent processes your request\n4. **Text-to-speech** - The response is converted to speech\n5. **Audio playback** - You hear the agent's response\n\n#### Example Voice Session:\n```\n🎤 Voice mode started with calculator\n🔊 Say something to the agent (press Ctrl+C to exit)\n\n[You speak]: \"What is twenty five times forty seven?\"\n📝 Transcription: \"What is 25 times 47?\"\n🤖 calculator: \"25 times 47 equals 1,175\"\n🔊 [Audio plays]: \"Twenty five times forty seven equals one thousand one hundred seventy five\"\n```\n\n### Tutorial 4: WebSpeak Interface\n\nBrowser-based voice interaction - combines the convenience of the web interface with voice capabilities.\n\n#### Starting WebSpeak:\n```bash\n# Start WebSpeak interface (default port 3000)\nuv run a2a-client webspeak\n\n# Custom port and host\nuv run a2a-client webspeak --port 8090 --host 0.0.0.0\n```\n\n#### Using WebSpeak:\n1. Open `http://localhost:3000` in your browser\n2. Allow microphone permissions when prompted\n3. Select an agent from the dropdown\n4. Click the microphone button to start speaking\n5. See real-time transcription and responses\n6. Hear audio responses automatically\n\n#### WebSpeak Features:\n- **Real-time transcription** - See your speech converted to text\n- **Visual feedback** - Watch the conversation flow in the browser\n- **Agent switching** - Change agents without restarting\n- **Audio controls** - Mute, volume control, playback speed\n- **WebRTC processing** - Client-side audio processing for better quality\n\n### Tutorial 5: Testing Mode\n\nComprehensive testing suite to validate all agent functionality.\n\n#### Basic Testing:\n```bash\n# Test all agents\nuv run a2a-client test\n\n# Test specific agent\nuv run a2a-client test --agent calculator\nuv run a2a-client test --agent time-and-calculator\n```\n\n#### Test Types Performed:\n1. **Agent Discovery** - Verify agents are reachable and respond\n2. **Skill Detection** - Check agent capabilities and skill descriptions\n3. **Message Communication** - Test immediate request/response\n4. **Task Communication** - Test asynchronous tasks with push notifications\n5. **Coordinator Testing** - Test agent-to-agent delegation\n\n#### Sample Test Output:\n```\n🧪 A2A Client Test Suite\n========================\n\n🔍 Discovering agents...\n✅ Found 6 agents: calculator, time, fileeditor, webbrowser, time-and-calculator, edit-and-browse\n\n🎯 Testing agent skills and descriptions...\n✅ calculator: Advanced mathematical calculation agent\n   Skills: calculate (Perform mathematical calculations and solve equations)\n✅ time: Accurate time and timezone information agent  \n   Skills: get_current_time (Get current time and timezone information)\n\n📨 Testing message communication...\n✅ calculator: Responded to 'What is 12 * 8?' with '12 × 8 = 96'\n✅ time: Responded to 'What time is it?' with 'Current time: 2:30 PM EST'\n\n🚀 Testing task communication with push notifications...\n✅ calculator: Task completed with result: '√144 = 12'\n✅ time: Task completed with result: 'Current UTC time: 19:30:15'\n\n📊 Test Summary:\n   • Agent Discovery: ✅ 6/6 passed\n   • Message Tests: ✅ 6/6 passed  \n   • Task Tests: ✅ 6/6 passed\n   • Push Notifications: ✅ 6/6 passed\n```\n\n## 🏗️ Architecture Overview\n\n### System Architecture\n\n```mermaid\ngraph TB\n    subgraph \"Client Layer\"\n        WEB[Web Interface\u003cbr/\u003ePort 8080]\n        CLI[Interactive CLI]\n        VOICE[Voice Interface]\n        WEBSPEAK[WebSpeak Interface\u003cbr/\u003ePort 3000]\n        TEST[Test Suite]\n    end\n    \n    subgraph \"A2A Client Core\"\n        A2ACLIENT[A2A Client\u003cbr/\u003eCleanA2AClient]\n        WEBHOOK[Webhook Manager\u003cbr/\u003ePort 8000]\n        DISCOVERY[Agent Discovery]\n    end\n    \n    subgraph \"Coordinator Agents\"\n        COORD1[Time \u0026 Calculator\u003cbr/\u003eCoordinator\u003cbr/\u003ePort 8005]\n        COORD2[Edit \u0026 Browse\u003cbr/\u003eCoordinator\u003cbr/\u003ePort 8006]\n    end\n    \n    subgraph \"Individual Agents\"\n        CALC[Calculator Agent\u003cbr/\u003ePort 8001\u003cbr/\u003eStrands Tools]\n        TIME[Time Agent\u003cbr/\u003ePort 8002\u003cbr/\u003eStrands Tools]\n        FILE[File Editor Agent\u003cbr/\u003ePort 8003\u003cbr/\u003eStrands Tools]\n        WEB_AGENT[Web Browser Agent\u003cbr/\u003ePort 8004\u003cbr/\u003eMCP Server]\n    end\n    \n    subgraph \"External Services\"\n        NOVA[Amazon Nova\u003cbr/\u003eSpeech Services]\n        MCP[MCP Servers\u003cbr/\u003efetch, filesystem]\n        STRANDS[Strands Tools\u003cbr/\u003ecalculator, time, file_ops]\n    end\n    \n    WEB --\u003e A2ACLIENT\n    CLI --\u003e A2ACLIENT\n    VOICE --\u003e A2ACLIENT\n    WEBSPEAK --\u003e A2ACLIENT\n    TEST --\u003e A2ACLIENT\n    \n    A2ACLIENT --\u003e WEBHOOK\n    A2ACLIENT --\u003e DISCOVERY\n    \n    A2ACLIENT --\u003e COORD1\n    A2ACLIENT --\u003e COORD2\n    A2ACLIENT --\u003e CALC\n    A2ACLIENT --\u003e TIME\n    A2ACLIENT --\u003e FILE\n    A2ACLIENT --\u003e WEB_AGENT\n    \n    COORD1 --\u003e CALC\n    COORD1 --\u003e TIME\n    COORD2 --\u003e FILE\n    COORD2 --\u003e WEB_AGENT\n    \n    VOICE --\u003e NOVA\n    WEBSPEAK --\u003e NOVA\n    \n    WEB_AGENT --\u003e MCP\n    CALC --\u003e STRANDS\n    TIME --\u003e STRANDS\n    FILE --\u003e STRANDS\n```\n\n### Architecture Components\n\n#### Client Layer\n- **Web Interface**: Modern browser-based UI with real-time WebSocket communication\n- **Interactive CLI**: Command-line interface for direct agent interaction\n- **Voice Interface**: CLI-based voice interaction using Amazon Nova\n- **WebSpeak Interface**: Browser-based voice interaction with WebRTC\n- **Test Suite**: Comprehensive testing framework for all agents\n\n#### A2A Client Core\n- **CleanA2AClient**: Core A2A SDK integration with connection management\n- **Webhook Manager**: Handles push notifications for asynchronous tasks\n- **Agent Discovery**: Dynamic discovery of available agents and their capabilities\n\n#### Agent Types\n- **Individual Agents**: Specialized agents for specific tasks\n- **Coordinator Agents**: Meta-agents that delegate tasks to individual agents\n\n#### Integration Points\n- **Strands Tools**: Native Python tools for calculator, time, and file operations\n- **MCP Servers**: Model Context Protocol servers for external integrations\n- **Amazon Nova**: Speech-to-text and text-to-speech services\n\n### A2A Task Webhook Sequence\n\n```mermaid\nsequenceDiagram\n    participant Client as A2A Client\n    participant Webhook as Webhook Manager\u003cbr/\u003e(Port 8000)\n    participant Agent as A2A Agent\u003cbr/\u003e(Port 800X)\n    participant Nova as Amazon Nova\u003cbr/\u003e(Speech Services)\n    \n    Note over Client,Nova: Task Creation \u0026 Push Notification Setup\n    \n    Client-\u003e\u003eWebhook: 1. Start webhook server\n    Webhook--\u003e\u003eClient: Server started\n    \n    Client-\u003e\u003eAgent: 2. Send task request\n    Agent--\u003e\u003eClient: Task created (ID: task-123)\n    \n    Client-\u003e\u003eAgent: 3. Register push notification\n    Note right of Client: POST /api/a2a/tasks/task-123/push-config\u003cbr/\u003e{\"url\": \"http://localhost:8000/webhook/a2a-tasks\"}\n    Agent--\u003e\u003eClient: Push notification registered\n    \n    Note over Client,Nova: Asynchronous Task Processing\n    \n    Agent-\u003e\u003eAgent: 4. Process task asynchronously\n    Note right of Agent: Agent uses Strands tools\u003cbr/\u003eor MCP servers\n    \n    Agent-\u003e\u003eWebhook: 5. Push notification\n    Note right of Agent: POST /webhook/a2a-tasks\u003cbr/\u003eComplete Task object with result\n    \n    Webhook-\u003e\u003eClient: 6. Execute callback\n    Client--\u003e\u003eWebhook: Callback executed\n    \n    Note over Client,Nova: Voice Mode Additional Steps (if applicable)\n    \n    opt Voice Mode\n        Client-\u003e\u003eNova: 7. Text-to-speech\n        Nova--\u003e\u003eClient: Audio response\n        Client-\u003e\u003eClient: 8. Play audio\n    end\n    \n    Webhook-\u003e\u003eWebhook: 9. Cleanup task tracking\n```\n\n### Message vs Task Communication\n\n#### Message Communication (Synchronous)\n```mermaid\nsequenceDiagram\n    participant Client as A2A Client\n    participant Agent as A2A Agent\n    \n    Client-\u003e\u003eAgent: Send message request\n    Agent-\u003e\u003eAgent: Process immediately\n    Agent--\u003e\u003eClient: Return response\n    Note right of Client: Best for: Simple queries,\u003cbr/\u003eimmediate responses\n```\n\n#### Task Communication (Asynchronous)\n```mermaid\nsequenceDiagram\n    participant Client as A2A Client\n    participant Agent as A2A Agent\n    participant Webhook as Webhook Server\n    \n    Client-\u003e\u003eAgent: Send task request\n    Agent--\u003e\u003eClient: Return task ID immediately\n    \n    Client-\u003e\u003eAgent: Register push notification\n    Agent-\u003e\u003eAgent: Process task asynchronously\n    Agent-\u003e\u003eWebhook: Send task completion\n    Webhook-\u003e\u003eClient: Execute callback\n    Note right of Client: Best for: Complex operations,\u003cbr/\u003elong-running tasks\n```\n\n### Agent Coordination Flow\n\n```mermaid\ngraph TD\n    A[User Request] --\u003e B{Coordinator Agent}\n    B --\u003e C[Analyze Request]\n    C --\u003e D{Determine Specialist}\n    D --\u003e E[Calculator Agent]\n    D --\u003e F[Time Agent]\n    D --\u003e G[File Editor Agent]\n    D --\u003e H[Web Browser Agent]\n    E --\u003e I[Return Result]\n    F --\u003e I\n    G --\u003e I\n    H --\u003e I\n    I --\u003e J[Format Response]\n    J --\u003e K[Return to User]\n```\n\u003c/code_block_to_apply_changes_from\u003e\n\u003c/invoke\u003e\n\u003c/function_calls\u003e\n\n## ⚙️ Configuration Guide\n\n### Configuration File Structure\n\nAll agents are configured through `config/config.toml`. This single file defines:\n- Agent types and capabilities\n- Port assignments\n- Tool integrations\n- Coordinator relationships\n\n#### Basic Structure\n```toml\n[logging]\nlevel = \"INFO\"\nlog_directory = \"./logs\"\n\n[webhook]\nport = 8000\nhost = \"0.0.0.0\"\n\n[web_interface]\nport = 8080\nhost = \"0.0.0.0\"\nwebspeak_port = 8081\n\n[agents]\nmodel = \"us.amazon.nova-lite-v1:0\"\n\n# Individual agents\n[configurable_agent.agent_name]\n# ... agent configuration\n\n# Coordinator agents  \n[coordinator_agent.coordinator_name]\n# ... coordinator configuration\n```\n\n### Individual Agent Configuration\n\n```toml\n[configurable_agent.myagent]\ndescription = \"Description of what this agent does\"\nport = 8001                                    # Unique port number\nsystem_prompt = \"You are a helpful assistant...\"\nstrands_tools = [\"calculator\", \"current_time\"] # Optional Strands tools\n\n# Optional MCP server integrations\n[configurable_agent.myagent.mcp_servers]\nfetch = { command = \"uvx\", args = [\"mcp-server-fetch\"] }\n```\n\n**Required Fields:**\n- `description`: Human-readable description\n- `port`: Unique port number (8001-8099 recommended for individual agents)\n- `system_prompt`: Agent behavior definition\n\n**Optional Fields:**\n- `strands_tools`: Array of Strands tool names\n- `mcp_servers`: MCP server configurations\n\n### Coordinator Agent Configuration\n\n```toml\n[coordinator_agent.mycoordinator]\ndescription = \"Coordinator that manages specific agents\"\nport = 8000\nsystem_prompt = \"You are a coordinator agent...\"\ncoordinated_agents = [\"agent1\", \"agent2\"]  # Agents this coordinator manages\n```\n\n### Available Strands Tools\n\n| Tool | Purpose | Example Use |\n|------|---------|-------------|\n| `calculator` | Mathematical calculations | \"What's 25 * 47?\" |\n| `current_time` | Time and timezone info | \"What time is it in Tokyo?\" |\n| `editor` | File editing with changes | \"Edit line 5 of config.py\" |\n| `file_read` | Advanced file reading | \"Read the contents of README.md\" |\n| `file_write` | File writing operations | \"Create a new Python script\" |\n\n### MCP Server Integration\n\nMCP (Model Context Protocol) servers extend agent capabilities:\n\n```toml\n[configurable_agent.webbrowser.mcp_servers]\nfetch = { command = \"uvx\", args = [\"mcp-server-fetch\"] }\nfilesystem = { command = \"mcp-server-filesystem\", args = [\"/path/to/root\"] }\n```\n\nCommon MCP servers:\n- **fetch**: Web content retrieval\n- **filesystem**: File system operations\n- **sqlite**: Database interactions\n- **brave-search**: Web search capabilities\n\n### Port Management Strategy\n\n**Recommended Port Ranges:**\n- **8001-8099**: Individual configurable agents\n- **8000, 8100-8199**: Coordinator agents\n- **8000**: Webhook server (fixed)\n- **8080**: Web interface (default)\n- **3000**: WebSpeak interface (default)\n\n**Port Conflict Resolution:**\n```bash\n# Check what's using a port\nlsof -i :8001\n\n# Force start agents (kills existing processes)\nuv run agents start --force\n```\n\n### Example Complete Configuration\n\n```toml\n[logging]\nlevel = \"INFO\"\nlog_directory = \"./logs\"\n\n[webhook]\nport = 8000\nhost = \"0.0.0.0\"\n\n[agents]\nmodel = \"us.amazon.nova-lite-v1:0\"\n\n# Specialized math agent\n[configurable_agent.calculator]\ndescription = \"Advanced mathematical calculation specialist\"\nport = 8001\nsystem_prompt = \"You are a precise calculator. Solve problems step by step.\"\nstrands_tools = [\"calculator\"]\n\n[configurable_agent.calculator.mcp_servers]\n\n# Web research agent\n[configurable_agent.researcher]\ndescription = \"Web research and content analysis specialist\"\nport = 8004\nsystem_prompt = \"You are a research assistant. Find and analyze web content.\"\nstrands_tools = []\n\n[configurable_agent.researcher.mcp_servers]\nfetch = { command = \"uvx\", args = [\"mcp-server-fetch\"] }\nbrave_search = { command = \"uvx\", args = [\"mcp-server-brave-search\"] }\n\n# Multi-purpose coordinator\n[coordinator_agent.assistant]\ndescription = \"General purpose coordinator for math and research\"\nport = 8000\nsystem_prompt = \"You coordinate between math and research specialists.\"\ncoordinated_agents = [\"calculator\", \"researcher\"]\n```\n\n## 🔧 Agent Management\n\n### Starting and Stopping Agents\n\n#### Start All Agents (Recommended)\n```bash\n# Start all configured agents with dependency ordering\nuv run agents start\n\n# Force start (kills existing processes on ports)\nuv run agents start --force\n```\n\n#### Start Individual Agents\n```bash\n# Start specific configurable agent\nuv run agents start calculator\nuv run agents start time\nuv run agents start fileeditor\n\n# Start specific coordinator\nuv run agents start time-and-calculator\nuv run agents start edit-and-browse\n```\n\n#### Stop Agents\n```bash\n# Stop all agents\nuv run agents stop\n\n# Stop specific agent\nuv run agents stop calculator\nuv run agents stop time-and-calculator\n```\n\n#### Restart Agents\n```bash\n# Restart all agents\nuv run agents restart\n\n# Restart specific agent\nuv run agents restart calculator\n```\n\n#### Check Agent Status\n```bash\n# Check all agents\nuv run agents status\n\n# Check specific agent\nuv run agents status calculator\n```\n\nSample status output:\n```\n📊 Agent Status Report\n=====================\n\n✅ calculator (port 8001): Running (PID: 12345)\n   📍 URL: http://localhost:8001\n   🕐 Started: 2024-01-15 14:30:22\n   📝 Log: ./logs/calculator.log\n\n✅ time (port 8002): Running (PID: 12346)\n   📍 URL: http://localhost:8002\n   🕐 Started: 2024-01-15 14:30:23\n   📝 Log: ./logs/time.log\n\n❌ webbrowser (port 8004): Not running\n   📝 Log: ./logs/webbrowser.log\n```\n\n### Manual Agent Startup (Alternative)\n\nFor development or debugging, you can start agents manually:\n\n```bash\n# Individual configurable agents\nuv run configurable-agent calculator    # Port 8001\nuv run configurable-agent time          # Port 8002\nuv run configurable-agent fileeditor    # Port 8003\nuv run configurable-agent webbrowser    # Port 8004\n\n# Coordinator agents\nuv run coordinator-agent time-and-calculator  # Port 8005\nuv run coordinator-agent edit-and-browse      # Port 8006\n```\n\n### Agent Dependency Management\n\nThe system automatically manages agent dependencies:\n\n1. **Independent agents** start first (calculator, time, fileeditor, webbrowser)\n2. **Coordinator agents** start after their dependencies are ready\n3. **Health checks** ensure agents are ready before starting dependents\n\n### Log Management\n\nEach agent maintains its own log file in the `./logs/` directory:\n- `./logs/calculator.log` - Calculator agent logs\n- `./logs/time.log` - Time agent logs\n- `./logs/fileeditor.log` - File editor agent logs\n- `./logs/webbrowser.log` - Web browser agent logs\n- `./logs/time-and-calculator.log` - Time \u0026 calculator coordinator logs\n- `./logs/edit-and-browse.log` - Edit \u0026 browse coordinator logs\n\n#### Viewing Logs\n```bash\n# View real-time logs\ntail -f ./logs/calculator.log\n\n# View recent log entries\nuv run log-viewer calculator\n\n# View all agent logs\nuv run log-viewer --all\n```\n\n### Default Agent Configuration\n\nThe system comes with these pre-configured agents:\n\n| Agent | Type | Port | Capabilities | Tools/MCP |\n|-------|------|------|-------------|-----------|\n| `calculator` | Individual | 8001 | Mathematical calculations | Strands calculator |\n| `time` | Individual | 8002 | Time and timezone info | Strands current_time |\n| `fileeditor` | Individual | 8003 | File operations | Strands editor, file_read, file_write |\n| `webbrowser` | Individual | 8004 | Web content fetching | MCP fetch server |\n| `time-and-calculator` | Coordinator | 8005 | Math \u0026 time coordination | Manages calculator + time |\n| `edit-and-browse` | Coordinator | 8006 | File \u0026 web coordination | Manages fileeditor + webbrowser |\n\n## 🛠️ Troubleshooting\n\n### Common Issues and Solutions\n\n#### 1. Agents Won't Start\n```bash\n# Check if ports are in use\nlsof -i :8001\nlsof -i :8002\n\n# Force start to kill existing processes\nuv run agents start --force\n\n# Check logs for specific errors\ntail -f ./logs/calculator.log\n```\n\n#### 2. \"Connection Refused\" Errors\n```bash\n# Verify agents are running\nuv run agents status\n\n# Restart all agents\nuv run agents restart\n\n# Check network connectivity\ncurl http://localhost:8001/.well-known/agent.json\n```\n\n#### 3. Voice Mode Issues (Nova Sonic)\n```bash\n# Check AWS credentials\naws sts get-caller-identity\n\n# Set credentials if needed\nexport AWS_ACCESS_KEY_ID=your_key\nexport AWS_SECRET_ACCESS_KEY=your_secret\nexport AWS_DEFAULT_REGION=us-east-1\n\n# Test audio devices\nuv run a2a-client speak --agent calculator --disable-echo-cancellation\n```\n\n#### 4. WebSpeak Not Working\n```bash\n# Check microphone permissions in browser\n# Ensure port 3000 is available\nlsof -i :3000\n\n# Try different port\nuv run a2a-client webspeak --port 8090\n```\n\n#### 5. Push Notifications Not Working\n```bash\n# Check webhook server\ncurl http://localhost:8000/health\n\n# Verify webhook port in config\ngrep -A5 \"\\[webhook\\]\" config/config.toml\n\n# Restart with clean state\nuv run agents stop\nuv run agents start\n```\n\n### Debugging Commands\n\n```bash\n# Enable debug logging\nexport STRANDS_LOG_LEVEL=DEBUG\n\n# View all logs in real-time\ntail -f ./logs/*.log\n\n# Test individual agent\ncurl http://localhost:8001/.well-known/agent.json | jq\n\n# Test webhook connectivity\ncurl -X POST http://localhost:8000/webhook/a2a-tasks \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"test\": \"webhook\"}'\n```\n\n### Performance Optimization\n\n#### For Better Response Times:\n```toml\n# In config/config.toml, use faster model\n[agents]\nmodel = \"us.amazon.nova-lite-v1:0\"  # Fastest\n# model = \"us.amazon.nova-pro-v1:0\"    # Balanced\n# model = \"us.amazon.nova-premier-v1:0\" # Best quality\n```\n\n#### For Memory Usage:\n```bash\n# Monitor memory usage\nps aux | grep -E \"(configurable-agent|coordinator-agent)\"\n\n# Restart agents if memory usage is high\nuv run agents restart\n```\n\n## 📚 API Reference\n\n### A2A Client Core API\n\n#### CleanA2AClient Class\n```python\nfrom a2a_client import CleanA2AClient\n\n# Initialize client\nclient = CleanA2AClient(\"http://localhost:8001\", \"calculator\")\n\n# Discover agent capabilities\nawait client.discover_agent_skills()\n\n# Send immediate message\nresponse = await client.send_message(\"What is 25 * 47?\")\n\n# Send asynchronous task\ndef callback(task):\n    print(f\"Task completed: {client.extract_task_result(task)}\")\n\ntask_id = await client.send_task(\"Complex calculation\", callback)\n```\n\n#### Agent Management API\n```python\nfrom agent_process_manager import AgentProcessManager\n\nmanager = AgentProcessManager()\n\n# Start all agents\nsuccess = manager.start_all_agents()\n\n# Get agent status\nstatus = manager.get_agent_status()\n\n# Stop all agents\nmanager.stop_all_agents()\n```\n\n### Configuration API\n\n#### Loading Configuration\n```python\nimport tomllib\nfrom pathlib import Path\n\ndef load_config():\n    config_path = Path(\"config/config.toml\")\n    with open(config_path, \"rb\") as f:\n        return tomllib.load(f)\n\nconfig = load_config()\nagents = config.get(\"configurable_agent\", {})\n```\n\n#### Agent Discovery\n```python\nfrom a2a_client import discover_available_agents\n\n# Get all available agents\nagents = discover_available_agents()\n# Returns: {\"calculator\": \"http://localhost:8001\", ...}\n```\n\n### Webhook API\n\n#### Push Notification Management\n```python\nfrom a2a_push_notification_manager import get_client_webhook_manager\n\nwebhook_manager = get_client_webhook_manager()\nawait webhook_manager.start()\n\n# Register task callback\nsuccess = await webhook_manager.register_task_callback(\n    client=a2a_client,\n    task_id=\"task-123\",\n    callback=my_callback,\n    timeout_seconds=300.0\n)\n```\n\n### Testing API\n\n#### Test Runner\n```python\nfrom test_interface import test_mode\n\n# Run all tests\nawait test_mode(\"all\")\n\n# Test specific agent\nawait test_mode(\"calculator\")\n```\n\n### Voice API\n\n#### Speech Integration\n```python\nfrom speak_interface import speak_mode\nfrom aws_credentials_helper import ensure_aws_credentials\n\n# Ensure AWS credentials\nensure_aws_credentials()\n\n# Start voice mode\nawait speak_mode(\"calculator\", disable_echo_cancellation=False)\n```\n\n## 🔗 Quick Reference\n\n### Essential Commands\n```bash\n# Setup and start\nuv sync                              # Install dependencies\nuv run agents start                  # Start all agents\nuv run a2a-client web               # Launch web interface\n\n# Agent management\nuv run agents status                # Check agent status\nuv run agents restart               # Restart all agents\nuv run agents stop                  # Stop all agents\n\n# Client modes\nuv run a2a-client interactive       # CLI chat mode\nuv run a2a-client speak --agent calculator  # Voice mode\nuv run a2a-client webspeak         # Web voice interface\nuv run a2a-client test             # Run test suite\n\n# Individual agents (manual)\nuv run configurable-agent calculator\nuv run coordinator-agent time-and-calculator\n```\n\n### Default Ports\n- **8001**: Calculator agent\n- **8002**: Time agent  \n- **8003**: File editor agent\n- **8004**: Web browser agent\n- **8005**: Time \u0026 calculator coordinator\n- **8006**: Edit \u0026 browse coordinator\n- **8000**: Webhook server\n- **8080**: Web interface\n- **3000**: WebSpeak interface\n\n### Configuration Files\n- **`config/config.toml`**: Main configuration\n- **`./logs/*.log`**: Agent log files\n- **`./state/agents.json`**: Agent state persistence\n\n## **⚙️ Advanced Configuration**\n\n### **Basic Structure**\n\n```toml\n[logging]\nlevel = \"INFO\"\n\n[webhook]\nport = 8910\nhost = \"0.0.0.0\"\n\n[agents]\nmodel = \"us.amazon.nova-lite-v1:0\"\n\n# Individual configurable agents\n[configurable_agent.\u003cagent_name\u003e]\n# ... agent configuration\n\n# Coordinator agents that manage groups\n[coordinator_agent.\u003ccoordinator_name\u003e]\n# ... coordinator configuration\n```\n\n### **Configurable Agent Syntax**\n\nEach configurable agent is defined using the `[configurable_agent.\u003cname\u003e]` section:\n\n```toml\n[configurable_agent.myagent]\ndescription = \"Description of what this agent does\"\nport = 8001\nsystem_prompt = \"You are a helpful assistant...\"\nstrands_tools = [\"tool1\", \"tool2\"]  # Optional: Strands tools to load\n\n# Optional: MCP servers to connect to\n[configurable_agent.myagent.mcp_servers]\nserver_name = { command = \"command\", args = [\"arg1\", \"arg2\"] }\n```\n\n**Required Fields:**\n- `description`: Human-readable description of the agent's purpose\n- `port`: Port number where the agent will run (must be unique)\n- `system_prompt`: The system prompt that defines the agent's behavior\n\n**Optional Fields:**\n- `strands_tools`: Array of Strands tool names to load (e.g., `[\"calculator\", \"current_time\"]`)\n- `mcp_servers`: Section defining MCP servers to connect to\n\n### **Coordinator Agent Syntax**\n\nCoordinator agents manage groups of other agents:\n\n```toml\n[coordinator_agent.mycoordinator]\ndescription = \"Coordinator that manages specific agents\"\nport = 8000\nsystem_prompt = \"You are a coordinator agent...\"\ncoordinated_agents = [\"agent1\", \"agent2\"]\n```\n\n**Required Fields:**\n- `description`: Human-readable description of the coordinator's purpose\n- `port`: Port number where the coordinator will run (must be unique)\n- `system_prompt`: The system prompt for coordination behavior\n- `coordinated_agents`: Array of agent names this coordinator manages\n\n### **Available Strands Tools**\n\nThe system supports these built-in Strands tools:\n\n- **`calculator`**: Mathematical calculations and equation solving\n- **`current_time`**: Current time and timezone information\n- **`editor`**: File editing with iterative changes\n- **`file_read`**: Advanced file reading capabilities\n- **`file_write`**: File writing with confirmation\n\n### **MCP Server Configuration**\n\nMCP (Model Context Protocol) servers can be configured per agent:\n\n```toml\n[configurable_agent.myagent.mcp_servers]\nfetch = { command = \"uvx\", args = [\"mcp-server-fetch\"] }\nfilesystem = { command = \"mcp-server-filesystem\", args = [\"/path/to/root\"] }\n```\n\n### **Complete Example**\n\nHere's a complete example showing different types of agents:\n\n```toml\n[logging]\nlevel = \"INFO\"\n\n[webhook]\nport = 8910\nhost = \"0.0.0.0\"\n\n[agents]\nmodel = \"us.amazon.nova-lite-v1:0\"\n\n# Math specialist using Strands calculator tool\n[configurable_agent.calculator]\ndescription = \"Mathematical calculation specialist\"\nport = 8001\nsystem_prompt = \"You are a precise calculator. Solve math problems step by step.\"\nstrands_tools = [\"calculator\"]\n\n[configurable_agent.calculator.mcp_servers]\n# No MCP servers for this agent\n\n# Web browsing agent using MCP fetch server\n[configurable_agent.webbrowser]\ndescription = \"Web content fetching specialist\"\nport = 8004\nsystem_prompt = \"You are a web browsing assistant. Fetch and analyze web content.\"\nstrands_tools = []\n\n[configurable_agent.webbrowser.mcp_servers]\nfetch = { command = \"uvx\", args = [\"mcp-server-fetch\"] }\n\n# Coordinator managing both agents\n[coordinator_agent.main]\ndescription = \"Main coordinator managing math and web agents\"\nport = 8000\nsystem_prompt = \"You coordinate tasks between math and web agents.\"\ncoordinated_agents = [\"calculator\", \"webbrowser\"]\n```\n\n### **Adding New Agents**\n\nTo add a new agent:\n\n1. **Choose a unique name** and port number\n2. **Add a `[configurable_agent.\u003cname\u003e]` section** with required fields\n3. **Specify tools or MCP servers** the agent should use\n4. **Restart the agent** with `uv run configurable-agent \u003cname\u003e`\n5. **Optional**: Add to a coordinator's `coordinated_agents` list\n\nThe system will automatically discover and make the new agent available to all clients.\n\n### **Port Management**\n\n**Recommended Port Ranges:**\n- **8001-8099**: Individual configurable agents\n- **8000, 8100-8199**: Coordinator agents  \n- **8910**: Webhook server (fixed)\n- **8080**: Web interface (default)\n- **3000**: WebSpeak interface (default)\n\n**Important**: Each agent must have a unique port number.\n\n## 🎤 **WebSpeak Voice Interface**\n\nThe demo now includes a **web-based voice interface** that allows natural voice conversations with A2A agents using Amazon Nova Sonic and WebRTC:\n\n### **Features**\n- **Browser-based Voice Interaction**: No downloads needed, works in any modern browser\n- **WebRTC Audio Processing**: Built-in echo cancellation, noise suppression, and auto-gain control\n- **Real-time Conversation**: See transcriptions and responses in real-time\n- **Agent Discovery**: Visual agent selection with skills display\n- **Tool Visualization**: Watch agents use tools in real-time\n- **Multi-Agent Support**: Switch between agents without restarting\n\n### **Quick Start**\n```bash\n# Start the WebSpeak server\nuv run a2a-client webspeak\n\n# Open browser to http://localhost:3000\n# Select an agent and start talking!\n```\n\n### **Technical Architecture**\n- **Frontend**: HTML5/WebRTC for audio processing + SocketIO for real-time communication\n- **Backend**: Flask-SocketIO server using the same A2A integration as CLI speak mode\n- **Audio Flow**: Browser WebRTC → Nova Sonic → A2A Agents → Voice responses\n- **Advantages**: Client-side audio processing, remote access, visual feedback\n\nSee `webspeak/README.md` for detailed documentation.\n\n## 🔄 **Agent-to-Agent Communication Flow**\n\n```mermaid\ngraph TB\n    subgraph \"A2A Client\"\n        C[User/Test Client]\n    end\n    \n    subgraph \"Coordinator Agent (Port 8000)\"\n        CA[Coordinator Agent\u003cbr/\u003eA2AStarletteApplication]\n        CE[CoordinatorAgentExecutor]\n        CC[A2AClient Tools]\n    end\n    \n    subgraph \"Calculator Agent (Port 8001)\" \n        MA[Calculator Agent\u003cbr/\u003eA2AStarletteApplication]\n        ME[CalculatorAgentExecutor]\n        MT[Strands Calculator Tool]\n    end\n    \n    subgraph \"Time Agent (Port 8002)\"\n        TA[Time Agent\u003cbr/\u003eA2AStarletteApplication] \n        TE[TimeAgentExecutor]\n        TT[Strands Time Tool]\n    end\n    \n    C --\u003e CA\n    CA --\u003e CE\n    CE --\u003e CC\n    CC --\u003e MA\n    CC --\u003e TA\n    MA --\u003e ME\n    TA --\u003e TE\n    ME --\u003e MT\n    TE --\u003e TT\n```\n\n## 📖 **Implementation Notes**\n\n### **Official Patterns Followed**\n- **Server Pattern**: `A2AStarletteApplication` + `DefaultRequestHandler` + `AgentExecutor`\n- **Client Pattern**: `A2AClient` + `A2ACardResolver` for discovery\n- **Messaging Pattern**: `new_agent_text_message()` for responses\n- **Context Pattern**: `RequestContext` + `EventQueue` for task execution\n- **Task Pattern**: `InMemoryTaskStore` for task management\n\n### **Strands Integration**\n- Strands Agents SDK provides the LLM backbone\n- Official A2A SDK provides the communication layer\n- Seamless integration between both frameworks\n- Tool sharing between Strands and A2A contexts\n\n## 🚀 **What's Next?**\n\nThis implementation provides a solid foundation for:\n- **Building production A2A agent networks**\n- **Integrating with existing LLM applications**\n- **Creating specialized agent marketplaces**\n- **Implementing complex multi-agent workflows**\n\nThe codebase follows official patterns exactly, making it easy to:\n- Add new agents following the same structure\n- Scale to larger agent networks\n- Integrate with other A2A-compatible systems\n- Deploy in production environments\n\n## 📋 **Quick Reference**\n\n### **Managing Agents**\n```bash\n# Agent management (recommended)\nuv run agents start                        # Start all agents\nuv run agents start calculator             # Start specific agent\nuv run agents stop                         # Stop all agents  \nuv run agents stop time                    # Stop specific agent\nuv run agents restart                      # Restart all agents\nuv run agents restart coordinator          # Restart specific agent\nuv run agents status                       # Check all agent status\nuv run agents status webbrowser            # Check specific agent status\n```\n\n### **Starting Agents Individually (Alternative)**\n```bash\n# Individual configurable agents\nuv run calculator-agent                    # Port 8001\nuv run time-agent                          # Port 8002\nuv run configurable-agent fileeditor      # Port 8003\nuv run configurable-agent webbrowser      # Port 8004\n\n# Coordinator agents\nuv run coordinator-agent time-and-calculator  # Port 8000\nuv run coordinator-agent edit-and-browse      # Port 8005\n```\n\n### **Using the A2A Client**\n```bash\n# Web interface (recommended)\nuv run a2a-client web                      # http://localhost:8080\n\n# Interactive CLI\nuv run a2a-client interactive              # Terminal-based chat\nuv run a2a-client interactive --agent calculator  # Direct agent chat\n\n# Voice interfaces\nuv run a2a-client speak --agent coordinator       # CLI voice mode\nuv run a2a-client webspeak                        # Web voice interface\n\n# Testing\nuv run a2a-client test                     # Comprehensive test suite\nuv run a2a-client test --agent calculator # Test specific agent only\n```\n\n### **Configuration Quick Start**\n```toml\n# Add a new agent\n[configurable_agent.myagent]\ndescription = \"My custom agent\"\nport = 8010\nsystem_prompt = \"You are a helpful assistant.\"\nstrands_tools = [\"calculator\"]\n\n# Add a coordinator\n[coordinator_agent.mycoordinator]\ndescription = \"My coordinator\"\nport = 8020\nsystem_prompt = \"You coordinate tasks.\"\ncoordinated_agents = [\"myagent\", \"calculator\"]\n```\n\n## 📚 References\n\n### A2A Protocol Resources\n- [Official A2A Specification](https://google.github.io/A2A/) - Complete protocol documentation\n- [A2A Python SDK (GitHub)](https://github.com/google-a2a/a2a-sdk-python) - Official Python implementation\n- [A2A Python Samples](https://github.com/google-a2a/a2a-samples/tree/main/samples/python) - Reference implementations\n- [A2A SDK Documentation](https://pypi.org/project/a2a-sdk/) - PyPI package documentation\n- [Google Transfers A2A to Linux Foundation](https://blog.google/technology/ai/google-a2a-protocol-linux-foundation/) - Official announcement\n\n### Strands Agents Resources\n- [Strands Agents](https://strands-agents.com) - Official website and documentation\n- [Strands Agents SDK (GitHub)](https://github.com/strands-agents/sdk-python) - Python SDK repository\n\n### Development Tools\n- [UV Documentation](https://docs.astral.sh/uv/) - Fast Python package manager\n- [Amazon Nova Documentation](https://docs.aws.amazon.com/nova/) - Speech services for voice modes\n- [Python A2A Tutorial](https://a2aprotocol.ai/blog/python-a2a-tutorial-20250513) - Getting started guide\n\n---\n\n**🚀 Built with ❤️ using the official A2A SDK patterns and Strands Agents SDK**\n\n*Ready to build your own agent network? Start with `uv sync \u0026\u0026 uv run agents start \u0026\u0026 uv run a2a-client web`*\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanilop%2Fstrands-a2a-demo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdanilop%2Fstrands-a2a-demo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanilop%2Fstrands-a2a-demo/lists"}