Before you start
You need Docker with Docker Compose, Git, curl, port8080, and outbound HTTPS
access to Anthropic or Z.AI. You also need an API key and model identifier for that
provider. The checked-in Compose stack runs PostgreSQL and the control plane. It is
API-only and does not publish the optional Relay unless you enable its profile.
The v0.1 repository does not declare minimum Docker, Compose, Git, CPU, or memory
versions. Before continuing, confirm docker compose version and git --version run.
Treat the absence of qualified minimums as a pre-release limitation, not permission to
assume an old deployment tool is supported.
OpenCluster v0.1 does not publish a qualified CPU or memory minimum. Docker must have
enough capacity to build the Go image and run two services; increase its allocation if
the build or PostgreSQL is terminated for memory pressure. Measure real Investigation
concurrency before sizing production.
1. Create local secret files
Clone the repository and create files outside version control for the PostgreSQL password, PostgreSQL DSN, one-time bootstrap token, 32-byte encryption key, and model provider credential. Each environment variable below names a file; it never contains the credential itself. On Linux or macOS, create the files and export the Compose inputs. Replace the obvious placeholders; the password in the DSN must be URL-encoded and equal the PostgreSQL password file.OPENCLUSTER_AI_PROVIDER=zai and a supported Z.AI model identifier.
Docker Desktop users without id can set both runtime values to an available numeric
non-root ID such as 1000.
The DSN uses the Compose service host postgres, database and user opencluster. The
generated bootstrap token is longer than the 32-character minimum, and the encryption
key is exactly 32 bytes.
2. Start OpenCluster
From the repository root, export the requiredOPENCLUSTER_* values and run:
control-plane service remains
running:
postgres as healthy and control-plane as running.
Both probe commands must exit successfully before you continue. The root URL returns
404 because this deployment has no browser console. If a service exits, run
docker compose -f deploy/compose/compose.yaml logs <service> and check the mounted file
paths before retrying.
3. Create the first User and Organization
Bootstrap atomically creates the Organization, first User, Admin Membership, password, and session. It is deployment-wide and works only once. Replace the sample identity and password before running:{"bootstrapped":true} and saves your session cookie.
Verify the User, Organization, and Admin Role with:
Origin is refused.
4. Connect a Generic Webhook
Create a Generic Webhook namedQuickstart alerts with your authenticated session:
integration.id and one-time webhookSecret immediately. Replace
the placeholders below and send a firing event:
202 Accepted; an exact retry returns 200 OK. A
401 means the secret is missing or wrong. A 400 means the JSON does not match the
canonical schema. See Generic Webhook for all
fields and retry outcomes.
5. Verify the Incident and Investigation
Read the Incident and its automatically opened Investigation:incidentId to the Incident created for
Checkout latency is high. Read its details at /api/v1/investigations/<investigation-id>;
do not create another Investigation merely to process this alert.
Progress moves from queued to investigating. A completed run ends as concluded or
partial and separates impact, Findings, hypotheses, Action Proposals, and limitations.
With only a synthetic alert, an inconclusive answer is honest and expected: the result
should identify missing evidence rather than invent a cause. Every material claim must
cite a numbered Tool Run.
Clean up
Stop the stack while retaining the PostgreSQL volume:--volumes unless you intend to erase the local database. Before a production
deployment, review Configuration,
Troubleshooting, and the
security model.