← Blog
Release

CoStaff v0.1.0 — a self-hosted AI staff, first stable release

4 August 2026 · Simon Liu

Most of the multi-agent conversation this year has centred on the orchestration layer — ADK and LangGraph each defining how agents coordinate and how state moves between them. Put any of it into a real working process, though, and what's usually missing isn't orchestration. It's delivery: who turns the intermediate results into a file you can actually send.

CoStaff is the system I built for that stretch. One Manager Agent plus a set of specialists, communicating over A2A protocol, integrating tools through MCP, each running in its own Docker container. Today it goes to v0.1.0, the first stable release.

TL;DR

CoStaff is a self-hosted multi-agent system: you hand a task off in a chat app, the Manager Agent decomposes it and dispatches to specialists, and the finished file comes back into your conversation — all on your own machine.

v0.1.0 is the first stable release, with all 11 repos aligned on one version, so costaff update --all --tag v0.1.0 installs a combination that was tested together. If you'd rather just try it, skip to section VI; the sections in between are about the architectural trade-offs.

I. Why delivery is the part that goes missing

Take one request — "give me the Q3 sales report for the southern region" — and it spans three separate competencies: knowing which tables hold the data, turning a result set into the right chart, and assembling charts and narrative into a properly typeset PDF. Ask a single agent to hold all three and the instruction balloons while the tool sets start interfering with each other.

Splitting into specialists is the obvious answer, and it immediately raises two questions: where each specialist's tools come from, and how they pass finished artifacts between themselves. Those two answers decide whether the system can really deliver, and they're the main architectural trade-offs in CoStaff.

II. Agent ↔ MCP ↔ tools: what each layer owns

For an agent to actually do anything, it needs tools. Where those tools come from, and who defines them, shapes the whole system. CoStaff splits it into three layers.

The tool layer is the functions that genuinely touch files, databases and commands. The open-source database agent has four: get_connected_databases, inspect_database, inspect_table, query — see what's connected, read the schema, then run the query. The coding agent has 56, covering file read/write, git, execution, linting and environment management.

The MCP layer exposes them. The coding agent's MCP server registers tools automatically: it walks every module under tools/ and registers each public function that doesn't start with an underscore. Adding a capability means adding a function to tools/no server changes, no edits to the agent's instruction.

The agent layer only reasons. It points at a set of MCP endpoints through an environment variable (such as BUSINESS_ANALYSIS_AGENT_MCP_URLS), and what it can do is entirely what those endpoints expose. Above it sits the Manager Agent, dispatching over A2A protocol to whichever specialist fits.

Why the split matters

1. New capabilities don't touch the model. Tools are ordinary Python functions; write one, drop it in tools/, done. No retraining, no prompt surgery — the agent picks it up next run.

2. Specialists actually act, they don't just reply. The coding agent's tools include write_file, patch_file, git_commit and run_pytest; the database agent has query. It edits the file and runs the tests, rather than telling you how you could.

3. Someone owns the delivery step. Half of the business-analysis agent's eleven tools are about output: create_report_from_markdown, create_html_report, export_pdf — and inject_noto_font, which exists purely so CJK text doesn't come out of a PDF as tofu boxes. Unglamorous, but without it the final file isn't something you can send.

III. Specialists hand each other files

The second problem is more practical: when one job passes through three specialists, how do the intermediate files travel? Stuffing a whole CSV through the messaging layer isn't reasonable.

Every container mounts a shared costaff_data volume at /app/data, and each specialist gets its own working directory at /app/data/agent-{id}/.

Isolation and sharing hold at the same time: specialists write to their own directories without stepping on each other, but when it's needed the business-analysis agent can read the coding agent's output directly, instead of base64-ing files through A2A messages. Across a chain of "query the database → reconcile in code → produce the report", what moves between agents is a path, not the contents.

IV. Why it has to be self-hosted

The whole thing runs on your own machine, in Docker. That's a deliberate premise, not a cloud version I haven't got around to.

A clear data boundary
Files, conversations, and — with a self-hosted model — inference too, all inside your own hardware. Evaluating it doesn't start with a data-egress review.
Every layer swappable
Six layers, each in its own container. Model, channel or specialist can be replaced or extended without touching the others.
Plugin-style extension
Agents and channels attach to the core over an external network and are mounted with costaff agent add — no core changes needed.
Open source
Core under AGPL v3, agents and channels Apache 2.0. Read it, change it, or write your own agent from the template.

V. What v0.1.0 ships

VI. Install and start

Python 3.10+ and Docker are the prerequisites:

curl -fsSL https://raw.githubusercontent.com/costaff-ai/costaff/main/install.sh | bash

onboard is an interactive wizard — model, channel, the matching token — writing straight to .env. start brings up Postgres, agents, Manager and channels in order:

costaff onboard
costaff start

Adding a specialist or a channel, pinned to a tag:

costaff agent add business-analysis \
  --github https://github.com/costaff-ai/costaff-agent-business-analysis --tag v0.1.0
costaff channel add telegram --tag v0.1.0

The quickstart covers the flow in full; agents, channels and the CLI are in the docs.

Wrapping up

CoStaff isn't positioned at the orchestration layer itself, but at getting what orchestration produces actually delivered. Tools are ordinary Python functions, MCP registers them automatically, and the agent only reasons — so a new capability is one more function, and specialists genuinely edit the file, run the tests and produce the PDF rather than advising you to. Add the shared volume, where specialists hand each other files instead of strings, and the whole chain completes inside your own data boundary.

v0.1.0 is the first release I'm willing to tell people to go install. If something isn't right once you've installed it, open an issue — right after a release, that feedback is worth the most.

Open source, self-hosted, running on your own machine. Start with the core, add only the specialists you need.

Get started View on GitHub Get early access