Quick start with docker-compose
The core super-repo wires ~20 service repos (git submodules) plus Postgres,
Redis, and an Azure Blob emulator into a single make up. This is the fastest
on-ramp: clone, drop in a GitHub token, and one command builds every image and
starts the whole backend stack — healthy, with zero external accounts. For the
manual, run-each-service-by-hand path, see Run from source.
The happy path
Section titled “The happy path”-
Clone with submodules. Every service is a branch-tracked submodule; the
--recurse-submodulesflag pulls them all. (Forgot it? Rungit submodule update --init --recursive.)Terminal window git clone --recurse-submodules <core-repo-url> corecd core -
Bootstrap.
make bootstrapis idempotent: it checks prerequisites, syncs submodules to their tracked branches, and creates.envfrom.env.example— generating a freshINTERNAL_RPC_SECRETso the dev stack never runs on the placeholder.Terminal window make bootstrap -
Add a GitHub token. Every backend image pulls private
soundverse-*dependencies at build time (via a BuildKit secret), so builds fail without a token. PutGH_TOKENin.envwith scopesrepo+read:packages, or just rungh auth login— the scripts fall back togh auth token. -
Bring it up.
make upbuilds every image and starts the backend stack detached. First run pulls base images and compiles Go + Python deps, so give it a few minutes.Terminal window make up -
Verify health.
make doctorchecks your tooling, the token, container state, and probes every host port.Terminal window make doctor
What comes up
Section titled “What comes up”The default profile is the backend only. make up prints the host→container
endpoints; make doctor re-probes them (core-identity and core-mcp expose an
HTTP /healthz; the rest are checked as raw TCP):
| Service | Host port | Protocol |
|---|---|---|
core-database |
8080 | Connect / h2c — the only DB writer |
core-identity |
8001 | HTTP /healthz |
core-storage |
8081 | gRPC |
core-mcp |
8090 | h2c /mcp, /healthz |
core-gateway-consumer |
8082 | gRPC — the consumer entrypoint |
postgres |
5432 | — |
redis |
6379 | — |
azurite (blob emulator) |
10000 | — |
Add the frontends with make up-frontend (behind a compose frontend profile):
soundverse-saas-2.0 on http://localhost:3000 and the standalone UI2.0 studio on
http://localhost:3001. See Run the frontends.
Daily commands
Section titled “Daily commands”make up # build + start the backend stack (detached)make up-frontend # + the SaaS app and UI2.0make ps # container statusmake logs # tail all (one service: make logs s=core-mcp)make doctor # tools + token + container health + portsmake down # stop & remove containers (keeps data volumes)make update # pull latest of every submodule's tracked branchmake azurite-init # create blob containers (once, before exercising uploads)make agent-tool-id # print the Agent One tool id for AGENT_TOOL_IDmake db-reset # wipe Postgres + reload schema (DESTRUCTIVE)make help # the full listThe complete target reference lives in Make targets & Redis keys.
What boots free vs. what needs a secret
Section titled “What boots free vs. what needs a secret”make up yields a fully healthy backend with no external credentials — all
inter-service calls, the database, queues, and the tool registry work offline.
Only features that reach outside the stack need a value in .env (names only —
see Configuring .env and the full matrix on
Offline vs. secrets):
| Feature | Needs (by name) | Without it |
|---|---|---|
| Blob uploads (tool outputs) | run make azurite-init |
storage boots; uploads 404 until the containers exist |
| Agent One LLM turns | LITELLM_API_KEY |
the agent worker registers but can’t run a turn |
| Sansaarm song generation | SANSAARM_API_KEY, SANSAARM_API_BASE_URL |
the worker registers but can’t generate |
| Browser login (end-to-end chat) | a real OIDC app credential | the UI loads but can’t authenticate |
The gotchas that bite
Section titled “The gotchas that bite”What’s in the box
Section titled “What’s in the box”Directorycore/
- docker-compose.yml the full stack
- .env.example copy →
.env - .gitmodules the ~20 service repos + tracked branches
- Makefile
make help Directoryscripts/ bootstrap / up / update / doctor / wire
- …
Directorycompose/postgres/ schema init (prelude + loader)
- …
- update-all-protos.sh refresh every service’s generated stubs
Related
Section titled “Related”- Prerequisites & toolchains — what to install first
- Configuring .env — the shared secret + injection pattern
- Run from source — the manual, per-service bring-up
- Offline vs. secrets — the full capability matrix
- Repository catalog — every submodule, one per row
- Troubleshooting — the one-line fix for each failure