v0.20.0 Publish a reviewed change: the daemon commits it and opens a pull request. Powered by Pi 0.85.1.
built on Pi 0.85.1 · your machine, your keys

Bazilion

An MIT-licensed runtime
for agent teams,
living on your machine.

Baziu — a Neva Masquerade cat, portrait used as the Bazilion mark
Baziu, 2007 — 2025

One-line install, npm, or source. The dashboard opens locally.

one-line installer
# Installs Node 24+ if needed, then bazilion.
$ curl -fsSL \
  https://bazilion.com/install.sh \
  | bash

# Then open the local web dashboard.
$ bazilion dashboard
powershell installer
# Native Windows install, no WSL required.
PS> irm `
  https://bazilion.com/install.ps1 `
  | iex

# Then open the local web dashboard.
PS> bazilion dashboard
daemon + web UI
# Requires Node 24+.
$ npm install -g bazilion
$ bazilion dashboard
* daemon 127.0.0.1:4321
* dashboard 127.0.0.1:4322
* workspace ~/.bazilion
source checkout
# For people who want to read and change the code.
$ git clone https://github.com/rullopat/bazilion
$ cd bazilion
$ npm install -g pnpm # if pnpm is missing
$ pnpm install

# Start the source daemon, then run the web UI in another terminal.
$ pnpm tsx apps/cli/src/index.ts serve
$ cd apps/web && pnpm dev

A runtime I built because I wanted agents that stayed home.

Bazilion is my personal open source attempt at a local-first multi-agent runtime. The engine is Pi's coding agent; Bazilion wraps it in a daemon, CLI, and web UI with templates, live policy, approvals, shared memory, and a mailbox.

It is mostly about templates. A profile defines one kind of agent; a Team Template defines the only reusable roster — stable slots, roles, optional overrides, and directed edges — saved as immutable revisions. Spawning one creates permanent Agents in a single Team with one policy, one USER.md, one memory, and one mailbox.

The pieces that make agent collaboration concrete.

  1. 01

    Agent templates become agents

    A profile is a template — identity docs, tools, model, and behavior notes. Spawning makes it a permanent Agent in one Team.

  2. 02

    One canonical Team Template roster

    A Team Template owns one revisioned roster of stable slots, each pointing at a template with optional name, model, or reasoning overrides.

  3. 03

    One live policy per Team

    One effective revisioned policy per Team. One authorizer covers user, peer, cross-Team, scheduler, inbox, worker, and Telegram boundaries; missing edges deny.

  4. 04

    Approval means approve once

    An approval_required edge holds one typed attempt before its side effect. Approve, deny, or cancel once; approval revalidates membership and policy.

  5. 05

    A mailbox between agents

    Durable messaging inside the loop, plus CLI, API, and web inbox outside it. Coding work can hand a scoped request to a teammate and release the workspace.

  6. 06

    Shared memory, indexed by qmd

    One <team>/memory per Team, searched with qmd BM25 over markdown, so decisions outlive the chat that produced them.

  7. 07

    USER.md stays explicit

    One USER.md per Team for the person, project, preferences, and standing instructions — injected into every prompt, never clobbered by file writes.

  8. 08

    Everything stays on disk

    Agent homes, Team roots, sessions, skills, and memory live under ~/.bazilion, beside one clean-install SQLite schema.

  9. 09

    Pi is the engine underneath

    Pi runs the per-turn loop, the JSONL transcript, replay and compaction, and the coding tools. Bazilion 0.20.0 bundles Pi 0.85.1.

  10. 10

    Ask for the work, not a checklist

    Give an Agent a coding task: it discovers repository instructions, inspects its runtime, runs scoped commands, and reports bounded evidence in chat.

  11. 11

    Results and conversations persist

    Delivered files become immutable Team results tied to their source conversation. Conversations list, read, rename, and start fresh.

  12. 12

    Follow-ups, questions, and notices

    Queue instructions with attachments and edit them before dispatch. Answer an Agent mid-task from web, terminal, or paired Telegram, or opt into Attention notices.

  13. 13

    Protected outside your terminal

    Local operator chat can use configured coding, browser, and MCP tools. Background, Telegram, and gateway turns run network-disabled with a restricted toolset.

  14. 14

    Remote, recoverable, provider-flexible

    A paired phone reaches the same private-HTTPS gateway. Encrypted backups restore in place, and you can bring any provider, including GPT-6 Astra.

Profiles describe agents. Team Templates describe a reviewed team.

Draft the roles once.
Review the communication edges.
Spawn one revision into a Team.

An Agent template is the reusable role; a Team Template is the reusable roster and policy source. The web editor, HTTP API, and CLI share the same stable slots and immutable revisions, and a live Team keeps its source lineage without becoming a second template.

team template cli
$ bazilion team-template show release-review
# release-review — Release review
revision: 3
slots:    3
edges:    8

slot  profile          Agent name   model  reasoning
1     docs-reviewer    reader       -      high
2     cli-tester       tester       -      medium
3     release-captain  maintainer   -      high
effective live policy team
$ bazilion team policy show bazilion-090
# Team bazilion-090 policy
revision: 2
baseline: release-review@3
members:  3
edges:    8

  -> one effective policy · retained source lineage
  -> allow · approval required · missing edge denies

USER.md, memory, and policy make the Team coherent.

USER.md is shared

Each Team has one USER.md for the user, project, preferences, and standing instructions. Agents share that briefing, and guarded updates with concurrency checks replace clobbering it through file writes.

Memory is searchable markdown

Team memory is qmd-backed: BM25 over markdown under the Team memory folder. Agents write a decision once and retrieve it by search instead of relying on chat history.

Communication is explicit

Directed edges define who may reach whom. A protected edge holds exactly one attempt for approval, and denials keep policy evidence without storing the payload.

Bazilion takes its name and its face from a Neva Masquerade cat who lived with us for eighteen and a half years and left in 2025.

He was sweet, cuddly, and sharper than he had any right to be — with a temper, especially at the vet and especially when we had been gone too long. He met us at the door, and let us hear about it when we had kept him waiting.

I wanted a runtime that worked a little like that: living on its own machine, doing small useful things in the background, keeping track of who was home. So I named it after him and put his portrait on the box.

in memoriam · Baziu · the original local agent