A mixed fleet dispatches to every active worker (kw920)
With no build fleet pinned, every default dispatch now runs on the whole active fleet: the always-on key loop workers (loop-deepseek-direct and the other -direct workers enabled in fleet.json) plus every seat and CLI worker cyberine route reports for the current directory (claude-<seat>, codex, muse, ...). Before kw920 a machine with DeepSeek enabled and Claude or Codex seats active dispatched to DeepSeek alone, because seats and CLI workers joined a default dispatch only through CYBERINE_BUILD_FLEET. The pool is the same for every front end: cyberine run, cyberine run --compare, cyberine run --bg, cyberine research, npm run cli, the MCP orchestrate tool, the SDK and the web /api/chat/completions bridge all build it in buildDefaultAdapters().
cyberine route "<question>" # the routed fleet: the default pool adds its seat and CLI workers
cyberine run --compare "<question>" # every active worker answers once: loop workers and seats together
cyberine research "<question>" # the search step takes the loop workers, the Claude seats and muse
cyberine run --compare --fleet codex "<q>" # an explicit pin still wins: exactly the pinned workers
CYBERINE_ROUTE=off cyberine run "<question>" # the old loop-only default pool
npm run selftest:kw920-mixed-fleet-default # fake claude/codex shims and a loopback stub, no provider call- The run prints one
NOTE: Active fleet: ...line naming the seat and CLI workers it added. A pinned fleet (--fleet,--cheap,CYBERINE_BUILD_FLEET, abuild.fleetin.cyberine/config.json) adds none, andCYBERINE_ROUTE=offadds none. - A seats-only fleet behaves as before (kqvyp, kc4jj):
cyberine researchandcyberine eval bench --realstill pin the fleetcyberine routereports and print itsNOTE:line. A loop-only fleet keeps exactly its loop workers. - Spend: the daily cap (
CYBERINE_DAILY_USD_CAP) still gates every dispatch, and only the metered workers reserve against it; a seat bills plan quota, not dollars. A seat or CLI worker in a persisted quota cooldown, parked on Command Code headroom, retired, or not logged in is left out of the pool, as it is from the routed fleet. - Writers: CLI workers auto-approve. The engine paths (
--compare,--bg, research, a build fleet) already run every CLI worker of a read-only step in a disposable worktree. The single-steporchestrate()path (a plain foregroundcyberine run,npm run cli, MCP, SDK, the web bridge) now does the same for the seat and CLI workers the active fleet added, when the cwd is inside a repository with a commit, and discards what they write.
Known Limitations and Deferred Work: fan-out grows with the fleet, so one default dispatch now spends the plan quota of every active seat and CLI worker as well as the metered workers' dollars; pin --fleet or set CYBERINE_ROUTE=off to narrow it. Only seat and CLI workers are added: a key loop worker the router lists that has no always-on -direct twin (for example a *-build worker enabled in fleet.json without one) still joins only through a pin. Outside a repository, or in one with no commit, orchestrate() cannot check a worktree out, so the added CLI workers run in the caller's directory and the run prints a NOTE saying so. A worker pinned through CYBERINE_BUILD_FLEET into the single-step orchestrate() path keeps its old behaviour and runs in the caller's directory. The judge pool (routing.judges) is unchanged and resolved separately.
Independent answers from a pinned fleet — cyberine run --compare (kmrcz)
A build fleet inside a git repository always means the implement-task chain above, whatever the prompt says: the design winner is pasted into every implementer's prompt, so the second worker reads...
Blind candidate ids in the LLM and harvest judges
llm-judge (and DiffJudge's tie-break, which runs it) shows candidates as anonymous ids A, B, C in a deterministic shuffle seeded by the task id and prompt, never as the worker's agent id or in...