Skip to content

Make models.txt data only and route models from harness.md - #13

Merged
Rakvadium merged 2 commits into
mainfrom
models-map
Oct 17, 2026
Merged

Rakvadium merged 2 commits into
mainfrom
models-map

Conversation

@Rakvadium

Copy link
Copy Markdown
Owner

Why

Agents had to combine three sources before their first spawn: the 50-line rules header in models.txt, the Models table in harness.md, and a 6-sentence paragraph pasted into seven skills. Each skill also hard-coded its own fallback models, so changing the map left stale copies behind. Slugs such as grok-4.7-high-fast had to be decoded into a model and options from one example.

What changed

  • models.txt is data only. Each entry is <provider> <model> <option>=<value>, using the ids from T3's orchestrator_capabilities, or inherit. Panel roles separate entries with |. The model choices are the same as before.
  • harness.md Models section is the single routing source. It maps an entry to delegate_task (T3), Agent (Claude Code), or Task (Cursor), and has five rules: always route through T3 on the entry's provider, unroutable Claude seats stay unspawned, unroutable Cursor seats run on the session model, same-family fallback on rejection, and a missing role line stops the skill.
  • Skills use one sentence that points to harness.md, in place of the repeated paragraph. Per-skill default models are gone (arena, architect, how, why, interrogate, reflect, swarm, playbooks).
  • The ~/.cursor/rules/oddstack-models.mdc override is removed, along with the auto/inherit-parent aliases (now inherit).
  • /setup-oddstack writes the new format and reads ids from orchestrator_capabilities in T3.
  • New CI check, scripts/check-models.mjs. It parses every entry and fails when a skill reads a role the map has no line for.

Verification

  • node scripts/check-models.mjs: 17 roles parse, and 20 role reads in skills resolve. Renaming how explorer in the map makes it fail on skills/how/SKILL.md.
  • node scripts/check-skill-names.mjs passes.
  • A T3 test run of the new routing is noted in a comment below.

models.txt now holds one line per role with T3's own provider, model,
and option ids, so no harness has to decode a slug. The routing rules
that were split across models.txt, harness.md, and a paragraph pasted
into seven skills now live once in harness.md's Models section.

Drop the per-skill fallback models and the unused
~/.cursor/rules/oddstack-models.mdc override. A missing role line now
stops the skill. scripts/check-models.mjs fails CI when a skill reads a
role the map has no line for.
Name the done marker file, say a shared delegate_task child runs in the
parent's checkout, merge the REPORT-END and terminal-state wait steps,
and keep the cursor workaround until the SDK fix ships rather than
dropping it after one short-path success. harness.md now says to leave
unnamed options at their defaults and to title each delegate_task.
@Rakvadium

Copy link
Copy Markdown
Owner Author

T3 test run. I launched a Claude Opus lead in this worktree (C:\wt\odium-stack\models-map, slug 27 characters) and had it spawn the arena runners panel using only models.txt and harness.md.

  • Targets. {providerInstanceId: "claudeAgent", model: "claude-opus-5-5", options: {effort: "high"}} and {providerInstanceId: "cursor", model: "grok-4.7", options: {reasoning_effort: "high", fastMode: true}}. Both match the entries exactly.
  • Results. Both children replied with the right commit. Both reached completed on their own, and the Grok child did so after a single run.
  • Fixes. The lead reported 6 unclear points, and 6ac8833 fixes them:
    • The done marker's file name.
    • Where a shared child runs.
    • The overlap between REPORT-END and a terminal state in the wait loop.
    • When the cursor workaround is retired: when the SDK fix ships, not after one success on a short path.
    • Default options.
    • The delegate_task title.

@Rakvadium
Rakvadium merged commit bab61bb into main Oct 17, 2026
1 check passed
@Rakvadium
Rakvadium deleted the models-map branch October 17, 2026 18:35
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.

1 participant