Regixo docs
🔧 For the engineer·Roll it out·see the whole journey ↗
Build for your organization

Roll it out across teams & environments

Getting from one engineer's laptop to an org-wide, always-current catalog is mostly about committing config and scheduling a re-scan — Regixo is a command you run, not a daemon you host. This page is that rollout as four steps, in order, then the branches a real estate hits: multiple repos and environments, an honest account of what multi-entity does not do yet, and the one failure — SYNC_UNAUTHORIZED — with its fix.

Roll one estate out, all the way through (the worked example)

Before the reference, take one estate from a laptop to a fed, hosted record. Aurelia Payments already has the committed regixo.yml from the last page, and Maija has claimed the record. Here is each step for it:

StepFor AureliaThe engineer does
1 · CommitThe regixo.yml already carries the sources, intent, DORA scope, region/role and PII policy — no secrets.Git-commit it. Teammates and the CI runner now scan the same estate.
2 · ScheduleEvery pull request should report what changed in the data, and a signed activity that drifts should be flagged.Copy examples/github-actions/regixo-watch.yml, set the source secrets as Actions secrets. A scheduled run posts its summary and exits 3 (a warning) on a core-field change.
3 · Feed the recordMaija's record must stay current without anyone re-forwarding a draft.Set REGIXO_SYNC_TOKEN (minted on the claim page under “Connect a machine”) as an Actions secret. The same watch now pushes the metadata-only draft to the portal.
4 · VerifyConfirm the pairing actually works before trusting it.regixo doctor shows the portal reachable and reports the paired state; the claim page's “last updated” time refreshes.

The four sections below are that same rollout, walked in full.

Step 1 · Commit the config

The move from a personal run to a repeatable org run is three commits:

  1. Commit regixo.yml. With sources (by env-var name), intent, DORA scope and PII policy in the file, any machine — a colleague's or a CI runner — scans the same estate. Secrets stay in the environment.
  2. Make it run headless. Off a TTY, in CI, or with --yes, every command runs non-interactively: it takes answers from flags, env and regixo.yml and never prompts. A committed config plus --yes is a fully unattended refresh.
  3. Seed the shared standards. Commit a house glossary and PII policy once, then bring them in on each machine with regixo catalog import regixo-catalog.json (merge-only — it never downgrades a confirmed answer).
Headless by default Every regixo command, including setup, is agent-drivable: a missing required input is a coded error naming the flag or env var to supply — never a blocking prompt. That's what lets the same config run in a pipeline as cleanly as on a laptop.

Step 2 · Make it re-scan without anyone remembering

The goal: the map refreshes on a schedule, whether or not your laptop is on. regixo watch is a one-shot re-scan you schedule — from cron or CI — not a hosted daemon that sits running. Each run re-scans, updates the map, appends the change-log, and flags any signed activity whose core fields moved for re-sign.

say

“Set up a scheduled Regixo re-scan in our CI that warns us when a signed record’s core fields change.”

Your agent writes the workflow and names the source secrets — you set their values as Actions secrets yourself.

Show the commandHide the commandShow the sentenceHide the sentence
run
$ regixo watch --ci >> "$GITHUB_STEP_SUMMARY"

What your agent will do. It should write .github/workflows/regixo-watch.yml, wire the step to regixo watch --ci >> "$GITHUB_STEP_SUMMARY", and handle exit code 3 so a core-field change raises a build warning rather than failing the job. Check the file it writes against the step in the terminal recipe below.

A ready-made GitHub Actions workflow ships in the repo at examples/github-actions/regixo-watch.yml. The source is AGPL-3.0 but not public yet, so until it is, copy the step from the terminal recipe below. Set your source secrets as Actions secrets, and a scheduled run writes its summary to the job's step summary and raises a build warning (exit 3) on a core-field change — it does not fail the job, and it does not comment on pull requests.

How to check it worked. Trigger the workflow once by hand. A green run with a change summary in the job's step summary means the schedule works; exit 3 (shown as a warning, not a failure) means a core RoPA field moved and a signed activity needs re-signing. Confirm the exit code is wired as a warning, not a hard fail, so a real change never blocks a merge.

Prefer the terminal? The full recipe, step by stepHide the terminal recipe

1 · The two flags for running watch in CI

--ci
Prints the change summary as markdown to stdout (pipe it into $GITHUB_STEP_SUMMARY) and signals a core-field change with exit code 3 — plain watch keeps the historic 0/1, so existing scripts are unaffected.
--webhook <url>
POSTs the change report to a URL. The egress is announced first and carries names and change kinds only — never row values.

2 · The workflow step, in full

Copy this into .github/workflows/regixo-watch.yml and set the env var(s) your regixo.yml names as Actions secrets. It is the load-bearing step of the ready-made recipe at examples/github-actions/regixo-watch.yml:

.github/workflows/regixo-watch.yml (excerpt)
- name: Re-scan and summarise what changed
  env:
    DATABASE_URL: ${{ secrets.DATABASE_URL }}   # the env var(s) your regixo.yml names
  run: |
    set +e
    npx regixo watch --ci >> "$GITHUB_STEP_SUMMARY"
    code=$?
    set -e
    if [ "$code" -eq 3 ]; then
      echo "::warning::Core RoPA fields changed — review and re-sign if the record is sealed."
    elif [ "$code" -ne 0 ]; then
      exit "$code"
    fi

3 · Confirm it runs

Trigger the workflow by hand once — don't wait for a real change to find out the job works. A green run with a change summary in the step summary is the proof. No CI, or a source only one machine can reach? The cron route does the same job; both are walked in Keep it current.

The re-sign side of a scheduled change is walked in Keep it current.

Step 3 · Feed the hosted record

Once a compliance lead has claimed a record on the portal, a paired regixo watch keeps it fed. Pairing is one thing: the engineer sets REGIXO_SYNC_TOKEN (the ingest-only token an admin minted, handed over the safe way — see Roles & governance, Step 5) in the machine's environment. The portal address defaults to app.regixo.com, so on the Regixo cloud the token alone is the whole pairing; point it elsewhere with REGIXO_PORTAL_URL. With the token set, the same scheduled run pushes the refreshed, metadata-only draft to the portal:

say

“Keep the record we forwarded to our compliance team in sync from CI.”

Your agent fills in everything except the token — you put that in .env yourself.

Show the commandHide the commandShow the sentenceHide the sentence
run
$ export REGIXO_SYNC_TOKEN='rgx_sync_…'
$ regixo watch --ci

The push goes to POST /api/v1/sync authenticated by the token. It carries metadata only, and the token can only ingest — never unlock, sign or export. The record's “what changed” feed updates so the compliance team sees the estate moved without anyone re-forwarding a draft.

That is the whole of step 3: one env var, and the scheduled run you already have does the rest. Step 4 is confirming it worked.

Step 4 · Prove the pipeline is really wired

The goal: evidence — not assumption — that the sources resolve and the portal pairing is live, before you trust tonight's scheduled run. regixo doctor checks the setup end to end and names the fix for anything wrong.

say

“One of my sources won’t connect — find out why and fix it.”

Your agent acts on the fixes it can: it fills in every non-secret value and leaves <PASTE-YOUR-TOKEN-HERE> for you — you put the token in .env yourself.

Show the commandHide the commandShow the sentenceHide the sentence
run
$ regixo doctor
then

One ✓ or ✗ per check, and every ✗ carries the exact fix: Node, the parsed regixo.yml with its source count and DORA scope, one line per source, and the local map. On Aurelia's machine, with Stripe and Snowflake still awaiting their env vars, it names each issue honestly rather than reporting a clean setup.

Check it worked: the portal-pairing line described below, plus a fresh “last updated” time on the claim page after the next scheduled watch. A ✗ your agent cannot clear is a hand-back, not a failure — a secret is yours to paste into .env, and a source on a network your agent isn't on will never connect from here.

Show what it prints in the terminalHide the terminal outputShow what your agent reportsHide what your agent reports
regixo doctor — the setup, checked end to end
 node: Node 24.4.0
 config: ./regixo.yml parsed, 4 source(s) · DORA scope ON
 source:app-db: connection from DATABASE_URL resolved · connects ✓
 source:stripe: the connection variable STRIPE_URL isn't set yet — there's nothing to read
    fix: Set it to your real connection string, then re-run:  export STRIPE_URL='<PASTE-YOUR-TOKEN-HERE>'
 source:snowflake-dwh: the connection variable SNOWFLAKE_URL isn't set yet — there's nothing to read
    fix: Set it to your real connection string, then re-run:  export SNOWFLAKE_URL='<PASTE-YOUR-TOKEN-HERE>'
 map: catalog present at ./index.db

regixo doctor: 2 issue(s) — see fixes above.

Once REGIXO_SYNC_TOKEN is set and the portal is reachable, doctor adds a portal-pairing check — ✓ portal-pairing: machine token accepted at https://app.regixo.com — pushes will update the claim. It authenticates the token itself, so a revoked or wrong-record token fails here rather than on tonight's scheduled push. That line, plus a fresh “last updated” time on the claim page after the next scheduled watch, is your proof the pairing works and the record is being fed.

Which paired state am I in — the walk

A machine is in exactly one of three states; the difference is only which env vars are set. doctor reports it, and the walk tells you what to do:

StateThe signalWhat to do
Purely localNo REGIXO_SYNC_TOKEN — nothing is pushed; doctor shows no portal check.Nothing. The default, and fine for a team not yet on the portal.
Paired to the cloudToken set, no REGIXO_PORTAL_URL✓ portal-pairing: machine token accepted; every watch pushes to app.regixo.com.Nothing. The token alone is the whole pairing.
Paired, but brokenA revoked token fails loudly with SYNC_UNAUTHORIZED; a claim that was superseded or removed (a fresh invite mints a new claim) fails with CLAIM_NOT_SYNCABLE.Revoked token: mint a fresh one under “Connect a machine” and reset REGIXO_SYNC_TOKEN. Superseded claim: re-run regixo invite, then pair again on the new claim. It fails loud, never drops silently.
The two failures, and their fixes — SYNC_UNAUTHORIZED · CLAIM_NOT_SYNCABLE A paired push authenticates with the machine token. A revoked or mistyped token returns SYNC_UNAUTHORIZED — an admin generates a fresh token on the record's “Connect a machine” card and the engineer resets REGIXO_SYNC_TOKEN. A claim that was superseded (someone re-sent the invite — a new invite mints a new claim) or removed returns CLAIM_NOT_SYNCABLE — re-run regixo invite for a fresh claim, then pair again with a token generated on the new claim. Either way the record freezes loudly rather than drifting silently; regixo status shows the last push outcome so you can confirm the reset landed.

Branch · multiple repos, environments & networks

Real estates aren't one flat database. Three patterns:

Branch · honest limits: multi-entity is not built yet

No company-account grouping yet

There is no organisation-level account that groups several records under one company today. The portal's “Your records” view unifies records by the signed-in email — not by organisation — and each record is its own tenant with its own licence. A person who signs multiple records sees them together; two colleagues do not automatically share a company view.

The Enterprise tier (from €18,000, published) is the answer for multi-entity groups and self-host — but the grouping feature and the self-host regixo serve command are not built; multi-entity pricing and company-account grouping are on the roadmap, not shipped. And the hosted portal is not yet hosted — per-tenant DB isolation, EU residency, live Stripe and the real-IdP SSO run are all launch gates still ahead. Plan around what ships today; treat the rest as roadmap.

How you know the rollout is done

The four steps have landed when: git diff regixo.yml shows the committed estate a colleague can clone and reproduce; a scheduled watch --ci run posts its change summary (and exits 3, as a warning, on a core-field change); regixo doctor shows ✓ portal-pairing: machine token accepted; and the claim page's “last updated” time refreshes after each scheduled run, with no SYNC_UNAUTHORIZED in regixo status.

REGIXO — documentation · a command you schedule, not a daemon you host · Keep it current