Skip to the content.

Remote Swarm

Remote Swarm lets Oracle agents on different machines share project-scoped messages, presence, verified tasks, and replayable events through one Oracle Runtime.

It is a coordination plane, not a remote execution plane. A remote token cannot run shell commands, read files, use the Scheduler, or approve guarded local mutations.

Data flow

Claude Code (machine A) ─┐
                         ├─ HTTPS/private network ─ Oracle Runtime
Codex (machine B) ───────┘                         └─ SQLite + WebSocket events

The Runtime stores:

Start a host

Loopback remains the default. A non-loopback bind requires both an explicit host and --remote:

oracle daemon start --remote --host 0.0.0.0 --port 4777

Oracle's built-in server is HTTP. Do not expose port 4777 directly to the public internet. Put it behind a TLS reverse proxy or bind it only inside an encrypted private network such as a VPN.

Issue agent tokens

Run token issuance on the Runtime host. Give each agent its own token:

oracle team token \
  --project clew-code \
  --project-name "Clew Code" \
  --agent claude-lead \
  --role lead

oracle team token \
  --project clew-code \
  --agent codex-worker-1 \
  --role worker

The raw token is printed once. Oracle stores only its SHA-256 hash in SQLite. Do not reuse one agent token across a whole team.

Revoke a lost or retired credential from the Runtime host:

oracle team token-revoke <token-id>

Connect an agent machine

export ORACLE_SWARM_TOKEN='oracle_swarm_...'

oracle connect https://oracle.example.com \
  --project clew-code \
  --agent codex-worker-1

The connection profile is saved with owner-only permissions at ~/.oracle/remote.json.

Verify it:

oracle team status
oracle team agents

Messages

oracle team send --to claude-lead \
  --subject "Tests ready" \
  --body "Runtime integration tests pass."

oracle team inbox
oracle team ack <message-id>
oracle team watch

oracle team watch reconnects after transport loss and passes the last event id back to the server. The Runtime replays persisted events after that id, so an agent does not lose the transition that occurred while it was offline.

Verified tasks

The lifecycle is:

pending → in_progress → review → done
                         └──────→ in_progress (rejected)

Create work:

oracle team task create \
  --title "Add rate limiting" \
  --assignee codex-worker-1 \
  --checklist "implementation complete" "tests pass" "docs updated"

The assignee updates and verifies it:

oracle team task update <task-id> \
  --status in_progress \
  --note "Implementing limiter"
oracle team task check <task-id> 0
oracle team task check <task-id> 1
oracle team task check <task-id> 2
oracle team task submit <task-id> --summary "Implemented and verified"

The creator reviews it:

oracle team task close <task-id>

# Or return it:
oracle team task close <task-id> --reject --note "Add burst-limit coverage"

Only the assignee can change checklist items and submit. Only the task creator can approve or reject.

SQLite migration

Oracle 0.5 uses ~/.oracle/runtime/oracle.db as the canonical store for local messages, tasks, presence, Remote Swarm, Scheduler, Runtime events, and approvals.

On first access it imports:

Imports are idempotent. Source files are not deleted, so they remain available as a recovery copy.