Worker Service
The worker service is a long-running HTTP API built with Express.js and managed by PM2. It processes observations through the Claude Agent SDK separately from hook execution to prevent timeout issues.Overview
- Technology: Express.js HTTP server
- Process Manager: PM2
- Port: Fixed port 37777 (configurable via
CLAUDE_MEM_WORKER_PORT) - Location:
src/services/worker-service.ts - Built Output:
plugin/scripts/worker-service.cjs - Model: Configurable via
CLAUDE_MEM_MODELenvironment variable (default: claude-sonnet-4-5)
REST API Endpoints
The worker service exposes 14 HTTP endpoints organized into four categories:Viewer & Health Endpoints
1. Viewer UI
- Real-time memory stream visualization
- Infinite scroll pagination
- Project filtering
- SSE-based live updates
- Theme toggle (light/dark mode) as of v5.1.2
2. Health Check
3. Server-Sent Events Stream
observation-created: New observation addedsession-summary-created: New summary generateduser-prompt-created: New prompt recorded
Data Retrieval Endpoints
4. Get Prompts
project(optional): Filter by project namelimit(default: 20): Number of resultsoffset(default: 0): Pagination offset
5. Get Observations
project(optional): Filter by project namelimit(default: 20): Number of resultsoffset(default: 0): Pagination offset
6. Get Summaries
project(optional): Filter by project namelimit(default: 20): Number of resultsoffset(default: 0): Pagination offset
7. Get Stats
Settings Endpoints
8. Get Settings
9. Save Settings
Session Management Endpoints
10. Initialize Session
11. Add Observation
12. Generate Summary
13. Session Status
14. Delete Session
PM2 Management
Configuration
The worker is configured viaecosystem.config.cjs:
Commands
Auto-Start Behavior
As of v4.0.0, the worker service auto-starts when the SessionStart hook fires. Manual start is optional.Claude Agent SDK Integration
The worker service routes observations to the Claude Agent SDK for AI-powered processing:Processing Flow
- Observation Queue: Observations accumulate in memory
- SDK Processing: Observations sent to Claude via Agent SDK
- XML Parsing: Responses parsed for structured data
- Database Storage: Processed observations stored in SQLite
SDK Components
- Prompts (
src/sdk/prompts.ts): Builds XML-structured prompts - Parser (
src/sdk/parser.ts): Parses Claude’s XML responses - Worker (
src/sdk/worker.ts): Main SDK agent loop
Model Configuration
Set the AI model used for processing via environment variable:claude-haiku-4-5- Fast, cost-efficientclaude-sonnet-4-5- Balanced (default)claude-opus-4- Most capableclaude-3-7-sonnet- Alternative version
Port Allocation
The worker uses a fixed port (37777 by default) for consistent communication:- Default: Port 37777
- Override: Set
CLAUDE_MEM_WORKER_PORTenvironment variable - Port File:
${CLAUDE_PLUGIN_ROOT}/data/worker.porttracks current port
Data Storage
The worker service stores data in the plugin data directory:Error Handling
The worker implements graceful degradation:- Database Errors: Logged but don’t crash the service
- SDK Errors: Retried with exponential backoff
- Network Errors: Logged and skipped
- Invalid Input: Validated and rejected with error response
Performance
- Async Processing: Observations processed asynchronously
- In-Memory Queue: Fast observation accumulation
- Batch Processing: Multiple observations processed together
- Connection Pooling: SQLite connections reused

