Skip to content

OpenRig v0.4.6 — workflows + multi-host + factory

Choose a tag to compare

@mvschwarz mvschwarz released this 09 Jul 23:00
· 3382 commits to main since this release

OpenRig v0.4.6

Summary — Workflows + multi-host coordination + factory foundations

OpenRig v0.4.6 lands the deterministic workflow engine and the
multi-host coordination model that runs on top of it. Workflows are
now a first-class product surface: a rock-solid engine, a full-
featured spec language, a workflow CLI, a workflow web UI, and an
exception + human-gate maturity model that keeps a healthy run
zero-interruption. On top of that engine, the self-driving factory
starter ships as an MVP shipped starter (rig up factory-rsi) —
one rig, seven seats, a self-driving plan → implement → qa_check → review → release inner loop with dogfood decoupled and running
out-of-band against the shipped product, feeding recorded findings
into the next plan.

Multi-host coordination lands the full happy path. Hosts register
and select through dashboard-visible cards; a remote host's
workspace surfaces are readable from the local operator; queue
items and hot-potato handoffs cross hosts explicitly through the
registered transport (never a silent selection re-home); the direct
coordination verbs (rig send, rig capture, rig transcript,
rig broadcast) cross hosts CLI-direct via the shipped http
transport branch with byte-verbatim ssh behavior preserved; a
fleet-altitude attention band rolls up needs-attention across the
whole registered fleet.

Foundations round out the release: a new agent runtime adapter (Pi)
joining Claude/Codex as a first-class runtime, terminal provider
first-class treatment across the terminal-facing surfaces, and
daemon read-path hardening for the multi-host + workflow load with
no functional behavior change.

Two new bundled skills ship canonical + plugin with byte-parity
guard: openrig-herdr (rig terminal open/views/status model) and
openrig-cmux (provider-agnostic delta).

Migrations are additive only: 049_workflow_instance_version,
050_workflow_spec_json, 051_workflow_resume,
052_workflow_instance_bound_rig, 053_sessions_node_id_index,
054_queue_transitions_archive. Existing v0.4.4 databases upgrade
by running rig daemon start on the new daemon. (v0.4.5 was
skipped; there is no cut between v0.4.4 and v0.4.6.)

What Shipped

Workflows

  • The rock-solid deterministic engine — strict spec validation
    (unknown keys reject; unreachable steps and unguarded cycles
    fail); loop_guards.max_hops enforced at projection; waiting-
    exit replay absorption; per-instance keepalive watchdogs auto-
    armed in the routing transaction; startup sweep re-arms and
    surfaces stuck instances; rig workflow continue relabeled to
    its read-only inspector semantics.
  • The full-featured spec language — steps with role /
    target.rig / preferred_targets / next_hop.on / invariants /
    loop_guards / exception_routing / closure / gates / skill_refs /
    spawn_budget; strict-keyset validation; shipped-spec compat
    pinned by fixture round-trip.
  • The workflow CLI — new verbs rig workflow run (instantiate
    • follow to terminal; exit 3 = workflow-failed distinct from
      transport 1/2), rig workflow watch (mid-flight attach),
      rig workflow status (needs-attention rollup), rig workflow route (frontier re-target in one transaction). Formatted
      trace / list / show human output; --json byte-identical
      to before. New guard rejects out-of-band terminal closure of a
      live workflow-frontier packet.
  • The workflow web UI — new
    Workflows/Instance/InstancesBand/TopologyGraph/InstanceTrailTimeline
    pages; SSE stream unscoped by rig; pure buildLauncherViews +
    suggestLayout + edge-handle assignment exports. UI acceptance
    is carried by per-cut real screenshots + the two-host
    integration proof; twin fixture backfill is routed as a
    non-blocking 0.4.7 hygiene fast-follow.
  • The exception + human-gate model — rig workflow resume
    verb (redrive a failed instance from its failed step, rebound,
    fresh capability-aware re-resolution, one fresh max_hops
    window); exceptions become durable attention items in the same
    transaction as the failure; maturity dial orchestrator-first | human_only per class / per workflow / per host; the attention
    band is workflow-aware; the happy-path guarantee is unchanged.

Multi-host coordination

  • Add / select hosts + dashboard — HostConfigCard +
    HostIndicator surfaces on the dashboard; rig host select
    persists a sticky selection consumed by the observe/interactive
    verbs; new useHosts / useFleet hooks.
  • View remote workspace — workspace observability tabs gain
    --host <id> scope; registry + bearer fans out per-host reads.
    Read-only.
  • Cross-host queue routing — rig queue create / handoff / handoff-and-complete gain --host <id> + host-qualified
    destination form member@rig@<host>. Explicit-only routing.
    At-least-once + idempotent via deterministic successor id;
    handoff creates successor FIRST + closes local SECOND; retries
    absorb on primary key. Failure honesty per host outcome.
  • Cross-host agent coordination — rig send + rig capture
    gain an http transport branch reaching the remote daemon's
    existing /api/transport/send|capture routes CLI-direct;
    rig transcript + rig broadcast gain their first cross-host
    affordance the same way. The agent@rig@host target form is
    CLI-edge sugar for session-target verbs. Byte-verbatim ssh
    behavior preserved for ssh-registered hosts; explicit --host

    target sugar > selection; send --verify over http prints
    the REMOTE route's verdict verbatim.

  • Fleet-attention altitude — fleet-wide attention rollup via
    FleetBand + FleetPage; per-host status + drill-down.

Factory

  • The workflow-to-rig binding layer — bind a workflow to a rig
    at instantiation via --rig; roles resolve to seats by
    capability; capable-seat resolution honors managed-only,
    harness-pin-aware runtime match, least pending backlog,
    deterministic tiebreak; resolve-once, record-in-the-packet;
    roles bind to the stable seat coordinate {pod}-{member}@{rig}
    (agent handover behind the seat never strands the workflow).
  • The self-driving factory starter (factory-rsi) — new
    rig up factory-rsi starter; new factory-rsi builtin
    workflow with a plan → implement → qa_check → review → release inner loop sanctioned by loop_guards.max_hops;
    dogfood decoupled + running out-of-band against the shipped
    product with its findings feeding the next plan (the RSI edge,
    ungated in the MVP — refined in a later release); publish stays
    a human act via release_signoff gate.
  • The member-exists advisory + cross-rig wrapping —
    mis-routed workflow destinations caught loudly at instantiate;
    cross-rig wrapping workflows travel via the cross-host queue
    routing path.

Runtime + terminal + read-path

  • Pi agent runtime adapter — a new first-class runtime
    joining Claude/Codex; participates in all workflow / role /
    queue / send / capture surfaces exactly like the shipped
    runtimes.
  • Terminal provider first-class treatment — terminal provider
    first-class treatment across the terminal launcher,
    send/capture/broadcast, and the new openrig-cmux skill's
    --provider cmux seam with best-effort fallback.
  • Daemon read-path hardening — SSE stream backpressure
    guards, projection caches, additive indices for read-side query
    performance. No functional behavior change; the same reads
    return the same results, faster.

New bundled skills

  • openrig-herdr — the full rig terminal open/views/status
    model (verbs, view grammar, honest-partial reading, read-only
    policy, terminal-views.yaml schema). AGPL clean-room rail — no
    herdr source text vendored.
  • openrig-cmux — the provider-agnostic vs cmux-specific
    delta with shipped-integration open-or-focus rule.

Both ship canonical + bundled openrig-core plugin, byte-parity
guarded.

Migrations

Additive only:

  • 049_workflow_instance_version — optimistic concurrency on
    workflow_instances.
  • 050_workflow_spec_json — full parsed spec cached on
    workflow_specs; legacy rows self-heal on next read-through.
  • 051_workflow_resume — resume_count + hops_baseline on
    workflow_instances.
  • 052_workflow_instance_bound_rig — nullable bound_rig TEXT
    on workflow_instances.
  • 053_sessions_node_id_index — additive index.
  • 054_queue_transitions_archive — archive table for read-side
    query performance.

Existing v0.4.4 databases upgrade by running rig daemon start on
the new daemon.

Known Follow-ons

  • Save-verb did not land in 0.4.6; rides 0.4.7.
  • Twin fixture backfill for the new workflow + multi-host UI
    routes routed as a non-blocking 0.4.7 hygiene fast-follow; UI
    acceptance for the cut carried by per-cut real screenshots + the
    two-host integration proof.
  • Continuous out-of-band dogfood runtime — the factory-rsi
    RSI edge ships ungated in the MVP; the continuous mechanism is
    refined in a later release.
  • Carry-forwards from 0.4.4: openrig-user bundled plugin
    stale-copy sweep, whoami --all-hosts silent host filter,
    managed-stop SIGTERM-escalation brittleness, post-cutover
    reconcile-settle-visibility signal on /healthz.
  • iOS Safari (Living Notes composer verification) —
    carry-forward from 0.4.4.
  • Wider mission-template prose sweep — post-cut sequencing.

Full technical detail lives in
CHANGELOG.md.