Skip to main content
Target Audience: Developers building claude-mem integrations (VSCode extensions, IDE plugins, CLI tools).

Quick Reference

Worker Service Basics

Most Common Operations

Environment Variables

Build Commands (Local Development)

Worker Architecture

Request Flow

Domain Services

DatabaseManager

SQLite connection management, initialization

SessionManager

Event-driven session lifecycle, message queues

SearchManager

Search orchestration (FTS5 + Chroma)

SSEBroadcaster

Server-Sent Events for real-time updates

SDKAgent

Claude Agent SDK for generating observations/summaries

PaginationHelper

Query pagination utilities

SettingsManager

User settings CRUD

FormattingService

Result formatting (index vs full)

TimelineService

Unified timeline generation

Route Organization

  • Health check endpoint
  • Viewer UI (React app)
  • SSE stream for real-time updates
  • Session lifecycle (init, observations, summarize, complete)
  • Privacy checks and tag stripping
  • Auto-start SDK agent generators
  • Data retrieval (observations, summaries, prompts, stats)
  • Pagination support
  • Processing status
  • All search operations
  • Unified search API
  • Timeline context
  • Semantic shortcuts
  • User settings
  • MCP toggle
  • Dependency health

API Reference

Session Lifecycle (SessionRoutes)

Create/Get Session + Queue Observation (New API)

Privacy Check: Skips if user prompt was entirely wrapped in <private> tags. Tag Stripping: Removes <private> and <claude-mem-context> tags before storage. Auto-Start: Ensures SDK agent generator is running to process the queue.

Queue Summary (New API)

Complete Session (New API)

Effect: Stops SDK agent, marks session complete, broadcasts status change.

Legacy Endpoints (Still Supported)

New integrations should use /api/sessions/* endpoints with claudeSessionId.

Data Retrieval (DataRoutes)

Get Paginated Data

Response Format

Get by ID

Get Database Stats

Response

Get Projects List

Response

Get Processing Status

Response

Search Operations (SearchRoutes)

query
string
Search query text (optional, omit for filter-only)
type
string
default:"all"
“observations” | “sessions” | “prompts”
format
string
default:"index"
“index” | “full”
limit
number
default:20
Number of results
project
string
Filter by project name
obs_type
string
Filter by observation type (discovery, decision, bugfix, feature, refactor)
concepts
string
Filter by concepts (comma-separated)
files
string
Filter by file paths (comma-separated)
dateStart
string
ISO timestamp (filter start)
dateEnd
string
ISO timestamp (filter end)
Response
Format Options:
  • index: Minimal fields for list display (id, title, preview)
  • full: Complete entity with all fields

Unified Timeline

anchor
string
required
Anchor point (observation ID, “S123” for session, or ISO timestamp)
depth_before
number
default:10
Records before anchor
depth_after
number
default:10
Records after anchor
project
string
Filter by project
Response

Search by File Path

Get Recent Context

Response

Context Preview (for Settings UI)

Returns plain text with ANSI colors for terminal display

Context Injection (for Hooks)

Returns pre-formatted context string ready for display

Settings & Configuration (SettingsRoutes)

Get/Update User Settings

MCP Server Status/Toggle

Viewer & Real-Time Updates (ViewerRoutes)

Health Check

Response

Viewer UI

Returns HTML for React app

SSE Stream

Server-Sent Events streamEvent Types:
  • processing_status:
  • session_started:
  • observation_queued:
  • summarize_queued:
  • observation_created:
  • summary_created:
  • new_prompt:

Data Models

Active Session (In-Memory)

Database Entities

Search Results

Timeline Item

Integration Patterns

Mapping Claude Code Hooks to Worker API

1

SessionStart Hook

Not needed for new API - sessions are auto-created on first observation
2

UserPromptSubmit Hook

No API call needed - user_prompt is captured by first observation in the prompt
3

PostToolUse Hook

4

Summary Hook

5

SessionEnd Hook

VSCode Extension Integration

Language Model Tool Registration

Chat Participant Implementation

Error Handling & Resilience

Connection Failures

Retry Logic with Exponential Backoff

Worker Health Check

Privacy Tag Handling

The worker automatically strips privacy tags before storage:
  • <private>content</private> - User-level privacy control
  • <claude-mem-context>content</claude-mem-context> - System-level tag (prevents recursive storage)
Privacy Check: Observations/summaries are skipped if the entire user prompt was wrapped in <private> tags.

Custom Error Classes

SSE Stream Error Handling

Development Workflow

Build Configuration (esbuild)

package.json (VSCode Extension)

Local Testing Loop

1

Terminal 1: Watch build

2

Terminal 2: Check worker status

3

Terminal 3: Test API manually

4

VSCode: Launch extension host

Press F5 to launch extension host

Debug Configuration (.vscode/launch.json)

Testing Strategy

Unit Tests (Worker Client)

Integration Tests (With Worker Spawning)

Manual Testing Checklist

  • Worker starts successfully (npm run worker:status)
  • Health endpoint responds (curl http://127.0.0.1:$WORKER_PORT/api/health)
  • SSE stream connects (curl http://127.0.0.1:$WORKER_PORT/stream)
  • Queue observation creates session
  • Observation appears in database
  • Privacy tags are stripped
  • Private prompts are skipped
  • Queue summary creates summary
  • Complete session stops processing
  • Search observations by query
  • Search sessions by query
  • Search prompts by query
  • Get recent context for project
  • Get timeline around observation
  • Semantic shortcuts (decisions, changes, how-it-works)
  • SSE broadcasts processing status
  • SSE broadcasts new observations
  • SSE broadcasts new summaries
  • SSE broadcasts new prompts
  • Graceful degradation when worker unavailable
  • Timeout handling for slow requests
  • Retry logic for transient failures

Code Examples

Complete WorkerClient Implementation

Search Language Model Tool

Critical Implementation Notes

sessionDbId vs claudeSessionId

IMPORTANT: Use claudeSessionId (string) for new API endpoints, not sessionDbId (number).
  • sessionDbId - Numeric database ID (legacy endpoints only)
  • claudeSessionId - String identifier from Claude platform (new endpoints)

JSON String Fields

Fields like facts, concepts, and files_touched are stored as JSON strings and require parsing:

Timestamps

All created_at_epoch fields are in milliseconds, not seconds:

Asynchronous Processing

Workers process observations/summaries asynchronously. Results appear in the database 1-2 seconds after queuing. Use SSE events for real-time notifications.

Privacy Tags

Always wrap sensitive content in <private> tags to prevent storage:

Additional Resources

Documentation

Complete claude-mem documentation

GitHub

Source code and issue tracker

Worker Service

Worker architecture details

Database Schema

Database structure and queries