OPEN SOURCE · V0.7.0 · APACHE-2.0

K8s Agent OS (KAOS)

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.

kaos-cli
$ pip install kaos-cli
Successfully installed kaos-cli
$ kaos system install
KAOS operator and system services are ready
$ kaos modelapi deploy my-api --mode Hosted --model "smollm2:135m"
ModelAPI/my-api created · Ready
$ kaos agent deploy my-agent --modelapi my-api --model "smollm2:135m"
Agent/my-agent created · Ready
$ kaos agent invoke my-agent --message "Hello"
Hello! How can I help you today?
$ kaos ui
Dashboard available at http://localhost:3000

02 — THE CONTROL PLANE

The control plane

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

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.

Try it

                    kaos agent deploy my-agent --modelapi my-api --model "smollm2:135m"
                  
Read the docs

03 — MEMORY THAT SURVIVES THE SESSION

Memory that survives the session

“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/researchserver derives scope · never model argumentsMemoryStore
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
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
01Clientrequest
02Envoy GatewayJWT verifyJWT ✓
03OPA PDPallowALLOW ✓
04Agentidentity checkedID ✓
05Onward hopboth tokensID ✓
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.

KAOS dashboard workflow showing agent operations
Dashboard workflow
KAOS monitoring view showing traces and flamegraphs
Observability with traces and flamegraphs

06 — PROJECT METRICS & LINKS