Skip to main content

Apps

Every Clone surface lives under apps/. They share the same JWT/API-key identity boundary, the same event schema (packages/schema), and the same backend (apps/server). Surface-specific behavior — read-only-plus-live-actions on Desktop vs. edit-plus-analytics on Web, terminal-shaped UX on CLI, MCP-native tooling on apps/mcp — is the only differentiator.

At a glance

AppStackRole
WebVite + React 19 + Tailwind v4Marketing site, dashboard, memory editing, analytics.
ServerDjango 6 + DRF + simplejwt + Anthropic SDKThe single backend; owns Recording, Memory, Prediction, Voice, Access.
MCPNode + @modelcontextprotocol/sdkMCP-server facade over the Server's Recording/Memory/Prediction layers.
CLINodeTerminal client and recording producer.
DesktopElectron + electron-vite + React 19Capture + live actions; read-only views into Memory.

Boundaries

  • Identity — every authenticated request carries either a 60-minute simplejwt access token or a clone_… API key. Refresh runs on a 50-minute timer in client surfaces; servers never refresh on the user's behalf.
  • Schemapackages/schema/events.ts (TypeScript) and packages/schema/events.schema.json (Python validator) describe the same CloneEvent wire shape. Add a new event in both files at once.
  • State — no client surface persists business state of its own. Anything that should outlive a session goes to the Server via the REST endpoints documented under API Reference.