Prerequisites
- Docker with Compose v2
- Node.js 22 or later and pnpm 10 (
corepack enable) - A
psqlclient (optional, for sanity checks)
Quickstart
Initialize the database
migrations service migrates the schema, provisions the runtime
role, and sets its password, then exits.Start the stack
/health probe.Seed data and mint an API key
3ng_<prefix>_<secret>. Re-running is idempotent: existing rows are skipped,
never deleted, and the key is not re-issued.Configuration notes
pnpm seedruns on the host, not in a container, because it loads committed fixtures. It connects to Postgres on the published port 54320.- Changing the runtime password:
APP_USER_PASSWORDdefaults toapp-user-dev. Override it in.envfor anything beyond a throwaway local stack — but change it in bothAPP_USER_PASSWORDand the password segment ofDATABASE_URL. Compose derives the server’s connection string from the former, while the host-run seed reads the latter literally; updating one alone causes an auth error. - No phone-home by default: leaving
SENTRY_DSNempty fully disables error tracking and tracing. This is the self-host default. - Append-only below the application: the runtime database role has no
DELETEgrant anywhere in the memory domain. Destructive operations are impossible at the grant level, not just discouraged in code. - Worker container: background consolidation jobs are not part of the Compose stack yet; the server and data plane run without them.
- Seeded embeddings are empty: the seed does not call any external API, so seeded memories have no embeddings until a write path with an embedding provider runs. Full-text and recency search work immediately.