Skip to content

feat: add verified multi-model worker orchestration#31

Open
victurbo37-debug wants to merge 3 commits into
NateBJones-Projects:mainfrom
victurbo37-debug:codex/worker-engine-matrix
Open

feat: add verified multi-model worker orchestration#31
victurbo37-debug wants to merge 3 commits into
NateBJones-Projects:mainfrom
victurbo37-debug:codex/worker-engine-matrix

Conversation

@victurbo37-debug

Copy link
Copy Markdown

Summary

Ringer can now run verified swarms through four built-in CLI harnesses—Codex, Cursor, Claude Code, and OpenCode/OpenRouter—while keeping Codex Sol in the orchestrator seat. Cursor supplies two independently verified lanes in the same matrix, Composer and Grok, bringing the demonstrated worker set to five models without duplicating engine definitions.

Windows orchestration now has a documented WSL2 runtime boundary, Codex skill and nudge-hook installation, and Windows-safe process probing. Model choice remains explicit per task, while harness self-reports are canonicalized back to stable registry slugs so identity mismatches stay visible.

Design decisions

  • Explicit model routing: every non-default lane requires a task-level model slug; Cursor display labels map back to their canonical CLI slugs.
  • Fail-closed containment: Claude refuses to run if its OS sandbox is unavailable; OpenCode uses a Linux bubblewrap wrapper with a read-only system, isolated writable workspace, ephemeral home, cleared inherited environment, and an explicit full-access escape behind Ringer's existing two-part gate.
  • Account-backed lanes: Codex uses ChatGPT login, Claude uses the Claude Pro subscription, Cursor uses its account entitlement, and OpenCode reads the existing OpenRouter credential without embedding or logging it.
  • Portable orchestration: Codex agent installation, hooks, LF policy, demo prompting, and Windows PID handling are covered by regression tests and WSL setup guidance.

Validation

Lane Requested model Observed result
Codex gpt-5.6-sol PASS, first attempt
Cursor Composer composer-2.5-fast PASS, first attempt
Cursor Grok grok-4.5-fast-high PASS, first attempt; stream reported Cursor Grok 4.5 Medium Fast
Claude Code claude-sonnet-5 PASS, first attempt
OpenCode/OpenRouter openrouter/z-ai/glm-5.2 PASS, first attempt
  • Fresh five-lane Ringer matrix: 5/5 PASS, with every generated solution.py executed by its check.
  • Isolated Cursor Pro Grok entitlement probe: PASS on attempt 1 in 7.8s, followed by an independent artifact execution.
  • Codex demo swarm: 3/3 PASS.
  • Current focused suites: 10/10 Windows and 11/11 WSL.
  • Full supported-runtime suite: 196 tests, retaining the same 2 failures, 1 error, and 1 skip reproduced on origin/main; there are no new branch regressions. The known baseline breakages are the machine-specific external design-reference path and two stale HTML expectations.

Compound Engineering
Codex

Install the Ringer skill and hooks for Codex, keep Windows PID probes safe, document the WSL runtime boundary, and verify the real Codex demo contract.
@victurbo37-debug
victurbo37-debug marked this pull request as ready for review July 12, 2026 15:20

Copy link
Copy Markdown
Author

@justfinethanku — this PR is ready for review. The description includes the verified five-lane worker matrix, focused Windows and WSL test results, and the known origin/main baseline failures; no branch regressions were found.

@justfinethanku

Copy link
Copy Markdown
Contributor

We want this capability — more first-class engines is directly in service of what Ringer is for (routing real work to the cheapest model with a proven record), and the per-engine invocation research here (Cursor stream-JSON, Claude's sandbox-required settings payload, the bubblewrap wrapper) is genuinely valuable. But we can't merge it in this shape, for two reasons that compound: it's built against a two-week-old ringer.py (self-update, steering profiles, the scoreboard signal contract, and the registry taxonomy all landed underneath it), and it bundles ~1,100 lines across 16 files into a single take-it-or-leave-it decision. A change this broad has to be auditable piece by piece.

Please split it into small, separately reviewable PRs, each rebased onto current main. Suggested cut — one engine per PR, infrastructure separate:

  1. OpenCode Linux/WSL2 wrapper (engines/opencode-sandboxed-linux.sh + selection logic) — smallest, most self-contained. Note we recently declined expanding macOS Seatbelt read-restrictions (opencode sandbox: deny reads of credential paths (symlink + canonical forms) #15/Confine OpenCode reads to the current run task #28) as out of scope, so keep the wrapper to write-confinement plus the ephemeral-home mechanics.
  2. Cursor engine — engine block + contract tests.
  3. Claude engine — engine block + contract tests.
  4. Codex apply_patch hook extension — currently the matcher doesn't fire on the real apply_patch tool events it targets; fix plus a test that validates dispatch from the installed configuration, not just direct hook invocation.
  5. Registry entries — redone per current docs/TAXONOMY.md (sourced identities, canonical access routes; no unsourced verified claims).

House rules that will make each one merge fast, learned from this week's queue: small and scoped merges same-day; every claim backed by an executed test (the bubblewrap path currently skips everywhere it matters — it needs to actually run somewhere, or say plainly that it's untested); and authorship always stays with you — where a piece needs a mechanical maintainer fix we push to your branch and you remain the commit author.

We'll close this umbrella PR once the first split lands, or you can repurpose this branch for piece #1 — your call. Thanks for the ambition here; we'd rather have it in five auditable pieces than not have it.

@victurbo37-debug

Copy link
Copy Markdown
Author

Implemented the requested split as five focused draft PRs:

I have left #31 open until one of the split PRs lands, as requested.

GitHub Actions created runs for all five PRs, but they currently require maintainer approval because they originate from a fork.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants