v0.8.0 · Apache 2.0

Ship AI teams like you ship services.

ark-operator brings AI agents into Kubernetes as first-class resources. Define your team. Deploy it. Operate it with every tool you already know.

kubectl — research-team.yaml
$ kubectl apply -f research-agent.yaml
arkagent.arkonis.dev/research-agent created

$ kubectl get arkagents
NAME              MODEL      REPLICAS   READY   AGE
research-agent    llama3.2   5          5       2m

$ kubectl apply -f research-team.yaml
arkteam.arkonis.dev/research-team created

$ kubectl get arkteam -n my-teams
NAME            PHASE   LAST RUN   AGE
research-team   Ready              2m

$ kubectl get arkrun -n my-teams
NAME                 TEAM            PHASE     TOKENS   AGE
research-team-x4kpz  research-team   Running   1,204    8s
Apache 2.0 License
v0.8.0 Latest release
Pluggable LLM + MCP Providers
Go 1.26+ Runtime

Agents running overnight with no budget cap. Prompts changed by editing a file on a server. No rollback. No visibility. No alerts.

Sound familiar?

Containers had the same problem. The answer was a new abstraction layer, not a better script.


One file. An entire AI team.

Define roles, models, and delegation in one YAML file. Each role gets an isolated queue. The operator wires everything together.

research-team.yaml
kind: ArkTeam
metadata:
  name: research-team
spec:
  entry: coordinator
  roles:
    - name: coordinator
      model: llama3.2
      systemPrompt: |
        Break down the task and delegate to
        researcher and writer as needed.
      canDelegate: [researcher, writer]

    - name: researcher
      model: llama3.2
      systemPrompt: "Research topics thoroughly."

    - name: writer
      model: llama3.2:1b
      systemPrompt: "Write clear, concise articles."
deploy & run
$ kubectl apply -f research-team.yaml -n my-team
arkteam.arkonis.dev/research-team created

$ kubectl get arkteam -n my-team
NAME            PHASE   ENTRY         AGE
research-team   Ready   coordinator   30s

$ kubectl get arkrun -n my-team
NAME                  TEAM            PHASE       TOKENS   AGE
research-team-9vkzp   research-team   Succeeded   5,103    21s

First-class primitives for agents

ARKONIS extends the Kubernetes API with six new resource types.

ArkAgent like Deployment — manages a pool of agent replicas

Manages a pool of agent instances running the same model, system prompt, and MCP tool servers. Handles scheduling, scaling, and semantic health checking.

spec:
  replicas: 5
  model: llama3.2
  systemPrompt: |
    You are a research analyst...
  mcpServers:
    - name: web-search
      url: https://search.mcp.internal/sse
ArkService like Service — routes tasks to available agents

Routes incoming tasks to available agent instances. Decouples task producers from the agent pool with configurable load balancing: round-robin, least-busy, or random.

spec:
  selector:
    arkAgent: research-agent
  routing:
    strategy: least-busy
  ports:
    - protocol: A2A
      port: 8080
ArkSettings like ConfigMap — shared prompt config

Reusable prompt fragments and model settings. Reference from multiple ArkAgents to keep configuration in one place and out of application code.

spec:
  temperature: "0.3"
  outputFormat: structured-json
  promptFragments:
    persona: "Expert analyst..."
    outputRules: "Always cite sources."
ArkMemory like PVC — persistent agent memory

Configures a persistent memory backend for agent instances. Agents remember context across many tasks, not just within a single conversation. Supports Redis and vector stores.

spec:
  backend: vector-store
  vectorStore:
    provider: qdrant
    endpoint: http://qdrant:6333
    collection: research-memories
ArkTeam novel primitive — pipeline DAGs and autonomous agent teams

The unified execution primitive. Run agents as a deterministic DAG pipeline, an autonomous delegation team, or both. Inline roles auto-create managed ArkAgent CRs. Each role gets an isolated queue so tasks never bleed across team boundaries.

spec:
  entry: coordinator
  roles:
    - name: coordinator
      model: llama3.2
      systemPrompt: "Coordinate the team."
      canDelegate: [researcher, writer]
    - name: researcher
      arkAgent: researcher-agent
    - name: writer
      arkAgent: writer-agent
ArkEvent like CronJob / Ingress — event triggers

Fires team pipelines on a schedule, on inbound webhook calls, or when another team produces output. One trigger can fan-out to multiple downstream teams in parallel.

spec:
  source:
    type: cron
    cron: "0 9 * * 1-5"
  targets:
    - team: daily-briefing-team

Operate with what you know

Agents are Kubernetes resources. kubectl, RBAC, namespaces, Helm, ArgoCD — none of that changes. Promoting a new system prompt is a pull request. You already know how to run this.

Teams with real structure

Define who delegates to whom. A coordinator that routes to researchers and writers. Enforced at the infrastructure level, not buried in a prompt where it can be overridden or ignored.

Events and automation built in

ArkEvent fires pipelines on a cron schedule, on inbound webhooks, or when another team produces output. Fan out one trigger to multiple teams. No glue code required.


ark-dashboard

A real-time web UI for your cluster. Monitor agents and teams, visualize pipeline DAGs, trigger runs, retry failed steps, and tail agent logs — without touching kubectl.

Single Go binary, zero dependencies. Streams live state directly from the Kubernetes watch API — no polling, no refresh.

→ ark-dashboard repository
$ go install github.com/arkonis-dev/ark-dashboard@latest

$ ark-dashboard --namespace my-teams
Serving on http://localhost:8080

Semantic health checks

Standard liveness probes check whether a process is running. That's not enough for agents. An agent can be running fine while consistently producing wrong output.

ARKONIS introduces semantic readiness probes that periodically send a validation prompt to the agent and verify the response. Kubernetes stops routing tasks to agents that fail the check.

livenessProbe:
  type: semantic
  intervalSeconds: 30
GET /healthz Process is up
GET /readyz Agent produces correct output

Agents are workloads.
It's time to manage them like it.

Run the quickstart locally in under a minute — no cluster, no API key. Or deploy to Kubernetes and start operating agents the same way you operate everything else.