Self-host a team of AI agents that don't just chat — they work: in a sandbox, on your stack, with your own LLM provider.
Metis is an open, self-hostable agent platform. A real agent with shell and coding tools, reaching your systems through connectors — sandboxed, multi-user, on the provider you choose. Coding is one capability, not the boundary.
![]() |
![]() |
| Run board — every team's work in flight | Live streaming chat with the agent |
- Agents that act, not just answer. Shell, file tools, and connectors (GitHub, Google, Linear, Metabase, …) — the agent reads, runs, edits, and hands back artifacts, sandboxed by default.
- Multi-user from day one. Every resource belongs to a team, and the agent acts as the right person against the right systems — credentials per team and per member. A personal account is just a team of one.
- Your provider, your infrastructure. Anthropic, OpenAI, Google, or whatever comes next, picked per conversation. No Metis-hosted inference, no per-user key vault.
- Build your own tools, and share them. Author skills in the UI (or have the agent write them) and share them across your devices and your team.
Not hypothetical: Metis's sibling, Themis, runs daily in three languages at a company managing 1,000+ properties — one platform, every role:
- Engineering — review a PR for the landmines green tests sail past (a locking migration, a hardcoded credential, a fee missing from the total), then file it as a Linear ticket.
- Operations — run the rental operation across countries: OTA cancellations and calendar sync, pricing schedules, utilities and tax.
- Customer service — draft discount emails, chase a booking anomaly, check whether an inbound email is genuine.
- Leadership — audit dashboard metrics, pull KPI rankings, prep the team-meeting agenda.
Themis is Claude-only (Claude Agent SDK); Metis is the open, provider-agnostic form of the same shape, built on pi, a fast, open agent harness. The lessons come along; the lock-in does not.
pi runs on your laptop. Metis runs pi for everyone you work with — in a sandbox, on your stack, with your provider.
- Rails 8.1, Ruby 4.0.5, PostgreSQL
- pi agent harness, driven via the
pi-agent-rbgem - Any LLM provider pi supports, chosen per conversation
- Hotwire (Turbo + Stimulus, importmap) and Tailwind for the live chat UI
- Devise for auth; Solid Queue / Cache / Cable for jobs, cache, and Action Cable
Where the agent runs is a deployment choice (METIS_AGENT_RUNTIME), not
a code change — same agent, pick the isolation tier:
- local — pi as a host subprocess. Dev only; not a security boundary.
- docker — a disposable container over a persistent workspace; runs under gVisor in production.
- e2b / daytona — cloud microVM sandboxes, paused or stopped between turns and resumed by id.
- microsandbox — self-hosted libkrun microVMs: VM-grade isolation without a cloud vendor.
See docs/coding-runtime.md and
docs/session-persistence.md.
Workflow steps marked run: local are delegated to your own machine: a
stdlib-only Go daemon (clients/metis/) polls the
deployment, claims the step, runs pi, Claude Code, or Codex headless in
a git worktree, and reports the result back. Metis never drives your
machine — the daemon pulls. See
docs/local-bridge.md.
VISION.md— what Metis is, the rules we hold to, what we won't build.docs/architecture.md— how a turn flows; the Agent service layer.docs/configuration.md— runtimes, providers, and environment.docs/deployment.md— production deploys with Kamal, step by step.
One line — clones the repo, asks for a provider key, and boots the whole stack (Rails, Postgres, pi) in containers:
curl -fsSL https://metiser.com/setup | bashThen open http://localhost:3000 and sign in with the seeded dev login
(admin@metis.local / password). Uses Docker if
you have it; on Apple silicon (macOS 26+), Apple's native container
runtime (brew install container)
works with no Docker at all.
The same by hand, from a checkout:
cp .env.example .env # set ANTHROPIC_API_KEY (or another provider)
docker compose up --build # Docker (--build on first run / Gemfile change)…
bin/container-dev # …or Apple's container runtime, no DockerUndo it all (containers, volumes, locally built images — the checkout
stays) with … | bash -s uninstall.
See docs/configuration.md for runtimes,
providers, and every variable.
bin/rails test # full Minitest suite
bin/rubocop # lint (rubocop-rails-omakase)
bin/ci # rubocop, security scans, and testsSee docs/architecture.md and
CLAUDE.md for architecture and conventions.

