Repository navigation
v0.1.0
epicurus v0.1.0
The first release — Phase 1, the core runtime. Chat from a phone with a local or hosted model that calls tools and remembers across sessions, all through a self-hosted PWA.
Highlights
- Agent — a thin MCP tool-calling loop with streaming chat (SSE).
- LLM gateway — one interface over local Ollama and hosted providers (Claude, ChatGPT, Grok, DeepSeek, Gemini, and any OpenAI-compatible): routing, fallback chains, and tenant-scoped usage accounting. Keys live in OpenBao, never in env or logs.
- Power states (Active / Idle / Paused) with idle model unload.
- Cross-chat memory — Postgres history + Qdrant semantic recall, scoped per tenant.
- Web UI shell — phone-first PWA: chat, model manager, provider keys, power toggle, and module UIs rendered declaratively from each module's manifest.
Run it
git clone https://github.com/baakhoff/epicurus.git && cd epicurus
docker compose up -d # then open http://localhost:8088/Versioned images on GHCR: ghcr.io/baakhoff/epicurus-{core-app,web,echo}:0.1.0.
Known limitations
An early 0.x release for personal / self-host use:
- Secrets are not yet persistent — OpenBao runs in dev (in-memory) mode, so provider keys and module config are lost when the
openbaocontainer restarts. Persistent storage lands in Phase 3. - No event-bus auth — NATS tenant isolation is cooperative (fine single-user, not multi-tenant). Tracked in #50.
- No bundled perimeter — the edge gateway only routes; front it with your own VPN / reverse proxy / auth proxy (ADR-0008).
Full notes: CHANGELOG.