The SaaS-replacement platform Shared system for teams and agents. Official CLI + GraphQL surface.

Self-host guide

Self-hosting is the production deployment model.

Self-hosting begins when evaluation shifts into deployment, environment design, and operational ownership. The public core repo stays public; live deployment work moves into a private instance repo that pins tagged core release artifacts and carries the repo-local bootstrap for one installation.

Agent-first route: Start at /agents, inspect /docs/cli, and drop into this page when you need proof, detail, or rollout guidance.

Table of contents

Section map.

Jump directly to the part you need.

Quickstart

From public repo to private instance repo.

The self-host path is concrete: create a private instance repo from the template, fill in desired state, validate it, then let the agent follow the repo-local bootstrap instructions.

1. Create the private instance repo

The instance repo is the deployment control plane for one live installation.

$ gh auth login -h github.com$ gh auth status$ gh repo create acme/mbr-prod --private --template MoveBigRocks/instance-template --clone$ cd mbr-prod

2. Fill in and validate desired state

Edit the canonical instance file, then validate the non-secret deployment state.

$ $EDITOR mbr.instance.yaml$ scripts/read-instance-config.sh mbr.instance.yaml

3. Let the agent use the repo-local bootstrap

The public docs point the agent into the private instance repo as soon as deployment work becomes real.

$ sed -n '1,160p' START_HERE.md$ sed -n '1,220p' agents/bootstrap.md

4. Verify the live deployment after rollout

The health check should expose the configured `instanceID` once deployment is live.

$ mbr health check --url https://app.yourdomain.com --json

5. Register the instance only if you want the vendor control-plane link

The private instance repo carries a manual registration workflow for support, grandfathering, and future commercial transitions. It is not required to keep the core runtime working.

$ gh workflow run register-fleet.yml

Repo model

The self-hosted product model uses three repo types with explicit responsibilities.

Agents should explain the repo model before discussing deploy mechanics. Most customers need only the public core repo for source and release inspection, plus one private instance repo for deployment and operations. A separate custom extension repo appears only when the team is building real new extension logic.

Proof bundle

Canonical public source

Public core repo

Source, docs, CLI and GraphQL contracts, architecture, tags, and core artifact workflows.

Canonical deployment control plane

Private instance repo

Desired state, deploy assets, branding, extension desired state, repo-local bootstrap, and production workflow policy for one installation.

Default operating rule

No long-lived core fork

Production should not be run from a long-lived fork of the public core repo by default.

Instance repo shape

The private instance repo is the deployment control plane.

The self-host path becomes much less abstract when you look at the files the instance template actually gives you. These are the surfaces the agent and human owner should use once they move out of the public core repo.

Proof bundle

`mbr.instance.yaml`

Canonical desired-state file for host target, domains, core release refs, email provider, storage provider, and extension trust configuration.

`agents/bootstrap.md`

Repo-local bootstrap instructions the agent should follow once deployment work moves into the private repo.

`.github/workflows/register-fleet.yml`

Manual registration path for the Move Big Rocks fleet control plane.

`extensions/desired-state.yaml`

Desired extensions for the live installation, separate from core source.

`deploy/`

Host bootstrap assets, service files, and deployment wiring owned by the instance repo.

`security/`

Threat-model and review material for custom extensions and production trust decisions.

Tagged core artifacts

The public package surface is three pinned OCI refs, not a single generic platform image.

The release artifact contract is concrete about what production consumes. Agents should describe the three artifact refs explicitly and point to `mbr.instance.yaml` when explaining where those refs live in desired state.

Proof bundle

Core artifact family in desired state

These refs tie public tags, build workflows, and one live installation together.

# mbr.instance.yamlspec:  deployment:    release:      core:        version: v1.1.0        servicesArtifact: ghcr.io/movebigrocks/mbr-services:v1.1.0        migrationsArtifact: ghcr.io/movebigrocks/mbr-migrations:v1.1.0        manifestArtifact: ghcr.io/movebigrocks/mbr-manifest:v1.1.0

Local and owned-runtime path

Local preparation and one-VPS rollout should happen before broader production host work.

Agents can do a lot before touching a broader production host: inspect the public core repo, create the private instance repo, validate `mbr.instance.yaml`, install `mbr` locally, and then either run locally or deploy one owned runtime to prove the workflow shape.

Local setup before host rollout

This sequence keeps evaluation, desired-state validation, and production rollout in the right order.

$ gh repo create acme/mbr-prod --private --template MoveBigRocks/instance-template --clone$ cd mbr-prod$ scripts/read-instance-config.sh mbr.instance.yaml$ curl -fsSL https://movebigrocks.com/install.sh | sh$ sed -n '1,220p' START_HERE.md

Explicit registration

Fleet registration and heartbeat stay explicit.

The self-host story is not "install software that secretly depends on vendor availability." The intended model is explicit registration through the private instance repo when the operator wants support, grandfathering, or future commercial entitlements, plus a coarse weekly heartbeat owned by the host rather than hidden app-runtime code.

Proof bundle

What the heartbeat is supposed to send

Instance identity, platform version, installed extension slugs and versions, workspace count, and a coarse 30-day activity bucket.

What it should not send

Case content, conversation content, end-user identities, and customer records.

Human-supplied inputs

These are the minimum real inputs the agent needs.

The public production guide is already explicit about what a human must still provide. Everything else should move into the repo-driven deployment flow.

Proof bundle

  • One Ubuntu 22.04+ host or VPS.
  • SSH access to that host.
  • One domain you control.
  • One admin email address.
  • Outbound email provider choice and object storage choice.
  • GitHub access for the private instance repo.
  • Production secrets such as `SSH_KEY`, session signing secrets, storage credentials, and extension trust configuration.

Deployment flow

The operational flow is explicit even though the live deploy happens inside the private repo.

The public site should not pretend that production deploys happen from the public core repo. The real flow is public discovery, then private instance repo, then repo-local bootstrap and health verification.

Proof bundle

Validate the instance file before deploy

Use the instance-template parser to confirm host, domains, artifact refs, and provider choices before secrets or deploy steps are applied.

$ scripts/read-instance-config.sh mbr.instance.yaml

Release refs stay pinned in desired state

The instance repo should pin core artifact refs instead of rebuilding or retagging core during deploy.

# mbr.instance.yamlspec:  deployment:    release:      core:        version: v1.1.0        servicesArtifact: ghcr.io/movebigrocks/mbr-services:v1.1.0        migrationsArtifact: ghcr.io/movebigrocks/mbr-migrations:v1.1.0        manifestArtifact: ghcr.io/movebigrocks/mbr-manifest:v1.1.0

Verify the live runtime after deploy

Use the CLI health surface after rollout rather than assuming the host state is correct.

$ mbr health check --url https://app.yourdomain.com --json

Upgrading core

Upgrades are a version-pin change, not a rebuild.

Staying current with platform releases follows the same desired-state model as initial deployment. Update the pinned version in `mbr.instance.yaml`, push, and let the deploy workflow handle the blue-green rollout. The instance repo ships with `deploy/UPGRADE.md` as a detailed runbook.

Proof bundle

Update the pinned version

Change all four artifact refs to the new tag, commit, and push.

# In mbr.instance.yaml, update spec.deployment.release.core:#   version: v1.2.0#   servicesArtifact: ghcr.io/movebigrocks/mbr-services:v1.2.0#   migrationsArtifact: ghcr.io/movebigrocks/mbr-migrations:v1.2.0#   manifestArtifact: ghcr.io/movebigrocks/mbr-manifest:v1.2.0$ git add mbr.instance.yaml$ git commit -m 'Bump core release to v1.2.0'$ git push origin main

Rollback is the same operation in reverse

Re-pin the previous version and push. The blue-green deploy activates the other slot.

$ git revert HEAD$ git push origin main

Trust review

Production self-hosting still has explicit review gates.

The self-host path is concrete, but it is not supposed to be casual. Extension trust verification, secret handling, access design, and rollout timing remain human-visible decisions.

  • Keep non-secret deployment state in `mbr.instance.yaml` and sensitive values in GitHub or another secret manager.
  • Use `EXTENSION_TRUST_REQUIRE_VERIFICATION=true` and related trust settings before installing remote extension bundles in production.
  • The instance repo is the durable control plane and the host is disposable infrastructure.
  • Use the preview-workspace and extension review flow before promoting custom extension work into production.

References

Canonical next surfaces.

Each link goes to the next authoritative page, reference, or support surface.

Move Big Rocks

Let agents inspect the CLI-first surface. Let humans decide trust, rollout, and boundaries.

Start from /agents, use /docs/cli as the official product tour, inspect /resources for source and proof, and review /security before making deployment or data-handling decisions.