Self-hosted service
rush86999/atom avatar
rush86999/atom

Atom: a self-hosted agent platform that gates autonomy behind verified outcomes

Atom Agent, Open-Source Governed AI Agent Platform for Self-Hosted Automation

898 stars94 forksPythonAGPL-3.0

At a glance

What is it?
Atom is an AGPL-3.0 Python platform for running specialty agents on your own hardware, with a four-tier maturity model and a postcondition oracle that re-checks mutating actions. The interesting part is the accountability layer, not the agent list.
Who is it for?
Adopt Atom if you need agents touching Gmail, QuickBooks, or Zendesk on hardware you control and you want an approval gate before anything mutates a system of record. Do not adopt it if you want a hosted product with a support contract, or if you cannot run and patch a Python 3.11+ service yourself.
Can I use it commercially?
Yes, with strict conditions. AGPL-3.0 is a network copyleft licence: if people use a modified version over a network, for example as a hosted service, you must offer them its source code under the same licence.
Is it still maintained?
Yes. The repository received new commits within the last day.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

The problem Atom targets: agent pilots that never ship

The README opens with a claim attributed to Turion 2026 that 88 percent of AI agent pilots never reach production, and the project explicitly says it makes no claims about its own deployments. Treat that number as the framing device it is. The engineering question underneath it is real: an agent that can send email, write to a CRM, or reconcile an invoice is an agent that can be wrong in a place where being wrong costs money. Most agent frameworks give you a tool-calling loop and leave the trust problem to you.

Atom's answer is to make trust a runtime property rather than a configuration flag. The intended user is a small team or a solo operator who already has integrations (Gmail, Google Calendar, Notion, Slack, Shopify, Zoho, Zoom, QuickBooks, Zendesk, HubSpot, Salesforce, Asana appear in the README examples) and wants an agent to handle the repetitive slice of that work without handing credentials to a hosted vendor. The BYOK model and the embedded store point at the same audience: someone who wants inference billed to their own key and workflow state to stay on their own disk.

The four-tier maturity model and what actually moves an agent up

Every agent starts at STUDENT and can reach INTERN, SUPERVISED, and AUTONOMOUS. The thresholds given are 10, 25, and 50 episodes respectively. The detail that matters is the qualifier attached to those episodes: the README states they are outcome-checked, not self-reported. An agent does not graduate because it returned a success string. It graduates because an independent postcondition oracle re-derived the result against the system of record.

That is a meaningfully different design from the usual approach of letting an agent's own confidence score drive escalation. Atom splits confidence into two values, self-reported and externally verified, which is the honest way to present it. A prompt-injected agent at any tier still acts at that tier's scoped blast radius, which is the correct containment assumption: the tier limits damage, it does not prevent manipulation.

The obvious cost is coverage. A postcondition oracle only works where someone wrote an adapter that can independently confirm the outcome. For a Gmail send or a QuickBooks write, that is plausible. For a workflow whose result is a drafted document a human will read anyway, there may be nothing to verify, and the tier progression becomes decorative. The README does not describe what happens to an agent whose actions cannot be oracle-checked, and that gap is worth resolving before you rely on the tiers.

Sandbox controls, egress rules, and the provenance trail

The governance layer is described as default-on and includes filesystem scope, a tool whitelist, tripwires, resource caps, a kill-run control, an egress allowlist, and a full provenance audit. The README quotes 0.027ms P99 per check and describes it as a repo benchmark, which is the right kind of attribution: it tells you the number came from the project's own harness rather than an independent run.

The egress allowlist is the control I would look at first, because it is the one that constrains an agent that has been talked into exfiltrating something. A tool whitelist stops the agent from calling a tool it was never granted; an egress allowlist stops a granted tool from reaching a host it should not. Those are different failure modes and Atom appears to cover both.

The provenance audit is the part that determines whether this is usable in a regulated setting. An audit record is only as good as its retention and its readability, and the README does not state a retention policy, a log format, or where the audit store lives relative to the embedded store. If you need to hand an auditor a record of what an agent did and why, that is the first documentation gap to close.

Getting it running: clone, make setup, one API key

The README gives a three-command path. Clone the repository, run make setup for the one-shot dev bootstrap (virtualenv, dependencies, .env, frontend), then make backend on port 8001 and make frontend on port 3001 in a second terminal. The stated expectation is a first governed workflow in about ten minutes.

For LLM features you set one key in backend/.env. Options listed are OPENCODE_API_KEY, OPENAI_API_KEY, ANTHROPIC_API_KEY, DEEPSEEK_API_KEY, or GOOGLE_API_KEY. For a fully local deployment the README specifies ATOM_LOCAL_ONLY=true plus OLLAMA_BASE_URL=http://localhost:11434/v1, and notes Ollama as first-class alongside any local OpenAI-compatible server such as LM Studio, vLLM, or llama.cpp server. Keys are described as BYOK and encrypted at rest.

The first-run detail worth flagging: the admin password is written to backend/logs/bootstrap_admin_password.txt. That is a file on disk in a predictable location. If you deploy from the Docker or DigitalOcean paths rather than the local make flow, confirm that file's permissions and whether it is rotated, because a bootstrap credential in a logs directory is exactly the kind of thing that survives into a production image.

Python 3.11+ is required. The project also ships pre-built personal starters (invoice chase, candidate pipeline, support triage) each with an approval gate, which is a sensible on-ramp if you do not want to author a workflow from scratch.

Where Atom is the wrong tool

The governance layer assumes mutating actions with verifiable outcomes. If your workload is read-only research, summarization, or drafting that a human reviews before anything happens, you are paying the complexity cost of the oracle, the tiers, and the sandbox for controls you never exercise. A plain orchestration library plus your own approval step would be less machinery.

The second mismatch is operational. This is a self-hosted Python service with a Next.js frontend, an embedded store, and your own API keys. The README's own framing is that commercial and managed editions run this same code on the client's own infrastructure, with no closed-source pro build. That is a coherent licensing stance, but it means there is no vendor-operated control plane to fall back on. If your team cannot run, monitor, and patch a service, the governance features will not save you from the operational ones.

The third is the AGPL-3.0 licence. It is a strong copyleft licence with a network-use clause. The README states the whole repository is free and open source under it. How that interacts with a product you distribute or expose over a network is a question for your own counsel; the project does not offer legal guidance and neither does this review.

How Atom differs from n8n and Zapier

The README makes the comparison directly: agents, not just steps. In Zapier or n8n the unit of work is a trigger-action pair or a node graph, and the platform's job is to execute it reliably. There is no notion of a step earning the right to run unsupervised, because a step does not decide anything. Atom's unit is an agent that reasons, retries, and self-corrects, which is why it needs a maturity model and an outcome oracle in the first place.

That difference cuts both ways. A Zapier zap is trivially auditable: you can read the graph and know exactly what will happen. An agent at the AUTONOMOUS tier is not auditable by inspection, which is precisely why Atom invests in provenance records and postcondition checks instead. If your workflow is deterministic and you can express it as a graph, a graph is the better artifact. Atom's value appears when the step requires judgment about which of several paths to take, and when the cost of that judgment being wrong is high enough to justify the governance overhead.

The self-hosting angle is the other real difference. n8n is self-hostable, but the hosted incumbents are not, and the README's data-residency argument (workflow data, agent state, and memory on your infrastructure, embedded store, no cloud required) is aimed at teams that cannot send that data to a third party.

Maintenance surface and the release cadence

The repository shows v5.0 on 2026-03-01, v5.2 on 2026-03-08, and v5.3 on 2026-03-09, with the last push to main on 2026-09-10. Three minor releases in nine days in March, then a six-month gap to the last push. That pattern is consistent with an intense hardening push followed by a quieter period, and it is worth asking in the issue tracker what the current maintenance posture is before you build on it.

The README cites 85k+ test functions, described as 84,737 across 2,759 files verified in August 2026, and 69+ documented TDD hardening rounds. Test function count is a size signal, not a quality signal, and the project presents it as a receipt rather than a proof. The number that would actually matter for adoption is how many of those tests cover the oracle adapters for the integrations you intend to use, and that is not broken out.

Upgrade cost is the practical question. With an embedded store and a Next.js frontend coupled to a Python backend, a minor version bump may involve a schema migration. The README does not describe a migration path or a compatibility policy between v5.x releases. Before you run make setup on a machine that already holds agent state, check the release notes for the version you are moving to and confirm whether the store is migrated automatically.

Editorial conclusion

Adopt Atom if you need agents touching Gmail, QuickBooks, or Zendesk on hardware you control and you want an approval gate before anything mutates a system of record. Do not adopt it if you want a hosted product with a support contract, or if you cannot run and patch a Python 3.11+ service yourself. Before committing, verify three things: that the postcondition oracle has a working adapter for each system you plan to mutate, that your chosen LLM provider actually returns structured output through Atom's tool-calling path, and that the AGPL-3.0 obligations fit how you intend to distribute anything built on top of it. The maturity tiers are the product. If the oracle cannot check an outcome, the tier means nothing.

Official sources

  1. Issues
  2. License: AGPL-3.0
  3. README
  4. Releases
  5. rush86999/atom on GitHub
Community notes

Community notes