Ludus Ops — Infrastructure Changes
2026-02-23 by Showboat (ludus-m4j.2)
Showboat recording of all ludus ops subcommands against live Mimas.
All 13 checks pass — 0 errors, 0 warnings.
1. ludus ops deploy
1.1 Quick deploy (sync only)
ludus ops deploy --quick --dry-run
Preview — no files will be transferred
✓ agents/
✓ scripts/
✓ skills/
✓ main workspace
Next:
ludus ops deploy Execute deploy
PASS: Output shows each sync target with status. No files transferred. Exit code 0.
ludus --json ops deploy --quick --dry-run
{
"sync": {
"agents/": "ok",
"scripts/": "ok",
"skills/": "ok",
"main workspace": "ok"
},
"dry_run": true,
"next": [
{"command": "ludus ops deploy", "description": "Execute deploy"}
]
}
PASS: Valid JSON. dry_run is true. All sync targets show "ok".
ludus ops deploy --quick
Deploying to Mimas...
✓ Syncing agents/
✓ Syncing scripts/
✓ Syncing skills/
✓ Syncing main workspace
Next:
ludus info status Verify deployment
PASS: All directories synced successfully. Exit code 0.
ludus --json ops deploy --quick
{
"sync": {
"agents/": "ok",
"scripts/": "ok",
"skills/": "ok",
"main workspace": "ok"
},
"dry_run": false,
"next": [
{"command": "ludus info status", "description": "Verify deployment"}
]
}
PASS: Valid JSON. dry_run is false. All sync labels show "ok".
1.2 Full deploy (sync + register + configure)
ludus ops deploy
Deploying to Mimas...
✓ Syncing agents/
✓ Syncing scripts/
✓ Syncing skills/
✓ Syncing main workspace
✓ Agent registration: 0 registered, 3 already present
✓ Sandbox defaults configured
✓ Set docker.env.BEADS_DIR
✓ Set docker.binds (credentials + env + intercom)
✓ SELinux labels set on credential files
✓ main: memory=1g, cpus=2.0, network=bridge
✓ b4-dev: image=b4arena-dev:latest, memory=2g, cpus=4.0, network=bridge
✓ b4-eng-mgr: network=bridge
✓ Per-agent BD_ACTOR configured
✓ Gateway restarted
Deploy complete.
Next:
ludus info status Verify deployment
ludus info doctor Run health checks
PASS: Shows "Deploying to Mimas..." and "Deploy complete." Exit code 0.
ludus --json ops deploy
{
"deploy": [
{"step": "sync agents/", "ok": true},
{"step": "sync scripts/", "ok": true},
{"step": "sync skills/", "ok": true},
{"step": "sync main workspace", "ok": true},
{"step": "register agents", "ok": true},
{"step": "configure sandbox", "ok": true}
],
"next": [
{"command": "ludus info status", "description": "Verify deployment"},
{"command": "ludus info doctor", "description": "Run health checks"}
]
}
PASS: Valid JSON. All steps show ok: true. Deploy array has 6 elements.
2. ludus ops cron
2.1 Deploy cron entries
ludus --json ops cron deploy
{
"success": true,
"next": [
{"command": "ludus info cron", "description": "Verify cron entries"},
{"command": "ludus info logs", "description": "Tail cron logs"}
]
}
PASS: success is true. Exit code 0.
ludus --json info cron
{
"entries": [
"*/30 * * * * BEADS_DIR=... beads-watcher.sh | beads-notify.sh ... intercom-sync.sh ...",
"*/30 * * * * BEADS_DIR=... gh-event-poll --repo b4arena/test-calculator --repo b4arena/test-greeter ..."
]
}
PASS (round-trip): entries array has 2 items. First mentions beads-watcher. Second mentions gh-event-poll.
2.2 Remove cron entries (dry-run)
ludus ops cron remove
Would remove b4arena cron entries:
*/30 * * * * BEADS_DIR=... beads-watcher.sh | beads-notify.sh ...
*/30 * * * * BEADS_DIR=... gh-event-poll ...
Run with --confirm to remove.
PASS: Shows "Would remove" and lists entries. Does NOT actually remove. Exit code 0.
3. ludus ops images build
ludus --json ops images build
{
"success": true,
"next": [
{"command": "ludus info images", "description": "Verify images"},
{"command": "ludus ops deploy", "description": "Full deploy"}
]
}
PASS: success is true. Exit code 0.
4. ludus ops intercom
4.1 Bootstrap
ludus --json ops intercom bootstrap
{
"intercom_dir": "/home/openclaw/b4arena/intercom",
"success": true
}
PASS: success is true. intercom_dir matches expected path.
4.2 Sync to GitHub
ludus --json ops intercom sync
{
"success": true
}
PASS: success is true. Exit code 0.
4.3 Reset (dry-run)
ludus ops intercom reset
Would reset shared intercom on Mimas:
- git reset --hard origin/main
- Remove: .beads/dolt, .beads/dolt-access.lock, .beads/ephemeral.sqlite3
- Reimport from .beads/issues.jsonl
Run with --confirm to reset.
PASS: Shows "Would reset" with description of actions. Does NOT actually reset. Exit code 0.
ludus --json ops intercom reset
{
"dry_run": true
}
PASS: dry_run is true.
5. ludus ops sandbox
5.1 Register agents (idempotent)
ludus ops sandbox register
Registering agents...
✓ Agent registration: 0 registered, 3 already present
Next:
ludus info agents List registered agents
PASS: Shows registration status. Already-registered agents skipped. Exit code 0.
5.2 Configure sandbox
ludus ops sandbox configure
Configuring sandbox...
✓ Sandbox defaults configured
✓ Set docker.env.BEADS_DIR
✓ Set docker.binds (credentials + env + intercom)
✓ SELinux labels set on credential files
✓ main: memory=1g, cpus=2.0, network=bridge
✓ b4-dev: image=b4arena-dev:latest, memory=2g, cpus=4.0, network=bridge
✓ b4-eng-mgr: network=bridge
✓ Per-agent BD_ACTOR configured
✓ Gateway restarted
Next:
ludus info status Verify configuration
PASS: Shows sandbox defaults and per-agent overrides. BD_ACTOR configured. Gateway restarted. Exit code 0.
Edge Cases
Quick deploy with unreachable Mimas
LUDUS_HOST=nonexistent ludus --json ops deploy --quick 2>&1 || true
{
"sync": {
"agents/": "error",
"scripts/": "error",
"skills/": "error",
"main workspace": "error"
},
"dry_run": false,
"next": [
{"command": "ludus info status", "description": "Verify deployment"}
]
}
PASS: All sync targets show "error". No unhandled exception. Exit code 0.
Deploy with --full flag
ludus --json ops deploy --full
{
"deploy": [
{"step": "images build", "ok": true},
{"step": "sync agents/", "ok": true},
{"step": "sync scripts/", "ok": true},
{"step": "sync skills/", "ok": true},
{"step": "sync main workspace", "ok": true},
{"step": "register agents", "ok": true},
{"step": "configure sandbox", "ok": true}
],
"next": [
{"command": "ludus info status", "description": "Verify deployment"},
{"command": "ludus info doctor", "description": "Run health checks"}
]
}
PASS: First step is "images build". Remaining steps are sync + register + configure. All steps show ok: true.
Summary
| Command | Human | JSON | Status |
|---|---|---|---|
ludus ops deploy --quick --dry-run | PASS | PASS | 4 targets |
ludus ops deploy --quick | PASS | PASS | 4 targets |
ludus ops deploy | PASS | PASS | 6 steps |
ludus ops cron deploy | — | PASS | success |
ludus ops cron remove | PASS | — | dry-run |
ludus ops images build | — | PASS | success |
ludus ops intercom bootstrap | — | PASS | success |
ludus ops intercom sync | — | PASS | success |
ludus ops intercom reset | PASS | PASS | dry-run |
ludus ops sandbox register | PASS | — | 3 agents |
ludus ops sandbox configure | PASS | — | all green |
| Unreachable Mimas | — | PASS | all error |
| Deploy --full | — | PASS | 7 steps |
All 13 spec checks pass. Zero errors, zero warnings.