Early alpha · v0.x →

Declarative AI agents, like Docker

Write an Agentfile, build it into an OCI image, and run it. Runtime, tools, memory, sessions, and persistence are handled for you. No code or SDK required — both stay available when you need to extend the runtime.

MIT
License
OCI
Distribution
Multi-provider
LLMs

The container model, for agents

Familiar primitives, swapped from processes to autonomous workers.

  • Declarative

    Describe agents in an Agentfile — model, tools, memory, prompts. No SDK, no glue code.

  • OCI-native

    Build into OCI images. Push to any registry. Pull and run anywhere with otters run.

  • Tools as binaries

    BIN entries are container images that the agent invokes as tools — same security model as containers.

  • Provider agnostic

    Anthropic, OpenAI, Ollama, and more. Switch providers without touching agent code.

  • Locked-down spawn env

    Agents start with no host secret leakage. Workspaces are scoped, sandboxed, observable.

  • Two surfaces, one agent

    Talk to the same agent from a TUI in your terminal or a web UI in your browser.

Build your own agent

An Agentfile is all you need

Pick a model, give it a soul, and bind tools as containers. The runtime handles streaming, memory, sessions, and persistence.

Agentfile
FROM scratch
RUNTIME ghcr.io/openotters/runtime:latest
MODEL  anthropic/claude-haiku-4-5-20251001
NAME   pinger

CONTEXT SOUL <<EOF
You are a connectivity probe. Given a host, call the
ping tool and reply "<host>: reachable" or
"<host>: unreachable (<reason>)".
EOF

BIN ping ghcr.io/openotters/tools/ping:latest "TCP-port-80 reachability"

Run your first agent in 60 seconds

Install the daemon, pull a demo image, start chatting. No accounts, no SaaS round-trip.

Read the quickstart