OPEN SOURCE AGENT RUNTIME

Portable agents that
finish the job.

Your agent is a file you own, not a subscription you rent. One binary, any model, any surface — and it keeps working when nobody is watching, because policy lives in scripts instead of approval popups.

$ curl -fsSL https://octomind.run/install.sh | bash

Apache 2.0 · nothing else to install · any provider, swapped mid-session

Same model · same endpoint · 25 real merged PRs
octomind 24/25
$63
opencode 19/25
$130
Both ran glm-5.2. The harness is the only variable →
Benchmarked on real PRs

The harness matters as much as the model

25 tasks harvested from pull requests merged in 2026 — python, php, rust, c++, js — graded by each project's own held-out tests. 4 agents, stock settings, no tuning.

AgentModelSolvedJudge Σ / 2500CostWall time
octomindglm-5.2 (open)24/252264$63.433.6h
claude codeclaude-opus-523/252262$81.796.7h
codexgpt-5.6-sol21/252127$14.861.0h
opencodeglm-5.2 (open)19/252093$129.543.3h
  • Same model, same endpoint as opencode — 24 vs 19 solved at half the cost. The difference is pure harness: context discipline and supervision.
  • Read the cost column, not the clock. Wall time mostly tracks whatever the provider's latency was on the day, so it proves little on its own. Tokens spent per task solved is the number that belongs to the harness — and it is the one we optimise.
  • octomind's cost is its worst case. glm-5.2 ran via Ollama cloud with no prompt caching — every token at list price — while Opus billed ~97% of its context re-reads at 1/10 cache rates, and still came out behind on solves and cost.
  • Every task is a real merged fix — mostly landed after model training cutoffs — proven fail-to-pass before benching, validated by hidden maintainer-written tests plus an LLM judge.

What breaks when you walk away

The five things people actually leave their agent CLI over — and what the runtime does instead

The Problem

  • One vendor decides what you may run Closed harness, one model family, limits shared with the chat app. Hit the cap mid-task and the work stops where it stands.
  • Every dangerous call waits for a click Approval popups make you the safety layer. That works at the keyboard and breaks the moment you point an agent at CI, cron, or any loop you walk away from.
  • Eighty tools loaded before you type Most harnesses preload every tool and skill up front. The window fills with things the task never needed, and tool choice gets sloppier as it does.
  • Sessions break at hour 4 Naive truncation drops the decisions you need. Quality collapses. Restart.
  • Bills surprise you $7K daily overages. No per-task budget. No kill switch.

Octomind

  • Any model, swapped mid-session OpenRouter, Anthropic, OpenAI, Google, DeepSeek, Bedrock, Ollama and more. Rate limited? /model and carry on — same session, nothing lost.
  • Guardrails, not popups Deterministic policy in a TOML file: pre-call guards, post-result hooks, post-turn validators. The agent runs unattended and still can't cross a line.
  • Six tools in context, not eighty Tools stay dormant and activate on meaning, scored by an embedding model — and abstain when two match closely, because loading nothing beats loading the wrong thing.
  • Adaptive compression Cache-aware and structurally preserving: it keeps decisions, errors and file references, drops the noise, and decides whether compacting is worth it before paying for it. Sessions resume across days.
  • Hard spending caps Per-request and per-session enforced — agent stops, falls back, or warns before the bill.

Start with the binary → Read the guardrail config

one binary

The agent goes where you go

Same session engine, same config, same agent — exposed five ways. Nothing is a separate product, a separate SDK, or a separate price.

  • octomind run developer:general
    Your terminal Daily work, any domain — the interactive session you already know.
  • echo "…" | octomind run --format jsonl
    CI and shell scripts Non-interactive, structured output. Pipe a task in, parse the result out.
  • octomind run --daemon + octomind send
    A background agent Keep a session alive for days and inject new work into it from anywhere.
  • octomind server
    IDEs and dashboards A WebSocket server for plugins, web front-ends and your own integrations.
  • octomind acp developer:general
    Inside another agent Speaks ACP, so a larger orchestration can call it as a sub-agent.

Your agent is a TOML file in your repo — models, tools, guardrails and prompts. Move the file, move the agent: it behaves the same on your laptop, on a cloud machine, or in a pipeline nobody is watching.

observability

Every run explains itself

When an agent works unattended, the question is never "did it reply" — it is what exactly did it do, and what did that cost. One command turns the whole session into something you can read.

What opens in the browser

  • Every user and assistant turn, in order
  • Every tool call — arguments in, results out
  • Cost updates as they were charged, per request
  • Cache reads and writes, counted separately
  • Compression and truncation markers, where they fired

Rendered exactly as it happened on disk — and identically whichever model produced it, so a run you did on a local Ollama model reviews the same way as one on Opus.

/share

Uploads the session log and prints a permanent link. For a teammate, a bug report, or an audit trail you want to keep. The CLI never opens it for you — clicking is your call.

/analyze

Uploads nothing. A bridge binds to 127.0.0.1 only, every request needs a single-use token, re-running it kills the previous one, and the whole thing dies with the process. Your browser reads the log off your own machine.

In-session, /info and /report break down tokens, cost, cache savings and compression as you go. Session commands →

An agent is one file

Model, tools, prompts and guardrails in a single TOML — write your own, or run one somebody already tuned. Either way it is a file you can read, fork and commit.

octomind
$ octomind run doctor:blood
Installed medical specialist. Paste your lab results...
$ "Interpret these blood test results for a 45-year-old male"
WBC slightly elevated — likely infection. LDL/HDL ratio normal...
$ octomind run devops:kubernetes
Installed Kubernetes specialist with kubectl, helm, kustomize...
$ "Why is my pod stuck in CrashLoopBackOff?"
Checking logs... Found OOMKilled. Memory limit too low...

Browse 150 specialists in the Tap registry. Or build and share your own.

Rust Expert octomind run developer:general
Contract Lawyer octomind run lawyer:contracts
Financial Analyst octomind run finance:analyst
Security Auditor octomind run security:owasp

the registry

Most of them aren't for developers

150 published agents across 34 domains. A tap is a TOML manifest — the right model, the tools it needs, the prompt and its dependencies — so installing an expert is one command, whatever the expertise is.

  • octomind run lawyer:au Australian Law Specialist
  • octomind run doctor:blood Blood Test Interpreter
  • octomind run family:eldercare Eldercare Navigator
  • octomind run finance:retirement Retirement & Pensions Navigator
  • octomind run coach:negotiation Negotiation Coach
  • octomind run tutor:exam Test Prep Coach
  • octomind run vet:behavior Pet Behavior & Training Coach
  • octomind run home:diy Home Repair & DIY Guide
  • octomind run hr:recruiter Hiring-Side Recruiter
  • octomind run video:ugc UGC Performance Ad Producer
  • octomind run security:owasp OWASP Security Specialist
  • octomind run developer:readme README Architect

Meet the twelve most used → All 150 specialists Publish your own

One command runs a whole team

A workflow chains specialists into a pipeline: research hands the writer a brief, an auditor scores the result, an editor fixes it — and the run halts rather than making things up. Pipe something in; a finished piece comes out.

$ octomind workflow promote.toml

promote turns one article into platform-native social drafts — a researcher grounds it, a writer drafts, and the polish loop re-edits until the audit signs off.

on purpose

What we didn't build

Some of these are missing because something more general replaced them; the rest are missing on purpose. If one is a hard requirement for you, better to find out here than three days in.

  • A plugin API

    Extension is MCP, the open standard, so a server you already run works here unchanged and nothing has to be written against us. The proof is that we eat it: three servers are builtin — core, runtime and agent — and the file tools your agent uses are octofs, an external subprocess delivered through a tap, exactly like a server you would add yourself. There is no privileged inner circle. MCP tools →

  • An SDK to link against

    The binary is the SDK. Guardrails, hooks and validators are injection points in TOML; the runtime server lets a session register new MCP servers, agents and skills mid-run without a restart; and the same engine answers over stdio, JSONL, ACP and WebSocket. There is no library to import and no version of us to pin. Layers →

  • Approval popups

    Policy is deterministic and lives in TOML — pre-call guards, post-result hooks, post-turn validators. A human clicking "approve" is not a safety model that survives CI, cron, or anything you walk away from. Pass --sandbox when you want OS-level write restriction on top. Guardrails →

  • API keys in the config file

    Keys are read only from the environment or a .env file. Setting one with octomind config --api-key is intentionally rejected, and points you at the right env var instead — because config files get committed and environments do not. Providers →

  • Our own instructions format

    AGENTS.md, the shared standard, loaded from the project root whenever it exists. No configuration, and no second file that only means something to us. Configuration →

  • A registration step for your tools

    Drop an executable in .agents/tools/ and it is discovered by file presence. No server block to declare, no allow-list to extend — local tools are role-agnostic by design. Local tools →

  • A bundled filesystem

    Even reading a file goes through a swappable server. octofs ships as the default because most people want it, but a role that never references the filesystem capability simply has no file tools — and you can point it at your own implementation instead. Roles →

Two ways to start

Install the binary, or skip installing anything. Same runtime, same agents, same config.

On your machine

1

Install

brew install muvon/tap/octomind

Install via Homebrew on macOS

2

Connect Models

octomind login

One login connects the Hub — free models included, no provider accounts. Or bring your own keys: OpenRouter, OpenAI, Anthropic, Google, DeepSeek, Bedrock, Ollama and more.

3

Run

octomind run developer:general

No config file to write — sensible defaults out of the box, and every one of them overridable in TOML when you want it. Type /share at any point and the whole run becomes a link you can read.

Alternative Install Methods

Install Script curl -fsSL https://octomind.run/install.sh | bash
Cargo cargo install octomind
From Source git clone https://github.com/muvon/octomind cd octomind && cargo build --release

Or in the cloud

Octomind Cloud — hand the job to AI agents, once or every day. They work on their own cloud computer and send results to Telegram, WhatsApp or Slack. Free tier, no card.

Apache 2.0

Yours to keep

Apache 2.0, readable and forkable. The runtime works standalone with your own provider keys and never needs our servers — signing in is a convenience, not a dependency. Telemetry is anonymous and off with one env var, and it never sees your code, prompts, file paths or tool arguments.

Single binary, nothing else to install · Bring your own keys · Self-hostable