Install
INSTALL ELIXIR WHERE YOUR AGENTS LIVE.
Elixir is designed to run close to the agent and runtime it protects. It needs to observe real runtime state, and it can only observe what it can reach — so it goes on the machine where the agent actually runs, not somewhere convenient.
Access
GETTING ACCESS
Elixir is a public download, so the first step is Step 1. The alpha is how you reach us afterwards.
What the alpha is
Self-hosted
Elixir runs on your machines, beside your agents. Nothing is sent to us.
Bring your own model
You supply the provider credentials. Elixir never marks up token usage.
Apache-2.0
The licence the artifact ships under.
Developer tier is free
The public artifact protects one agent without a card. Paid plans use Stripe-hosted Checkout.
How access works
The certified Elixir release artifact is a public download, so the alpha is about support and feedback rather than about getting the software. Everything below is the real guide — the commands, the refusals, the limits of each proof.
Elixir is a public download — see Step 1. You do not need a GitHub account, repository access or a source checkout at any point. Alpha access below is for support and feedback, not for obtaining the software.
Email bryan.jones@efficiencystrengthtraining.comChoose your setup
TWO WAYS TO INSTALL
The same certified artifact either way. The difference is who does the mechanical work.
Guided setup
RecommendedFor anyone who would rather talk to an AI agent than administer a Linux box. You download Elixir, hand the bundle to an AI orchestrator you already use, and answer one question: which of my agents should Elixir protect?
Download Elixir
↓ give the bundle to your orchestrator
It verifies the bundle, installs it, and asks
↓ you choose which agents to protect
Only the agents you named become patients
↓
npm run doctor → verified installThe orchestrator does the mechanical work. It does not gain the authority to choose your patients: setup stops and waits for your selection, there is no flag that protects everything, and nothing it does grants production treatment.
Orchestrator support
- Any capable AI orchestrator
Needs only the manifest, the bundle verifier and the guided setup command. Proven in a clean room.Proven - Hermes
Completed by an operator from this release: Hermes handed off the bundle and registered only the selected agents.Proven - OpenClaw
Uses the same generic contract. No OpenClaw environment was available to prove it.Not yet proven
Developer setup
For operators who want the terminal. Everything below on this page is that path, start to finish — download, checksum, extract, install, configure, doctor.
Nothing is hidden from you in the guided route either: it runs these same commands.
Start the developer pathBefore you start
REQUIREMENTS
Node.js 20 or newer
The artifact declares engines.node: >=20. Development and proving happened on Node 22.
npm
Used for the lockfile install and every command below.
A way to unpack what you receive
The artifact arrives as an archive or a directory; nothing beyond the standard tools your platform already has.
Linux or macOS
Both are supported. The reference deployment is Linux.
One supported executor
A managed runtime CLI, or credentials for a model runtime. Elixir refuses to start a session without the one you configured.
A runtime adapter
How Elixir observes your fleet — see below.
Dependencies
Elixir has three runtime dependencies — ajv, ajv-formats and js-yaml — plus Node’s built-in test runner. That is deliberate: a governance tool with a large dependency tree is a governance tool with a large attack surface.
Credentials are supplied through the environment or your secrets manager. No credential belongs in a config file, and no config file on this page holds one.
Step 1
GET THE ARTIFACT
Elixir is distributed as a certified release artifact built from the private development repository — not as a source checkout.
v0.3.3-alpha
Public downloadDownload the certified artifact and its checksum, then continue at Step 2. No account, no repository access, no checkout.
Download Elixir 0.3.3-alphaInstall the artifact we tested
Elixir releases are distributed from the same packaged artifact that passes the shipped test suite and the shipped validator — 384 files, with 1,321 tests run inside the package against an empty deployment.
The build deletes its own output if either the suite or the validator fails, so what was certified and what you install are the same bytes.
- Version
- v0.3.3-alpha (alpha)
- Licence
- Apache-2.0
- Requires
- Node.js >=20
- Format
- tar.gz, reproducible
- Integrity
- SHA-256 published beside it
mkdir -p ~/elixir-handoff
cd ~/elixir-handoff
curl -fLO https://github.com/bdjones0545/elixir-releases/releases/download/v0.3.3-alpha/elixir-v0.3.3-alpha.tar.gz
curl -fLO https://github.com/bdjones0545/elixir-releases/releases/download/v0.3.3-alpha/elixir-v0.3.3-alpha.tar.gz.sha256# Run on the VM first:
mkdir -p ~/elixir-handoff
# Run on your computer; replace the two ALL_CAPS placeholders:
scp ~/Downloads/elixir-v0.3.3-alpha.tar.gz VM_USER@VM_HOST:~/elixir-handoff/
scp ~/Downloads/elixir-v0.3.3-alpha.tar.gz.sha256 VM_USER@VM_HOST:~/elixir-handoff/Step 2
VERIFY IT, THEN UNPACK IT
Check the checksum before you extract anything. Refuse to install on any mismatch.
curl -LO https://github.com/bdjones0545/elixir-releases/releases/download/v0.3.3-alpha/elixir-v0.3.3-alpha.tar.gz
curl -LO https://github.com/bdjones0545/elixir-releases/releases/download/v0.3.3-alpha/elixir-v0.3.3-alpha.tar.gz.sha256sha256sum -c elixir-v0.3.3-alpha.tar.gz.sha256shasum -a 256 -c elixir-v0.3.3-alpha.tar.gz.sha256Both print elixir-v0.3.3-alpha.tar.gz: OK. Anything else means the file you have is not the file that was published — stop, and download it again. v0.3.3-alpha should hash to f15a0f08c0e96fbfc256f24a10fc3119ac99fe24a18576b62b087b8c8a11b2aa.
tar -xzf elixir-v0.3.3-alpha.tar.gz
cd elixir-v0.3.3-alpha
npm ciThe archive extracts into exactly one directory — elixir-v0.3.3-alpha/ — so nothing lands loose in the directory you ran it from.
npm ci rather than npm install: it installs exactly the dependency versions pinned by the certified lockfile, which is the point of shipping one. Elixir has three runtime dependencies.
Guided path
GIVE THE DOWNLOAD TO HERMES OR OPENCLAW
If an orchestrator already manages the machine where your agents run, it can perform the mechanical installation and registration work for you. You still choose the agents.
If the file is on your computer
Upload both the archive and its .sha256 file to the agent VM first. Use the Step 1 Option B commands above, then tell the orchestrator the exact VM directory, normally /root/elixir-handoff when operating as root.
Install the Elixir release in /root/elixir-handoff.
1. Verify the .tar.gz against the adjacent .sha256 file before extracting it. Stop on any mismatch.
2. Install the pinned dependencies with npm ci and run npm run bootstrap.
3. Configure the Hermes runtime for this host without placing credentials in fleet.yaml.
4. Show me the profiles Hermes can see and ask me which exact profiles I want registered. Do not select all agents and do not infer my choice.
5. Register only the profiles I name, create or use the organization I approve, and preview npm run setup -- --organization ORG_ID --agents SELECTED_PROFILES --json.
6. Show me that preview and wait for my approval before running the same command with --apply.
7. Run npm run doctor and report every PASS, FAIL, UNKNOWN and INERT row. Do not grant production authority, install supervision, or start paid executor work unless I separately approve it.On the agent VM, install the Elixir release bundle located at /root/elixir-handoff.
Follow the release manifest and install guide exactly. Verify the checksum first and stop on mismatch. Configure the runtime adapter that matches the fleet you can actually observe. Enumerate the available agents or profiles, then ask me to select the exact ones Elixir should register.
Do not use an all-agents shortcut, invent agents, store credentials in fleet.yaml, grant treatment authority, or apply an enrollment plan without showing me the JSON preview first. After I approve the named selection, register only those agents, apply that reviewed plan, run npm run doctor, and return its complete verdict.Distribution
WHY ELIXIR SHIPS AS A CERTIFIED ARTIFACT
You receive what was tested, rather than the working tree it was built from.
Every release artifact is
Built from the release candidate
One command, from a known commit.
Tested inside the package
The shipped suite runs in the artifact, not in the repository that produced it.
Validated inside the package
The shipped validator runs there too.
Checked for documented-command drift
A document naming a command the artifact does not have cannot ship.
Checked for licence and version consistency
The metadata, the lockfile and the LICENSE have to agree.
Clean-room installable
Proven by installing it outside the checkout that built it.
Private development repository
↓ packaging build
Certified build — suite and validator run INSIDE it
↓
Versioned release artifact (v0.3.3-alpha)
↓
Alpha access / public download
↓
npm ci → npm run bootstrap → npm run doctorStep 3
BOOTSTRAP
Ask the install what it still needs from a person, before you give it anything.
npm run bootstrapIt marks each finding BLOCKING (genuinely cannot function), AWAITING_HUMAN (working as designed, waiting on a decision only a person may make) or UNKNOWN (could not be determined — never upgraded to OK for lack of evidence). A verdict of CORRECTLY INERT means nothing is broken and nothing will happen until you decide something.
Step 4
CONFIGURE
A new install has default deny, an empty grant list, an empty registry and no identities. That is not an incomplete installation — it is one that has not been given any authority yet.
Give the install a shape
mkdir -p ~/.workforce-accelerator/secrets
( umask 077 && openssl rand -hex 32 > ~/.workforce-accelerator/secrets/internal.key )
cp deployments/example/*.yaml workforce/
cp workforce/fleet.yaml.example workforce/fleet.yamlThe internal principal is Elixir submitting results back through its own authenticated path. It is deliberately not a registry worker: a worker must never be able to author the result that judges its own request.
The copied files give workforce/ a legal starting shape — an empty registry, an empty grant list, a default of deny. Empty is correct. A registry with workers already in it would be a fleet you did not create.
Declare your fleet
runtime:
# How Elixir OBSERVES your fleet. Read-only.
adapter: supervisord
executor:
# WHICH reasoning provider runs a session. No default, nothing inferred.
adapter: claude-code
# Where a session runs. 'local' means this machine.
host: local
# Optional — only where something really does sweep the queue continuously.
# expect_continuous: trueThere is no built-in default for any of these, on purpose: a tool that guesses which fleet to connect to is a tool that connects to someone else’s. An unset value is a refusal that names this file. The real file is gitignored for the same reason.
sed -i \
-e 's/id: workforce-host/id: orgo-desktop/' \
-e 's/address: 100\.64\.0\.1/address: 127.0.0.1/' \
-e 's#ssh_target: root@workforce-host#ssh_target: root@127.0.0.1#' \
-e 's/adapter: supervisord/adapter: hermes/' \
workforce/fleet.yamlReplace orgo-desktop if your host has another name. Loopback is correct only when Elixir and Hermes run on this same VM.
Create an organization and a durable Agent ID
npm run agents:migrate -- --new-organization --name "Acme" --apply
npm run agents:migrate -- --new-agent --organization org_… --display-name "Theo" \
--worker theo --environment production --applyAn Agent ID is agt_ followed by 32 hex characters, minted once and never derived from a host, a process, a repository, a provider or a display name. A worker name such as theo is not an agent id and cannot become one.
Issue an API key
npm run api:key -- --issue --name "support fleet" --scopes incidents:create,incidents:read
npm run api:key -- --list
npm run api:key -- --revoke <id>Keys are elx_ prefixed. No issuable scope grants approval or treatment authority — that is enforced at issue time, not by convention.
Step 5
RUN THE DOCTOR
Asked before anything is paid for. Every check is cheap, none of them spends, and the expensive discovery happens first.
npm run doctorRuntime adapter supervisord PASS
Executor adapter claude-code PASS
Executor auth AUTHENTICATED PASS
Queue liveness idle PASS
Evidence policy enforced PASS
Production authority none issued INERT
READY FOR DIAGNOSISReading the states
PASS
The check succeeded.
FAIL
Genuinely broken. Fix it — the doctor reports and never repairs.
INERT
Not broken. Working as designed, waiting on a decision only a person may make. An install with no production authority is correct, and a doctor that called it a failure would be teaching operators to fix a thing that is right.
UNKNOWN
Could not be determined. Never upgraded to PASS for lack of evidence.
Run it again after every configuration change. READY FOR DIAGNOSIS is the verdict you are looking for.
npm run api
# Wait for the listening message, then press Ctrl+C.
npm run doctorBefore the API has ever started, queue liveness may be UNKNOWNbecause no request store exists yet. That is different from a configured API and executor reading different data directories.
Walkthrough
INSTALL ON A VIRTUAL MACHINE
The reference deployment is a Linux VM running supervisord. Every step below is a real command; nothing here restarts or mutates a running service. The VM fetches the artifact itself — no account, no repository access, no source checkout.
Connect to the VM
ssh into the host where your agents actually run.
Install prerequisites
Node.js 20 or newer, npm, and the CLI for whichever executor you plan to use.
Download the certified artifact and its checksum
curl -LO https://github.com/bdjones0545/elixir-releases/releases/download/v0.3.3-alpha/elixir-v0.3.3-alpha.tar.gz and the .sha256 beside it — on the VM itself. No GitHub account, repository access or source checkout is needed.
Verify the checksum before extracting
sha256sum -c elixir-v0.3.3-alpha.tar.gz.sha256 — refuse to install on any mismatch.
Unpack it and change into it
tar -xzf elixir-v0.3.3-alpha.tar.gz && cd elixir-v0.3.3-alpha
Install dependencies
npm ci — exactly the certified lockfile
Copy example configuration
cp deployments/example/*.yaml workforce/ and cp workforce/fleet.yaml.example workforce/fleet.yaml
Create the internal principal key
openssl rand -hex 32 into ~/.workforce-accelerator/secrets/internal.key, mode 600.
Create an organization
npm run agents:migrate -- --new-organization --name "…" --apply
Mint a durable Agent ID
npm run agents:migrate -- --new-agent --organization org_… --apply
Select a runtime adapter
runtime.adapter in workforce/fleet.yaml — supervisord is the live-proven one.
Select an executor
executor.adapter — claude-code or codex are the proven paths.
Supply credentials
Through the environment or your secrets manager. Never in fleet.yaml.
Run the doctor
npm run doctor — and read INERT as "not yet decided", not "broken".
Start the API
npm run api
Optionally start MCP
npm run mcp
Report a synthetic incident
See "Your first incident" below. Use a harmless example.
Verify the result
GET the incident, its result and its evidence.
Important distinction
AGENTS WHOSE CODE LIVES IN GITHUB
GitHub is your source-control boundary. It is usually not the host your agent runs on — and that difference is central to how Elixir treats evidence.
GitHub repository
│
│ source / code
▼
Agent runtime / VM
│
├── Agent
└── ElixirInstall Elixir on the machine or runtime that executes the agent. A repository binding can point at the agent’s source, and that is useful — but runtime observation needs access to the environment the agent is actually running in.
Your GitHub
Your AI agent’s source may live in GitHub, and Elixir can use approved repository bindings as part of a diagnosis.
Our GitHub
The Elixir development repository is private, and it is not the installation boundary. Elixir is distributed as a certified artifact, so getting Elixir never involves cloning ours.
Topology
SELF-HOSTED AGENT SERVER
A VPS, a cloud VM, a dedicated box, an internal Linux server — the shape is the same.
Host
├── AI agents
├── Elixir
├── Runtime adapter (observation)
└── Executor adapter (reasoning)Deploy Elixir close enough to obtain approved runtime observation, and no further. It deliberately does not take an arbitrary remote host as a parameter: a tool that can be pointed at any machine at call time is a tool whose blast radius is decided by whoever makes the call.
SUPERVISORD
ProvenThe live-proven runtime adapter. Verified read-only against a real host — 33 supervised programs — reading supervisorctl status.
runtime:
adapter: supervisordWhat it observes
Running programs
Reported as observed state.
Exited and stopped programs
Distinguished, not flattened into “down”.
Absent programs
A program the supervisor does not know about is a real, reportable state.
Read-only
There is no restart, no start and no stop in this adapter.
SYSTEMD
ProvenLive-verified on a disposable Ubuntu 26.04 systemd-managed VM, with read-only observation of running, exited and absent services. It reads systemctl show for services and timers, distinguishes a running service from a completed active/exited oneshot, reports an absent unit as absent, and holds read_only throughout.
What was observed
PID 1 /usr/lib/systemd/systemd
systemctl is-system-running running
systemd version 259
services under management 24
long-running observed 5 cron, dbus, ssh, chrony, systemd-journald
nonexistent unit reported ABSENT, not invented
commands issued 2 both `systemctl show`
read_only true throughoutCheck systemctl is-system-running, never systemctl --version. A host can have the package installed, report a version, and not be run by systemd at all — which is exactly the case that kept this adapter unproven for as long as it was.
runtime:
adapter: systemdThen confirm what Elixir can actually see on your host with npm run doctor before relying on it.
HERMES PROFILES
ProvenFor fleets managed as Hermes profiles. Live against 16 workers of recorded output held as evidence in the repository, read over ssh by a probe that ships with the tool.
runtime:
adapter: hermeshermes profile list
# Repeat only for profiles you intend to make eligible for selection:
npm run onboard -- --worker <profile> --apply
npm run agents:migrate -- --new-organization --name "Your Organization" --apply
# Replace org_… and the names. This preview changes nothing:
npm run setup -- --organization org_… --agents profile1,profile2 --json
# Run only after a human confirms the exact preview:
npm run setup -- --organization org_… --agents profile1,profile2 --apply --json
npm run doctorStep 6
EXECUTOR CONFIGURATION
Which provider does the reasoning. If the one you configured is unavailable, Elixir refuses — it does not quietly use whichever one happens to be installed.
command -v claude && claude --version
command -v codex && codex --version
# Select one that succeeds, then verify its real authenticated session:
npm run doctorClaude Code
Proven- Install and authenticate the claude CLI.
- Set executor.adapter: claude-code.
- Run npm run doctor and confirm Executor auth is AUTHENTICATED.
Shell, a named-command allowlist, and the only adapter that reports cost in dollars. Requires the claude CLI, authenticated; an expired session presents as an auth failure rather than a silent fallback.
command -v claude && claude --version
# workforce/fleet.yaml: executor.adapter: claude-code
npm run doctorCodex
Proven- Install and authenticate the codex CLI.
- Set executor.adapter: codex.
- Run npm run doctor and confirm Executor auth is AUTHENTICATED.
Sandboxes by workspace rather than by named commands, and reports tokens rather than money — so cost_usd is null and the reservation stands as the charge. Requires the codex CLI, authenticated.
command -v codex && codex --version
# workforce/fleet.yaml: executor.adapter: codex
npm run doctorModel runtime adapters
Elixir drives the loop directly. The credential goes in the environment, never in fleet.yaml — the config file names an adapter, and nothing in it is a secret.
Anthropic API
Certification pending# workforce/fleet.yaml
executor:
adapter: anthropic-api
model: <anthropic-model-id>
export ELIXIR_ANTHROPIC_API_KEY=…
# Keep credentials out of fleet.yaml, then verify:
npm run doctorOpenAI API
Certification pending# workforce/fleet.yaml
executor:
adapter: openai-api
model: <openai-model-id>
export ELIXIR_OPENAI_API_KEY=…
# optional: export ELIXIR_OPENAI_ORG=…
# Keep credentials out of fleet.yaml, then verify:
npm run doctorGemini
Certification pending# workforce/fleet.yaml
executor:
adapter: gemini
model: <gemini-model-id>
export ELIXIR_GEMINI_API_KEY=…
# Keep credentials out of fleet.yaml, then verify:
npm run doctorOpenAI-compatible / local
Certification pending# workforce/fleet.yaml
executor:
adapter: openai-compatible
endpoint: <ollama-vllm-or-lm-studio-endpoint>
model: <model-id>
export ELIXIR_OPENAI_COMPATIBLE_API_KEY=…
# For a genuinely unauthenticated server, use instead:
# export ELIXIR_OPENAI_COMPATIBLE_NO_AUTH=true
# Assert only after proving tool calls work:
# export ELIXIR_OPENAI_COMPATIBLE_TOOL_CALLING=true
# Keep credentials out of fleet.yaml, then verify:
npm run doctorAWS Bedrock
Certification pending# workforce/fleet.yaml
executor:
adapter: bedrock
model: <bedrock-model-id>
settings:
region: <aws-region>
export AWS_ACCESS_KEY_ID=…
export AWS_SECRET_ACCESS_KEY=…
# Role sessions also require AWS_SESSION_TOKEN.
# Keep credentials out of fleet.yaml, then verify:
npm run doctorAzure OpenAI
Certification pending# workforce/fleet.yaml
executor:
adapter: azure-openai
endpoint: <azure-resource-endpoint>
model: <deployment-name>
export ELIXIR_AZURE_OPENAI_API_VERSION=…
export ELIXIR_AZURE_OPENAI_API_KEY=…
# Or use ELIXIR_AZURE_OPENAI_TOKEN, never both.
# Keep credentials out of fleet.yaml, then verify:
npm run doctorVertex AI
Certification pending# workforce/fleet.yaml
executor:
adapter: vertex-ai
model: <vertex-model-id>
settings:
project: <gcp-project>
location: <gcp-region>
export ELIXIR_VERTEX_ACCESS_TOKEN=…
# Or set GOOGLE_APPLICATION_CREDENTIALS to a service-account JSON file.
# Keep credentials out of fleet.yaml, then verify:
npm run doctorEnterprise gateway
Certification pending# workforce/fleet.yaml
executor:
adapter: enterprise-gateway
endpoint: <gateway-endpoint>
model: <model-id>
settings:
protocol: openai-chat # or anthropic-messages
export ELIXIR_GATEWAY_TOKEN=…
# For a genuinely unauthenticated gateway, use instead:
# export ELIXIR_GATEWAY_NO_AUTH=true
# Keep credentials out of fleet.yaml, then verify:
npm run doctorStep 7
MCP SETUP
So a compatible AI client can report its own incident and read back the verified outcome.
{
"mcpServers": {
"elixir": {
"command": "node",
"args": ["/absolute/path/to/elixir/mcp/server.mjs"],
"env": {
"ELIXIR_API_KEY": "elx_…",
"ELIXIR_API_URL": "http://127.0.0.1:8790"
}
}
}
}Replace the path with your install and the key with one you issued. The placeholder above is not a key and will not authenticate.
npm run mcp
npm run mcp:testEnvironment
| Variable | Notes |
|---|---|
| ELIXIR_API_KEY | Required. The server refuses to start without one — a server that connects, advertises six tools and then fails every one of them is worse than one that does not start. |
| ELIXIR_API_URL | Default http://127.0.0.1:8790 |
| ELIXIR_API_TIMEOUT_MS | Default 30000, bounded [1000, 300000] |
The six tools
- elixir_list_agents
- elixir_get_agent
- elixir_report_incident
- elixir_get_incident
- elixir_get_result
- elixir_get_evidence
MCP access is not approval authority. There is no tool that approves, executes, deploys, restarts or opens a shell, and none can be added by configuration.
Step 8
YOUR FIRST INCIDENT
Verify the whole path without touching production. This example is deliberately harmless — nothing here asks you to break anything.
Install → configure → doctor → mint an Agent ID → issue an API key
→ start the API → submit a synthetic incident → read the result → inspect the evidencenpm run api # in one terminal
curl -X POST http://127.0.0.1:8790/v1/incidents \
-H "Authorization: Bearer $ELIXIR_API_KEY" \
-H "Idempotency-Key: first-check-0001" \
-H "Content-Type: application/json" \
-d '{
"agent_id": "agt_…",
"summary": "Synthetic check: confirming the incident path works end to end.",
"observed": "This is a test incident submitted during installation.",
"expected": "Elixir accepts it, queues it, and returns an incident id.",
"requested_outcome": "Confirm the reporting path is wired correctly. No repair is expected.",
"severity": "low",
"category": "observability",
"environment": "staging"
}'{
"incident_id": "inc_…",
"agent_id": "agt_…",
"organization_id": "org_…",
"status": "queued",
"risk": "R3",
"terminal": false,
"result_available": false
}curl -H "Authorization: Bearer $ELIXIR_API_KEY" \
http://127.0.0.1:8790/v1/incidents/inc_…
curl -H "Authorization: Bearer $ELIXIR_API_KEY" \
http://127.0.0.1:8790/v1/incidents/inc_…/result
curl -H "Authorization: Bearer $ELIXIR_API_KEY" \
http://127.0.0.1:8790/v1/incidents/inc_…/evidenceNothing starts the executor for you
Elixir ships no supervisor unit and no timer. A queued incident stays queued until something works it, and starting that is an act rather than a side effect of installing a file — because it means sessions run, spend money and close requests unattended.
npm run executor -- --list # what is queued and eligible
npm run executor -- --once # work the oldest, submit nothing
npm run liveness # is anything actually working the queue?
npm run escalations # what needs a personPaid plans
ACTIVATE AFTER CHECKOUT
Developer needs no activation. A paid Checkout returns one command that binds the subscription to this installation.
Before Checkout, copy the durable organization ID:
npm run billingAfter payment, enter that org_… ID on the return page. The checkout and organization can each be claimed only once.
Run the one-time command shown on the return page:
npm run billing -- activate --token adm_live_…
npm run billing -- remote-syncThe token is stored owner-only in Elixir’s data directory. It authorizes only reading this organization’s commercial entitlement; it cannot charge, refund, approve treatment or reach an executor.
Before production
SECURITY CHECKLIST
Keep executor credentials in the environment
Or in your secrets manager. Never in a config file.
Never commit an API key
Keys are elx_ prefixed and easy to grep for. Rotate anything that has ever been in a repository.
Do not expose the internal gateway
It is loopback-only by design and has no outbound path to any worker.
Use durable Agent IDs
Not hostnames, not process names, not display names.
Keep observation read-only
Unless treatment is explicitly authorized by a grant a human wrote.
API access is not approval authority
No issuable scope can approve anything.
MCP access is not approval authority
The approving tools do not exist.
Expect no silent provider fallback
A missing provider is a refusal, not a substitution.
Test in a sandbox first
Send a synthetic incident before a real one.
Run the doctor after every change
Configuration drift is one of the failure classes Elixir exists to catch.