Self-hostable, multi-user AI coach. Users chat with an LLM that has live tool access via remote MCP servers, backed by per-user RAG memory and an admin-published shared knowledge corpus. Kubernetes-native (Helm); a single Go workload + Postgres. The coaching domain, system prompt, and allowed topics are all configurable — the default is endurance running.
- Streaming chat with markdown rendering and an agentic MCP tool loop (the model calls tools, results feed back, it continues).
- MCP tools — external integrations (e.g. Garmin) wired globally or per-user; users can register their own MCP servers by URL + basic auth.
- MCP intent safeguard — optionally requires an explicit tool intent and approves it against the current chat or Scheduled instruction before a remote call can run.
- Per-user RAG memory — past conversations and uploaded documents are embedded and retrieved in future chats (private to each user).
- Shared corpus — admins publish material (plans, coaching docs) visible to all.
- Document ingestion — select multiple files or drop them anywhere on Documents and Public Docs; supported PDFs and richer formats become searchable RAG context.
- Chat evidence — attach screenshots or documents to a turn, or explicitly reference private/shared documents when they must be included.
- Topic guardrail — a configurable classifier keeps chat on-domain.
- Scheduled coaching — refine reminders, data checks, and monitors in a chat-like flow, confirm the final instruction, then run them safely in the background with optional lower-cost worker inference.
- Auth — username/password with server sessions, plus passkeys (WebAuthn); active-session management and per-user display/unit preferences.
- Security-first — CSRF protection, secrets encrypted at rest (AES-256-GCM), a credential broker so the LLM never sees raw secrets, and network-isolated MCP sidecars.
Deploy (Helm, Kubernetes):
helm upgrade --install kadence ./charts/kadence -n kadence --create-namespace \
-f my-values.yamlBring your own Postgres (pgvector) or enable the bundled one, set your provider keys, and configure MCP servers in values. See docs/DEPLOYMENT.md.
Run locally (dev):
make build && ./bin/kadence # backend on :8080 — GET /api/healthz
cd web && npm run dev # frontend dev server, proxies /api → :8080See docs/CONTRIBUTING.md for the full dev setup.
- Architecture — how it fits together: chat pipeline, MCP orchestration, RAG, providers, data model, security model.
- Configuration — every
KADENCE_*environment variable and the MCP env contract. - Deployment — the Helm chart: Postgres, MCP sidecars, secrets, ingress, network policies.
- Contributing — dev environment, build/test/lint, conventions, and workflow.