Repository navigation
feat(new-workspace): add "None" agent option that opens only the setup script - #25617
Conversation
…p script New workspaces previously required choosing an agent or a blank terminal, so a setup script that launches its own agent always ran next to an extra shell. The quick-create agent picker and Settings > Agents now offer "None (setup script only)": when setup runs, the workspace opens with just the Setup tab focused; without a setup script it falls back to a blank terminal. The default is stored as defaultTuiAgent 'blank' plus a new optional newWorkspaceSetupOnly flag, so clients and servers that only know 'blank' degrade to a blank terminal instead of rejecting an unknown value. Closes stablyai#25247
"None (setup script only)" only took effect in the new-workspace dialog. A workspace created with `orca worktree create` still opened a blank terminal first and left it selected, because the main process builds those tabs and never read the setting. The main-process tab provisioning now skips the blank terminal when the default is "None" and a setup script runs in its own tab, so Setup is the only tab. The same rule applies to CLI creates that activate the workspace, and to dialog creates the user navigated away from before they finished. A split setup or repo default tabs still get their shell. The setup-only check moved to src/shared so main and renderer share it. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…ew-workspace-setup-only
… the line limit The CLI activation path now passes providesInitialSurface for the "None" default, so it has to appear in the test that lists every caller using that option; the full test run failed without it. Merging main pushed worktree-creation-flow-execute.ts to 301 lines against the 300-line limit. Naming the background-create condition brings it back to 300 with no behavior change. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
|
This run croaked 😵 The workflow encountered an error before any progress could be reported. Please check the link below for details. |
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 Walkthrough
Priority: ➖ Normal Merge Risk: 🟡 Moderate · up to
|
…ew-workspace-setup-only Conflict: upstream removed worktree-activation-surface-caller-wiring.test.ts (stablyai#25791), which this branch had extended with two callers. Took the deletion. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…setup-only # Conflicts: # src/main/runtime/runtime-worktree-terminal-provisioning.test.ts # src/renderer/src/hooks/composer-state/composer-submit-model.ts # src/renderer/src/hooks/useComposerState.ts
There was a problem hiding this comment.
Actionable comments posted: 1
ℹ️ Review info
⚙️ Run configuration
- Configuration used: Repository UI
- Review profile: CHILL
- Plan: Advanced
- Run ID:
ccb99905-39e6-4526-8349-aa7b4fe660a8
📒 Files selected for processing (10)
src/main/runtime/runtime-store-contract.tssrc/main/runtime/runtime-worktree-terminal-provisioning.test.tssrc/main/runtime/runtime-worktree-terminal-provisioning.tssrc/renderer/src/components/NewWorkspaceComposerModal.tsxsrc/renderer/src/hooks/composer-state/composer-submit-model.tssrc/renderer/src/hooks/ipc-events/worktree-event-runtime.tssrc/renderer/src/hooks/useComposerState.tssrc/renderer/src/i18n/locales/en.jsonsrc/renderer/src/lib/worktree-creation-flow-execute.tssrc/shared/global-settings-types.ts
🚧 Files skipped from review as they are similar to previous changes (1)
- src/renderer/src/i18n/locales/en.json
Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 9 remain after this review.
…ab fails to spawn The "None" default skips the blank shell because the Setup tab will be the only surface. If that spawn fails, the workspace was left with no terminal. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
|
On the Linked Issues warning about split launch modes: keeping a shell there is intentional. A split setup needs an existing pane to split from, so "None" with split-vertical or split-horizontal opens one shell and splits the Setup script into it, which is still a single tab. Suppressing the shell only applies to new-tab mode, where the Setup tab can be the only surface. The "keeps the shell a split setup needs" test pins this. |
…setup-only # Conflicts: # src/renderer/src/components/agent/AgentCombobox.tsx # src/renderer/src/hooks/composer-state/composer-submit-model.ts # src/renderer/src/hooks/composer-state/quick-creation-execution.ts # src/renderer/src/hooks/composer-state/quick-submit-action.ts
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to GitHub limitations.
🟡 Minor · Hide setup-only selection for project-group targets. · quick-submit-action.ts:70
src/renderer/src/hooks/composer-state/quick-submit-action.ts:70
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winHide setup-only selection for project-group targets.
Project-group submission drops
setupOnly, so “None (setup script only)” behaves like “Blank Terminal” and cannot run a setup script. Do not pass the setup-only option toAgentComboboxfor project-group targets.
ℹ️ Review info
⚙️ Run configuration
- Configuration used: Repository UI
- Review profile: CHILL
- Plan: Advanced
- Run ID:
f1b6cc54-7523-4804-9787-26b940f8afb1
📒 Files selected for processing (13)
src/main/runtime/runtime-store-contract.tssrc/main/runtime/runtime-worktree-terminal-provisioning.tssrc/renderer/src/components/NewWorkspaceComposerCard.tsxsrc/renderer/src/components/agent/AgentCombobox.tsxsrc/renderer/src/components/new-workspace/NewWorkspaceComposerAgentSection.test.tsxsrc/renderer/src/components/new-workspace/NewWorkspaceComposerAgentSection.tsxsrc/renderer/src/components/new-workspace/new-workspace-composer-card-props.tssrc/renderer/src/components/settings/AgentsPane.tsxsrc/renderer/src/hooks/composer-state/composer-submit-model.tssrc/renderer/src/hooks/composer-state/quick-creation-execution.tssrc/renderer/src/hooks/composer-state/quick-submit-action.tssrc/renderer/src/i18n/locales/en.jsonsrc/renderer/src/lib/worktree-creation-flow.test.ts
🚧 Files skipped from review as they are similar to previous changes (1)
- src/renderer/src/i18n/locales/en.json
Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 9 remain after this review.
nwparker
left a comment
There was a problem hiding this comment.
Reviewed adversarially and took over the follow-up. Fixed the label, integrated None with the current execution-host settings API and durable rollback, carried the composer’s one-off choice to host provisioning, and repaired the Blank Terminal default action when None is saved. Resolved the main conflict while preserving the newer host-owned settings UI.
Validation: 586 focused and neighboring tests; final RPC/durability/creation checks; typecheck; Electron production build; changed-code/design-system gate; localization checks. Hidden Electron CDP confirmed the rendered None label, saved default, Setup-only creation, skipped-setup shell fallback, and explicit Blank Terminal override. Updated screenshots are in the PR body.
No remaining blocker found in the reviewed code. Live SSH/Linux/Windows were not exercised locally; required CI remains the merge gate.
There was a problem hiding this comment.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to GitHub limitations.
🟠 Major · Propagate the host-resolved initial-surface decision to… · worktree-creation-flow-execute.ts:174
src/renderer/src/lib/worktree-creation-flow-execute.ts:174
🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy liftPropagate the host-resolved initial-surface decision to both renderer paths.
The host resolves setup-only using the explicit choice or saved default, and only skips the shell in
new-tabmode. The create path derives the decision frompreparedRequest.setupOnlyandresult.setup, while the activation-event path uses the receiving renderer’s settings. These inputs can differ from the host’s resolved decision.A missing or older
setupOnlyrequest can make the host apply its saved None default while the renderer does not setprovidesInitialSurface; activation then proceeds toensureWorktreeHasInitialTerminaland can seed an extra shell. A different launch mode can also makecallerProvidesSurfacesuppress or retain a shell incorrectly. Normal split provisioning does not return setup because it creates the shell and split itself, so use the host’s resolved decision rather than treating every returned setup as setup-only.Carry that resolved decision in the create result and activation event, then pass it to
providesInitialSurfaceandcallerProvidesSurface.
ℹ️ Review info
⚙️ Run configuration
- Configuration used: Repository UI
- Review profile: CHILL
- Plan: Advanced
- Run ID:
490e832b-f09e-44ad-9c43-a5644e9f0791
📒 Files selected for processing: 31
src/main/runtime/agent-launch-settings-rollback.tssrc/main/runtime/orca-runtime-activate-managed-worktree.tssrc/main/runtime/rpc/methods/worktree-create-args.tssrc/main/runtime/rpc/methods/worktree-create-setup-choice.test.tssrc/main/runtime/runtime-client-agent-launch-settings-durability.test.tssrc/main/runtime/runtime-client-agent-launch-settings.test.tssrc/main/runtime/runtime-client-settings-shape.tssrc/main/runtime/runtime-client-settings.tssrc/main/runtime/runtime-local-worktree-terminal-startup.test.tssrc/main/runtime/runtime-local-worktree-terminal-startup.tssrc/main/runtime/runtime-managed-worktree-create-types.tssrc/main/runtime/runtime-store-contract.tssrc/main/runtime/runtime-worktree-terminal-provisioning.test.tssrc/main/runtime/runtime-worktree-terminal-provisioning.tssrc/renderer/src/components/agent/AgentCombobox.test.tsxsrc/renderer/src/components/agent/AgentCombobox.tsxsrc/renderer/src/components/settings/AgentDefaultSetting.tsxsrc/renderer/src/components/settings/AgentLaunchSettingsCatalog.tsxsrc/renderer/src/hooks/composer-state/quick-creation-execution.tssrc/renderer/src/hooks/composer-state/quick-creation-request.test.tssrc/renderer/src/hooks/composer-state/quick-creation-request.tssrc/renderer/src/hooks/ipc-events/worktree-event-runtime.tssrc/renderer/src/i18n/locales/en.jsonsrc/renderer/src/lib/worktree-creation-flow-execute.tssrc/renderer/src/lib/worktree-creation-flow.test.tssrc/renderer/src/store/slices/worktrees/create/worktree-create-payload.tssrc/shared/agent-launch-settings.tssrc/shared/global-settings-types.tssrc/shared/rpc-contract/agent-launch-settings-params.tssrc/shared/rpc-contract/worktree-create-params.tssrc/shared/worktree/create-types.ts
🚧 Files skipped from review as they are similar to previous changes: 1
- src/renderer/src/i18n/locales/en.json
Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 2 remain after this review.

ELI5
Choose None when a project’s setup script already starts the tools you need. Orca opens the Setup tab without adding an extra blank terminal.
What Changed
Why
The setting keeps the existing
blankvalue and adds an optional flag, so older clients can continue reading it. The create request also uses an optional boolean, so older hosts ignore it safely. Reusing the existing setup-tab and host-settings flows preserves configured splits and default tabs, instead of building a second creation path.Linked Issue
Fixes #25247
Visual Proof
Blank Terminal with setup (existing behavior):
None with setup (new behavior; Setup is the only active tab):
Updated picker and saved default:
Testing
586 focused and neighboring tests passed, covering workspace creation/activation, composer state, host provisioning, settings, and picker behavior. Final checks also cover the RPC choice mapping and durable rollback; 36 host-settings tests pass after reproducing and fixing the older-client Blank Terminal regression.
pnpm tc,pnpm run build:electron-vite, changed-code quality (including design system), max-lines, and localization catalog/extraction checks passed.Hidden Electron on macOS, driven through Playwright CDP: saved None in Settings; confirmed the picker label; created with None and setup (one active Setup tab); skipped setup (one shell); selected Blank Terminal over a saved None default (shell plus Setup).
Remote choice propagation and older-host settings presentation were reviewed; live SSH, Linux, and Windows were not exercised locally. CI covers the platform checks.
I manually tested these changes locally
Automated tests added/updated, or explained why not below
AI Disclosure
Original contribution: Claude Fable 5.1 via Claude Code. Maintainer follow-up: Codex.
Review
Maintainer review traced local and remote creation, settings ownership/persistence, failed setup spawning, failed database writes, concurrent default changes, split setup, configured default tabs, and agent-only pickers. Fixed the settings integration, per-create host choice, and incorrect Blank Terminal default action, and legacy clients retaining the None flag after choosing Blank Terminal.
Agent skill upstream boundary
Notes
Checklist