- Tenant-isolated storage (Postgres, Turso/libsql, S3, Redis, Helix)
- Event Sync (publish/subscribe, routing, retries)
- Context Refresh (connectors that ingest external data into durable context)
- Core Agents (agent specs, execution, action proposals, approvals)
- Sandboxed execution (Rhodes adapter)
- Optional: Memory, Optimization, Evaluation
horizons_rs) and SDKs.
Built on Horizons
Horizons is used as a reusable platform layer, with apps implemented in separate repositories/workspaces.- OpenRevenue (public): revenue ops app with context refresh, agent sessions, approvals, and audit workflows.
- Dhakka (private/internal): runs on Josh’s Mac mini as the local dev manager for the workspace. It pairs Gmail/Calendar/iMessage connectors with permissioned action execution to oversee local dev infrastructure, CI/CD gating, and planning workflows.
- Service discovery & orchestration — tracks the lifecycle, ports, and health of local backend services so Josh and the team can start, stop, and replace components without juggling manual scripts.
- Git hook automation — integrates with local pre-commit/pre-push hooks to run CI suites, linting, and smoke checks before code leaves the machine.
- Planning manager — keeps a lightweight task board, priority cues, and scheduling helpers (Linear sync or standalone notes) so planning stays close to the workspace operations it enables.
Concepts
Quickstart
Run the server and call the API
Python SDK
Async httpx client wrapping the REST API
TypeScript SDK
fetch + SSE client wrapping the REST API
Built on Horizons
OpenRevenue and Dhakka implementation patterns
Synth-Enhanced
Managed adapters (private) for production infra
Tenant headers
Most Horizons endpoints require anx-org-id header.
For local dev, you can use any UUID as your org id. Horizons uses x-org-id for tenant isolation.
For production, treat x-org-id as a hard tenant boundary and enforce it at the edge (gateway, auth middleware, etc.).