 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>
		
			
				
	
	
		
			1411 lines
		
	
	
		
			36 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			1411 lines
		
	
	
		
			36 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # chorus-hap - Human Agent Portal Binary
 | |
| 
 | |
| **Binary:** `chorus-hap`
 | |
| **Source:** `cmd/hap/main.go`
 | |
| **Status:** 🔶 Beta (Terminal interface: ✅ Production, Web interface: ⏳ Stubbed)
 | |
| **Purpose:** Human-friendly interface for participating in P2P agent networks
 | |
| 
 | |
| ---
 | |
| 
 | |
| ## Overview
 | |
| 
 | |
| `chorus-hap` (Human Agent Portal) is the executable that enables human users to participate in CHORUS P2P agent networks as first-class peers. Unlike autonomous agents, HAP provides interactive interfaces (terminal and web) for humans to collaborate with agents using the same protocols.
 | |
| 
 | |
| ### Key Features
 | |
| 
 | |
| - ✅ **Terminal Interface**: Full-featured command-line interaction (Production)
 | |
| - ⏳ **Web Interface**: Browser-based UI (Stubbed, falls back to terminal)
 | |
| - ✅ **HMMM Composition**: Human-friendly reasoning message helpers
 | |
| - ✅ **UCXL Browsing**: Navigate and explore context addresses
 | |
| - ✅ **Decision Participation**: Vote on network decisions
 | |
| - ✅ **Collaborative Sessions**: Multi-party editing coordination
 | |
| - ✅ **Patch Creation**: Submit changes to codebase
 | |
| - ✅ **P2P Protocols**: Same networking as autonomous agents
 | |
| - ✅ **Peer Management**: View and interact with network peers
 | |
| 
 | |
| ### Human vs Agent Mode
 | |
| 
 | |
| | Feature | chorus-agent | chorus-hap |
 | |
| |---------|--------------|------------|
 | |
| | **Task Execution** | Automatic | Manual approval required |
 | |
| | **UI Mode** | Headless | Terminal or Web |
 | |
| | **HMMM Messages** | AI-generated | Human-composed |
 | |
| | **Decision Making** | Autonomous | Interactive prompts |
 | |
| | **Network Role** | Autonomous peer | Human peer |
 | |
| | **Use Case** | Batch processing | Oversight & collaboration |
 | |
| 
 | |
| ---
 | |
| 
 | |
| ## Usage
 | |
| 
 | |
| ### Basic Invocation
 | |
| 
 | |
| ```bash
 | |
| # With required environment variables
 | |
| CHORUS_LICENSE_ID=dev-123 \
 | |
| CHORUS_AGENT_ID=human-alice \
 | |
| CHORUS_HAP_MODE=terminal \
 | |
| ./chorus-hap
 | |
| ```
 | |
| 
 | |
| ### Help Output
 | |
| 
 | |
| ```bash
 | |
| $ ./chorus-hap --help
 | |
| CHORUS-hap 0.5.0-dev
 | |
| 
 | |
| Usage:
 | |
|   chorus-hap [--help] [--version]
 | |
| 
 | |
| CHORUS Human Agent Portal - Human Interface to P2P Agent Networks
 | |
| 
 | |
| This binary provides a human-friendly interface to participate in P2P agent
 | |
| coordination networks. Humans can collaborate with autonomous agents using
 | |
| the same protocols and appear as peers in the distributed network.
 | |
| 
 | |
| 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)
 | |
| 
 | |
| HAP-Specific Environment:
 | |
|   CHORUS_HAP_MODE                (terminal|web, default terminal)
 | |
|   CHORUS_HAP_WEB_PORT            (default 8082)
 | |
| 
 | |
| Example:
 | |
|   CHORUS_LICENSE_ID=dev-123 \
 | |
|   CHORUS_AGENT_ID=human-alice \
 | |
|   CHORUS_HAP_MODE=terminal \
 | |
|   CHORUS_P2P_PORT=9001 ./chorus-hap
 | |
| 
 | |
| HAP Features:
 | |
|   - Human-friendly message composition
 | |
|   - HMMM reasoning template helpers
 | |
|   - UCXL context browsing
 | |
|   - Collaborative decision participation
 | |
|   - Terminal and web interface modes
 | |
|   - Same P2P protocols as autonomous agents
 | |
| ```
 | |
| 
 | |
| ### Version Information
 | |
| 
 | |
| ```bash
 | |
| $ ./chorus-hap --version
 | |
| CHORUS-hap 0.5.0-dev
 | |
| ```
 | |
| 
 | |
| ---
 | |
| 
 | |
| ## Source Code Analysis
 | |
| 
 | |
| ### File: `cmd/hap/main.go`
 | |
| 
 | |
| **Lines:** 126
 | |
| **Package:** main
 | |
| **Imports:**
 | |
| - `chorus/internal/hapui` - Terminal and web interface implementations
 | |
| - `chorus/internal/runtime` - Shared P2P runtime infrastructure
 | |
| 
 | |
| ### main() Function Flow
 | |
| 
 | |
| ```go
 | |
| func main() {
 | |
|     // 1. CLI Argument Handling (lines 14-58)
 | |
|     //    - Check for --help, -h, help
 | |
|     //    - Check for --version, -v
 | |
|     //    - Print usage and exit early if found
 | |
| 
 | |
|     // 2. Initialize Shared Runtime (lines 60-66)
 | |
|     sharedRuntime, err := runtime.Initialize("hap")
 | |
|     if err != nil {
 | |
|         // Fatal error, exit 1
 | |
|     }
 | |
|     defer sharedRuntime.Cleanup()
 | |
| 
 | |
|     // 3. Start HAP Mode (lines 68-72)
 | |
|     if err := startHAPMode(sharedRuntime); err != nil {
 | |
|         // Fatal error, exit 1
 | |
|     }
 | |
| }
 | |
| ```
 | |
| 
 | |
| ### Execution Phases
 | |
| 
 | |
| #### Phase 1: Early CLI Handling (lines 14-58)
 | |
| 
 | |
| **Purpose:** Handle help/version requests without loading configuration
 | |
| 
 | |
| **Code:**
 | |
| ```go
 | |
| for _, a := range os.Args[1:] {
 | |
|     switch a {
 | |
|     case "--help", "-h", "help":
 | |
|         // Print HAP-specific help with terminal/web mode info
 | |
|         fmt.Printf("%s-hap %s\n\n", runtime.AppName, runtime.AppVersion)
 | |
|         // ... detailed usage information ...
 | |
|         return
 | |
|     case "--version", "-v":
 | |
|         fmt.Printf("%s-hap %s\n", runtime.AppName, runtime.AppVersion)
 | |
|         return
 | |
|     }
 | |
| }
 | |
| ```
 | |
| 
 | |
| **Help Output Details (lines 17-52):**
 | |
| - Describes HAP purpose and human participation model
 | |
| - Lists common environment variables (same as chorus-agent)
 | |
| - Lists HAP-specific variables (mode, web port)
 | |
| - Shows example invocation with human-focused agent ID
 | |
| - Highlights features: HMMM helpers, UCXL browsing, decision participation
 | |
| 
 | |
| **Why Important:** Users can explore HAP capabilities without needing valid license.
 | |
| 
 | |
| #### Phase 2: Runtime Initialization (line 61)
 | |
| 
 | |
| **Function Call:** `runtime.Initialize("hap")`
 | |
| 
 | |
| **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 (same as agent)
 | |
| 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
 | |
| 
 | |
| **Returns:** `*runtime.SharedRuntime` containing all initialized components
 | |
| 
 | |
| **Key Difference from Agent:** Mode parameter is `"hap"` instead of `"agent"`, which configures runtime for human interaction patterns.
 | |
| 
 | |
| **See:** [internal/runtime Documentation](../internal/runtime.md) for complete initialization details
 | |
| 
 | |
| #### Phase 3: HAP Mode Selection (lines 75-95)
 | |
| 
 | |
| **Function:** `startHAPMode(runtime *runtime.SharedRuntime) error`
 | |
| 
 | |
| **What Happens:**
 | |
| 1. Reads `CHORUS_HAP_MODE` environment variable (default: "terminal")
 | |
| 2. Routes to appropriate interface:
 | |
|    - **"terminal"**: Starts interactive command-line interface
 | |
|    - **"web"**: Attempts web interface (falls back to terminal if stubbed)
 | |
|    - **Invalid**: Returns error
 | |
| 
 | |
| **Code:**
 | |
| ```go
 | |
| func startHAPMode(runtime *runtime.SharedRuntime) error {
 | |
|     runtime.Logger.Info("👤 Starting CHORUS Human Agent Portal (HAP)")
 | |
|     runtime.Logger.Info("🔗 Connected to P2P network as human agent")
 | |
|     runtime.Logger.Info("📝 Ready for collaborative reasoning and decision making")
 | |
| 
 | |
|     hapMode := os.Getenv("CHORUS_HAP_MODE")
 | |
|     if hapMode == "" {
 | |
|         hapMode = "terminal"
 | |
|     }
 | |
| 
 | |
|     switch hapMode {
 | |
|     case "terminal":
 | |
|         return startTerminalInterface(runtime)
 | |
|     case "web":
 | |
|         return startWebInterface(runtime)
 | |
|     default:
 | |
|         return fmt.Errorf("unknown HAP mode: %s (valid: terminal, web)", hapMode)
 | |
|     }
 | |
| }
 | |
| ```
 | |
| 
 | |
| #### Phase 4: Terminal Interface (lines 97-108)
 | |
| 
 | |
| **Function:** `startTerminalInterface(runtime *runtime.SharedRuntime) error`
 | |
| 
 | |
| **Implementation:**
 | |
| ```go
 | |
| func startTerminalInterface(runtime *runtime.SharedRuntime) error {
 | |
|     runtime.Logger.Info("💻 Starting terminal interface for human interaction")
 | |
| 
 | |
|     // Create and start the HAP terminal interface
 | |
|     terminal := hapui.NewTerminalInterface(runtime)
 | |
| 
 | |
|     runtime.Logger.Info("🎯 Human agent terminal interface ready")
 | |
| 
 | |
|     // Start the interactive terminal (blocks until quit)
 | |
|     return terminal.Start()
 | |
| }
 | |
| ```
 | |
| 
 | |
| **Terminal Capabilities:**
 | |
| - Interactive REPL with `hap>` prompt
 | |
| - Command parsing and execution
 | |
| - HMMM message composition with templates
 | |
| - UCXL context browsing
 | |
| - Network status monitoring
 | |
| - Peer management
 | |
| - Decision voting
 | |
| - Collaborative session management
 | |
| - Patch submission
 | |
| 
 | |
| **See:** Terminal Interface Details section for full command reference
 | |
| 
 | |
| #### Phase 5: Web Interface (lines 110-126)
 | |
| 
 | |
| **Function:** `startWebInterface(runtime *runtime.SharedRuntime) error`
 | |
| 
 | |
| **Current Status:** ⏳ **STUBBED** - Phase 3 Implementation
 | |
| 
 | |
| **Code:**
 | |
| ```go
 | |
| func startWebInterface(runtime *runtime.SharedRuntime) error {
 | |
|     runtime.Logger.Info("🌐 Starting web interface for human interaction")
 | |
| 
 | |
|     // TODO Phase 3: Implement web interface
 | |
|     // - HTTP server with WebSocket for real-time updates
 | |
|     // - Web forms for HMMM message composition
 | |
|     // - Context browser UI
 | |
|     // - Decision voting interface
 | |
| 
 | |
|     runtime.Logger.Info("⚠️ Web interface not yet implemented")
 | |
|     runtime.Logger.Info("🔄 HAP running in stub mode - P2P connectivity established")
 | |
|     runtime.Logger.Info("📍 Next: Implement Phase 3 web interface")
 | |
| 
 | |
|     // For now, fall back to terminal mode
 | |
|     return startTerminalInterface(runtime)
 | |
| }
 | |
| ```
 | |
| 
 | |
| **Planned Features (Phase 3):**
 | |
| - HTTP server with WebSocket for real-time updates
 | |
| - Web forms for HMMM message composition
 | |
| - Visual context browser UI
 | |
| - Interactive decision voting interface
 | |
| - Multi-user collaborative session views
 | |
| - Real-time network status dashboard
 | |
| 
 | |
| **Current Behavior:** Falls back to terminal interface with warning logs
 | |
| 
 | |
| ---
 | |
| 
 | |
| ## Terminal Interface
 | |
| 
 | |
| ### Implementation Details
 | |
| 
 | |
| **Source:** `internal/hapui/terminal.go`
 | |
| **Lines:** ~3985
 | |
| **Status:** ✅ Production
 | |
| 
 | |
| ### Welcome Screen
 | |
| 
 | |
| When terminal interface starts:
 | |
| 
 | |
| ```
 | |
| ================================================================================
 | |
| 🎭 CHORUS Human Agent Portal (HAP) - Terminal Interface
 | |
| ================================================================================
 | |
| Agent ID: human-alice
 | |
| P2P Node: 12D3KooW...short
 | |
| Connected to: 3 peers
 | |
| 
 | |
| You are now connected to the CHORUS P2P agent network as a human participant.
 | |
| You can collaborate with autonomous agents using the same protocols.
 | |
| ================================================================================
 | |
| ```
 | |
| 
 | |
| ### Available Commands
 | |
| 
 | |
| #### Core Commands
 | |
| 
 | |
| | Command | Description | Status |
 | |
| |---------|-------------|--------|
 | |
| | `help` | Show command reference | ✅ |
 | |
| | `status` | Show network and agent status | ✅ |
 | |
| | `peers` | List connected P2P peers | ✅ |
 | |
| | `quit` | Exit HAP terminal | ✅ |
 | |
| | `announce` | Re-announce human agent presence | ✅ |
 | |
| 
 | |
| #### Collaborative Commands
 | |
| 
 | |
| | Command | Description | Status |
 | |
| |---------|-------------|--------|
 | |
| | `hmmm` | Compose and send HMMM reasoning message | ✅ |
 | |
| | `ucxl <address>` | Browse UCXL context address | ✅ |
 | |
| | `patch` | Create and submit patches | ✅ |
 | |
| | `collab` | Collaborative editing sessions | ✅ |
 | |
| | `decide <topic>` | Participate in distributed decision | ✅ |
 | |
| 
 | |
| #### Advanced Commands
 | |
| 
 | |
| | Command | Description | Status |
 | |
| |---------|-------------|--------|
 | |
| | `web` | Start web bridge for browser access | 🔶 Beta |
 | |
| 
 | |
| ### Command Details
 | |
| 
 | |
| #### `status` - Network Status
 | |
| 
 | |
| **Usage:** `status`
 | |
| 
 | |
| **Output:**
 | |
| ```
 | |
| Network Status:
 | |
|   Agent ID: human-alice
 | |
|   P2P Node ID: 12D3KooWABC...
 | |
|   Listening Addresses:
 | |
|     - /ip4/192.168.1.100/tcp/9001
 | |
|     - /ip6/::1/tcp/9001
 | |
|   Connected Peers: 5
 | |
|   DHT Status: Active
 | |
|   Election: Follower (current leader: chorus-agent-3)
 | |
|   Active Tasks: 0/5
 | |
| ```
 | |
| 
 | |
| **Implementation:** Queries `runtime.SharedRuntime` for live status
 | |
| 
 | |
| #### `peers` - Peer List
 | |
| 
 | |
| **Usage:** `peers`
 | |
| 
 | |
| **Output:**
 | |
| ```
 | |
| Connected Peers (5):
 | |
|   1. chorus-agent-1 (12D3KooWXYZ...)
 | |
|      Type: autonomous
 | |
|      Address: /ip4/192.168.1.101/tcp/9000
 | |
|      Latency: 15ms
 | |
| 
 | |
|   2. chorus-agent-2 (12D3KooWABC...)
 | |
|      Type: autonomous
 | |
|      Address: /ip4/192.168.1.102/tcp/9000
 | |
|      Latency: 22ms
 | |
| 
 | |
|   3. human-bob (12D3KooWDEF...)
 | |
|      Type: human
 | |
|      Address: /ip4/192.168.1.103/tcp/9001
 | |
|      Latency: 8ms
 | |
| ```
 | |
| 
 | |
| **Implementation:** Enumerates `runtime.Node.ConnectedPeers()` with metadata
 | |
| 
 | |
| #### `hmmm` - HMMM Message Composition
 | |
| 
 | |
| **Usage:** `hmmm`
 | |
| 
 | |
| **Interactive Flow:**
 | |
| 
 | |
| ```
 | |
| hap> hmmm
 | |
| 
 | |
| 📝 Composing HMMM (Hierarchical Meta-level Model of Meaning) Message
 | |
| ====================================================================
 | |
| 
 | |
| Select HMMM message type:
 | |
|   1. Observation - Share an observation about the system
 | |
|   2. Question - Ask peers for input
 | |
|   3. Proposal - Propose a solution or approach
 | |
|   4. Objection - Raise concerns about a proposal
 | |
|   5. Synthesis - Summarize discussion or findings
 | |
| 
 | |
| Enter selection [1-5]: 3
 | |
| 
 | |
| Enter proposal title: Implement rate limiting for API endpoints
 | |
| 
 | |
| Enter proposal description (end with empty line):
 | |
| > We should add rate limiting to prevent abuse of public API endpoints.
 | |
| > Suggested approach: token bucket algorithm with 100 req/min per IP.
 | |
| > This would protect against DoS attacks while allowing normal usage.
 | |
| >
 | |
| 
 | |
| Enter affected components (comma-separated, optional): api,security
 | |
| 
 | |
| Confidence level (0.0-1.0) [0.8]: 0.9
 | |
| 
 | |
| Preview:
 | |
| --------
 | |
| Type: Proposal
 | |
| Title: Implement rate limiting for API endpoints
 | |
| Description: We should add rate limiting to prevent abuse of public API...
 | |
| Components: api, security
 | |
| Confidence: 0.9
 | |
| Author: human-alice
 | |
| 
 | |
| Send this HMMM message? [y/N]: y
 | |
| 
 | |
| ✅ HMMM message sent to network (ID: hmmm-20250930-abc123)
 | |
| 📡 Published to topic: hmmm/meta-discussion/v1
 | |
| ```
 | |
| 
 | |
| **Implementation:**
 | |
| - Guided wizard for HMMM message construction
 | |
| - Validation of message fields
 | |
| - Publishes to `hmmm/meta-discussion/v1` PubSub topic
 | |
| - Records message in local history
 | |
| 
 | |
| #### `ucxl <address>` - UCXL Context Browser
 | |
| 
 | |
| **Usage:** `ucxl <ucxl-address>`
 | |
| 
 | |
| **Example:**
 | |
| ```
 | |
| hap> ucxl ucxl://chorus/decision/20250930/task-123
 | |
| 
 | |
| 📍 UCXL Context Browser
 | |
| ====================================================================
 | |
| Address: ucxl://chorus/decision/20250930/task-123
 | |
| 
 | |
| Metadata:
 | |
|   Type: decision
 | |
|   Created: 2025-09-30 14:32:15 UTC
 | |
|   Creator: chorus-agent-1
 | |
|   Status: completed
 | |
| 
 | |
| Content:
 | |
| {
 | |
|   "task_id": "task-123",
 | |
|   "description": "Implement API rate limiting",
 | |
|   "outcome": "approved",
 | |
|   "votes": {
 | |
|     "approve": 3,
 | |
|     "reject": 0,
 | |
|     "defer": 1
 | |
|   },
 | |
|   "participants": [
 | |
|     "chorus-agent-1",
 | |
|     "chorus-agent-2",
 | |
|     "human-alice"
 | |
|   ]
 | |
| }
 | |
| 
 | |
| Related Contexts:
 | |
|   - ucxl://chorus/task/20250930/task-123 (parent task)
 | |
|   - ucxl://chorus/hmmm/20250930/proposal-xyz (related discussion)
 | |
| 
 | |
| [Press 'p' for parent, 'r' for related, 'q' to quit browser]
 | |
| ```
 | |
| 
 | |
| **Implementation:**
 | |
| - Resolves UCXL address via DHT
 | |
| - Parses and displays context data
 | |
| - Supports navigation to related contexts
 | |
| - Interactive browser for exploration
 | |
| 
 | |
| #### `decide <topic>` - Decision Participation
 | |
| 
 | |
| **Usage:** `decide <decision-topic>`
 | |
| 
 | |
| **Interactive Flow:**
 | |
| 
 | |
| ```
 | |
| hap> decide api-rate-limiting
 | |
| 
 | |
| 🗳️ Decision Participation: api-rate-limiting
 | |
| ====================================================================
 | |
| 
 | |
| Decision: Should we implement rate limiting on API endpoints?
 | |
| Proposed by: chorus-agent-1 (autonomous)
 | |
| Status: voting
 | |
| Deadline: 2025-09-30 18:00:00 UTC (2h 15m remaining)
 | |
| 
 | |
| Current Votes:
 | |
|   ✅ Approve: 2 (chorus-agent-1, chorus-agent-2)
 | |
|   ❌ Reject: 0
 | |
|   ⏸️ Defer: 1 (chorus-agent-3)
 | |
|   ⭕ Abstain: 0
 | |
| 
 | |
| Your vote [approve/reject/defer/abstain]: approve
 | |
| 
 | |
| Enter reasoning (optional, end with empty line):
 | |
| > Rate limiting is essential for API security. The proposed token bucket
 | |
| > approach is standard and well-tested. I support implementation.
 | |
| >
 | |
| 
 | |
| Confidence level (0.0-1.0) [0.8]: 0.9
 | |
| 
 | |
| Confirm vote:
 | |
|   Decision: api-rate-limiting
 | |
|   Vote: approve
 | |
|   Reasoning: Rate limiting is essential...
 | |
|   Confidence: 0.9
 | |
| 
 | |
| Submit this vote? [y/N]: y
 | |
| 
 | |
| ✅ Vote submitted successfully
 | |
| 📡 Published to topic: chorus/decisions
 | |
| 📍 UCXL recorded: ucxl://chorus/vote/20250930/human-alice-rate-limiting
 | |
| ```
 | |
| 
 | |
| **Implementation:**
 | |
| - Fetches decision from DHT
 | |
| - Displays current voting status
 | |
| - Collects human vote with reasoning
 | |
| - Publishes vote to network
 | |
| - Records vote in UCXL
 | |
| 
 | |
| #### `patch` - Patch Creation
 | |
| 
 | |
| **Usage:** `patch`
 | |
| 
 | |
| **Interactive Flow:**
 | |
| 
 | |
| ```
 | |
| hap> patch
 | |
| 
 | |
| 🔧 Patch Creation & Submission
 | |
| ====================================================================
 | |
| 
 | |
| Enter patch title: Fix typo in API documentation
 | |
| 
 | |
| Enter files affected (one per line, empty to finish):
 | |
| > docs/api/endpoints.md
 | |
| >
 | |
| 
 | |
| Enter patch description:
 | |
| > Fixed spelling error: "recieve" -> "receive" in authentication section
 | |
| >
 | |
| 
 | |
| Enter patch diff or file path:
 | |
| > --- a/docs/api/endpoints.md
 | |
| > +++ b/docs/api/endpoints.md
 | |
| > @@ -15,7 +15,7 @@
 | |
| >  Authentication
 | |
| >  --------------
 | |
| >
 | |
| > -All API requests must include a valid token to recieve a response.
 | |
| > +All API requests must include a valid token to receive a response.
 | |
| >
 | |
| >  Token format: Bearer <token>
 | |
| >
 | |
| 
 | |
| Submit patch to network? [y/N]: y
 | |
| 
 | |
| ✅ Patch submitted (ID: patch-20250930-abc123)
 | |
| 📡 Published to topic: chorus/patches
 | |
| 📍 UCXL recorded: ucxl://chorus/patch/20250930/human-alice-typo-fix
 | |
| 
 | |
| Awaiting peer review...
 | |
| ```
 | |
| 
 | |
| **Implementation:**
 | |
| - Guided patch creation wizard
 | |
| - Supports diff input or file paths
 | |
| - Publishes patch to network
 | |
| - Creates UCXL record for tracking
 | |
| - Notifies peers for review
 | |
| 
 | |
| #### `collab` - Collaborative Sessions
 | |
| 
 | |
| **Usage:** `collab [start|join|status|leave]`
 | |
| 
 | |
| **Subcommands:**
 | |
| 
 | |
| **`collab start`** - Start new session:
 | |
| ```
 | |
| hap> collab start
 | |
| 
 | |
| Starting collaborative editing session...
 | |
| Session ID: collab-20250930-xyz789
 | |
| Owner: human-alice
 | |
| Status: active
 | |
| 
 | |
| Share this command with collaborators:
 | |
|   collab join collab-20250930-xyz789
 | |
| 
 | |
| Waiting for participants...
 | |
| ```
 | |
| 
 | |
| **`collab join <session-id>`** - Join existing session:
 | |
| ```
 | |
| hap> collab join collab-20250930-xyz789
 | |
| 
 | |
| Joining collaborative session...
 | |
| Session ID: collab-20250930-xyz789
 | |
| Owner: human-bob
 | |
| Participants: human-bob, chorus-agent-5
 | |
| 
 | |
| ✅ Joined session successfully
 | |
| Real-time editing enabled
 | |
| ```
 | |
| 
 | |
| **`collab status`** - Show session info:
 | |
| ```
 | |
| hap> collab status
 | |
| 
 | |
| Active Collaborative Session:
 | |
|   Session ID: collab-20250930-xyz789
 | |
|   Owner: human-bob
 | |
|   Participants:
 | |
|     - human-bob (owner)
 | |
|     - human-alice (you)
 | |
|     - chorus-agent-5
 | |
|   Status: active
 | |
|   Created: 15m ago
 | |
| ```
 | |
| 
 | |
| **`collab leave`** - Exit session:
 | |
| ```
 | |
| hap> collab leave
 | |
| 
 | |
| Left collaborative session collab-20250930-xyz789
 | |
| ```
 | |
| 
 | |
| **Implementation:**
 | |
| - Creates distributed editing session
 | |
| - Uses PubSub for real-time updates
 | |
| - Supports human and agent participants
 | |
| - Tracks session state in DHT
 | |
| 
 | |
| #### `web` - Web Bridge
 | |
| 
 | |
| **Usage:** `web [start|stop|status]`
 | |
| 
 | |
| **Status:** 🔶 Beta
 | |
| 
 | |
| **Subcommands:**
 | |
| 
 | |
| **`web start`** - Start web server:
 | |
| ```
 | |
| hap> web start
 | |
| 
 | |
| Starting web bridge server...
 | |
| Listening on: http://localhost:8082
 | |
| WebSocket endpoint: ws://localhost:8082/ws
 | |
| 
 | |
| Open in browser: http://localhost:8082
 | |
| 
 | |
| Web bridge ready for browser connections
 | |
| ```
 | |
| 
 | |
| **`web stop`** - Stop web server:
 | |
| ```
 | |
| hap> web stop
 | |
| 
 | |
| Stopping web bridge server...
 | |
| Web bridge stopped
 | |
| ```
 | |
| 
 | |
| **`web status`** - Show web server status:
 | |
| ```
 | |
| hap> web status
 | |
| 
 | |
| Web Bridge Status:
 | |
|   Running: Yes
 | |
|   Listen Address: http://localhost:8082
 | |
|   Active Connections: 2
 | |
|   Uptime: 1h 23m
 | |
| ```
 | |
| 
 | |
| **Implementation:**
 | |
| - Starts HTTP server with WebSocket
 | |
| - Bridges terminal commands to web UI
 | |
| - Allows browser-based interaction
 | |
| - Maintains terminal session alongside web
 | |
| 
 | |
| ### Command Loop Structure
 | |
| 
 | |
| **Implementation** (`internal/hapui/terminal.go` lines 131-180):
 | |
| 
 | |
| ```go
 | |
| func (t *TerminalInterface) commandLoop() {
 | |
|     for {
 | |
|         fmt.Print("hap> ")
 | |
| 
 | |
|         if !t.scanner.Scan() {
 | |
|             break  // EOF or error
 | |
|         }
 | |
| 
 | |
|         input := strings.TrimSpace(t.scanner.Text())
 | |
|         if input == "" {
 | |
|             continue
 | |
|         }
 | |
| 
 | |
|         parts := strings.Fields(input)
 | |
|         command := strings.ToLower(parts[0])
 | |
| 
 | |
|         switch command {
 | |
|         case "help", "h":
 | |
|             t.printHelp()
 | |
|         case "status", "s":
 | |
|             t.showStatus()
 | |
|         case "peers", "p":
 | |
|             t.listPeers()
 | |
|         case "hmmm":
 | |
|             t.composeHMMMMessage()
 | |
|         case "ucxl":
 | |
|             if len(parts) < 2 {
 | |
|                 fmt.Println("Usage: ucxl <address>")
 | |
|                 continue
 | |
|             }
 | |
|             t.browseUCXL(parts[1])
 | |
|         case "patch":
 | |
|             t.createPatch()
 | |
|         case "collab":
 | |
|             t.handleCollabCommand(parts[1:])
 | |
|         case "decide":
 | |
|             if len(parts) < 2 {
 | |
|                 fmt.Println("Usage: decide <topic>")
 | |
|                 continue
 | |
|             }
 | |
|             t.participateInDecision(parts[1])
 | |
|         case "web":
 | |
|             t.handleWebCommand(parts[1:])
 | |
|         case "announce":
 | |
|             t.announceHumanAgent()
 | |
|         case "quit", "q", "exit":
 | |
|             t.Stop()
 | |
|             return
 | |
|         default:
 | |
|             fmt.Printf("Unknown command: %s (type 'help' for commands)\n", command)
 | |
|         }
 | |
|     }
 | |
| }
 | |
| ```
 | |
| 
 | |
| ---
 | |
| 
 | |
| ## 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 | Human agent identifier (e.g., `human-alice`) |
 | |
| | `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 |
 | |
| 
 | |
| ### HAP-Specific Variables
 | |
| 
 | |
| | Variable | Default | Description |
 | |
| |----------|---------|-------------|
 | |
| | `CHORUS_HAP_MODE` | terminal | Interface mode: `terminal` or `web` |
 | |
| | `CHORUS_HAP_WEB_PORT` | 8082 | Web interface HTTP port (when mode=web) |
 | |
| 
 | |
| ### Naming Conventions
 | |
| 
 | |
| **Human Agent IDs:**
 | |
| Use human-recognizable names to distinguish from autonomous agents:
 | |
| 
 | |
| ```bash
 | |
| # Good examples
 | |
| CHORUS_AGENT_ID=human-alice
 | |
| CHORUS_AGENT_ID=human-bob-reviewer
 | |
| CHORUS_AGENT_ID=human-ops-team
 | |
| 
 | |
| # Less clear (looks like autonomous agent)
 | |
| CHORUS_AGENT_ID=agent-123
 | |
| CHORUS_AGENT_ID=chorus-worker-1
 | |
| ```
 | |
| 
 | |
| ---
 | |
| 
 | |
| ## Runtime Behavior
 | |
| 
 | |
| ### Startup Sequence
 | |
| 
 | |
| ```
 | |
| 1. Parse CLI arguments
 | |
|    ├─→ --help → print help, exit 0
 | |
|    ├─→ --version → print version, exit 0
 | |
|    └─→ (none) → continue
 | |
| 
 | |
| 2. 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
 | |
| 
 | |
| 3. Determine HAP mode
 | |
|    ├─→ Read CHORUS_HAP_MODE
 | |
|    ├─→ Default to "terminal"
 | |
|    └─→ Validate mode (terminal or web)
 | |
| 
 | |
| 4. Start appropriate interface
 | |
|    ├─→ TERMINAL:
 | |
|    │   ├─→ Create TerminalInterface
 | |
|    │   ├─→ Print welcome message
 | |
|    │   ├─→ Show help
 | |
|    │   ├─→ Announce human agent to network
 | |
|    │   └─→ Start command loop (blocking)
 | |
|    │
 | |
|    └─→ WEB (currently stubbed):
 | |
|        ├─→ Log web mode request
 | |
|        ├─→ Log stub status warning
 | |
|        ├─→ Fall back to terminal mode
 | |
|        └─→ TODO: Start HTTP server with WebSocket
 | |
| 
 | |
| 5. Run until quit command or signal
 | |
|    ├─→ Terminal: wait for 'quit' command
 | |
|    └─→ Web: wait for SIGINT/SIGTERM
 | |
| 
 | |
| 6. Cleanup on shutdown
 | |
|    ├─→ Close active collaborative sessions
 | |
|    ├─→ Unsubscribe from PubSub topics
 | |
|    ├─→ Close P2P connections
 | |
|    ├─→ Stop HTTP servers
 | |
|    └─→ Exit gracefully
 | |
| ```
 | |
| 
 | |
| ### Signal Handling
 | |
| 
 | |
| | Signal | Behavior |
 | |
| |--------|----------|
 | |
| | SIGINT (Ctrl+C) | Graceful shutdown, close sessions |
 | |
| | SIGTERM | Graceful shutdown |
 | |
| | SIGHUP | Reload configuration (if applicable) |
 | |
| 
 | |
| ### Human Participation Model
 | |
| 
 | |
| **Differences from Autonomous Agents:**
 | |
| 
 | |
| | Aspect | chorus-agent | chorus-hap |
 | |
| |--------|--------------|------------|
 | |
| | **Task Assignment** | Accepts automatically | Prompts human for approval |
 | |
| | **HMMM Messages** | AI-generated reasoning | Human-composed reasoning |
 | |
| | **Decision Voting** | Autonomous voting | Interactive voting prompts |
 | |
| | **Code Execution** | Automatic in sandbox | Manual approval required |
 | |
| | **Availability** | 24/7 operation | Human working hours |
 | |
| | **Network Role** | Autonomous peer | Human oversight peer |
 | |
| 
 | |
| **Announcement to Network:**
 | |
| 
 | |
| On startup, HAP announces human presence:
 | |
| 
 | |
| ```json
 | |
| {
 | |
|   "type": "peer_announcement",
 | |
|   "agent_id": "human-alice",
 | |
|   "agent_type": "human",
 | |
|   "capabilities": [
 | |
|     "hmmm_composition",
 | |
|     "decision_participation",
 | |
|     "code_review",
 | |
|     "collaborative_editing"
 | |
|   ],
 | |
|   "availability": "interactive",
 | |
|   "timestamp": "2025-09-30T14:30:00Z"
 | |
| }
 | |
| ```
 | |
| 
 | |
| Published to: `chorus/coordination/v1` topic
 | |
| 
 | |
| **Purpose:**
 | |
| - Helps autonomous agents identify human peers
 | |
| - Adjusts interaction patterns (e.g., wait for human responses)
 | |
| - Enables mixed human-agent collaboration
 | |
| 
 | |
| ---
 | |
| 
 | |
| ## P2P Networking
 | |
| 
 | |
| ### Peer Discovery
 | |
| 
 | |
| **Same as chorus-agent:**
 | |
| 
 | |
| **mDNS (Local):**
 | |
| - Discovers peers on local network
 | |
| - Service name: `chorus-peer-discovery`
 | |
| - Automatic peer connection
 | |
| 
 | |
| **DHT (Global):**
 | |
| - Discovers peers across networks
 | |
| - Requires bootstrap peers
 | |
| - Content-addressed routing
 | |
| 
 | |
| ### Topics Subscribed
 | |
| 
 | |
| | Topic | Purpose |
 | |
| |-------|---------|
 | |
| | `chorus/coordination/v1` | Task coordination messages |
 | |
| | `hmmm/meta-discussion/v1` | Collaborative reasoning (human participates here) |
 | |
| | `chorus/election/v1` | Leader election heartbeats |
 | |
| | `chorus/decisions` | Decision announcements (voting) |
 | |
| | `chorus/patches` | Patch submission and review |
 | |
| | `chorus/collaborative` | Collaborative editing sessions |
 | |
| | `chorus/health` | Health status broadcasts |
 | |
| 
 | |
| ### Human-Specific Behaviors
 | |
| 
 | |
| **Slower Response Times:**
 | |
| HAP doesn't auto-respond to messages. Autonomous agents should:
 | |
| - Wait longer for human responses
 | |
| - Include timeout considerations
 | |
| - Provide clear prompts/context
 | |
| 
 | |
| **Interactive Approval:**
 | |
| Tasks requiring human execution trigger interactive prompts:
 | |
| ```
 | |
| hap>
 | |
| 🔔 Task Assignment Request
 | |
| ====================================================================
 | |
| Task ID: task-123
 | |
| From: chorus-agent-2
 | |
| Description: Review security patch for API endpoints
 | |
| Priority: high
 | |
| Estimated Time: 30 minutes
 | |
| 
 | |
| Accept this task? [y/N]: _
 | |
| ```
 | |
| 
 | |
| ---
 | |
| 
 | |
| ## Health Checks
 | |
| 
 | |
| ### HTTP Endpoints
 | |
| 
 | |
| **Liveness Probe:**
 | |
| ```bash
 | |
| curl http://localhost:8081/healthz
 | |
| # Returns: 200 OK if HAP is alive
 | |
| ```
 | |
| 
 | |
| **Readiness Probe:**
 | |
| ```bash
 | |
| curl http://localhost:8081/ready
 | |
| # Returns: 200 OK if HAP is ready (human available)
 | |
| # Returns: 503 if human is away/unavailable
 | |
| ```
 | |
| 
 | |
| **Health Details:**
 | |
| ```bash
 | |
| curl http://localhost:8081/health
 | |
| # Returns JSON with:
 | |
| # - P2P connectivity status
 | |
| # - Interface mode (terminal/web)
 | |
| # - Active sessions
 | |
| # - Human availability status
 | |
| ```
 | |
| 
 | |
| ### Availability Indicators
 | |
| 
 | |
| HAP reports human availability status:
 | |
| 
 | |
| | Status | Meaning |
 | |
| |--------|---------|
 | |
| | `available` | Human actively using terminal |
 | |
| | `idle` | Terminal open but no recent activity |
 | |
| | `away` | Extended idle period |
 | |
| | `offline` | HAP closed |
 | |
| 
 | |
| **Implementation:**
 | |
| - Tracks last command timestamp
 | |
| - Idle timeout: 15 minutes → `idle`
 | |
| - Away timeout: 1 hour → `away`
 | |
| 
 | |
| ---
 | |
| 
 | |
| ## Integration Points
 | |
| 
 | |
| ### HMMM Protocol
 | |
| 
 | |
| **Human Participation in Meta-Discussion:**
 | |
| 
 | |
| HAP enables humans to compose HMMM messages:
 | |
| 
 | |
| 1. **Observation**: Share insights about system behavior
 | |
| 2. **Question**: Ask network for input
 | |
| 3. **Proposal**: Suggest solutions
 | |
| 4. **Objection**: Raise concerns
 | |
| 5. **Synthesis**: Summarize findings
 | |
| 
 | |
| **Message Format:**
 | |
| ```json
 | |
| {
 | |
|   "type": "hmmm/proposal",
 | |
|   "id": "hmmm-20250930-abc123",
 | |
|   "author": "human-alice",
 | |
|   "author_type": "human",
 | |
|   "title": "Implement rate limiting",
 | |
|   "description": "...",
 | |
|   "confidence": 0.9,
 | |
|   "timestamp": "2025-09-30T14:30:00Z"
 | |
| }
 | |
| ```
 | |
| 
 | |
| **See:** [HMMM Protocol](../protocols/hmmm.md)
 | |
| 
 | |
| ### UCXL Context Addressing
 | |
| 
 | |
| **Browser Support:**
 | |
| 
 | |
| HAP provides UCXL browser for exploring contexts:
 | |
| - Navigate context tree
 | |
| - View related contexts
 | |
| - Follow links between decisions/tasks
 | |
| - Export context data
 | |
| 
 | |
| **Example Navigation:**
 | |
| ```
 | |
| ucxl://chorus/task/20250930/task-123
 | |
|   └─→ ucxl://chorus/decision/20250930/decision-abc
 | |
|       └─→ ucxl://chorus/hmmm/20250930/proposal-xyz
 | |
|           └─→ ucxl://chorus/patch/20250930/patch-def
 | |
| ```
 | |
| 
 | |
| **See:** [UCXL Specification](../protocols/ucxl.md)
 | |
| 
 | |
| ### Decision Voting
 | |
| 
 | |
| **Democratic Participation:**
 | |
| 
 | |
| Humans vote on network decisions:
 | |
| - Approve/Reject/Defer/Abstain
 | |
| - Provide reasoning
 | |
| - Express confidence level
 | |
| - Track voting history
 | |
| 
 | |
| **Vote Weight:**
 | |
| Configurable per deployment:
 | |
| - Equal weight (1 human = 1 agent)
 | |
| - Expert weight (humans have higher weight)
 | |
| - Role-based weight
 | |
| 
 | |
| **See:** [Decision System](../packages/decisions.md)
 | |
| 
 | |
| ---
 | |
| 
 | |
| ## Example Deployments
 | |
| 
 | |
| ### Local Development
 | |
| 
 | |
| ```bash
 | |
| #!/bin/bash
 | |
| # Run HAP for local development
 | |
| 
 | |
| export CHORUS_LICENSE_ID=dev-local-123
 | |
| export CHORUS_AGENT_ID=human-developer
 | |
| export CHORUS_P2P_PORT=9001
 | |
| export CHORUS_API_PORT=8080
 | |
| export CHORUS_HEALTH_PORT=8081
 | |
| export CHORUS_HAP_MODE=terminal
 | |
| export OLLAMA_ENDPOINT=http://localhost:11434
 | |
| 
 | |
| ./chorus-hap
 | |
| ```
 | |
| 
 | |
| ### Docker Container
 | |
| 
 | |
| ```dockerfile
 | |
| FROM debian:bookworm-slim
 | |
| 
 | |
| # Install runtime dependencies
 | |
| RUN apt-get update && apt-get install -y \
 | |
|     ca-certificates \
 | |
|     && rm -rf /var/lib/apt/lists/*
 | |
| 
 | |
| # Copy binary
 | |
| COPY chorus-hap /usr/local/bin/chorus-hap
 | |
| 
 | |
| # Expose ports
 | |
| EXPOSE 9000 8080 8081 8082
 | |
| 
 | |
| # HAP typically runs interactively, but can be daemonized
 | |
| ENTRYPOINT ["/usr/local/bin/chorus-hap"]
 | |
| ```
 | |
| 
 | |
| ```bash
 | |
| docker run -it \
 | |
|   --name chorus-hap-alice \
 | |
|   -e CHORUS_LICENSE_ID=dev-123 \
 | |
|   -e CHORUS_AGENT_ID=human-alice \
 | |
|   -e CHORUS_HAP_MODE=terminal \
 | |
|   -p 9001:9000 \
 | |
|   -p 8080:8080 \
 | |
|   -p 8081:8081 \
 | |
|   chorus-hap:latest
 | |
| ```
 | |
| 
 | |
| **Note:** Interactive terminal requires `-it` flags for stdin/stdout
 | |
| 
 | |
| ### Web Mode Deployment (Future)
 | |
| 
 | |
| ```bash
 | |
| # When web interface is implemented:
 | |
| export CHORUS_HAP_MODE=web
 | |
| export CHORUS_HAP_WEB_PORT=8082
 | |
| 
 | |
| ./chorus-hap
 | |
| # Access via http://localhost:8082
 | |
| ```
 | |
| 
 | |
| ### Multi-User Setup
 | |
| 
 | |
| ```bash
 | |
| # Multiple humans can join network with different agent IDs
 | |
| 
 | |
| # Human 1 (Alice)
 | |
| CHORUS_AGENT_ID=human-alice CHORUS_P2P_PORT=9001 ./chorus-hap &
 | |
| 
 | |
| # Human 2 (Bob)
 | |
| CHORUS_AGENT_ID=human-bob CHORUS_P2P_PORT=9002 ./chorus-hap &
 | |
| 
 | |
| # Both connect to same network via mDNS/DHT
 | |
| # Both can collaborate on same decisions/tasks
 | |
| ```
 | |
| 
 | |
| ---
 | |
| 
 | |
| ## Troubleshooting
 | |
| 
 | |
| ### HAP Won't Start
 | |
| 
 | |
| **Symptom:** HAP exits immediately with error
 | |
| 
 | |
| **Possible Causes:**
 | |
| 
 | |
| 1. **Invalid or missing license**
 | |
|    ```
 | |
|    ❌ Failed to initialize CHORUS HAP: license validation failed
 | |
|    ```
 | |
|    **Fix:** Check `CHORUS_LICENSE_ID` and KACHING server connectivity
 | |
| 
 | |
| 2. **Port already in use**
 | |
|    ```
 | |
|    ❌ Failed to initialize: bind: address already in use
 | |
|    ```
 | |
|    **Fix:** Change `CHORUS_P2P_PORT` or kill process on port
 | |
| 
 | |
| 3. **P2P node creation failed**
 | |
|    ```
 | |
|    ❌ Failed to create P2P node: ...
 | |
|    ```
 | |
|    **Fix:** Check network connectivity and firewall rules
 | |
| 
 | |
| ### Terminal Not Accepting Input
 | |
| 
 | |
| **Symptom:** `hap>` prompt doesn't respond to keyboard
 | |
| 
 | |
| **Possible Causes:**
 | |
| 
 | |
| 1. **Running without TTY**
 | |
|    **Fix:** Use `-it` flags if running in Docker: `docker run -it ...`
 | |
| 
 | |
| 2. **STDIN redirected**
 | |
|    **Fix:** Ensure terminal has direct stdin access
 | |
| 
 | |
| 3. **Terminal encoding issues**
 | |
|    **Fix:** Set `LANG=en_US.UTF-8` or appropriate locale
 | |
| 
 | |
| ### No Peers Discovered
 | |
| 
 | |
| **Symptom:** HAP shows 0 connected peers
 | |
| 
 | |
| **Possible Causes:**
 | |
| 
 | |
| 1. **mDNS blocked by firewall**
 | |
|    **Fix:** Allow UDP port 5353, or use bootstrap peers
 | |
| 
 | |
| 2. **No other agents running**
 | |
|    **Fix:** Start at least one chorus-agent on network
 | |
| 
 | |
| 3. **Network isolation**
 | |
|    **Fix:** Ensure HAP can reach other peers on P2P ports
 | |
| 
 | |
| ### Web Mode Falls Back to Terminal
 | |
| 
 | |
| **Symptom:** Web mode requested but terminal interface starts
 | |
| 
 | |
| **Expected Behavior:** This is normal! Web interface is currently stubbed (Phase 3).
 | |
| 
 | |
| **Log Output:**
 | |
| ```
 | |
| 🌐 Starting web interface for human interaction
 | |
| ⚠️ Web interface not yet implemented
 | |
| 🔄 HAP running in stub mode - P2P connectivity established
 | |
| 💻 Starting terminal interface for human interaction
 | |
| ```
 | |
| 
 | |
| **Workaround:** Use terminal interface until Phase 3 implementation
 | |
| 
 | |
| ### HMMM Messages Not Received
 | |
| 
 | |
| **Symptom:** Compose HMMM message but peers don't see it
 | |
| 
 | |
| **Possible Causes:**
 | |
| 
 | |
| 1. **Not subscribed to topic**
 | |
|    **Check:** Verify PubSub subscription status
 | |
|    **Fix:** Restart HAP to re-subscribe
 | |
| 
 | |
| 2. **PubSub not enabled**
 | |
|    **Check:** `status` command shows PubSub status
 | |
|    **Fix:** Ensure DHT is enabled
 | |
| 
 | |
| 3. **Message formatting error**
 | |
|    **Check:** HAP logs for publish errors
 | |
|    **Fix:** Report issue with message details
 | |
| 
 | |
| ### Commands Don't Work
 | |
| 
 | |
| **Symptom:** Type command but nothing happens
 | |
| 
 | |
| **Possible Causes:**
 | |
| 
 | |
| 1. **Typo in command name**
 | |
|    **Fix:** Type `help` to see valid commands
 | |
| 
 | |
| 2. **Missing required arguments**
 | |
|    ```
 | |
|    Usage: ucxl <address>
 | |
|    ```
 | |
|    **Fix:** Provide required arguments
 | |
| 
 | |
| 3. **Backend error (silent failure)**
 | |
|    **Fix:** Check HAP logs for error messages
 | |
| 
 | |
| ---
 | |
| 
 | |
| ## Related Documentation
 | |
| 
 | |
| - [chorus-agent](chorus-agent.md) - Autonomous agent binary
 | |
| - [chorus](chorus.md) - Deprecated compatibility wrapper
 | |
| - [internal/runtime](../internal/runtime.md) - Shared runtime initialization
 | |
| - [internal/hapui](../internal/hapui.md) - Terminal and web interface implementations
 | |
| - [HMMM Protocol](../protocols/hmmm.md) - Meta-discussion protocol
 | |
| - [UCXL Specification](../protocols/ucxl.md) - Context addressing
 | |
| - [Decision System](../packages/decisions.md) - Democratic voting
 | |
| - [Configuration](../deployment/configuration.md) - Environment variables
 | |
| 
 | |
| ---
 | |
| 
 | |
| ## Implementation Status
 | |
| 
 | |
| | Feature | Status | Notes |
 | |
| |---------|--------|-------|
 | |
| | **Terminal Interface** | ✅ Production | Full interactive REPL |
 | |
| | **Web Interface** | ⏳ Stubbed | Phase 3 implementation pending |
 | |
| | **P2P Networking** | ✅ Production | Same as chorus-agent |
 | |
| | **HMMM Composition** | ✅ Production | Guided wizard with templates |
 | |
| | **UCXL Browser** | ✅ Production | Interactive context navigation |
 | |
| | **Decision Voting** | ✅ Production | Full voting workflow |
 | |
| | **Collaborative Sessions** | ✅ Production | Multi-party editing |
 | |
| | **Patch Creation** | ✅ Production | Diff-based submission |
 | |
| | **Web Bridge** | 🔶 Beta | Experimental browser access |
 | |
| | **Task Approval** | ✅ Production | Interactive task acceptance |
 | |
| | **Peer Management** | ✅ Production | List and monitor peers |
 | |
| | **Health Checks** | ✅ Production | Liveness & readiness |
 | |
| | **Availability Tracking** | ✅ Production | Idle/away detection |
 | |
| | **License Validation** | ✅ Production | KACHING integration |
 | |
| 
 | |
| ### Phase 3 Roadmap: Web Interface
 | |
| 
 | |
| **Planned Components:**
 | |
| 
 | |
| 1. **HTTP Server with WebSocket**
 | |
|    - Real-time bidirectional communication
 | |
|    - Server-sent events for notifications
 | |
|    - WebSocket for collaborative sessions
 | |
| 
 | |
| 2. **Web Forms for HMMM**
 | |
|    - Rich text editor for message composition
 | |
|    - Template selection dropdown
 | |
|    - Preview before submission
 | |
| 
 | |
| 3. **Visual Context Browser**
 | |
|    - Tree view of UCXL contexts
 | |
|    - Graph visualization of relationships
 | |
|    - Search and filter capabilities
 | |
| 
 | |
| 4. **Decision Voting UI**
 | |
|    - Card-based decision display
 | |
|    - Interactive voting buttons
 | |
|    - Real-time vote tallies
 | |
|    - Voting history timeline
 | |
| 
 | |
| 5. **Dashboard**
 | |
|    - Network status overview
 | |
|    - Connected peers visualization
 | |
|    - Active sessions monitoring
 | |
|    - Personal activity feed
 | |
| 
 | |
| 6. **Multi-User Support**
 | |
|    - Authentication for web users
 | |
|    - Session management
 | |
|    - User presence indicators
 | |
| 
 | |
| **Implementation Estimate:** 2-3 development sprints
 | |
| 
 | |
| **See:** `cmd/hap/main.go` lines 114-126 for TODO details
 | |
| 
 | |
| ---
 | |
| 
 | |
| ## Best Practices
 | |
| 
 | |
| ### Agent ID Naming
 | |
| 
 | |
| **Recommended Format:**
 | |
| ```bash
 | |
| # Human agents: prefix with "human-"
 | |
| CHORUS_AGENT_ID=human-alice
 | |
| CHORUS_AGENT_ID=human-bob-ops
 | |
| CHORUS_AGENT_ID=human-security-team
 | |
| 
 | |
| # Makes it clear in network views who is human vs autonomous
 | |
| ```
 | |
| 
 | |
| ### Working Hours Configuration
 | |
| 
 | |
| **Availability Signaling:**
 | |
| 
 | |
| HAP automatically signals availability based on activity. For scheduled availability:
 | |
| 
 | |
| ```bash
 | |
| # Set custom idle/away timeouts via configuration
 | |
| # (Future enhancement)
 | |
| CHORUS_HAP_IDLE_TIMEOUT=900      # 15 minutes
 | |
| CHORUS_HAP_AWAY_TIMEOUT=3600     # 1 hour
 | |
| ```
 | |
| 
 | |
| ### Collaborative Workflow
 | |
| 
 | |
| **Best Practice for Human-Agent Collaboration:**
 | |
| 
 | |
| 1. **Start HAP at beginning of work session**
 | |
| 2. **Announce presence**: `announce` command
 | |
| 3. **Monitor network status**: Use `status` and `peers` regularly
 | |
| 4. **Participate in decisions**: Check for pending votes with `decide`
 | |
| 5. **Collaborate actively**: Join collaborative sessions when invited
 | |
| 6. **Review agent work**: Use UCXL browser to audit agent decisions
 | |
| 7. **Clean exit**: Use `quit` command (not Ctrl+C) for graceful shutdown
 | |
| 
 | |
| ### Security Considerations
 | |
| 
 | |
| **Sensitive Operations:**
 | |
| 
 | |
| Humans can override agent decisions for sensitive operations:
 | |
| - Production deployments
 | |
| - Database schema changes
 | |
| - Security policy updates
 | |
| - API versioning changes
 | |
| 
 | |
| **Recommended Setup:**
 | |
| - Use separate license for HAP (human-authorized)
 | |
| - Grant HAP elevated permissions for overrides
 | |
| - Require human approval for sensitive task categories
 | |
| 
 | |
| ---
 | |
| 
 | |
| **Last Updated:** 2025-09-30 |