Session Lifecycle
A session in Happy represents a single AI agent conversation. This document explains the complete lifecycle from creation to termination.Overview
Session Creation
1. CLI Initialization
- Parse CLI arguments (model, permissions, etc.)
- Load configuration from environment variables
- Initialize file-based logger
- Determine working directory
2. Authentication
Load or Generate Secret Key
~/.happy/access.key (production) or ~/.happy-dev/access.key (development)Generate Challenge Signature
3. Session Registration
4. WebSocket Connection
session-scoped means this connection only receives updates for the specific session.
5. Display QR Code
CLI displays QR code for mobile connection:handy://[base64url-encoded-secret-key]
Security: Secret key embedded in URL, but QR code only shown on trusted terminal.
Session Modes
Local Mode (Interactive)
User interacts directly with Claude in terminal: Implementation:packages/happy-cli/src/claude/claudeLocalLauncher.ts
Features:
- Direct terminal interaction
- Full color output
- Real-time streaming
- File watching to capture messages
Remote Mode
Mobile app sends messages, CLI forwards to Claude: Implementation:packages/happy-cli/src/claude/claudeRemoteLauncher.ts
Features:
- Non-interactive (no terminal required)
- Runs in background
- Full agent capabilities
- Real-time progress updates
Mode Switching
/remote) or mobile app requests switch.
Keep-Alive Mechanism
Periodic Pings
Server Handling
- Show “Active” badge in mobile app
- Prevent session timeout
- Display thinking indicator
Message Synchronization
Outbox Pattern
CLI batches outgoing messages:- Reduces HTTP requests
- Preserves message order
- Automatic retry on failure
Inbox Sync
CLI fetches missed messages on reconnect:Claude Session Tracking
Session ID Discovery
Claude Code generates a session UUID that must be tracked:- Claude Code emits
SessionStarthook event - Hook writes to temporary settings file
- CLI reads file and extracts session ID
- Resume sessions with
--resume <id>flag - Scan session history files
- Associate messages with Claude’s internal state
Session Resumption
User can resume previous Claude session:--resume creates a NEW Claude session with history copied. See CLAUDE.md in happy-cli for details.
State Management
Metadata Updates
Optimistic Concurrency Control
Optimistic Concurrency Control
Agent State Updates
Similar to metadata, but for agent-specific state:Session Termination
Graceful Shutdown
Implementation:packages/happy-cli/src/claude/session.ts:78 (cleanup method)
Force Kill
If user kills CLI (SIGKILL), session remains “active” in database: Server Behavior:- Keep-alive stops arriving
- After 60 seconds, mark session as inactive
- Mobile app shows “Last active: 1 minute ago”
- User can restart CLI
- Session resumes with same ID (tag-based lookup)
- Message history preserved
Session Expiration
Sessions persist indefinitely, but can be manually deleted:Error Recovery
Network Disconnect
Network Disconnect
Scenario: WiFi drops during sessionCLI Behavior:
- WebSocket disconnect detected
- Messages queued in outbox
- Automatic reconnection (exponential backoff)
- Fetch missed messages
- Resume normal operation
Server Restart
Server Restart
Scenario: Server deploys new versionCLI Behavior:
- All WebSocket connections close
- Clients reconnect automatically
- Session state loaded from database
- No messages lost (persisted before restart)
CLI Crash
CLI Crash
Scenario: CLI process killed (OOM, segfault)Recovery:
- User restarts CLI
- Existing session found by tag
- Message history fetched from server
- Claude session resumed (if using —resume)
Encryption Key Mismatch
Encryption Key Mismatch
Scenario: User changes secret key between devicesResult: Decryption failuresResolution:
- Sync secret key across devices (manual)
- Or create new sessions per device
Performance Monitoring
Usage Tracking
CLI reports token usage after each response:Session Metrics
Tracked:- Message count
- Total tokens used
- Session duration
- Last active timestamp
- Mode switches (local ↔ remote)
Best Practices
Debugging Session Issues
Next Steps
Data Flow
Understand message routing in detail
Encryption Layer
Learn how session data is protected
Architecture
High-level system overview
Session Management
Learn about session management