An MIT-licensed runtime
for agent teams,
living on your machine.
# Installs Node 24+ if needed, then bazilion. $ curl -fsSL \ https://bazilion.com/install.sh \ | bash # Then open the local web dashboard. $ bazilion dashboard
# Native Windows install, no WSL required. PS> irm ` https://bazilion.com/install.ps1 ` | iex # Then open the local web dashboard. PS> bazilion dashboard
# Requires Node 24+. $ npm install -g bazilion $ bazilion dashboard * daemon 127.0.0.1:4321 * dashboard 127.0.0.1:4322 * workspace ~/.bazilion
# 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
Bazilion is my personal open source attempt at a local-first multi-agent runtime. Its core engine is Pi's coding agent: Pi runs the per-turn loop, stores the JSONL transcript, handles replay and compaction, executes providers and tools, and supplies the coding tools. Bazilion adds the local daemon, CLI, bundled web UI, Agent templates, Team Templates, live Team Policy, approvals, shared memory, and mailbox around that engine.
Bazilion is especially about templates. A profile defines one kind of agent. A Team Template defines the only reusable Team roster: stable slots, profile-backed roles, optional overrides, and directed communication edges, saved as immutable revisions. Spawning a reviewed revision creates permanent Agents in one Team, with exactly one effective live policy, one USER.md, one qmd-indexed memory, and a durable mailbox.
A profile is an agent template: SOUL.md, IDENTITY.md, AGENTS.md, tools, skills mode, default model, and the notes that shape how that agent behaves when spawned.
A Team Template owns a revisioned roster of stable slots. Each slot points to an Agent template and can override the live name, model, or reasoning level without inventing a second roster model.
Every Team owns exactly one effective revisioned communication policy. When enforcement is enabled, one authorizer covers user, peer, cross-Team, scheduler, inbox, worker, and Telegram boundaries; missing edges deny.
An approval_required edge holds one typed communication attempt before its side effect. Inspect it in the web queue or CLI, then approve once, deny, or cancel; approval revalidates current membership and policy.
Agents coordinate through a durable mailbox: send_message, read_inbox, and wait_for_reply in the loop, plus CLI, API, and web inbox surfaces outside it.
Every Team has one memory rooted at <team>/memory. Bazilion uses qmd for BM25 over markdown, so project facts, decisions, and discoveries are searchable by every member.
A Team has one USER.md for the person, project, preferences, and standing instructions. It is injected into every member prompt; generic coding tools cannot clobber it, and guarded USER.md updates use concurrency checks.
Bazilion 0.9.0 bundles Pi 0.80.6. Pi runs the per-turn loop, stores the JSONL transcript, handles replay and compaction, executes providers and tools, and supplies the coding tools.
Agents get coding tools, web search, a hardened web fetch, a Playwright browser, mailbox and memory tools, and can deliver files back. Connect MCP servers and their tools join the loop too. They work in a linked project folder, not a toy sandbox.
Agent homes, Team roots, Agent-template files, Pi sessions, skills, and memory live under ~/.bazilion. The daemon keeps Team Templates, policies, approvals, and config in one clean-install SQLite schema.
Triggers can wake an agent on a schedule, while one Telegram forum supergroup gives every bound agent its own topic. The same Team policy authorizes every ingress and egress when enforcement is on.
Bazilion is a personal open source project published under the MIT license. Use hosted providers, ChatGPT OAuth, Ollama, LM Studio, or other supported backends—including the refreshed GPT-5.6 catalog.
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 sole reusable roster and policy source. The web editor, HTTP API, and CLI interchange tools all work with the same stable slots and immutable revisions; a live Team retains its source lineage without becoming a second template.
$ 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
$ 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
Each Team has one USER.md for stable context about the user, project, preferences, and standing instructions. Agents share that protected briefing; Agent updates use guarded tools with concurrency checks instead of clobbering the Team context through file writes.
Team memory is backed by qmd: BM25 over markdown under the Team memory folder. Agents can write decisions once and later retrieve them by search instead of relying on chat history.
Directed edges define who may reach whom. A protected edge can hold exactly one attempt for operator approval, and durable denial records retain policy evidence without storing the message 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. He was cuddly. He was sharper than he had any right to be — and he had a temper, especially at the vet, and especially when we had been gone too long. He met us at the door when we came home, and he let us hear about it when we had kept him waiting. He had opinions, and he kept them.
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 and who was not. So I named it after him, and put his portrait on the box.