 bd19709b31
			
		
	
	bd19709b31
	
	
	
		
			
			Created complete documentation infrastructure with master index and detailed command-line tool documentation. Documentation Structure: - docs/comprehensive/README.md - Master index with navigation - docs/comprehensive/architecture/README.md - System architecture overview - docs/comprehensive/commands/chorus-agent.md - Autonomous agent binary (✅ Production) - docs/comprehensive/commands/chorus-hap.md - Human Agent Portal (🔶 Beta) - docs/comprehensive/commands/chorus.md - Deprecated wrapper (⚠️ Deprecated) Coverage Statistics: - 3 command binaries fully documented (3,056 lines, ~14,500 words) - Complete source code analysis with line numbers - Configuration reference for all environment variables - Runtime behavior and execution flows - P2P networking details - Health checks and monitoring - Example deployments (local, Docker, Swarm) - Troubleshooting guides - Cross-references between docs Key Features Documented: - Container-first architecture - P2P mesh networking - Democratic leader election - Docker sandbox execution - HMMM collaborative reasoning - UCXL decision publishing - DHT encrypted storage - Multi-layer security - Human-agent collaboration Implementation Status Tracking: - ✅ Production features marked - 🔶 Beta features identified - ⏳ Stubbed components noted - ⚠️ Deprecated code flagged Next Phase: Package documentation (30+ packages in pkg/) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
		
			
				
	
	
		
			738 lines
		
	
	
		
			19 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			738 lines
		
	
	
		
			19 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # chorus-agent - Autonomous Agent Binary
 | |
| 
 | |
| **Binary:** `chorus-agent`
 | |
| **Source:** `cmd/agent/main.go`
 | |
| **Status:** ✅ Production
 | |
| **Purpose:** Autonomous AI agent for P2P task coordination
 | |
| 
 | |
| ---
 | |
| 
 | |
| ## Overview
 | |
| 
 | |
| `chorus-agent` is the primary executable for running autonomous AI agents in the CHORUS system. Agents participate in peer-to-peer networks, execute tasks in isolated Docker sandboxes, collaborate with other agents via HMMM protocol, and maintain distributed state through DHT storage.
 | |
| 
 | |
| ### Key Features
 | |
| 
 | |
| - ✅ **Autonomous Operation**: Executes tasks without human intervention
 | |
| - ✅ **P2P Networking**: Participates in distributed mesh network
 | |
| - ✅ **Docker Sandboxing**: Isolated code execution environments
 | |
| - ✅ **HMMM Reasoning**: Collaborative meta-discussion protocol
 | |
| - ✅ **DHT Storage**: Encrypted distributed data storage
 | |
| - ✅ **UCXL Publishing**: Immutable decision recording
 | |
| - ✅ **Democratic Elections**: Participates in leader election
 | |
| - ✅ **Health Monitoring**: Self-reporting health status
 | |
| 
 | |
| ---
 | |
| 
 | |
| ## Usage
 | |
| 
 | |
| ### Basic Invocation
 | |
| 
 | |
| ```bash
 | |
| # With required environment variables
 | |
| CHORUS_LICENSE_ID=dev-123 \
 | |
| CHORUS_AGENT_ID=chorus-agent-1 \
 | |
| ./chorus-agent
 | |
| ```
 | |
| 
 | |
| ### Help Output
 | |
| 
 | |
| ```bash
 | |
| $ ./chorus-agent --help
 | |
| CHORUS-agent 0.5.0-dev (build: abc123, 2025-09-30)
 | |
| 
 | |
| Usage:
 | |
|   chorus-agent [--help] [--version]
 | |
| 
 | |
| CHORUS Autonomous Agent - P2P Task Coordination
 | |
| 
 | |
| This binary runs autonomous AI agents that participate in P2P task coordination,
 | |
| collaborative reasoning via HMMM, and distributed decision making.
 | |
| 
 | |
| Environment (common):
 | |
|   CHORUS_LICENSE_ID              (required)
 | |
|   CHORUS_AGENT_ID                (optional; auto-generated if empty)
 | |
|   CHORUS_P2P_PORT                (default 9000)
 | |
|   CHORUS_API_PORT                (default 8080)
 | |
|   CHORUS_HEALTH_PORT             (default 8081)
 | |
|   CHORUS_DHT_ENABLED             (default true)
 | |
|   CHORUS_BOOTSTRAP_PEERS         (comma-separated multiaddrs)
 | |
|   OLLAMA_ENDPOINT                (default http://localhost:11434)
 | |
| 
 | |
| Example:
 | |
|   CHORUS_LICENSE_ID=dev-123 \
 | |
|   CHORUS_AGENT_ID=chorus-agent-1 \
 | |
|   CHORUS_P2P_PORT=9000 CHORUS_API_PORT=8080 ./chorus-agent
 | |
| 
 | |
| Agent Features:
 | |
|   - Autonomous task execution
 | |
|   - P2P mesh networking
 | |
|   - HMMM collaborative reasoning
 | |
|   - DHT encrypted storage
 | |
|   - UCXL context addressing
 | |
|   - Democratic leader election
 | |
|   - Health monitoring
 | |
| ```
 | |
| 
 | |
| ### Version Information
 | |
| 
 | |
| ```bash
 | |
| $ ./chorus-agent --version
 | |
| CHORUS-agent 0.5.0-dev (build: abc123, 2025-09-30)
 | |
| ```
 | |
| 
 | |
| ---
 | |
| 
 | |
| ## Source Code Analysis
 | |
| 
 | |
| ### File: `cmd/agent/main.go`
 | |
| 
 | |
| **Lines:** 79
 | |
| **Package:** main
 | |
| **Imports:**
 | |
| - `chorus/internal/runtime` - Shared P2P runtime infrastructure
 | |
| 
 | |
| ### Build-Time Variables
 | |
| 
 | |
| ```go
 | |
| // Lines 11-16
 | |
| var (
 | |
|     version    = "0.5.0-dev"
 | |
|     commitHash = "unknown"
 | |
|     buildDate  = "unknown"
 | |
| )
 | |
| ```
 | |
| 
 | |
| **Set via ldflags:**
 | |
| ```bash
 | |
| go build -ldflags "-X main.version=1.0.0 -X main.commitHash=$(git rev-parse --short HEAD) -X main.buildDate=$(date -u +%Y-%m-%d)"
 | |
| ```
 | |
| 
 | |
| ### main() Function Flow
 | |
| 
 | |
| ```go
 | |
| func main() {
 | |
|     // 1. CLI Argument Handling (lines 19-59)
 | |
|     //    - Check for --help, -h, help
 | |
|     //    - Check for --version, -v
 | |
|     //    - Print usage and exit early if found
 | |
| 
 | |
|     // 2. Set Build Information (lines 61-64)
 | |
|     runtime.AppVersion = version
 | |
|     runtime.AppCommitHash = commitHash
 | |
|     runtime.AppBuildDate = buildDate
 | |
| 
 | |
|     // 3. Initialize Shared Runtime (lines 66-72)
 | |
|     sharedRuntime, err := runtime.Initialize("agent")
 | |
|     if err != nil {
 | |
|         // Fatal error, exit 1
 | |
|     }
 | |
|     defer sharedRuntime.Cleanup()
 | |
| 
 | |
|     // 4. Start Agent Mode (lines 74-78)
 | |
|     if err := sharedRuntime.StartAgentMode(); err != nil {
 | |
|         // Fatal error, exit 1
 | |
|     }
 | |
| }
 | |
| ```
 | |
| 
 | |
| ### Execution Phases
 | |
| 
 | |
| #### Phase 1: Early CLI Handling (lines 19-59)
 | |
| 
 | |
| **Purpose:** Handle help/version requests without loading configuration
 | |
| 
 | |
| **Code:**
 | |
| ```go
 | |
| for _, a := range os.Args[1:] {
 | |
|     switch a {
 | |
|     case "--help", "-h", "help":
 | |
|         // Print detailed help message
 | |
|         fmt.Printf("%s-agent %s (build: %s, %s)\n\n", runtime.AppName, version, commitHash, buildDate)
 | |
|         // ... usage information ...
 | |
|         return
 | |
|     case "--version", "-v":
 | |
|         fmt.Printf("%s-agent %s (build: %s, %s)\n", runtime.AppName, version, commitHash, buildDate)
 | |
|         return
 | |
|     }
 | |
| }
 | |
| ```
 | |
| 
 | |
| **Why Important:** Allows users to get help without needing valid license or configuration.
 | |
| 
 | |
| #### Phase 2: Runtime Initialization (line 67)
 | |
| 
 | |
| **Function Call:** `runtime.Initialize("agent")`
 | |
| 
 | |
| **What Happens:**
 | |
| 1. Load configuration from environment variables
 | |
| 2. Validate CHORUS license with KACHING server
 | |
| 3. Initialize AI provider (Ollama or ResetData)
 | |
| 4. Create P2P libp2p node
 | |
| 5. Start mDNS discovery
 | |
| 6. Initialize PubSub messaging
 | |
| 7. Setup DHT (if enabled)
 | |
| 8. Start election manager
 | |
| 9. Create task coordinator
 | |
| 10. Start HTTP API server
 | |
| 11. Start UCXI server (if enabled)
 | |
| 12. Initialize health checks
 | |
| 13. Setup SHHH sentinel (secrets detection)
 | |
| 14. Configure metrics collection
 | |
| 
 | |
| **Returns:** `*runtime.SharedRuntime` containing all initialized components
 | |
| 
 | |
| **See:** [internal/runtime Documentation](../internal/runtime.md) for complete initialization details
 | |
| 
 | |
| #### Phase 3: Agent Mode Activation (line 75)
 | |
| 
 | |
| **Function Call:** `sharedRuntime.StartAgentMode()`
 | |
| 
 | |
| **What Happens:**
 | |
| 1. Agent registers itself as available for tasks
 | |
| 2. Begins listening for task assignments via PubSub
 | |
| 3. Starts autonomous task execution loops
 | |
| 4. Enables automatic decision making
 | |
| 5. Activates HMMM meta-discussion participation
 | |
| 6. Begins heartbeat broadcasting for election
 | |
| 
 | |
| **Implementation:** See `internal/runtime/agent_support.go`
 | |
| 
 | |
| **Behavior Differences from HAP:**
 | |
| - **Agent**: Automatically accepts and executes tasks
 | |
| - **HAP**: Prompts human for task approval
 | |
| 
 | |
| ---
 | |
| 
 | |
| ## Configuration
 | |
| 
 | |
| ### Required Environment Variables
 | |
| 
 | |
| | Variable | Description | Example |
 | |
| |----------|-------------|---------|
 | |
| | `CHORUS_LICENSE_ID` | License key from KACHING | `dev-123` |
 | |
| 
 | |
| ### Optional Environment Variables
 | |
| 
 | |
| | Variable | Default | Description |
 | |
| |----------|---------|-------------|
 | |
| | `CHORUS_AGENT_ID` | Auto-generated | Unique agent identifier |
 | |
| | `CHORUS_P2P_PORT` | 9000 | libp2p listening port |
 | |
| | `CHORUS_API_PORT` | 8080 | HTTP API port |
 | |
| | `CHORUS_HEALTH_PORT` | 8081 | Health check port |
 | |
| | `CHORUS_DHT_ENABLED` | true | Enable distributed hash table |
 | |
| | `CHORUS_BOOTSTRAP_PEERS` | "" | Comma-separated multiaddrs |
 | |
| | `OLLAMA_ENDPOINT` | http://localhost:11434 | Ollama API endpoint |
 | |
| 
 | |
| ### Role-Based Configuration
 | |
| 
 | |
| | Variable | Default | Description |
 | |
| |----------|---------|-------------|
 | |
| | `CHORUS_AGENT_ROLE` | "" | Agent role (admin, developer, reviewer) |
 | |
| | `CHORUS_AGENT_EXPERTISE` | "" | Comma-separated expertise areas |
 | |
| | `CHORUS_AGENT_REPORTS_TO` | "" | Supervisor agent ID |
 | |
| | `CHORUS_AGENT_SPECIALIZATION` | "general" | Task specialization |
 | |
| | `CHORUS_AGENT_MAX_TASKS` | 3 | Max concurrent tasks |
 | |
| 
 | |
| ### AI Provider Configuration
 | |
| 
 | |
| #### Ollama (Default)
 | |
| 
 | |
| ```bash
 | |
| export CHORUS_AI_PROVIDER=ollama
 | |
| export OLLAMA_ENDPOINT=http://192.168.1.72:11434
 | |
| ```
 | |
| 
 | |
| #### ResetData
 | |
| 
 | |
| ```bash
 | |
| export CHORUS_AI_PROVIDER=resetdata
 | |
| export RESETDATA_API_KEY=your-api-key-here
 | |
| export RESETDATA_BASE_URL=https://api.resetdata.ai
 | |
| export RESETDATA_MODEL=claude-3-5-sonnet-20250930
 | |
| ```
 | |
| 
 | |
| ### Assignment Loading
 | |
| 
 | |
| Agents can load dynamic configuration from WHOOSH:
 | |
| 
 | |
| ```bash
 | |
| export ASSIGN_URL=https://whoosh.example.com/api/assignments/agent-123.json
 | |
| ```
 | |
| 
 | |
| When configured, agents:
 | |
| 1. Fetch assignment JSON on startup
 | |
| 2. Merge with environment config
 | |
| 3. Listen for SIGHUP to reload
 | |
| 4. Update configuration without restart
 | |
| 
 | |
| **See:** [Configuration Management](../packages/config.md) for assignment schema
 | |
| 
 | |
| ---
 | |
| 
 | |
| ## Runtime Behavior
 | |
| 
 | |
| ### Startup Sequence
 | |
| 
 | |
| ```
 | |
| 1. Parse CLI arguments
 | |
|    ├─→ --help → print help, exit 0
 | |
|    ├─→ --version → print version, exit 0
 | |
|    └─→ (none) → continue
 | |
| 
 | |
| 2. Set build information in runtime package
 | |
| 
 | |
| 3. Initialize shared runtime
 | |
|    ├─→ Load environment configuration
 | |
|    ├─→ Validate license with KACHING
 | |
|    │   └─→ FAIL → print error, exit 1
 | |
|    ├─→ Configure AI provider
 | |
|    ├─→ Create P2P node
 | |
|    ├─→ Start mDNS discovery
 | |
|    ├─→ Initialize PubSub
 | |
|    ├─→ Setup DHT (optional)
 | |
|    ├─→ Start election manager
 | |
|    ├─→ Create task coordinator
 | |
|    ├─→ Start HTTP API server
 | |
|    └─→ Initialize health checks
 | |
| 
 | |
| 4. Start agent mode
 | |
|    ├─→ Register as available agent
 | |
|    ├─→ Join task coordination topics
 | |
|    ├─→ Begin heartbeat broadcasting
 | |
|    ├─→ Enable autonomous task execution
 | |
|    └─→ Activate HMMM participation
 | |
| 
 | |
| 5. Run until signal (SIGINT, SIGTERM)
 | |
| 
 | |
| 6. Cleanup on shutdown
 | |
|    ├─→ Stop accepting new tasks
 | |
|    ├─→ Complete in-flight tasks
 | |
|    ├─→ Close P2P connections
 | |
|    ├─→ Flush DHT cache
 | |
|    ├─→ Stop HTTP servers
 | |
|    └─→ Exit gracefully
 | |
| ```
 | |
| 
 | |
| ### Signal Handling
 | |
| 
 | |
| | Signal | Behavior |
 | |
| |--------|----------|
 | |
| | SIGINT | Graceful shutdown (complete current tasks) |
 | |
| | SIGTERM | Graceful shutdown (complete current tasks) |
 | |
| | SIGHUP | Reload configuration from ASSIGN_URL |
 | |
| 
 | |
| ### Task Execution Loop
 | |
| 
 | |
| Once in agent mode:
 | |
| 
 | |
| ```
 | |
| Loop Forever:
 | |
| │
 | |
| ├─→ Listen for tasks on PubSub topic "chorus/tasks"
 | |
| │
 | |
| ├─→ Task received:
 | |
| │   ├─→ Check agent availability (< max tasks)
 | |
| │   ├─→ Check task matches specialization
 | |
| │   └─→ Accept or decline
 | |
| │
 | |
| ├─→ Task accepted:
 | |
| │   ├─→ Increment active task count
 | |
| │   ├─→ Log task start to Hypercore
 | |
| │   ├─→ Invoke execution engine
 | |
| │   │   ├─→ Select Docker image based on language
 | |
| │   │   ├─→ Create sandbox container
 | |
| │   │   ├─→ Execute commands via Docker Exec API
 | |
| │   │   ├─→ Stream output
 | |
| │   │   ├─→ Monitor resource usage
 | |
| │   │   └─→ Capture results
 | |
| │   ├─→ Generate task summary
 | |
| │   ├─→ Create UCXL decision record
 | |
| │   ├─→ Publish decision to DHT
 | |
| │   ├─→ Broadcast completion on PubSub
 | |
| │   ├─→ Decrement active task count
 | |
| │   └─→ Log task completion to Hypercore
 | |
| │
 | |
| └─→ Continue listening
 | |
| ```
 | |
| 
 | |
| **See:** [Task Execution Engine](../packages/execution.md) for execution details
 | |
| 
 | |
| ---
 | |
| 
 | |
| ## P2P Networking
 | |
| 
 | |
| ### Peer Discovery
 | |
| 
 | |
| **mDNS (Local):**
 | |
| - Discovers peers on local network
 | |
| - Service name: `chorus-peer-discovery`
 | |
| - No configuration required
 | |
| - Automatic peer connection
 | |
| 
 | |
| **DHT (Global):**
 | |
| - Discovers peers across networks
 | |
| - Requires bootstrap peers
 | |
| - Content-addressed routing
 | |
| - Kademlia-based DHT
 | |
| 
 | |
| **Bootstrap Peers:**
 | |
| ```bash
 | |
| export CHORUS_BOOTSTRAP_PEERS="/ip4/192.168.1.100/tcp/9000/p2p/12D3KooWABC...,/ip4/192.168.1.101/tcp/9000/p2p/12D3KooWXYZ..."
 | |
| ```
 | |
| 
 | |
| ### Topics Subscribed
 | |
| 
 | |
| | Topic | Purpose |
 | |
| |-------|---------|
 | |
| | `chorus/coordination/v1` | Task coordination messages |
 | |
| | `hmmm/meta-discussion/v1` | Collaborative reasoning |
 | |
| | `chorus/election/v1` | Leader election heartbeats |
 | |
| | `chorus/decisions` | Decision announcements |
 | |
| | `chorus/health` | Health status broadcasts |
 | |
| 
 | |
| ### Role-Based Topics (Optional)
 | |
| 
 | |
| If `CHORUS_AGENT_ROLE` is set, agent also joins:
 | |
| 
 | |
| | Topic | Purpose |
 | |
| |-------|---------|
 | |
| | `chorus/role/{role}` | Role-specific coordination |
 | |
| | `chorus/expertise/{expertise}` | Expertise-based routing |
 | |
| | `chorus/reports/{supervisor}` | Reporting hierarchy |
 | |
| 
 | |
| ---
 | |
| 
 | |
| ## Health Checks
 | |
| 
 | |
| ### HTTP Endpoints
 | |
| 
 | |
| **Liveness Probe:**
 | |
| ```bash
 | |
| curl http://localhost:8081/healthz
 | |
| # Returns: 200 OK if agent is alive
 | |
| ```
 | |
| 
 | |
| **Readiness Probe:**
 | |
| ```bash
 | |
| curl http://localhost:8081/ready
 | |
| # Returns: 200 OK if agent is ready for tasks
 | |
| # Returns: 503 Service Unavailable if at max capacity
 | |
| ```
 | |
| 
 | |
| **Health Details:**
 | |
| ```bash
 | |
| curl http://localhost:8081/health
 | |
| # Returns JSON with:
 | |
| # - P2P connectivity status
 | |
| # - DHT reachability
 | |
| # - Active task count
 | |
| # - Available capacity
 | |
| # - Last heartbeat time
 | |
| ```
 | |
| 
 | |
| ### Health Criteria
 | |
| 
 | |
| Agent is **healthy** when:
 | |
| - ✅ License valid
 | |
| - ✅ P2P node connected
 | |
| - ✅ At least 1 peer discovered
 | |
| - ✅ Election manager running
 | |
| - ✅ Task coordinator active
 | |
| - ✅ HTTP API responding
 | |
| 
 | |
| Agent is **ready** when:
 | |
| - ✅ All health checks pass
 | |
| - ✅ Active tasks < max tasks
 | |
| - ✅ Docker daemon reachable
 | |
| - ✅ AI provider accessible
 | |
| 
 | |
| **See:** [Health Package](../packages/health.md)
 | |
| 
 | |
| ---
 | |
| 
 | |
| ## Monitoring & Metrics
 | |
| 
 | |
| ### Prometheus Metrics
 | |
| 
 | |
| Exposed on `http://localhost:8080/metrics`:
 | |
| 
 | |
| **Task Metrics:**
 | |
| - `chorus_tasks_active` - Current active tasks
 | |
| - `chorus_tasks_completed_total` - Total completed tasks
 | |
| - `chorus_tasks_failed_total` - Total failed tasks
 | |
| - `chorus_task_duration_seconds` - Task execution duration histogram
 | |
| 
 | |
| **P2P Metrics:**
 | |
| - `chorus_peers_connected` - Number of connected peers
 | |
| - `chorus_pubsub_messages_sent_total` - PubSub messages sent
 | |
| - `chorus_pubsub_messages_received_total` - PubSub messages received
 | |
| - `chorus_dht_queries_total` - DHT query count
 | |
| - `chorus_dht_cache_hits_total` - DHT cache hits
 | |
| - `chorus_dht_cache_misses_total` - DHT cache misses
 | |
| 
 | |
| **Execution Metrics:**
 | |
| - `chorus_sandbox_containers_active` - Active Docker containers
 | |
| - `chorus_sandbox_cpu_usage` - Container CPU usage
 | |
| - `chorus_sandbox_memory_usage_bytes` - Container memory usage
 | |
| 
 | |
| **Security Metrics:**
 | |
| - `chorus_shhh_findings_total` - Secrets detected by SHHH
 | |
| - `chorus_license_checks_total` - License validation attempts
 | |
| - `chorus_license_failures_total` - Failed license validations
 | |
| 
 | |
| **See:** [Metrics Package](../packages/metrics.md)
 | |
| 
 | |
| ---
 | |
| 
 | |
| ## Integration Points
 | |
| 
 | |
| ### WHOOSH Assignment System
 | |
| 
 | |
| Agents can load dynamic assignments from WHOOSH:
 | |
| 
 | |
| ```bash
 | |
| # Set assignment URL
 | |
| export ASSIGN_URL=https://whoosh.example.com/api/assignments/agent-123.json
 | |
| 
 | |
| # Agent fetches assignment on startup
 | |
| # Assignment JSON structure:
 | |
| {
 | |
|   "agent_id": "agent-123",
 | |
|   "role": "developer",
 | |
|   "expertise": ["rust", "go"],
 | |
|   "reports_to": "agent-admin",
 | |
|   "max_tasks": 5,
 | |
|   "bootstrap_peers": [
 | |
|     "/ip4/192.168.1.100/tcp/9000/p2p/12D3KooWABC..."
 | |
|   ],
 | |
|   "join_stagger_ms": 5000
 | |
| }
 | |
| 
 | |
| # Reload with SIGHUP
 | |
| kill -HUP $(pidof chorus-agent)
 | |
| ```
 | |
| 
 | |
| ### KACHING License Server
 | |
| 
 | |
| All agents validate licenses on startup:
 | |
| 
 | |
| ```bash
 | |
| # License validation flow
 | |
| 1. Agent starts with CHORUS_LICENSE_ID
 | |
| 2. Connects to KACHING server (from config)
 | |
| 3. Validates license is:
 | |
|    - Valid and not expired
 | |
|    - Assigned to correct cluster
 | |
|    - Has required permissions
 | |
| 4. If invalid: agent exits with error
 | |
| 5. If valid: agent continues startup
 | |
| ```
 | |
| 
 | |
| **See:** [Licensing](../internal/licensing.md)
 | |
| 
 | |
| ### BACKBEAT Integration
 | |
| 
 | |
| Optional telemetry system for P2P operations:
 | |
| 
 | |
| ```bash
 | |
| export CHORUS_BACKBEAT_ENABLED=true
 | |
| export CHORUS_BACKBEAT_ENDPOINT=http://backbeat.example.com
 | |
| 
 | |
| # When enabled, agent tracks:
 | |
| # - P2P operation phases
 | |
| # - DHT bootstrap timing
 | |
| # - Election progression
 | |
| # - Task execution phases
 | |
| ```
 | |
| 
 | |
| **See:** [BACKBEAT Integration](../internal/backbeat.md)
 | |
| 
 | |
| ---
 | |
| 
 | |
| ## Example Deployments
 | |
| 
 | |
| ### Local Development
 | |
| 
 | |
| ```bash
 | |
| #!/bin/bash
 | |
| # Run local agent for development
 | |
| 
 | |
| export CHORUS_LICENSE_ID=dev-local-123
 | |
| export CHORUS_AGENT_ID=dev-agent-1
 | |
| export CHORUS_P2P_PORT=9000
 | |
| export CHORUS_API_PORT=8080
 | |
| export CHORUS_HEALTH_PORT=8081
 | |
| export OLLAMA_ENDPOINT=http://localhost:11434
 | |
| export CHORUS_DHT_ENABLED=false  # Disable DHT for local dev
 | |
| 
 | |
| ./chorus-agent
 | |
| ```
 | |
| 
 | |
| ### Docker Container
 | |
| 
 | |
| ```dockerfile
 | |
| FROM debian:bookworm-slim
 | |
| 
 | |
| # Install runtime dependencies
 | |
| RUN apt-get update && apt-get install -y \
 | |
|     ca-certificates \
 | |
|     docker.io \
 | |
|     && rm -rf /var/lib/apt/lists/*
 | |
| 
 | |
| # Copy binary
 | |
| COPY chorus-agent /usr/local/bin/chorus-agent
 | |
| 
 | |
| # Expose ports
 | |
| EXPOSE 9000 8080 8081
 | |
| 
 | |
| # Run as non-root
 | |
| USER nobody
 | |
| 
 | |
| ENTRYPOINT ["/usr/local/bin/chorus-agent"]
 | |
| ```
 | |
| 
 | |
| ```bash
 | |
| docker run -d \
 | |
|   --name chorus-agent-1 \
 | |
|   -e CHORUS_LICENSE_ID=prod-123 \
 | |
|   -e CHORUS_AGENT_ID=agent-1 \
 | |
|   -v /var/run/docker.sock:/var/run/docker.sock \
 | |
|   -p 9000:9000 \
 | |
|   -p 8080:8080 \
 | |
|   -p 8081:8081 \
 | |
|   chorus-agent:latest
 | |
| ```
 | |
| 
 | |
| ### Docker Swarm Service
 | |
| 
 | |
| ```yaml
 | |
| version: "3.8"
 | |
| services:
 | |
|   chorus-agent:
 | |
|     image: registry.example.com/chorus-agent:1.0.0
 | |
|     environment:
 | |
|       CHORUS_LICENSE_ID: ${CHORUS_LICENSE_ID}
 | |
|       CHORUS_P2P_PORT: 9000
 | |
|       CHORUS_API_PORT: 8080
 | |
|       CHORUS_DHT_ENABLED: "true"
 | |
|       CHORUS_BOOTSTRAP_PEERS: "/ip4/192.168.1.100/tcp/9000/p2p/12D3KooWABC..."
 | |
|       ASSIGN_URL: "https://whoosh.example.com/api/assignments/{{.Service.Name}}.{{.Task.Slot}}.json"
 | |
|     volumes:
 | |
|       - /var/run/docker.sock:/var/run/docker.sock:ro
 | |
|       - /rust/containers/WHOOSH/prompts:/prompts:ro
 | |
|     deploy:
 | |
|       replicas: 3
 | |
|       placement:
 | |
|         constraints:
 | |
|           - node.role == worker
 | |
|     networks:
 | |
|       - chorus-mesh
 | |
|     ports:
 | |
|       - target: 9000
 | |
|         published: 9000
 | |
|         mode: host
 | |
| ```
 | |
| 
 | |
| ---
 | |
| 
 | |
| ## Troubleshooting
 | |
| 
 | |
| ### Agent Won't Start
 | |
| 
 | |
| **Symptom:** Agent exits immediately with error
 | |
| 
 | |
| **Possible Causes:**
 | |
| 1. Invalid or missing license
 | |
|    ```
 | |
|    ❌ Failed to initialize CHORUS agent: license validation failed
 | |
|    ```
 | |
|    **Fix:** Check `CHORUS_LICENSE_ID` and KACHING server connectivity
 | |
| 
 | |
| 2. Docker socket not accessible
 | |
|    ```
 | |
|    ❌ Failed to create P2P node: failed to create Docker client
 | |
|    ```
 | |
|    **Fix:** Mount `/var/run/docker.sock` or check Docker daemon
 | |
| 
 | |
| 3. Port already in use
 | |
|    ```
 | |
|    ❌ Failed to initialize: bind: address already in use
 | |
|    ```
 | |
|    **Fix:** Change `CHORUS_P2P_PORT` or kill process on port
 | |
| 
 | |
| ### No Peer Discovery
 | |
| 
 | |
| **Symptom:** Agent starts but shows 0 connected peers
 | |
| 
 | |
| **Possible Causes:**
 | |
| 1. mDNS blocked by firewall
 | |
|    **Fix:** Allow UDP port 5353, or use bootstrap peers
 | |
| 
 | |
| 2. No bootstrap peers configured
 | |
|    **Fix:** Set `CHORUS_BOOTSTRAP_PEERS` with valid multiaddrs
 | |
| 
 | |
| 3. Network isolation
 | |
|    **Fix:** Ensure agents can reach each other on P2P ports
 | |
| 
 | |
| ### Tasks Not Executing
 | |
| 
 | |
| **Symptom:** Agent receives tasks but doesn't execute
 | |
| 
 | |
| **Possible Causes:**
 | |
| 1. Agent at max capacity
 | |
|    **Check:** `curl localhost:8080/metrics | grep chorus_tasks_active`
 | |
|    **Fix:** Increase `CHORUS_AGENT_MAX_TASKS`
 | |
| 
 | |
| 2. Docker images not available
 | |
|    **Check:** `docker images | grep chorus`
 | |
|    **Fix:** Pull images: `docker pull anthonyrawlins/chorus-rust-dev:latest`
 | |
| 
 | |
| 3. Wrong specialization
 | |
|    **Check:** Task language doesn't match agent expertise
 | |
|    **Fix:** Adjust `CHORUS_AGENT_EXPERTISE` or remove specialization
 | |
| 
 | |
| ### High Memory Usage
 | |
| 
 | |
| **Symptom:** Agent consuming excessive memory
 | |
| 
 | |
| **Possible Causes:**
 | |
| 1. DHT cache size too large
 | |
|    **Fix:** Reduce `CHORUS_DHT_CACHE_SIZE` (default 100MB)
 | |
| 
 | |
| 2. Too many concurrent tasks
 | |
|    **Fix:** Reduce `CHORUS_AGENT_MAX_TASKS`
 | |
| 
 | |
| 3. Memory leak in long-running containers
 | |
|    **Fix:** Restart agent periodically or investigate task code
 | |
| 
 | |
| ---
 | |
| 
 | |
| ## Related Documentation
 | |
| 
 | |
| - [chorus-hap](chorus-hap.md) - Human Agent Portal binary
 | |
| - [chorus](chorus.md) - Deprecated compatibility wrapper
 | |
| - [internal/runtime](../internal/runtime.md) - Shared runtime initialization
 | |
| - [Task Execution Engine](../packages/execution.md) - Task execution details
 | |
| - [Configuration](../deployment/configuration.md) - Environment variables reference
 | |
| - [Deployment](../deployment/docker.md) - Docker deployment guide
 | |
| 
 | |
| ---
 | |
| 
 | |
| ## Implementation Status
 | |
| 
 | |
| | Feature | Status | Notes |
 | |
| |---------|--------|-------|
 | |
| | P2P Networking | ✅ Production | libp2p, mDNS, DHT |
 | |
| | Task Execution | ✅ Production | Docker sandboxing |
 | |
| | License Validation | ✅ Production | KACHING integration |
 | |
| | HMMM Reasoning | 🔶 Beta | Collaborative meta-discussion |
 | |
| | UCXL Publishing | ✅ Production | Decision recording |
 | |
| | Election | ✅ Production | Democratic leader election |
 | |
| | Health Checks | ✅ Production | Liveness & readiness |
 | |
| | Metrics | ✅ Production | Prometheus format |
 | |
| | Assignment Loading | ✅ Production | WHOOSH integration |
 | |
| | SIGHUP Reload | ✅ Production | Dynamic reconfiguration |
 | |
| | BACKBEAT Telemetry | 🔶 Beta | Optional P2P tracking |
 | |
| 
 | |
| **Last Updated:** 2025-09-30 |