Skip to content

Run Skywalker as primary with a closed director fleet - #466

Merged
TheGreatAxios merged 59 commits into
mainfrom
cl-orchestrator-play
Aug 21, 2026
Merged

Run Skywalker as primary with a closed director fleet#466
TheGreatAxios merged 59 commits into
mainfrom
cl-orchestrator-play

Conversation

@TheGreatAxios

@TheGreatAxios TheGreatAxios commented Aug 10, 2026

Copy link
Copy Markdown
Collaborator

Summary

The primary session is always orchestrator. Its identity is Skywalker: product write tools stay off the primary, and it chains task(agent=…) for named lanes. The operator does not name a director.

  • Closed fleet of 16 director packages; task without agent or a non-general intent fails closed; task(agent=skywalker) is refused
  • Greybeard may spawn only intern, explore, and critique; nested spawn forwards that allowlist
  • Shipped directors omit writePaths; docs leaves omit run_shell; optional writePaths still gate path-keyed writes when a profile sets them
  • Workers mount use_skill and tool_search; late-connected MCP tools dispatch the same turn tool_search lists them
  • First-party corbits-skills action slashes ship by default; live Task rows replace standing fleet-board chrome
  • Eval runners require --provider / --model so local settings are not the implicit target
  • Style skill no longer refuses non-git folders; capability eval workdirs get a hermetic fixture commit

Verification

  • bun run typecheck, bun run build, and bun run test pass
  • CLI dogfood with xai/thegreataxios / grok-composer-2.5-fast (explore, critique, greybeard spawn fence, parallel explore+neckbeard, research/plan/testsmith fleet)

Fixes CL-5814
Fixes CL-5818
Fixes CL-5817
Fixes CL-5819
Fixes CL-5820
Fixes CL-5821
Fixes CL-5822
Fixes CL-5823
Fixes CL-5824
Fixes CL-5825
Fixes CL-5826
Fixes CL-5827
Fixes CL-5829
Fixes CL-5830
Fixes CL-5838
Fixes CL-5842
Fixes CL-5843
Fixes CL-5844
Fixes CL-5845
Fixes CL-6315
Fixes CL-6538
Fixes CL-6539
Fixes CL-6540
Fixes CL-6541
Fixes CL-6542
Fixes CL-6543
Fixes CL-6544
Fixes CL-6545
Fixes CL-6546
Fixes CL-6547
Fixes CL-6549
Fixes CL-6550

Part of CL-6537
Related to CL-6316
Related to CL-5846
Related to CL-6548
Related to CL-6551
Related to CL-6552
Related to CL-6553
Related to CL-6554

@TheGreatAxios
TheGreatAxios force-pushed the cl-orchestrator-play branch 2 times, most recently from 3daf0c6 to e0c5e00 Compare August 19, 2026 05:13
Orchestrator is the only product path (CL-5814): drop the first-run mode
picker, Settings session-mode rows, and dual-mode prompt/tool branching.
Legacy sessionMode on disk still loads without error and is ignored.

Also land the Level-1 closed director registry (16 ids + resolve + intent
defaults) so leaf packages can fill in place (CL-5818).
Document the CL-5814 product break: orchestrator-only primary, legacy
sessionMode ignored, first-run picker and Settings rows gone.
Panel-owned tools no longer paint stream rows; fleet report only
announces terminal/stall transitions so the board owns live state.
Require real director prompts (not placeholders) and assert
task resolves directors and intents before the registry and
dispatch path ship full packages.
Replace placeholder registry entries with the closed sixteen
packages, project them as default profiles, and resolve named
or intent-only task dispatches from the fleet.
Skywalker is the primary system role. Leaves mount small tool allowlists
instead of deny-everything, and docs directors lock write_file/edit_file
paths at the permission gate so prompt policy is not the only fence.
PRODUCT, ARCHITECTURE, and IMPLEMENTATION now describe Skywalker,
the 16-package registry, spawn matrix, intent map, and writePaths.
Registry tests cover greybeard spawn, review envelopes, and primary stance.
Close the two dogfood gaps greybeard flagged: nested directors pass
spawn.allowlist into nested task so greybeard cannot mint implement,
and task without agent or intent fails closed instead of a generic leaf.
…rator

Wire director identity headers (agent id, modelRole, optionalSkills) into
profiles and spawn, drive leaf effort from modelRole, inject arch/runtime
into the env block, and make never-implement structural on the primary
tool surface instead of prompt-only.
… honesty

Stack agents and tasks under the transcript so fleet work sits next to the
prompt, and stop telling Skywalker that product write tools are how files
change when those tools are unmounted.
Transcript fleet notices drop per-lane done walls; chrome shows either the
board or the checklist, not both; done-only task lists collapse.
Docs directors no longer mount run_shell so writePaths cannot be
bypassed via shell. Bare allowlist names match only the workspace
root file. Remove unused taskCallIds machinery from the runtime bridge.
The write-path allowlist matched the raw subject in addition to the
resolved workspace-relative path, so a glob like docs/* could accept
docs/../src/hack.ts (the subject string starts with docs/ even though
the resolved path escapes to src/). It also fell through to pattern
matching for paths resolving outside cwd.

Resolve the subject against cwd first and hard-deny anything outside
cwd without ever matching the raw subject. Globs now match only the
workspace-relative path, and bare names still compare root-only.

Also compose DOCS_TOOLS from READ_TOOLS minus run_shell so it tracks
the read surface instead of duplicating it.

Add tests for traversal escape, outside-cwd absolute paths, and the
existing positive cases.
Bumps the vendor pin table to ad0f99e7977b3ad4f28d8cc8d446ac52a4a2d685 (2026-08-10) and pulls the verbatim @intx/types package forward. Also fixes a storage-isogit package-name typo in the pin table.
Carries the 17 locally-patched markers forward onto ad0f99e7 (startupDeliveries, ADAPTIVE_THINKING_MODELS, deps context-transforms forwarding, stream-terminal detector, abort-reason classification, getTurnsRevision, snapshot memoization, etc.). See vendor/intx-inference/PATCHES.md.
Wide terminals (>=100 cols) put live workers on a right rail so the
transcript stays readable; narrow width still stacks. Document the
layout and keep geometry/chrome tests covering dual vs stack.
Lead PRODUCT with the local multi-agent harness framing so progress
and cost visibility sit next to implement/verify/land.
Implement stops on success_criteria with a criteria report map;
explore prefers one pass then a scannable Findings map; Skywalker
scales fan-out, requires typed multi-leaf briefs, and defaults
critique after multi-file ship. Critique stays correctness-only.
Harness facts surface turn budgets and no early-stop on compaction.
Implement and critique treat sync→async signature drift as blocking;
Skywalker skips explore/critique on tiny green ships and re-dispatches
implement on blocking findings. complex-jwt states the sync Response
contract; complex-stock-gate adds multi-file mutable-state coverage.
Document director API-contract / simple-path loop in Unreleased; keep the
new stock-gate case and jwt sync grader wording with the shipped packages.
Third complex eval stresses header-driven multi-file state (Idempotency-Key).
Skywalker Fetch URLs section steers primary at mounted web_fetch instead of
shell thrash on URL-read tasks.
Document the third complex capability case and Skywalker primary URL path
alongside the API-contract loop notes.
Raise the agent timeout default, require web_fetch on web-bait, and seed
hermetic skill stubs so eval workdirs stop spamming missing-skill noise.
Add complex-bugfix, complex-pagination, and complex-rename-user plus a
buggy-service fixture patterned after SWE-bench / Terminal-Bench shapes.
web_fetch/web_search were registered but only discoverable via tool_search,
so models thrashed tool_search on web-bait despite Skywalker saying they were
mounted. Put both in CATALOG_TOOL_NAMES. Harden the eval harness (20m timeout,
requireBehaviors, skill stubs) and add complex-bugfix/pagination/rename-user.
Pin public smoke runs to xai/thegreataxios + grok-4.5, load a single
Lite instance, run product exec, and capture preds.jsonl under
evals/public/results for later official Docker grading.
Sub-agent work paints as ● Task transcript rows with clock and tool
again. The standing FLEET agents board and dual-rail chrome are off so
checklist, board, and Task rows no longer restate the same fleet.
Drop DUAL_MIN_COLUMNS / RAIL_WIDTH_* and dual agents-box positioning.
Geometry always stacks; live fleet status stays on Task transcript rows.
Ctrl+C now tears down the process, primary agent, and workers in one press.
Plain corbits always opens a new session; resume / --resume open the picker.
One press stops a busy run or clears an idle draft; a second press
within two seconds exits. Keep resume opening the session picker.
Enter was wrongly labeled as steer-while-queuing-everything and Alt+Enter
as reinject. Match Pi-style soft steer at tool.boundary vs follow-up at idle.
Soft steer and follow-up must never call interrupt(); only Ctrl+C hard-stop
closes the agent and tears down in-flight task workers.
Headless exec was registering an onAuthURL callback it could never complete, so OAuth-backed MCP servers hung automation. Gate the callback on interactiveAuth: TUI keeps the browser flow; exec and other headless hosts reuse stored tokens only.
Standing plugin diagnostics were easy to miss as startup notices. Keep them as a prompt attention mark shared with mcp !\, attribute warnings per plugin, and show them in the /plugins surface. Also document the current Enter steer / Alt+Enter queue / Ctrl+C stop mid-run gestures.
Fleet board chrome and stall bang blink are intentionally off;
transcript Task rows and working chrome own that status. The
duplicate grok-responses unit test still expected summary auto
after the adapter moved to detailed.
@intx/agent snapshots dispatch names at createAgent. MCP tools arrive
later, and the post-connect reload waited for every server including
OAuth-blocked ones. tool_search listed them; invoke returned unknown
tool. Fall through to the live runner until upstream consults current
definitions.
Older result files omit the field; parse defaults from the per-name
map so the frozen baseline still loads.
Informational only until a deliberate baseline refreeze. The dispatch
case requires at least one task call plus a working route; the recall
case does not assert that compaction fired.

@TheGreatAxios TheGreatAxios left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review · Comment

Corbits Code runs Skywalker as the primary director, routes closed director dispatch, and reshapes the TUI/fleet surfaces.

Findings

  • evals/capability/behaviors.ts:228 — The fingerprint separator is an actual NUL byte (\0) in a TypeScript source file, so git diff origin/main...HEAD --stat reports evals/capability/behaviors.ts as Bin 10132 -> 10605 bytes. That hides the source diff from normal review tooling and makes the branch look like it ships binary TypeScript; could we use a textual separator such as "\u0000" or structured tuple serialization instead?
  • src/tui/geometry.test.ts:563git diff --check origin/main...HEAD fails on a new blank line at EOF. This keeps the diff from passing the repository whitespace check cleanly.

Notes

  • Setup check: ./bin/check-env passes everything except repo-local hooks config (core.hooksPath is not set to .githooks in this worktree).
  • Validation run in this review: bun run build exits 0, and bun run test exits 0.
  • Commit-message audit also needs cleanup before merge: git log origin/main..HEAD --format="%s" | awk "length > 72" returns two over-72 subjects, git log origin/main..HEAD --format="%b" | awk "length > 72" returns multiple over-72 body lines, and the body audit finds CL-* tracker references.

A NUL delimiter made git treat the metrics module as binary.
A JSON array owns the name/args boundary without a magic separator.
Shakespeare's write lock now covers the canonical docs/ trio.
Bruckheimer is limited to product docs. Skywalker stays the
primary session and cannot be spawned as a task leaf.
A tool-less turn after tools is complete only when the four-heading
envelope is present. Missing headings get one wrap-up nudge, then an
incomplete-report salvage so identical re-dispatch is blocked.

Greybeard is told to review itself and never spawn a parallel
diagnostic fleet.
Vanilla installs no longer need a sibling agents tree for default skills.

Recipes spawn closed directors; convention skills stay use_skill-only.
The one-shot smoke defaulted to a personal prepaid provider profile.
Callers now pass --provider and --model so local eval accounts stay off
the repo.
Local settings must not pick the model. Capability eval and SWE dry-run
now require --provider/--model the same as a real SWE run.
Required style skill told models to refuse if cwd had no .git. Eval fixtures are tmp copies, so GPT stopped on simple-health. Edits are allowed without a repo; eval workdirs get an unsigned fixture commit so isolated workers have HEAD.
@TheGreatAxios TheGreatAxios changed the title Close the director fleet and make Skywalker primary Run Skywalker as primary with a closed director fleet Aug 21, 2026
Rename Unreleased to 0.2.99 with an operator-facing lead. Write tools stay off the primary.
@TheGreatAxios
TheGreatAxios merged commit 489cc00 into main Aug 21, 2026
2 checks passed
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