Deploy, manage and orchestrate AI agents on Kubernetes. KAOS turns agents, models, tools and memory into declarative Kubernetes resources, reconciled by an operator, secured at the gateway and observable end to end. "Managing the chaos in your agentic systems."
01 — FROM ZERO TO A RUNNING AGENT
From zero to a running agent
An agent is a resource, not a script. Install the system, deploy a model API and an agent, and talk to it; every agent exposes an OpenAI-compatible /v1/chat/completions endpoint, so existing clients work unchanged.
Five custom resources define an agent system: Agent (the running agent, its model, tools, peers and memory binding), ModelAPI (LLM access, proxied via LiteLLM or hosted in-cluster with Ollama), MCPServer (tool servers speaking the Model Context Protocol), MemoryStore (the central memory service agents bind to) and AccessGrant (who may reach what). Four controllers reconcile them into pods, services and policy. Agents delegate through the A2A protocol: discovery via /.well-known/agent.json, sub-agents exposed to the model as tools, and “hierarchical agent systems with automatic delegation”.
kaos control plane
↗ Select a resource node
CRDRECONCILED RUNTIME
SELECT A RESOURCE
KIND · Agent
Agent
A Kubernetes resource for a running agent and its model, tools, peers and memory binding.
Why use it
Use it when you want one deployable agent endpoint with its dependencies declared together.
“Memory is augmentation, not a hard dependency.” A MemoryStore runs one central memory service per store, with Mem0 embedded as a library rather than a separate server. Short-term memory keeps the recent conversation window in relational rows; an optional rolling summary preserves narrative continuity; long-term memory holds semantic facts in a vector store, recalled by relevance across sessions.
Scopes make memory multi-tenant: reads select session, agent, user or store scope, and “scope is derived server-side from the authenticated agent identity”, never from model arguments. When a store fails, the agent keeps serving short-term-only and surfaces a MemoryDegraded condition instead of going down.
memory.lifecycle
ONE CONVERSATIONWatch memory change form
RECALL SCOPE
authenticated agent/research→server derives scope · never model arguments→MemoryStore
REMOTE CLIENTAgent pod
“Remember that the risk review is every Friday.”
write(turn)→01
Short-termVERBATIM · RELATIONAL
turn 17turn 18turn 19
3,842 / 4,000 tokens
→02
Medium-termROLLING · APPEND-ONLY
SESSION/42 · WINDOW 07
Risk review cadence and owners agreed…
+ APPEND SUMMARY→
SERVER-DERIVED SCOPESESSION
03
Long-termMEM0 · VECTOR
Risk review starts at 15:00
Risk review starts at 15:30
EXTRACTED · 0.87DEDUPED · CORRECTED
Session 42 covers the Q3 risk register
RECALL · 0.91
Agent sends reports immediately
Agent requests approval before sending reports
EXTRACTED · 0.87DEDUPED · CORRECTED
Agent formats findings as action items
RECALL · 0.91
User prefers detailed reports
User prefers concise reports
EXTRACTED · 0.87DEDUPED · CORRECTED
User tends to review before approving
RECALL · 0.91
Some members review on Fridays
Team reviews happen every Friday
EXTRACTED · 0.87DEDUPED · CORRECTED
Review owners rotate across the team
RECALL · 0.91
FACT EXTRACTEDforget(old) · SUPERSEDED
New turn leaves the agent pod
STORAGELOCAL: Chroma + SQLite on one volume · EXTERNAL: pgvector + Postgres, 2 replicas
04 — SECURED AT THE GATEWAY
Secured at the gateway
Security is off until you turn it on, and fail-closed once you do: protected routes pass Envoy Gateway, which verifies JWTs and consults an OPA policy decision point; “an unavailable PDP never permits a request”. Identity is two-plane: the subject (a Keycloak user, or the agent itself when autonomous) and the acting agent, verified on every hop. Agent identity comes from per-agent ServiceAccounts with short-lived projected tokens, an identity broker, or per-agent OAuth clients registered dynamically.
Authorization is declarative: AccessGrant resources bind users, groups and agents to the resources they may enter, and the operator projects them into policy. Memory enforces the same identities, so one user’s recall can never serve another’s session.
gateway.authorization
CHOOSE REQUEST
subject: keycloak:useractor: serviceaccount:agentVERIFIED ON EVERY HOP
Request ready at clientUse the numbered scenarios to switch paths
05 — WATCH IT WORK
Watch it work
The dashboard covers the operational loop: monitor agents, chat with them live, inspect memory sessions and events, debug MCP tools with real calls, and stream pod logs. Agents ship OpenTelemetry instrumentation, so traces land in your existing observability stack.