Axocoatl
The Rust runtime for self-coordinating multi-agent systems.
Axocoatl runs persistent AI agents that coordinate through a stigmergic event
lattice — agents activate when their dependencies complete, driven by
pheromone-style signals with no central orchestrator. Built in Rust on the
ractor actor model: low memory, fast cold start, provider-agnostic.
60-second quickstart
# 1. Install (no Rust toolchain required)
curl -fsSL https://raw.githubusercontent.com/axocoatl/axocoatl/main/scripts/install.sh | sh
# 2. Interactive setup wizard — picks a provider, scaffolds a project
axocoatl onboard
# 3. Check your environment
axocoatl doctor
# 4. Start the daemon + API, then chat
axocoatl dev
axocoatl chat -a assistant
Prefer Cargo? cargo install axocoatl-cli (requires Rust 1.82+).
Skipping
onboard? Copyaxocoatl.example.yamltoaxocoatl.yaml— two agents and one workflow, fits on one screen. The fullaxocoatl.yamlshipped in the repo is the larger demo (12 agents, scheduled runs, MCP servers).
Why Axocoatl
Most agent tooling is a framework you wire together and a cloud you rent. Axocoatl is a runtime you own:
- Stigmergic coordination, no orchestrator — agents activate when their dependencies complete, driven by pheromone-style signals. No central scheduler.
- A coordinator when you need one — an agent can decompose a goal, auction the subtasks to workers it spawns, and run them in parallel (symbolic HTN planning when you provide methods, otherwise the LLM).
- Four-tier memory + checkpointing — agents remember across runs and resume from their last checkpoint after a crash.
- Per-agent token budgets — enforced pre-flight, per agent.
- MCP client + server — discover and call external MCP tools, and expose your own agents as MCP tools. Inbound A2A too.
- Provider-agnostic — Ollama, OpenAI, OpenRouter, Anthropic, Gemini, Mistral, or any OpenAI-compatible endpoint. No lock-in.
- Local-first — one binary, your hardware, your model, your data, zero telemetry.
The differentiator is the coordination layer: define agents with
depends_on, and the event lattice cascades work through them automatically.
agents:
- id: researcher
provider: ollama
model: llama3.2
depends_on: []
- id: summarizer
provider: ollama
model: llama3.2
depends_on: [researcher] # activates when researcher completes
workflows:
- id: research-and-summarize
agents: [researcher, summarizer]
entry_point: researcher
axocoatl workflow run research-and-summarize -i "What is photosynthesis?"
See it work
Give it a goal — it builds the team. A coordinator agent decomposes the goal into subtasks, spawns a worker to fit each one, and runs them in parallel. No orchestration code, no glue.
Tell it once — it remembers. Store a preference, open a brand-new conversation, and it still knows. Agent-editable core memory that persists across runs.
It never phones home. Zero telemetry, no analytics, no accounts, no Axocoatl servers — nothing about you or your work is ever collected. The only outbound calls are the ones you can name: your model provider, and a one-time embedding-model download on first run. After that, air-gap it.
Core concepts
- Agents — persistent
ractoractors with a provider, tools, 4-tier memory, and a token budget. Survive restarts via checkpointing. - Hybrid memory recall — relevant past exchanges are injected each turn, and
the agent can also pull on demand:
recall_search(semantic search over past sessions) andrecall_timeframe(read a day's activity log). Tunable per agent. - Agent-managed core memory — editable blocks (
persona,human,project, …) the agent curates via tools and that render into its prompt each turn (the MemGPT/Letta model). Per-agent by default, shareable across agents. A background "sleep-time" pass consolidates idle agents' memory automatically. - Stigmergic coordination — agents publish
TaskCompletedevents; anEventLatticeaccumulates pheromone signals and activates downstream agents when thresholds are crossed. No scheduler, no glue code. - Coordinator role — for explicit hierarchical work, an agent with
role: coordinatordecomposes a goal into subtasks (HTN or LLM), auctions them to worker agents, runs them in parallel, and synthesizes the results. The pass is resumable via checkpointing. - Workflows — declarative multi-agent DAGs via
depends_on/entry_point. - Providers — Ollama, OpenAI, Anthropic, Mistral, Gemini, OpenRouter. No lock-in.
- Protocols — MCP (discover, call, and expose tools — agents invoke external MCP tools through the daemon over a persistent connection) and A2A (agent interop).
See the docs site for the full picture, the
marketing site for the positioning, or
docs/ARCHITECTURE.md and
docs/TROUBLESHOOTING.md for the in-repo
quick reference.
Roadmap
- Stronger sandbox isolation tiers — the shipped sandbox is a hardened rootless Podman container (capabilities dropped, no-new-privileges, network-isolatable); microVM-class isolation (Firecracker) is planned.
CLI
axocoatl onboard Interactive setup wizard
axocoatl doctor Environment / dependency health check
axocoatl init <name> Scaffold a project non-interactively
axocoatl validate <config> Validate a config file
axocoatl dev | serve Run daemon (+ IPC) / production server
axocoatl chat -a <agent> Interactive chat
axocoatl workflow list | run Inspect / execute multi-agent workflows
axocoatl agents list|status|restart
axocoatl tokens report Per-agent token usage
axocoatl mcp servers|tools Inspect connected MCP servers/tools
HTTP API
GET /health POST /api/agents/{id}/execute
GET /api/agents GET /api/agents/{id}/status
POST /api/agents/{id}/restart GET /api/tokens/report
GET /api/workflows POST /api/workflows/{id}/execute
GET /api/mcp/servers GET /api/mcp/tools
GET /ws (WebSocket streaming)
Examples
Every example is runnable with a mock LLM — no API keys needed — unless
noted. See examples/.
Coordination & planning
stigmergic-workflow— theEventLattice+depends_onDAG. The running order emerges from pheromone signals crossing thresholds; no orchestrator decides it.skills-lattice— event-driven Skills: one event fans out to every agent thatreacts_toit (emits/reacts_to), distinct from a fixed DAG.htn-planner— symbolic HTN decomposition; compound tasks expand via methods and only unresolved frontiers reach the LLM.crash-recovery— kill a multi-step workflow mid-run and resume from the checkpoint; completed steps are not re-run.
Memory & providers
memory-recall— agent-managed core memory, semantic recall, and sleep-time consolidation (Tiers 3–4); runs offline.multi-provider— per-agent provider selection: a cheap local model for simple steps, a frontier model for the hard one, with a per-tier cost breakdown.
Tools, protocols & integration
tool-hooks— pre/post tool hooks that deny a path-traversal write, audit every call as JSON, and let the agent recover.mcp-bridge— call an external MCP tool over stdio through the realMcpToolRegistry; plus how to expose agents as an MCP server.a2a-server— expose an agent over the A2A protocol (agent card + task endpoint) and call it from a client, in-process.sandbox-session— the rootless Podman sandbox for agent tool execution: threat model, config knobs, and a live integration test (needs Podman).
Autonomy & config
proactive-agents— agents that fire on a schedule or on an event (here, reacting toAgentFailed), not on a user prompt.configs/— a gallery of minimal YAML configs for common recipes (research pipeline, feature dev, incident response, local-only, MCP, event webhooks). No Rust.
Foundations
research-assistant,code-reviewer,customer-support— agent coordination, token budgets, and session/checkpoint memory.
Build from source
git clone https://github.com/axocoatl/axocoatl
cd axocoatl
cargo build --release # binary: target/release/axocoatl
cargo test --workspace # 400+ tests
License
Apache-2.0 — see LICENSE. Changes: CHANGELOG.md.
No comments yet
Be the first to share your take.