Skip to content

v1.8.6

Choose a tag to compare

@github-actions github-actions released this 28 Sep 22:22
· 85 commits to master since this release

v1.8.6 — Every TUI runs in the fleet, your API stops rejecting the browser, and files go straight to an agent

The fleet is no longer Claude Code only: OpenCode, Codex, Gemini CLI and Kimi Code can run tasks too, and models are picked with a search across every TUI. The built-in browser stops triggering CORS preflights your backend never asked for. A file or folder can be handed to an agent from the file tree.


🚀 The fleet runs every TUI

Until now, only Claude Code could run a fleet task. Now all of them can:

TUI Runs with Without supervision it can
Claude Code claude -p (as before) Asks the fleet console before editing or running commands
OpenCode opencode run --format json Edit files; commands are rejected, since nobody is there to approve them
Codex codex exec --json Edit and run commands inside the task's folder, in Codex's workspace-write sandbox (no network)
Gemini CLI gemini -o stream-json Edit files; the shell is rejected
Kimi Code kimi --prompt Everything: Kimi's non-interactive mode only runs with automatic approval
  • Tasks look the same whatever TUI runs them. Each TUI names its tools differently (write_file, run_shell_command, write…), and every one is shown as Claude Code would show it: Write(src/app.ts), Bash(cargo test).
  • The run's rules and the result's format go in front of the request for the TUIs that don't take a separate system prompt. Codex, like Claude Code, enforces the result's JSON Schema itself.
  • The result and the tokens are collected while the task runs, for the TUIs that don't emit a final event.
  • Reopening a task as a tab resumes the right session. For TUIs that choose their own session id (OpenCode, Codex), the app stores the one they report.
  • Codex, Gemini and Kimi run with the TUI's default model, since Control Code doesn't know their model lists yet.

OpenCode was checked against real runs of its CLI. Codex, Gemini and Kimi were built from their documentation and source, and haven't been run end to end yet. Tell us if one misbehaves.

🔎 Pick models with a search

With several TUIs installed there are dozens of models (OpenCode alone lists fifty). In Settings → Fleet routing, each tier's + Add opens a search across every TUI's models, grouped by TUI:

  • Type any words in any order, such as sonnet, opencode sonnet or pickle. Each word can match the TUI, the model name or its id, ignoring case and accents.
  • Each row shows the price per million tokens when it's known, and a local tag for models running on your machine.
  • Models already in the tier aren't offered again. Arrow keys move through the list, Enter adds, and Escape closes.

New task → Fixed model uses the same search. Picking a row sets the TUI and the model at once.

🌐 The browser stops tripping your CORS

With its cache disabled, the webview engine adds Cache-Control: no-cache and Pragma: no-cache to requests on its own. The proxy counted them as headers the page had set. So it sent a preflight declaring them, and a backend with strict CORS rejected it, which failed every authenticated request to your API.

A real browser adds those headers in its network layer, after the CORS check, so they never trigger a preflight. Now the embedded browser behaves the same:

  • The page tells the proxy which headers it actually set, for fetch and XHR alike, and only those count for CORS.
  • The engine's own headers still reach your server, just like in Chrome.
  • A Cache-Control your page sets on purpose still has to be allowed by your server's preflight.

If you allowed Cache-Control and Pragma in your backend's CORS just for Control Code, you can remove them.

📁 Send a file to an agent

Right-click a file or folder in the tree → Send to an agent…:

  • A list of the project's agents opens, each with a dot in its color. While the list is open, each agent's tab turns its color, so you can tell which is which.
  • Picking one types @path (relative to that agent's folder) into its input without sending it, and focuses its tab so you can write the question.
  • Paths with spaces are quoted, and files outside the agent's folder use the absolute path.

✨ Smaller things

  • Buttons and form fields now come from Control Code's UI library, for consistent focus rings, hover and disabled states across the app. In-place editors (renaming a tab or a file, the URL bar, compact search boxes) stay as they were.
  • Everything clickable that stayed native shows a pointer cursor.
  • Updated dependencies: Tauri 2.12, CodeMirror, and the UI library.