← All work
Applied AI · Infrastructure

Titan

A multi-product platform with a shared runtime fleet: a local model plus knowledge, graph, and vision runtimes on a GPU host. The agent stack behind Jellybean.

A self-hosted household agent: a local model plus a fleet of specialized runtimes on a GPU host. The brain behind Jellybean and the local runtime bridge that Resumate talks to — nothing leaves the machine, no third-party LLM, no API keys.

At the center is a local model (Qwen3-8B class) wrapped by a set of stateless, single-purpose runtimes: knowledge and retrieval, vision, ingestion, event and record persistence, voice I/O, and realtime relay. The agent loop runs on the host where the runtimes live; clients connect over a small bridge (titan.sh, titan bridge profile <app>).


Architecture

The design is boundary-native: App → Runtime → Contract → Broker → Provider. Runtimes are stateless, fleet-tier services behind explicit contracts; any credentials for outside providers live only in app-specific brokers, never in the runtimes themselves.

Three pinned rules keep it honest:

  • Credential boundary = app boundary. Keys live only in an app's broker, never in a shared runtime.
  • Runtimes are stateless. All durable state lives in Postgres; a runtime can be restarted or replaced at any time.
  • Cores orchestrate. The app core owns the full request flow; runtimes do one thing well.

Runtime fleet

Grouped by capability, each a stateless service behind a contract:

  • Authority — identity: passkey and handle management, capability-token issuance.
  • Generation — text, image, and vision runtimes wrapping the local model.
  • Retrieval — vector retrieval on Postgres + pgvector; document parsing; URL and document ingest with chunk indexing.
  • State — event sourcing, record persistence, and workflow orchestration.
  • Stream — realtime WebSocket relay, a signal bus, and voice processing.
  • Observability — instrumentation and health across the fleet.

Bridge

Client apps source a bridge profile to wire themselves to the local runtimes:

eval "$(titan bridge profile <app>)"

The profile exports the runtime URLs and database wiring an app expects (identity, text, retrieval, and so on), so a repo-local .env.local and the host fleet stay aligned. Jellybean speaks to the agent loop through the same bridge; Resumate uses it as its canonical local integration path.