Skip to content
🧭
Currykit services

API Reference

Complete API documentation for the Currykit services behind the network. Use this page when you already know you need endpoint-level detail, not just the system map.
Validated Β· Oct 6, 2026Revalidated on October 6: the gateway-port census was re-derived from the Infrastructure agent-port map (Atticus 18805–18807, Meg 18802 and 18803–18804) and the Atlas Cycle cron example was re-proved against the live gateway-cron roster (8 minutes past every 4th hour). The Bridge v1 command surface and exact-service directory still hold, with current Infrastructure-plus-Watchtower cues. Treat legacy collector shapes as context, not current truth.
Take the shortest API Reference jump

Requests for endpoint shapes. Map for service ownership. Signals for live telemetry meaning.

Optional deep reference

Once you know the service, the rest of this page is reference

Jump straight to the service you need instead of treating the full endpoint catalog as one required read. If the service name is still unclear, use Map or Signals in the opening question router.
Core HTTP API
Observability Collector

Legacy event history and collector request shapes that Atlas still documents as historical telemetry context.

Open Observability Collector
Core HTTP API
Recall

Semantic search, embeddings, indexed collections, and the main retrieval endpoints.

Open Recall
Core HTTP API
Currybox

Ephemeral sandbox execution when the job is isolated compute rather than search or telemetry.

Open Currybox
Core HTTP API
Kokoro TTS

Voice selection and text-to-speech endpoints when the output needs to be audio.

Open Kokoro TTS
Tooling layer
Bridge CLI

Agent-to-agent messaging and delegation commands when the answer is a bridge workflow, not a REST call.

Open Bridge CLI
Tooling layer
RAG Sync

Scheduled sync pipelines from Notion, Jira, and Linear into Recall.

Open RAG Sync
Tooling layer
Shared Utilities

Types, config helpers, and logging patterns that support the Currykit service layer.

Open Shared Utilities
Tooling layer
Notion CLI

Markdown-to-Notion publishing flows for docs sync and workspace updates.

Open Notion CLI
Background signal
Delegation events

Lifecycle telemetry for delegated coding work and external-agent runs.

Open Delegation events
Background signal
Cost Tracker

Periodic spend snapshots, budget thresholds, and cost-related observability history.

Open Cost Tracker
Background signal
Monitor Service

Scheduled health snapshots for agent and service availability.

Open Monitor Service
Background signal
Codex Telemetry

Invocation history, usage patterns, and audit data for Codex-assisted runs.

Open Codex Telemetry
Gateway API
OpenClaw Gateway

Per-agent gateway endpoints for sessions, cron jobs, wake events, and messaging.

Open OpenClaw Gateway

@lambda-curry/currykit-observability

Port: 18801 (deprecated)

Legacy telemetry collector reference. Atlas keeps this section for older event API shapes, but current live telemetry and health interpretation now belong to OpenObserve plus Watchtower's expected-state registry.

Historical host surface: http://host.docker.internal:18801

πŸ” Authentication

Authorization: Bearer $OBS_COLLECTOR_TOKEN

Token is set in agent container environment variables. Atlas treats this surface as deprecated legacy context now, so use it only for older collector-shaped requests and pair any live-health reading with OpenObserve plus Watchtower's expected-state model.

GET/events

Query telemetry events with filtering and pagination

Query Parameters

serviceΒ·stringβ€”Filter by service name (bridge, recall, currybox-proxy, kokoro-proxy, delegation, scout)
kindΒ·stringβ€”Event kind: event | health | metric
sinceΒ·stringβ€”ISO 8601 timestamp - start of time range
untilΒ·stringβ€”ISO 8601 timestamp - end of time range
limitΒ·numberβ€”Max results to return (default: 100)

Response Example

{
  "events": [
    {
      "id": 123,
      "ts": "2026-02-15T14:30:45.123Z",
      "service": "bridge",
      "kind": "event",
      "event": "message.sent",
      "level": "info",
      "duration_ms": 234,
      "meta": {
        "from": "clawdy",
        "to": "advisor",
        "message_id": "abc123"
      }
    }
  ]
}

GET/services

List all active services that have emitted events

Response Example

{
  "services": [
    "bridge",
    "recall",
    "currybox-proxy",
    "kokoro-proxy",
    "delegation",
    "scout"
  ]
}

POST/events

Emit a custom telemetry event (agents can track their own cycles)

Request Example

{
  "service": "scout",
  "kind": "event",
  "event": "cycle.completed",
  "level": "info",
  "duration_ms": 45000,
  "meta": {
    "project": "atlas",
    "tasks_completed": 3
  }
}

Response Example

{
  "id": 124,
  "ts": "2026-02-15T14:35:00.000Z"
}

GET/health

Health check endpoint

Response Example

{
  "status": "healthy",
  "uptime_seconds": 86400,
  "total_events": 15234
}

@lambda-curry/currykit-recall

Port: 8790

QMD semantic search and RAG service. Indexes LC team notes, documentation, and knowledge base. Powered by text-embedding-3-small.

http://host.docker.internal:8790

πŸ” Authentication

Authorization: Bearer $RECALL_TOKEN

Token is set in agent container environment variables.

POST/search

Semantic search across indexed collections (LC notes, team info, etc.)

Request Example

{
  "query": "How does agent delegation work?",
  "collections": [
    "lc-notes",
    "lc-team"
  ],
  "limit": 10,
  "min_score": 0.7
}

Response Example

{
  "results": [
    {
      "collection": "lc-notes",
      "document_id": "meeting-2026-02-10",
      "chunk_id": "chunk_42",
      "score": 0.89,
      "text": "Agent delegation uses the Bridge service to route tasks...",
      "metadata": {
        "date": "2026-02-10",
        "author": "jake"
      }
    }
  ]
}

POST/embed

Generate embeddings for text (1536-dimensional vectors via OpenAI)

Request Example

{
  "text": "Agent coordination patterns in the LC network"
}

Response Example

{
  "embedding": [
    0.023,
    -0.154,
    0.089
  ],
  "model": "text-embedding-3-small",
  "dimensions": 1536
}

GET/collections

List all indexed collections with metadata

Response Example

{
  "collections": [
    {
      "name": "lc-notes",
      "document_count": 234,
      "chunk_count": 1872,
      "last_sync": "2026-02-15T14:15:00Z"
    },
    {
      "name": "lc-team",
      "document_count": 12,
      "chunk_count": 45,
      "last_sync": "2026-02-15T14:15:00Z"
    }
  ]
}

@lambda-curry/currykit-currybox

Port: 18800

Cloud sandbox proxy. Routes exec commands to Vercel microVMs for isolated, ephemeral compute.

http://host.docker.internal:18800

πŸ” Authentication

Authorization: Bearer $CURRYBOX_TOKEN

Provides secure access to ephemeral compute environments.

POST/run

Execute a command in an isolated sandbox environment

Request Example

{
  "command": "npm test",
  "cwd": "/app",
  "env": {
    "NODE_ENV": "test"
  },
  "timeout_ms": 30000
}

Response Example

{
  "exit_code": 0,
  "stdout": "All tests passed\n",
  "stderr": "",
  "duration_ms": 2341,
  "sandbox_id": "vm_abc123"
}

GET/status

Check sandbox service status and active VMs

Response Example

{
  "status": "healthy",
  "active_sandboxes": 2,
  "total_runs_today": 47
}

@lambda-curry/currykit-kokoro-proxy

Port: 8787

Local text-to-speech service. High-quality neural voice synthesis for agent responses.

http://host.docker.internal:8787

POST/tts

Generate speech audio from text

Request Example

{
  "text": "Hello, this is Scout reporting from the Atlas project.",
  "voice": "af_bella",
  "format": "mp3",
  "speed": 1
}

Response Example

{
  "audio_url": "/tmp/tts_abc123.mp3",
  "duration_seconds": 4.2,
  "format": "mp3",
  "sample_rate": 24000
}

GET/voices

List available TTS voices

Response Example

{
  "voices": [
    {
      "id": "af_bella",
      "name": "Bella",
      "gender": "female",
      "lang": "en-US"
    },
    {
      "id": "am_adam",
      "name": "Adam",
      "gender": "male",
      "lang": "en-US"
    },
    {
      "id": "bf_emma",
      "name": "Emma",
      "gender": "female",
      "lang": "en-GB"
    }
  ]
}

@lambda-curry/currykit-bridge

Port: β€”

Agent-to-agent communication CLI. Enables cross-agent messaging and task delegation.

CLI only (no HTTP API)

CLI Usage

Bridge is accessed via the `bridge` CLI tool, not HTTP. Available in agent containers that have bridge access configured. The current wrapper uses Bridge v1 verbs: call, interject, watch, result, cancel, and list. Legacy aliases remain only for compatibility.

Call an agent and wait for a bounded result

bridge call clawdy 'What should I work on next?' --json

Detach work and inspect it later

bridge call scout 'Audit the API Reference for one concrete drift.' --detach --json
bridge watch <turnId> --resume --json
bridge result <turnId> --json

Continue or stop an existing turn

bridge interject <sessionKey> "Focus on the service-directory examples."
bridge cancel <turnId> --reason "stale" --json

Bridge Targets

clawdyJake's primary assistant and the advisor target
currybotLC team assistant
atticusDecision & governance agent (receive-only β€” responds with approve/escalate/deny)

@lambda-curry/currykit-rag-sync

Port: β€”

Knowledge sync pipelines. Pulls from Notion, Jira, Linear and feeds Recall service.

Cron-based pipeline (no API)

Pipeline Overview

RAG Sync runs as scheduled cron jobs, pulling data from external sources and indexing into Recall. No direct API access.

Notion

Every 15 minutes

Team notes, meeting docs, architecture decisions

β†’ lc-notes collection

Jira

Every 30 minutes

Project tickets, sprint planning, issue tracking

β†’ lc-projects collection

Linear

Every 30 minutes

Engineering tasks, bugs, feature requests

β†’ lc-projects collection

@lambda-curry/currykit-shared

Port: β€”

Common utilities and shared types used across all Currykit packages. Provides type definitions, helper functions, logging utilities, and configuration helpers that prevent duplication across the network's service layer.

Library only (no HTTP API)

What's Included

currykit-shared is an internal utility library β€” it is imported by other Currykit packages, not consumed directly by agents. It is not published to GitHub Packages.

Shared Types

Common TypeScript interfaces used across observability, bridge, delegate, and other packages β€” event schemas, agent identifiers, config shapes.

Logger

Standardized structured logging helper. All Currykit services emit logs in the same format so Watchtower can parse and display them consistently.

Config Helpers

Environment variable validation and defaults. Services fail fast with clear error messages if required env vars are missing.

⚠️ Internal package β€” currykit-shared is a peer dependency, not published externally. It lives in ~/saffron/packages/ alongside the other Currykit packages.

@lambda-curry/currykit-notion

Port: β€”

Markdown-to-Notion conversion tool. Converts structured Markdown documents into Notion pages with proper block formatting, headings, callouts, and code blocks. Used by agents to publish documentation, meeting notes, and research into the team's Notion workspace.

CLI + library (no HTTP API)

CLI Usage

Agents use currykit-notion to publish Markdown content to Notion programmatically β€” useful for syncing agent-generated documentation without manual copy-paste.

Publish a Markdown file to a Notion page

currykit-notion publish --file ./output.md --page-id <NOTION_PAGE_ID>

Append Markdown content to an existing page

currykit-notion append --file ./update.md --page-id <NOTION_PAGE_ID>

Library import (TypeScript)

import { markdownToNotion } from "@lambda-curry/currykit-notion";

const blocks = markdownToNotion(markdownString);
// blocks β†’ Notion block array, ready for notion.pages.create()

Supported Markdown

  • β†’ Headings (H1–H3) β†’ Notion heading blocks
  • β†’ Paragraphs, bold (**text**), italic (*text* or _text_), inline code
  • β†’ Bold+italic (***text***), strikethrough (~~text~~)
  • β†’ Fenced code blocks with language hints
  • β†’ Bullet lists and numbered lists
  • β†’ Blockquotes β†’ Notion callout blocks
  • β†’ Tables β†’ Notion table blocks

πŸ“‹ Env Requirements

NOTION_API_KEY=secret_...

Uses the Notion internal integration token. The integration must be added to any page you want to write to.

@lambda-curry/currykit-delegate

Port: β€”

Tracks coding task delegations to external agents like Codex. Emits lifecycle events for each delegation: started, completed, failed. Query via the Observability collector.

Observability events only (no HTTP API)

Event Schema

Delegation emits telemetry events to the Observability collector. Query them viaGET /events?service=delegation

delegation.started

{
  "service": "delegation",
  "kind": "event",
  "event": "delegation.started",
  "meta": {
    "task": "implement feature X",
    "agent": "codex",
    "project": "atlas"
  }
}

delegation.completed

{
  "service": "delegation",
  "kind": "event",
  "event": "delegation.completed",
  "duration_ms": 45000,
  "meta": {
    "task": "implement feature X",
    "agent": "codex",
    "files_changed": 3
  }
}

delegation.failed

{
  "service": "delegation",
  "kind": "event",
  "event": "delegation.failed",
  "meta": {
    "task": "implement feature X",
    "agent": "codex",
    "error": "timeout after 300s"
  }
}

Cost Tracker (currykit-observability)

Port: β€”

Monitors API usage costs across all agents. Runs every 6 hours, emits cost summaries to the Observability collector, and generates alerts when spend approaches budget thresholds.

Cron-based (no HTTP API)

How to Query Costs

Cost-tracker emits a tracking.completed event every 6 hours. Query historical spend via Observability:

curl "/events?service=cost-tracker&limit=10" -H "Authorization: Bearer $OBS_TOKEN"

Tracked Metrics

  • β†’ Daily and monthly token spend per agent
  • β†’ Model breakdown (GLM vs. GPT vs. Codex)
  • β†’ Cost per session and per cycle
  • β†’ Budget threshold alerts (Slack notification when 80% reached)

Monitor Service (currykit-observability)

Port: β€”

Scheduled health monitoring service. Runs every 2 hours to verify agent availability and service health. Emits monitoring.completed events with system status snapshots.

Cron-based (no HTTP API)

Monitor Schedule

monitoring.completed

Every 2 hours
{
  "service": "monitor",
  "kind": "event",
  "event": "monitoring.completed",
  "meta": {
    "agents_healthy": [
      "clawdy",
      "scout",
      "currybot",
      "atticus"
    ],
    "services_healthy": [
      "bridge",
      "recall",
      "observability"
    ],
    "alerts": []
  }
}

Query recent monitor runs: GET /events?service=monitor&limit=5

Codex Telemetry (currykit-observability)

Port: β€”

Tracks Codex CLI invocations and coding agent telemetry. Every time Scout delegates a coding task to Codex, usage is logged here for cost tracking and audit purposes.

Observability events only (no HTTP API)

Usage Pattern

Codex telemetry integrates with the Observability collector. Query invocation history:

curl "/events?service=codex&limit=20" -H "Authorization: Bearer $OBS_TOKEN"

πŸ“Š What's Tracked

  • β†’ Invocation count and duration per session
  • β†’ Files changed per run (insertion/deletion counts)
  • β†’ Success/failure rate and error categories
  • β†’ Token usage (maps to cost-tracker for spend analysis)

OpenClaw Gateway

Port: Various (Clawdy gateway on minip3 via the 18789 ssh forward, Currybot team gateway, Scout 18811, Meg 18814, Atticus 18805, Grafton 18805, Samwise 18811 β€” shared instances: Scout+Samwise on 18811, Dexter+Buzz+Meg on 18814, Atticus+Grafton on 18805)

Each agent's OpenClaw gateway provides REST APIs for session management, cron jobs, and messaging.

http://host.docker.internal:<port>

⚠️ Agent-Specific APIs

These APIs are agent-specific. Each agent has its own gateway with its own port. Auth tokens are unique per agent.

GET/api/sessions/list

List active and recent sessions

Query Parameters

limitΒ·numberβ€”Max sessions to return
kindsΒ·string[]β€”Filter by session kind (main, isolated)

Response Example

{
  "sessions": [
    {
      "key": "main",
      "kind": "main",
      "agent": "scout",
      "created": "2026-02-15T08:00:00Z",
      "lastActive": "2026-02-15T14:30:00Z"
    }
  ]
}

GET/api/cron/list

List scheduled cron jobs

Response Example

{
  "jobs": [
    {
      "id": "atlas-cycle",
      "name": "Atlas Cycle",
      "schedule": {
        "kind": "cron",
        "expr": "8 */4 * * *"
      },
      "enabled": true,
      "nextRun": "2026-02-15T15:30:00Z"
    }
  ]
}

POST/api/cron/wake

Send a wake event to trigger agent attention

Request Example

{
  "text": "Check on the Atlas deployment status",
  "mode": "next-heartbeat"
}

Response Example

{
  "status": "queued"
}
Service-call hygiene

Keep endpoint work bounded

These guardrails make a service call easier to authorize, observe, and recover when a dependency is unavailable.

Always include auth headers

All services require bearer tokens. Check your environment variables.

Use appropriate timeouts

Recall search can take 1-2s. Currybox runs may take 10-30s. Set HTTP client timeouts accordingly.

Log all service calls

Emit structured observability events so OpenObserve captures the signal and Watchtower can interpret it against expected state.

Handle errors gracefully

Services may be temporarily unavailable. Implement retries with exponential backoff.

Check Watchtower for live service status

Before debugging, verify services are healthy in the observability dashboard.

Explore Further

Infrastructure

Service registry β€” what runs, where, and how it connects.

Open Infrastructure
Observability

How telemetry flows from agents to dashboards.

Open Observability
Watchtower Guide

Reading the monitoring dashboard: views, patterns, and investigation steps.

Open Watchtower Guide
Bridge

Agent-to-agent communication patterns (separate from Currykit APIs).

Open Bridge
Architecture

Sky-level rationale for why the network is built this way.

Open Architecture