Skip to main content

Running xops

xops is early-stage: today you drive it with a handful of scripts. A packaged xops CLI (setup wizard, supervised service) is on the roadmap; these scripts are what actually works right now.

Run a bot from the terminal

The primary way to test a bot without Telegram. One bot turn against a scope (container or namespace):

# docker
bun scripts/bot-run.ts docker-ops <container> "<message>"

# kubernetes (needs a scoped kubeconfig first — see provision-poc-rbac.sh)
bun scripts/bot-run.ts k8s-sre <namespace> "<message>"

The bot answers, or loads the matching runbook and fixes the problem — every command through the fail-closed guard. Output shows acted/verified/wall time plus the bot's report. Provider is XOPS_PROVIDER (default claude-acp, your Claude subscription). See Bots for a full walkthrough.

Talk to a bot on Telegram

Start the bridge:

bun scripts/poc-telegram.ts

Then, in your chat:

CommandPurpose
/botsList available bots
/use <name>Bind this chat to a bot (e.g. /use docker-ops)
/project <scope>Set what the bot is scoped to (namespace or container)

After binding a bot and project, just send messages — the bot answers or acts within its scoped, guarded session.

Legacy single-skill runner

scripts/poc-run.ts runs one hardcoded triage skill directly (the pre-bot path), still handy for skill-level testing:

bun scripts/poc-run.ts docker <container>
bun scripts/poc-run.ts k8s <namespace> [kubeconfig]

Helper scripts

ScriptPurpose
scripts/seed-docker-fault.sh [oom|exit0]Create a deliberately broken local container to practice on
scripts/provision-poc-rbac.sh <ns> [ctx]Generate a namespace-jailed kubeconfig (ServiceAccount + Role + 2h token)

Run artifacts

Every engine run leaves an audit trail in its workdir (~/.xops/workspace/):

FileContents
guard.jsonlEvery command attempted, one JSON decision per line
run.stream.jsonlFull goose event stream
run.stderr.logEngine stderr
recipe.yamlThe exact recipe this run executed