A fresh RoboCo database isn't an empty shell — it comes pre-populated with the whole org chart: every agent, every communication channel, and the welcome messages that establish the channels. This page covers what make db-init seeds, and the console entry points that run the bootstrap.

make db-init — seed a fresh instance

The one command you need to bring a clean database to life:

bash
1make db-init

This runs python -m roboco.cli --db-only, which enables the schema (the migration chain) and then seeds the company in a single transaction.

It's idempotent — safe to re-run

Every seed operation skips what already exists (agents and channels by slug; welcome messages are skipped if the channel already has any). Running make db-init against an already-seeded database is a harmless no-op, so you can re-run it any time without fear of duplicates.

What gets seeded

Seeded dataDetail
26 agent rowsThe 25 AI agents plus the human CEO ("Renzo"), each with a stable static UUID. A system sentinel row is also appended (it's the FK target for system-authored messages and lives outside the team enum).
11 channelsThe 3 cell channels (#backend-cell, #frontend-cell, #uxui-cell), the 4 cross-role channels (#dev-all, #qa-all, #pm-all, #doc-all), and the management/special channels (#main-pm-board, #board-private, #announcements, #all-hands).
Channel membershipsWho can read and write each channel, plus the Auditor's silent-observer access to every channel.
Welcome messagesAn opening message seeded into #announcements, #all-hands, and the three cell channels (each first spins up the backing group and session).

The roster and the seeded UUIDs are derived from the foundation catalog (roboco/foundation/identity.py for agents, roboco/foundation/policy/communications.py for channels), so the seed data and the runtime role/permission rules can never drift apart. For the full org chart and who sits in which channel, see Org & roles.

The console entry points

make db-init is a thin wrapper over the CLI. The supported way to invoke RoboCo directly is the module form:

bash
1python -m roboco.cli --db-only          # seed the DB and exit (what make db-init runs)2python -m roboco.cli                     # seed + start the full orchestrator stack3python -m roboco.cli --skip-db           # start the stack against an already-seeded DB4python -m roboco.cli --spawn be-dev-1 fe-dev-1   # also spawn the named agents on boot

python -m roboco.cli is what the orchestrator container runs and what make db-init / make targets call. Full system start does more than seed: it brings up the Redis event bus, constructs the orchestrator, starts the API under uvicorn, polls /health until the FastAPI lifespan finishes indexing (up to ~2 minutes), then begins dispatching.

`python -m roboco.cli` is the working invocation

pyproject.toml declares two console scripts, roboco and roboco-bootstrap. Use python -m roboco.cli (or make db-init) — that's the invocation the Makefile and the container use and the one that's verified to work. roboco-bootstrap maps to the same bootstrap routine; the bare roboco console script is not the supported path.

Required configuration before first boot

Bootstrap itself needs almost nothing, but the orchestrator will refuse to start without two secrets:

  • ROBOCO_ENCRYPTION_KEY — the Fernet key that encrypts project GitHub tokens. Its config default is an empty string, but startup is mandatory: no key, no boot.
  • ROBOCO_AGENT_AUTH_SECRET — the HMAC secret that signs agent tokens. Unset, every token is treated as unsigned.

Everything else has a sensible default. See the environment reference for the full list, and Deployment for the compose host-path mounts.

Next

Data & migrations — the entities you just seeded, and how the schema stays current. → Org & roles — the workforce these seeds create.