New · talk to Iris — a living voice built from System Zero modules. Speak to her out loud in your browser.
Open Protocol

A package manager for behaviors, not code.

pip installs libraries. npm installs packages. sz installs autonomous behaviors into a repository. A module isn't passive code you call — it's an active agent that wakes up, observes, decides, and acts.

MCP standardizes tool access. A2A standardizes agent-to-agent calls. S0 standardizes autonomous repo behaviors.

Get Started → ✦ Talk to Iris → Live Demo → Read the Spec →
curl -sSL https://systemzero.dev/i | sh copy

What S0 does
01

Install behaviors, not just packages.

An S0 module is a persistent, event-driven, LLM-capable agent that lives inside your repo. It has its own memory, its own triggers, and its own capabilities. Run sz init and your repo comes alive.

02

Modules wake up, observe, decide, act.

Every tick, modules read state from memory, listen to events on the bus, call an LLM with structured input and validated output, write new state, and emit events. Then they go back to sleep.

03

Add or remove freely. The system rewires itself.

Modules declare what they provide and require — not what they import. When you add or remove a module, the reconciliation cycle rebuilds the capability graph. No config spaghetti.


What is a module?

A package is code that sits in your repo and waits to be called. A module is an agent that lives in your repo and acts on its own. It has persistent memory across runs. It listens to events on the bus. It calls LLMs with structured prompts and validated responses. It wakes up, does its work, and goes back to sleep.

Every module follows the same cycle:

wake up read state observe events think (LLM) act write state sleep

Turn any repo into a module.

sz absorb <repo-url> --feature <name> clones an external repository, inventories it, and makes one Constrained LLM Call to extract the feature into a protocol-native module — complete with manifest, entry script, behavior contract, and reconcile hooks. The LLM infers which commands are safe to run, the protocol validates the output, and the module installs through the standard path.

Someone else's code becomes a pluggable behavior for your repo. Running in observe mode by default — opt into execute to actually run the absorbed behavior in an isolated workspace.

clone inventory CLC extract validate install smoke tick
your-repo/ .sz/ heartbeat (tick) memory bus llm storage schedule discovery lifecycle module A module B module C module D module E Behaviors plug in through universal interfaces. Add or remove — the system rewires itself.
How it works
1
sz init

S0 scans your repo and generates a profile — language, frameworks, goals, existing automation.

2
modules install

From the catalog or custom sources. Each module declares what it provides and what it requires.

3
reconcile

S0 wires capabilities together automatically. The capability graph resolves — no config spaghetti.

4
heartbeat

Modules wake up on tick, on event, or on cron schedule. They observe, decide, and act — continuously.


The seven universal interfaces
Interface Purpose
memory Key-value store, append-only event log, and optional vector search. Persistent state for any module.
bus Append-only JSONL pub/sub. Modules emit events, subscribe by pattern. The nervous system.
llm Vendor-agnostic LLM invocation. Auto-discovers local subscription CLIs first (codex, claude_code), then API providers (OpenAI, Anthropic, Groq), then mock. Modules never see the provider. Every call is templated, schema-validated, retried, and logged.
storage Guaranteed filesystem paths. Private per-module space, plus shared namespaces with negotiated access.
schedule Cron-style triggers evaluated on every tick. Supports @tick, @hourly, @daily, standard 5-field cron.
discovery Live introspection. Query installed modules, capability providers, resolved bindings, health status.
lifecycle Standard hooks: install, start, stop, reconcile, doctor, entry. Called at well-defined moments.

Get started
curl (recommended)
curl -sSL https://systemzero.dev/i | sh
pipx / pip
pipx install sz-cli
pip install sz-cli
npm
npm install -g system-zero
Then: cd your-repo && sz init