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:
1make db-initThis runs python -m roboco.cli --db-only, which enables the schema (the migration chain) and then seeds the company in a single transaction.
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 data | Detail |
|---|---|
| 26 agent rows | The 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 channels | The 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 memberships | Who can read and write each channel, plus the Auditor's silent-observer access to every channel. |
| Welcome messages | An 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:
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 bootpython -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.
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.