octomind

App Listed

Open-source AI coding agent and agent runtime: one binary, any model, MCP-native. Runs in terminal, CI, or as a daemon — guardrails in scripts, not approval popups.

Checked · Sources

Downloads
110
Dependents
Not applicable
Stars
624
Forks
77
Contributors
25
Commits
2,806
Latest release
0.69.0 ·

About

From the project README ·

Open-source coding agent harness. One Rust binary, any model, every surface.

Interactive, stdin, daemon, WebSocket, or ACP — one binary, one config.
A supervising model plans and checks the work.
Policy lives in TOML guardrails, not approval prompts.

Website · Docs · Tap Registry · Benchmarks · Issues


Octomind is an open-source coding agent harness. It gives any LLM the tools to work in a repository — read and edit files, run shells, search code, delegate to sub-agents — through MCP, and runs the result as an interactive CLI, a stdin pipe, a daemon, a WebSocket server, or an ACP agent in your editor. Most agents stop and ask a human before each risky step, which works at a keyboard and blocks everything in CI. Octomind writes that policy down as TOML guardrails and adds a supervising model that plans and checks the work, so the same session can run with nobody watching. On 25 tasks taken from merged pull requests it solved 24; OpenCode solved 19 with the same model at about twice the cost (benchmarks).

How It Works

One diagram, the whole turn: what is assembled before the model sees the request, the tool loop, how a turn is allowed to end, and what carries over to the next session.

Octomind turn flow: request, context assembly (AGENTS.md and skills, lesson recall, supervisor notes, compression), model, tool loop (guards, MCP tools, hooks, condense, detectors), verify gate, validators, response; lessons extracted after /done feed later sessions and, with evolution enabled, skill and guardrail candidates on trial

Read the full README
  • What the model sees is built once per user message, not per tool round: AGENTS.md, the skills whose rules match the prompt (standard SKILL.md folders), the tool bundles those skills need (they start their own MCP servers on demand), and the few past lessons that match. Skills · Learning
  • Compression folds older turns into a summary that cites content-addressed blocks; the raw messages stay in a per-session archive and the recall tool brings any block back verbatim as a normal tool result, so history is never rewritten and the prompt cache survives. Compression
  • Guards, hooks, validators are deterministic and live in .agents/guardrails.toml plus scripts; they run before any model opinion. The optional intent check ([supervisor.authorizer], off by default) adds one supervisor-model look after the guards and blocks a call only when it independently conflicts with what you asked for. Guardrails
  • The supervisor is a second model ([supervisor.model]): it keeps the plan and reminds the model of the goal each turn, cuts oversized tool results down to the lines the task needs (copied, never retyped), and refuses a self-reported "done" until the evidence checks out. The loop check is a fixed heuristic: when the model repeats itself or stalls it gets one nudge, never a takeover. Supervisor
  • The decision model ([decision]) is optional: a classifier that answers typed yes/no questions with a probability instead of prose. When set, the supervisor sends its cheap questions there — which lessons to recall, which skill to activate, which lines to keep, whether a completion claim holds — and keeps chat calls for writing. Calibrated decisions
  • Learning extracts lessons after /done or at exit, in your own words, into files under learning/<project>/<role>/; later sessions recall the ones that match. With [supervisor.learning.evolution] enabled, recurring lessons become skill and guardrail candidates that run in shadow first, then an A/B trial against a control arm, and go active only when they beat it. Learning

Why Octomind?

Built for the work that keeps going after you leave:

  • Policy as code, not approval popups. Deterministic guardrails — pre-call guards, post-result hooks, post-turn validators — live in TOML and scripts, so they work in CI, daemons, and scheduled runs.
  • Measured, not claimed. All four agents ran stock on the same tasks with the same judge. Per-case table, artifacts, and a reproduction guide are in the benchmarks.
  • Ready-made specialists. octomind run developer:general pulls a packaged agent (prompt, model, MCP servers, tool permissions) from a tap. Publish your own with one repo.
  • Sessions that stay sharp. Adaptive compression keeps long tasks moving without forgetting the task or your last few messages.
  • Learns the project as you work. Corrections and rules you state become lessons, quoted from your own words and scoped to the project and role, and come back in later sessions. Turn on evolution and recurring lessons compile into skill and guardrail candidates, trialled against a control and kept only when they help.
  • Any model, any budget. Use Octomind Cloud or your own key (OpenRouter, Anthropic, OpenAI, DeepSeek, Ollama, and more), pick a model per role, and cap spend per request and per session. Over budget, a terminal session asks y/N; a non-interactive run stops with exit code 75.
  • One config. Models, tools, roles, guardrails, budgets: all TOML, no framework code.
# Interactive
octomind run developer:general

# Non-interactive — CI, scripts, automation
echo "Explain the auth module" | octomind run developer:general --format plain

# Daemon — keep it alive, talk to it from another terminal
echo "watch the build" | octomind run --name watcher --daemon --format jsonl
octomind send --name watcher "run the test suite"

Quick Start

1. Install (macOS, Linux):

curl -fsSL https://raw.githubusercontent.com/muvon/octomind/master/install.sh | bash

On Windows, in PowerShell:

irm https://raw.githubusercontent.com/muvon/octomind/master/install.ps1 | iex

On macOS, you can also install with Homebrew:

brew install muvon/tap/octomind

2. Choose where models come from. Start octomind once in a terminal:

octomind

Before it writes a config, the first interactive run asks where to get models:

  • Octomind hub (recommended): one browser sign-in, auto picks a model for each job, paid with credits you buy.
  • Your own provider: OpenRouter, OpenAI, Anthropic, DeepSeek, Ollama, and every other provider octomind supports. Octomind asks for the key with hidden input, saves it to its own .env (readable only by you), and lists the provider's models to pick from. One model can serve the main agent, the supervisor, and compression, or you can pick each.
  • Skip: keep the shipped defaults (octohub:auto).

Run octomind configure to change this later. Scripts, piped input, and --format runs never see the screen; they use the default config.

3. Run a specialist in your project:

cd ~/your/project
octomind run developer:general

You're now in a session with an agent that can read your code, run commands, and edit files. The interface is a plain line prompt with markdown rendering — no TUI to learn, so it works over SSH, in tmux, and in CI logs. The first time you run a specialist, it may install its tools and ask for credentials.

developer:general comes from the default tap muvon/tap, not your local config. Plain octomind run starts the config's default role, assistant:concierge.

Try the recorded bug-fix demo: two failing tests, an agent fix, and an independent test rerun.

Benchmarks

Measured on octobench against 25 tasks harvested from merged pull requests across Python, PHP, Rust, C++, and JavaScript. Each agent works in the pre-fix repo; held-out tests from the merged fix decide pass or fail. These are the published July 30, 2026 results, not a measurement of this checkout.

solvedjudge Σ / 2500costwall time
octomind + glm-5.224/252264$63.433.6h
claude code + claude-opus-523/252262$81.796.7h
codex + gpt-5.6-sol21/252127$14.861.0h
opencode + glm-5.219/252093$129.543.3h
  • The harness matters. opencode used the same model and endpoint; octomind solved 24 vs 19 at roughly half the cost. All four agents ran stock invocations with no tuning, so this measures the whole harness, not individual features.
  • Worst-case pricing, still ahead. glm-5.2 ran without prompt caching while Opus billed ~97% of context re-reads at cache rates — and octomind still led on solves, cost, and wall time.
  • Reproducible. Per-case table, artifacts, and reproduction guide: BENCHMARK.md. Background: blog post.

Guardrails: Policy as Code

Drop a .agents/guardrails.toml in your repo. Octomind enforces it deterministically, with no code to compile and no plugin to install.

# Pre-call deny — block a class of calls before they execute
[[guard]]
match   = "shell(command=^rm\\s+-rf?)"
message = "rm -rf blocked."

# Conditional rule — only fires after the agent ran git status this session
[[guard]]
match   = "shell(command=git push)"
when    = ["+shell(command=git status)"]
message = "Review changes before pushing."
LayerWhen it runsWhat it does
GuardsBefore a tool callDeny by capability, argument regex, and session history. A match returns a denial instead of executing the call.
HooksAfter a tool resultA non-zero exit injects stdout into the agent's inbox — lint and format failures become automatic corrections without restarting the turn.
ValidatorsAfter a turnScripts the agent reads on its next turn. This replaces "approve this change?" prompts in autonomous loops.

If you know Claude Code hooks: guards are PreToolUse denies declared in TOML, hooks are PostToolUse, validators are Stop — no scripts required for the common cases.

Hook and validator script examples: Guardrails guide.

One Harness, Five Surfaces

The same harness, exposed wherever your workflow needs it.

SurfaceUse it forDocs
Interactive CLIDaily work, any domainSessions
Non-interactive (--format plain / jsonl)CI, scripts, scheduled jobsCLI reference
Daemon + sendBackground agents, continuous monitoringDaemon & hooks
WebSocket (octomind server)IDE plugins, dashboards, integrationsWebSocket server
ACP (octomind acp)Agent inside Zed, JetBrains, VS Code, Neovim, or any ACP editorACP protocol

Need machine-readable results? Pass --schema schema.json to constrain the final response to a JSON Schema (requires a model with structured-output support). See Structured output.

Features

FeatureWhat you getLearn more
Specialists & tapsPackaged agents with model, prompt, MCP servers, and permissions; installs their tool dependencies on first useTap system
RolesPer-role model, temperature, system prompt, toolsRoles
WorkflowsMulti-step pipelines, each step with its own model and toolsetWorkflows
MCP clientstdio and Streamable HTTP servers, with OAuth; enable/disable servers mid-sessionMCP tools
Agent SkillsStandard SKILL.md skills from .agents/skills/, ~/.config/agents/skills/, and taps; they activate on demand, so your context stays smallSkills
Local project toolsExecutable scripts in .agents/tools/ auto-register as toolsLocal tools
Plugins & AGENTS.mdAgent Plugins (plugin.json + skills + mcp.json) from taps, .agents/plugins/, or ~/.config/agents/plugins/; project AGENTS.md loads at session startConfiguration
Supervisor & learningA second model plans, checks completion, and condenses tool output; lessons persist as files per project and roleSupervisor, Learning
Sandbox--sandbox locks writes to the working directory via Landlock (Linux) or Seatbelt (macOS), inherited by every shell, MCP server, and sub-agentConfig reference
Token efficiencyCache-aware cost accounting and adaptive compressionToken efficiency
Specialists
octomind run developer:general    # general dev, language skills auto-activate
octomind run doctor:blood         # blood-test interpretation specialist
octomind run lawyer:sg            # legal specialist

Running a specialist fetches its manifest from the tap registry, installs any required binaries, resolves credentials, starts the right MCP servers, and then opens the session.

Build and register your own:

octomind tap init yourteam/my-tap   # scaffold, validate, git-init, and register locally
octomind tap yourteam/my-tap        # on another machine, after publishing to GitHub

The octomind- prefix is added automatically: yourteam/my-tap maps to the repository yourteam/octomind-my-tap.

Installation

MethodCommand
Install script (recommended)curl -fsSL https://raw.githubusercontent.com/muvon/octomind/master/install.sh | bash
Install script (Windows PowerShell)irm https://raw.githubusercontent.com/muvon/octomind/master/install.ps1 | iex
Homebrew (macOS)brew install muvon/tap/octomind
Scoop (Windows)scoop bucket add muvon https://github.com/Muvon/scoop-bucket then scoop install muvon/octomind
Cargo (Rust 1.95+)cargo install octomind
Dockerdocker run --rm ghcr.io/muvon/octomind --help
From sourcegit clone https://github.com/muvon/octomind.git && cd octomind && cargo build --release

The install script detects your OS and architecture (Linux and macOS on x86_64/aarch64) and installs to ~/.local/bin/. Pass --install-dir <DIR> or set OCTOMIND_INSTALL_DIR to override. On Windows (x86_64/aarch64), install.ps1 installs to %LOCALAPPDATA%\octomind\bin and adds it to your user PATH; it honors OCTOMIND_INSTALL_DIR and OCTOMIND_VERSION too. install.sh still works from Git Bash or MSYS2.

Command not found? Add the install directory to your PATH:

export PATH="$HOME/.local/bin:$PATH"

Building from source requires protoc; see Building from source for per-OS prerequisites.

Verify:

octomind --version
octomind config      # generate the default config
octomind run         # start your first session

Shell completions: octomind completion <bash|zsh|fish|elvish|powershell>.

Model access

Run octomind configure any time to switch between the hub and your own provider. It changes only the three model names (main, supervisor, compression) and keeps the rest of your config and its comments.

Octomind Cloud — choose the hub in octomind configure, or run octomind login (device-code sign-in, like gh auth login). Either stores a gateway key locally. The default config already uses octohub:auto. Learn more.

Bring your own key — choose your provider in octomind configure. To set it up by hand instead, set the provider's environment variable (OPENROUTER_API_KEY, OPENAI_API_KEY, ANTHROPIC_API_KEY, DEEPSEEK_API_KEY, …) and point the model tables at it. The supervisor and compression profiles also default to octohub:auto, so update all three:

[model]
name = "anthropic:claude-sonnet-5-5"

[supervisor.model]
name = "anthropic:claude-haiku-5-5"

[compression.model]
name = "anthropic:claude-haiku-5-5"

Provider details and per-role overrides: Providers & models.

Configuration

Config lives at ~/.local/share/octomind/config/config.toml on macOS and Linux, and under %LOCALAPPDATA%/octomind/config/ on Windows. Set OCTOMIND_DATA_DIR to override the data root.

octomind config --show       # view current config
octomind config --validate   # validate config

Override any value for a single run with -c:

octomind run -c supervisor.enabled=false

Full reference: Configuration reference · Environment variables.

Session commands
CommandDescription
/helpShow all commands
/infoToken usage and costs
/model anthropic:claude-sonnet-5-5Switch model mid-session
/role developer:generalSwitch to a configured role or tap tag
/new Review authStart a fresh session (title optional)
/doneForce context compression and start background learning extraction when enabled
/exitExit the session

Full list: Session commands.

Telemetry

Octomind reports anonymous usage: which commands, tools, and models are used, plus timings, token counts, and error kinds. It never sends your code, prompts, file paths, tool arguments, or environment values. Opt out in any of three ways:

export DO_NOT_TRACK=1          # the cross-tool standard, honored first
export OCTOMIND_TELEMETRY=0    # for subsequent commands in this shell
# or set `telemetry = false` in config.toml

Exact field list: Telemetry.

Documentation

Full index: doc/README.md · Hosted: octomind.run/docs.

Contributing

The most impactful contribution isn't code — it's specialist agents. A cardiologist publishing doctor:medications. A tax attorney publishing lawyer:us. A security researcher publishing security:owasp. One TOML file, and everyone with that problem gets an agent that knows the domain.

Code contributions are welcome too. Set up the hooks and run the gate before you push:

pip install pre-commit && pre-commit install
make dev    # fmt + clippy + test

Commits follow Conventional Commits. Full guide, architecture overview, and code conventions: CONTRIBUTING.md · internals: Architecture.

Community participation follows our Code of Conduct. Report vulnerabilities privately using the security policy.

License

Apache License 2.0 — see LICENSE.


Octomind by Muvon · Website · Documentation

Runs on
GPU support unknown
What shows it
  • no dependency or feature matches a backend row
Native code
Required
  • Binds native code: zstd-sys
Python bindings
No Python binding crate found
License
Apache-2.0

Compare with similar projects

Order: strongest tier first, then most downloads, then name, with unmeasured values last. A library counts downloads over 30 days. An app counts binary downloads per release. An app with none counts its crate downloads over 30 days. ML Rust runs this catalogue, so its closest project always gets a row.

octomind beside the projects that share a topic with it
ProjectDownloadsDependentsStarsLatest releaseRuns on (GPU)Native codeLicense
octomind This page App Listed

Open-source AI coding agent and agent runtime: one binary, any model, MCP-native. Runs in terminal, CI, or as a daemon — guardrails in scripts, not approval popups.

110 binary downloads per release Not applicable 624 0.69.0 GPU support unknown Binds native code: zstd-sys Apache-2.0
goose App Featured

an open source, extensible AI agent that goes beyond code suggestions - install, execute, edit, and test with any LLM

63,795 binary downloads per release Not applicable 56,377 Not measured Not measured Apache-2.0
opendev App Listed

Open-Source Coding Agent in the terminal

740 binary downloads per release Not applicable 853 0.1.4 GPU support unknown No native code found MIT
pi-rust App Listed

Rust-native, library-first coding-agent runtime and terminal CLI inspired by Pi, with composable LLM providers, tools, sessions, and plugin ABI

16 binary downloads per release Not applicable 231 Not measured Not measured MIT

Persistent cognitive memory for AI agents and robots — Hebbian learning, knowledge graph, spatial recall. Zenoh/ROS2 native. Single binary, runs offline.

Python bindings

1 downloads over 30 days 0 322 0.2.0 GPU support unknown Binds native code: libmimalloc-sys, librocksdb-sys, lz4-sys, ort-sys, pnet_sys (feature zenoh) Apache-2.0
axp App Listed

An open protocol that gives AI agents a secure, sandboxed place to run code and use tools — with lean context usage. AXP works alongside MCP

Not measured Not applicable 3 Not measured Not measured Not measured Apache-2.0
codewhale App New

Terminal UI for open-source and open-weight coding models

19,483 binary downloads per release Not applicable 41,158 0.10.2 GPU support unknown Binds native code: aws-lc-rs, ring, liblzma-sys, libsqlite3-sys, rquickjs-sys and 1 more MIT
Why ListedNo archive, New or Featured rule places it, so it is Listed.

What it lacks for Featured

  • The check holds no value for Homebrew installs on request over 365 days, Repology repository families, Docker pull growth over 90 days. A gate that lacks its signal does not pass.

What else the check found

  • The last activity is on 8 Nov 2026, 1 day ago. The rules expect an update within 365 days. Dormancy rule

Not measured: Homebrew installs on request over 365 days, Repology repository families, Docker pull growth over 90 days.

Exact rules: Listed, Featured app. The check on applied thresholds version 9.

Every rule outcome, as the check records it
  • expected-interval: app: E = 365 days
  • dormancy: last activity 2026-11-08, 1 days ago, E = 365: active
  • featured: not featured: unknown homebrew_on_request_365d, repology_families, docker_pull_growth_90d
  • listed: listed: no archive, new or featured rule applies

Measurements and sources

Each signal row shows the raw value, its source and the fetch date. The Sources list gathers every distinct source on this page. Movement needs more history.

Sources6 sources
Adoption110 binary downloads per release4 not measured
Adoption measurements
SignalValueSourceFetchedCounts
Active dependentsNot measuredYes
New dependents (365 days)Not measuredYes
Peak active dependentsNot measuredYes
Active dependents as a share of the peakNot measuredYes
Binary downloads per release110GitHub releasesYes
MaintenanceLatest human commit: 1 day ago4 not measured
Maintenance measurements
SignalValueSourceFetchedCounts
Latest human commit2026-11-08GitHub repositoryYes
Latest release2026-11-08GitHub releasesYes
First release2025-06-26crates.io database dumpYes
Latest version0.69.0crates.io database dumpNo
Days the oldest outside issue waits for a reply16GitHub repositoryYes
Maintainer replies over 365 days33GitHub repositoryYes
Repository archivedfalseGitHub repositoryYes
Repository gonefalseGitHub repositoryYes
Release commit or manifest in the repotruecrates.io packageNo
Published docsNot measuredYes
Latest release fails cargo checkNot measuredYes
Build check dateNot measuredYes
Build check toolchainNot measuredYes
SecurityNot measured
Security measurements
SignalValueSourceFetchedCounts
Unpatched vulnerabilities past the grace windowNot measuredYes
RustSec unmaintained advisoryNot measuredYes
Deprecation noticeNot measuredYes
Deprecated requirementNot measuredYes
Distribution120 releases, 487 downloads over 30 days6 not measured
Distribution measurements
SignalValueSourceFetchedCounts
Releases120crates.io database dumpNo
Downloads over 30 days487crates.io database dumpNo
Binary downloads over the last 3 releases332GitHub releasesYes
Homebrew installs on request over 365 daysNot measuredYes
Repology repository familiesNot measuredYes
Docker pull growth over 90 daysNot measuredYes
Docker pulls at the growth baselineNot measuredYes
Every version a prereleasefalsecrates.io database dumpYes
Every version 0.0.xfalsecrates.io database dumpYes
Every version yankedNot measuredYes
Crate deleted from crates.ioNot measuredYes
Repository624 stars, 77 forks, 25 contributors, 2,806 commits. Stars alone never qualify a project.
Repository measurements
SignalValueSourceFetchedCounts
GitHub stars624GitHub repositoryYes — one part of the repository route
GitHub forks77GitHub repositoryYes — one part of the repository route
Contributors with a GitHub account25GitHub contributorsYes — one part of the repository route
Commits on the default branch2806GitHub repositoryNo
Repository's main crate left out of the entrynonecrates.io database dumpYes
Facts that never count
Facts that never count measurements
SignalValueSourceFetchedCounts
LicenseApache-2.0crates.io database dumpNo
Runs on, from listed crates and their direct dependenciesGPU support unknowncrates.io database dumpNo
What shows each backendno dependency or feature matches a backend rowcrates.io database dumpNo
Native code, from listed crates and their dependenciesBinds native code: zstd-syscrates.io database dumpNo
Python bindings, from direct dependencies of listed cratesNo Python binding crate foundcrates.io database dumpNo
Crates that depend on a listed crate directlyNot measuredNo

Corrections and review history

Report a correction

No correction applies to this entry.

Judgments

A judgment enters only through an approved issue and a merged pull request.

No judgment applies to this entry.