feat(terminal): select installed shell for new sessions - #5268

Open
eranknafo2001 wants to merge 3 commits into
pingdotgg:mainfrom
eranknafo2001:t3code/support-bash-fish-shells-1
Open

feat(terminal): select installed shell for new sessions#5268
eranknafo2001 wants to merge 3 commits into
pingdotgg:mainfrom
eranknafo2001:t3code/support-bash-fish-shells-1

Conversation

@eranknafo2001

@eranknafo2001eranknafo2001 commented Aug 3, 2026

Copy link
Copy Markdown

Problem

The integrated terminal follows the environment shell without giving users an explicit choice, and the settings UI cannot tell which supported shells are actually installed on the connected machine.

Changes

  • add an environment-scoped terminal shell setting with System default, Zsh, Bash, and Fish
  • probe the connected environment's PATH for installed shells and publish those capabilities in server config
  • filter the settings dropdown to installed shells while preserving an unavailable prior selection as disabled
  • resolve the setting at spawn time so new and restarted terminals use the latest choice across web, desktop, and mobile clients
  • retain fallback shell behavior when the selected executable cannot start

Validation

  • 133 focused contract, terminal manager, settings, and client-runtime tests
  • focused WebSocket handshake integration test
  • contracts, client-runtime, server, and web typechecks
  • targeted lint, formatting, and diff checks

This is a draft because the settings UI has not yet received a manual browser pass or screenshots.

Implemented with GPT-5.6 Codex in T3 Code through the Codex harness.

Note

Add terminal shell selection to settings with per-platform shell discovery

  • Adds a terminalShell preference to ServerSettings and ServerSettingsPatch with forward-compatible decoding that defaults to "system".
  • Extends TerminalManager with resolveAvailableShells, which probes installed shells (including fish) and returns the available ones.
  • Includes availableTerminalShells in the serverGetConfig RPC response so the client knows which shells are installed.
  • Adds a Terminal Shell selector to the General settings panel in SettingsPanels.tsx, showing only installed shells and marking unavailable selections.
  • Adds terminal shell as a searchable settings item routing to /settings/general.

Macroscope summarized be9a495.


Note

Medium Risk
Changes PTY spawn behavior and server config RPC; mistakes could break terminals or misreport installed shells, though existing fallback spawn logic is retained.

Overview
Adds an environment-scoped terminal shell preference (system, zsh, bash, fish) and wires it through contracts, server spawn logic, and the web Settings → General UI.

Server:TerminalManager reads terminalShell from server settings when opening or restarting PTYs (with fallback to the system shell if settings read fails). It exposes resolveAvailableShells() by probing PATH for installed shells; fish is included in spawn fallbacks. serverGetConfig returns availableTerminalShells alongside editors, with both discoveries sharing a renamed 5s timeout helper so config does not block indefinitely.

Web: General settings shows a shell selector built from installed shells; a previously selected shell that is no longer installed stays visible but disabled. Reset/search/dirty-state handling and user docs for the terminal setting are included.

Reviewed by Cursor Bugbot for commit be9a495. Bugbot is set up for automated code reviews on this repo. Configure here.

@coderabbitai

coderabbitaiBot commented Aug 3, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: b611925d-d8ec-4515-b558-1931d8267d0b

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Aug 3, 2026

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

One convention finding: a renamed helper keeps a back-compat alias instead of updating its only consumer.

Posted via Macroscope — Effect Service Conventions

Comment threadapps/server/src/ws.ts Outdated
@eranknafo2001
eranknafo2001 marked this pull request as ready for review August 12, 2026 23:10
Comment threadpackages/contracts/src/settings.ts

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Want fixes drafted automatically? Bugbot Autofix can create code changes for findings. A team admin can enable Autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 2cd84f9aed032118c55780b445687738fcc2c4a4. Configure here.

Comment threadapps/web/src/components/settings/SettingsPanels.tsx
@macroscopeapp

macroscopeappBot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new user-facing feature for selecting terminal shells, with changes spanning UI, server-side configuration, and runtime terminal spawning behavior. New features that modify how terminals are opened warrant human review.

You can customize Macroscope's approvability policy. Learn more.

@eranknafo2001
eranknafo2001force-pushed the t3code/support-bash-fish-shells-1 branch from 2cd84f9 to f56eac5CompareAugust 12, 2026 23:17
Eran Knafo added 3 commits August 13, 2026 02:20
- Add environment-level shell preferences for system default, Zsh, Bash, and Fish
- Apply the setting to new and restarted terminals with fallback resolution
- Expose the option in General settings and document terminal behavior
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@eranknafo2001
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

feat(terminal): select installed shell for new sessions - #5268

Open
eranknafo2001 wants to merge 3 commits into
pingdotgg:mainfrom
eranknafo2001:t3code/support-bash-fish-shells-1
Open

feat(terminal): select installed shell for new sessions#5268
eranknafo2001 wants to merge 3 commits into
pingdotgg:mainfrom
eranknafo2001:t3code/support-bash-fish-shells-1

Conversation

@eranknafo2001

@eranknafo2001eranknafo2001 commented Aug 3, 2026

Copy link
Copy Markdown

Problem

The integrated terminal follows the environment shell without giving users an explicit choice, and the settings UI cannot tell which supported shells are actually installed on the connected machine.

Changes

  • add an environment-scoped terminal shell setting with System default, Zsh, Bash, and Fish
  • probe the connected environment's PATH for installed shells and publish those capabilities in server config
  • filter the settings dropdown to installed shells while preserving an unavailable prior selection as disabled
  • resolve the setting at spawn time so new and restarted terminals use the latest choice across web, desktop, and mobile clients
  • retain fallback shell behavior when the selected executable cannot start

Validation

  • 133 focused contract, terminal manager, settings, and client-runtime tests
  • focused WebSocket handshake integration test
  • contracts, client-runtime, server, and web typechecks
  • targeted lint, formatting, and diff checks

This is a draft because the settings UI has not yet received a manual browser pass or screenshots.

Implemented with GPT-5.6 Codex in T3 Code through the Codex harness.

Note

Add terminal shell selection to settings with per-platform shell discovery

  • Adds a terminalShell preference to ServerSettings and ServerSettingsPatch with forward-compatible decoding that defaults to "system".
  • Extends TerminalManager with resolveAvailableShells, which probes installed shells (including fish) and returns the available ones.
  • Includes availableTerminalShells in the serverGetConfig RPC response so the client knows which shells are installed.
  • Adds a Terminal Shell selector to the General settings panel in SettingsPanels.tsx, showing only installed shells and marking unavailable selections.
  • Adds terminal shell as a searchable settings item routing to /settings/general.

Macroscope summarized be9a495.


Note

Medium Risk
Changes PTY spawn behavior and server config RPC; mistakes could break terminals or misreport installed shells, though existing fallback spawn logic is retained.

Overview
Adds an environment-scoped terminal shell preference (system, zsh, bash, fish) and wires it through contracts, server spawn logic, and the web Settings → General UI.

Server:TerminalManager reads terminalShell from server settings when opening or restarting PTYs (with fallback to the system shell if settings read fails). It exposes resolveAvailableShells() by probing PATH for installed shells; fish is included in spawn fallbacks. serverGetConfig returns availableTerminalShells alongside editors, with both discoveries sharing a renamed 5s timeout helper so config does not block indefinitely.

Web: General settings shows a shell selector built from installed shells; a previously selected shell that is no longer installed stays visible but disabled. Reset/search/dirty-state handling and user docs for the terminal setting are included.

Reviewed by Cursor Bugbot for commit be9a495. Bugbot is set up for automated code reviews on this repo. Configure here.

@coderabbitai

coderabbitaiBot commented Aug 3, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: b611925d-d8ec-4515-b558-1931d8267d0b

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Aug 3, 2026

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

One convention finding: a renamed helper keeps a back-compat alias instead of updating its only consumer.

Posted via Macroscope — Effect Service Conventions

Comment threadapps/server/src/ws.ts Outdated
@eranknafo2001
eranknafo2001 marked this pull request as ready for review August 12, 2026 23:10
Comment threadpackages/contracts/src/settings.ts

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Want fixes drafted automatically? Bugbot Autofix can create code changes for findings. A team admin can enable Autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 2cd84f9aed032118c55780b445687738fcc2c4a4. Configure here.

Comment threadapps/web/src/components/settings/SettingsPanels.tsx
@macroscopeapp

macroscopeappBot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new user-facing feature for selecting terminal shells, with changes spanning UI, server-side configuration, and runtime terminal spawning behavior. New features that modify how terminals are opened warrant human review.

You can customize Macroscope's approvability policy. Learn more.

@eranknafo2001
eranknafo2001force-pushed the t3code/support-bash-fish-shells-1 branch from 2cd84f9 to f56eac5CompareAugust 12, 2026 23:17
Eran Knafo added 3 commits August 13, 2026 02:20
- Add environment-level shell preferences for system default, Zsh, Bash, and Fish
- Apply the setting to new and restarted terminals with fallback resolution
- Expose the option in General settings and document terminal behavior
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@eranknafo2001
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(terminal): select installed shell for new sessions - #5268

Open
eranknafo2001 wants to merge 3 commits into
pingdotgg:mainfrom
eranknafo2001:t3code/support-bash-fish-shells-1
Open

feat(terminal): select installed shell for new sessions#5268
eranknafo2001 wants to merge 3 commits into
pingdotgg:mainfrom
eranknafo2001:t3code/support-bash-fish-shells-1

Conversation

@eranknafo2001

@eranknafo2001eranknafo2001 commented Aug 3, 2026

Copy link
Copy Markdown

Problem

The integrated terminal follows the environment shell without giving users an explicit choice, and the settings UI cannot tell which supported shells are actually installed on the connected machine.

Changes

  • add an environment-scoped terminal shell setting with System default, Zsh, Bash, and Fish
  • probe the connected environment's PATH for installed shells and publish those capabilities in server config
  • filter the settings dropdown to installed shells while preserving an unavailable prior selection as disabled
  • resolve the setting at spawn time so new and restarted terminals use the latest choice across web, desktop, and mobile clients
  • retain fallback shell behavior when the selected executable cannot start

Validation

  • 133 focused contract, terminal manager, settings, and client-runtime tests
  • focused WebSocket handshake integration test
  • contracts, client-runtime, server, and web typechecks
  • targeted lint, formatting, and diff checks

This is a draft because the settings UI has not yet received a manual browser pass or screenshots.

Implemented with GPT-5.6 Codex in T3 Code through the Codex harness.

Note

Add terminal shell selection to settings with per-platform shell discovery

  • Adds a terminalShell preference to ServerSettings and ServerSettingsPatch with forward-compatible decoding that defaults to "system".
  • Extends TerminalManager with resolveAvailableShells, which probes installed shells (including fish) and returns the available ones.
  • Includes availableTerminalShells in the serverGetConfig RPC response so the client knows which shells are installed.
  • Adds a Terminal Shell selector to the General settings panel in SettingsPanels.tsx, showing only installed shells and marking unavailable selections.
  • Adds terminal shell as a searchable settings item routing to /settings/general.

Macroscope summarized be9a495.


Note

Medium Risk
Changes PTY spawn behavior and server config RPC; mistakes could break terminals or misreport installed shells, though existing fallback spawn logic is retained.

Overview
Adds an environment-scoped terminal shell preference (system, zsh, bash, fish) and wires it through contracts, server spawn logic, and the web Settings → General UI.

Server:TerminalManager reads terminalShell from server settings when opening or restarting PTYs (with fallback to the system shell if settings read fails). It exposes resolveAvailableShells() by probing PATH for installed shells; fish is included in spawn fallbacks. serverGetConfig returns availableTerminalShells alongside editors, with both discoveries sharing a renamed 5s timeout helper so config does not block indefinitely.

Web: General settings shows a shell selector built from installed shells; a previously selected shell that is no longer installed stays visible but disabled. Reset/search/dirty-state handling and user docs for the terminal setting are included.

Reviewed by Cursor Bugbot for commit be9a495. Bugbot is set up for automated code reviews on this repo. Configure here.

@coderabbitai

coderabbitaiBot commented Aug 3, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: b611925d-d8ec-4515-b558-1931d8267d0b

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Aug 3, 2026

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

One convention finding: a renamed helper keeps a back-compat alias instead of updating its only consumer.

Posted via Macroscope — Effect Service Conventions

Comment threadapps/server/src/ws.ts Outdated
@eranknafo2001
eranknafo2001 marked this pull request as ready for review August 12, 2026 23:10
Comment threadpackages/contracts/src/settings.ts

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Want fixes drafted automatically? Bugbot Autofix can create code changes for findings. A team admin can enable Autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 2cd84f9aed032118c55780b445687738fcc2c4a4. Configure here.

Comment threadapps/web/src/components/settings/SettingsPanels.tsx
@macroscopeapp

macroscopeappBot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new user-facing feature for selecting terminal shells, with changes spanning UI, server-side configuration, and runtime terminal spawning behavior. New features that modify how terminals are opened warrant human review.

You can customize Macroscope's approvability policy. Learn more.

@eranknafo2001
eranknafo2001force-pushed the t3code/support-bash-fish-shells-1 branch from 2cd84f9 to f56eac5CompareAugust 12, 2026 23:17
Eran Knafo added 3 commits August 13, 2026 02:20
- Add environment-level shell preferences for system default, Zsh, Bash, and Fish
- Apply the setting to new and restarted terminals with fallback resolution
- Expose the option in General settings and document terminal behavior
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@eranknafo2001
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(terminal): select installed shell for new sessions - #5268

Open
eranknafo2001 wants to merge 3 commits into
pingdotgg:mainfrom
eranknafo2001:t3code/support-bash-fish-shells-1
Open

feat(terminal): select installed shell for new sessions#5268
eranknafo2001 wants to merge 3 commits into
pingdotgg:mainfrom
eranknafo2001:t3code/support-bash-fish-shells-1

Conversation

@eranknafo2001

@eranknafo2001eranknafo2001 commented Aug 3, 2026

Copy link
Copy Markdown

Problem

The integrated terminal follows the environment shell without giving users an explicit choice, and the settings UI cannot tell which supported shells are actually installed on the connected machine.

Changes

  • add an environment-scoped terminal shell setting with System default, Zsh, Bash, and Fish
  • probe the connected environment's PATH for installed shells and publish those capabilities in server config
  • filter the settings dropdown to installed shells while preserving an unavailable prior selection as disabled
  • resolve the setting at spawn time so new and restarted terminals use the latest choice across web, desktop, and mobile clients
  • retain fallback shell behavior when the selected executable cannot start

Validation

  • 133 focused contract, terminal manager, settings, and client-runtime tests
  • focused WebSocket handshake integration test
  • contracts, client-runtime, server, and web typechecks
  • targeted lint, formatting, and diff checks

This is a draft because the settings UI has not yet received a manual browser pass or screenshots.

Implemented with GPT-5.6 Codex in T3 Code through the Codex harness.

Note

Add terminal shell selection to settings with per-platform shell discovery

  • Adds a terminalShell preference to ServerSettings and ServerSettingsPatch with forward-compatible decoding that defaults to "system".
  • Extends TerminalManager with resolveAvailableShells, which probes installed shells (including fish) and returns the available ones.
  • Includes availableTerminalShells in the serverGetConfig RPC response so the client knows which shells are installed.
  • Adds a Terminal Shell selector to the General settings panel in SettingsPanels.tsx, showing only installed shells and marking unavailable selections.
  • Adds terminal shell as a searchable settings item routing to /settings/general.

Macroscope summarized be9a495.


Note

Medium Risk
Changes PTY spawn behavior and server config RPC; mistakes could break terminals or misreport installed shells, though existing fallback spawn logic is retained.

Overview
Adds an environment-scoped terminal shell preference (system, zsh, bash, fish) and wires it through contracts, server spawn logic, and the web Settings → General UI.

Server:TerminalManager reads terminalShell from server settings when opening or restarting PTYs (with fallback to the system shell if settings read fails). It exposes resolveAvailableShells() by probing PATH for installed shells; fish is included in spawn fallbacks. serverGetConfig returns availableTerminalShells alongside editors, with both discoveries sharing a renamed 5s timeout helper so config does not block indefinitely.

Web: General settings shows a shell selector built from installed shells; a previously selected shell that is no longer installed stays visible but disabled. Reset/search/dirty-state handling and user docs for the terminal setting are included.

Reviewed by Cursor Bugbot for commit be9a495. Bugbot is set up for automated code reviews on this repo. Configure here.

@coderabbitai

coderabbitaiBot commented Aug 3, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: b611925d-d8ec-4515-b558-1931d8267d0b

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Aug 3, 2026

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

One convention finding: a renamed helper keeps a back-compat alias instead of updating its only consumer.

Posted via Macroscope — Effect Service Conventions

Comment threadapps/server/src/ws.ts Outdated
@eranknafo2001
eranknafo2001 marked this pull request as ready for review August 12, 2026 23:10
Comment threadpackages/contracts/src/settings.ts

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Want fixes drafted automatically? Bugbot Autofix can create code changes for findings. A team admin can enable Autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 2cd84f9aed032118c55780b445687738fcc2c4a4. Configure here.

Comment threadapps/web/src/components/settings/SettingsPanels.tsx
@macroscopeapp

macroscopeappBot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new user-facing feature for selecting terminal shells, with changes spanning UI, server-side configuration, and runtime terminal spawning behavior. New features that modify how terminals are opened warrant human review.

You can customize Macroscope's approvability policy. Learn more.

@eranknafo2001
eranknafo2001force-pushed the t3code/support-bash-fish-shells-1 branch from 2cd84f9 to f56eac5CompareAugust 12, 2026 23:17
Eran Knafo added 3 commits August 13, 2026 02:20
- Add environment-level shell preferences for system default, Zsh, Bash, and Fish
- Apply the setting to new and restarted terminals with fallback resolution
- Expose the option in General settings and document terminal behavior
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@eranknafo2001
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

feat(terminal): select installed shell for new sessions - #5268

Open
eranknafo2001 wants to merge 3 commits into
pingdotgg:mainfrom
eranknafo2001:t3code/support-bash-fish-shells-1
Open

feat(terminal): select installed shell for new sessions#5268
eranknafo2001 wants to merge 3 commits into
pingdotgg:mainfrom
eranknafo2001:t3code/support-bash-fish-shells-1

Conversation

@eranknafo2001

@eranknafo2001eranknafo2001 commented Aug 3, 2026

Copy link
Copy Markdown

Problem

The integrated terminal follows the environment shell without giving users an explicit choice, and the settings UI cannot tell which supported shells are actually installed on the connected machine.

Changes

  • add an environment-scoped terminal shell setting with System default, Zsh, Bash, and Fish
  • probe the connected environment's PATH for installed shells and publish those capabilities in server config
  • filter the settings dropdown to installed shells while preserving an unavailable prior selection as disabled
  • resolve the setting at spawn time so new and restarted terminals use the latest choice across web, desktop, and mobile clients
  • retain fallback shell behavior when the selected executable cannot start

Validation

  • 133 focused contract, terminal manager, settings, and client-runtime tests
  • focused WebSocket handshake integration test
  • contracts, client-runtime, server, and web typechecks
  • targeted lint, formatting, and diff checks

This is a draft because the settings UI has not yet received a manual browser pass or screenshots.

Implemented with GPT-5.6 Codex in T3 Code through the Codex harness.

Note

Add terminal shell selection to settings with per-platform shell discovery

  • Adds a terminalShell preference to ServerSettings and ServerSettingsPatch with forward-compatible decoding that defaults to "system".
  • Extends TerminalManager with resolveAvailableShells, which probes installed shells (including fish) and returns the available ones.
  • Includes availableTerminalShells in the serverGetConfig RPC response so the client knows which shells are installed.
  • Adds a Terminal Shell selector to the General settings panel in SettingsPanels.tsx, showing only installed shells and marking unavailable selections.
  • Adds terminal shell as a searchable settings item routing to /settings/general.

Macroscope summarized be9a495.


Note

Medium Risk
Changes PTY spawn behavior and server config RPC; mistakes could break terminals or misreport installed shells, though existing fallback spawn logic is retained.

Overview
Adds an environment-scoped terminal shell preference (system, zsh, bash, fish) and wires it through contracts, server spawn logic, and the web Settings → General UI.

Server:TerminalManager reads terminalShell from server settings when opening or restarting PTYs (with fallback to the system shell if settings read fails). It exposes resolveAvailableShells() by probing PATH for installed shells; fish is included in spawn fallbacks. serverGetConfig returns availableTerminalShells alongside editors, with both discoveries sharing a renamed 5s timeout helper so config does not block indefinitely.

Web: General settings shows a shell selector built from installed shells; a previously selected shell that is no longer installed stays visible but disabled. Reset/search/dirty-state handling and user docs for the terminal setting are included.

Reviewed by Cursor Bugbot for commit be9a495. Bugbot is set up for automated code reviews on this repo. Configure here.

@coderabbitai

coderabbitaiBot commented Aug 3, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: b611925d-d8ec-4515-b558-1931d8267d0b

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Aug 3, 2026

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

One convention finding: a renamed helper keeps a back-compat alias instead of updating its only consumer.

Posted via Macroscope — Effect Service Conventions

Comment threadapps/server/src/ws.ts Outdated
@eranknafo2001
eranknafo2001 marked this pull request as ready for review August 12, 2026 23:10
Comment threadpackages/contracts/src/settings.ts

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Want fixes drafted automatically? Bugbot Autofix can create code changes for findings. A team admin can enable Autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 2cd84f9aed032118c55780b445687738fcc2c4a4. Configure here.

Comment threadapps/web/src/components/settings/SettingsPanels.tsx
@macroscopeapp

macroscopeappBot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new user-facing feature for selecting terminal shells, with changes spanning UI, server-side configuration, and runtime terminal spawning behavior. New features that modify how terminals are opened warrant human review.

You can customize Macroscope's approvability policy. Learn more.

@eranknafo2001
eranknafo2001force-pushed the t3code/support-bash-fish-shells-1 branch from 2cd84f9 to f56eac5CompareAugust 12, 2026 23:17
Eran Knafo added 3 commits August 13, 2026 02:20
- Add environment-level shell preferences for system default, Zsh, Bash, and Fish
- Apply the setting to new and restarted terminals with fallback resolution
- Expose the option in General settings and document terminal behavior
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@eranknafo2001
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(terminal): select installed shell for new sessions - #5268

Open
eranknafo2001 wants to merge 3 commits into
pingdotgg:mainfrom
eranknafo2001:t3code/support-bash-fish-shells-1
Open

feat(terminal): select installed shell for new sessions#5268
eranknafo2001 wants to merge 3 commits into
pingdotgg:mainfrom
eranknafo2001:t3code/support-bash-fish-shells-1

Conversation

@eranknafo2001

@eranknafo2001eranknafo2001 commented Aug 3, 2026

Copy link
Copy Markdown

Problem

The integrated terminal follows the environment shell without giving users an explicit choice, and the settings UI cannot tell which supported shells are actually installed on the connected machine.

Changes

  • add an environment-scoped terminal shell setting with System default, Zsh, Bash, and Fish
  • probe the connected environment's PATH for installed shells and publish those capabilities in server config
  • filter the settings dropdown to installed shells while preserving an unavailable prior selection as disabled
  • resolve the setting at spawn time so new and restarted terminals use the latest choice across web, desktop, and mobile clients
  • retain fallback shell behavior when the selected executable cannot start

Validation

  • 133 focused contract, terminal manager, settings, and client-runtime tests
  • focused WebSocket handshake integration test
  • contracts, client-runtime, server, and web typechecks
  • targeted lint, formatting, and diff checks

This is a draft because the settings UI has not yet received a manual browser pass or screenshots.

Implemented with GPT-5.6 Codex in T3 Code through the Codex harness.

Note

Add terminal shell selection to settings with per-platform shell discovery

  • Adds a terminalShell preference to ServerSettings and ServerSettingsPatch with forward-compatible decoding that defaults to "system".
  • Extends TerminalManager with resolveAvailableShells, which probes installed shells (including fish) and returns the available ones.
  • Includes availableTerminalShells in the serverGetConfig RPC response so the client knows which shells are installed.
  • Adds a Terminal Shell selector to the General settings panel in SettingsPanels.tsx, showing only installed shells and marking unavailable selections.
  • Adds terminal shell as a searchable settings item routing to /settings/general.

Macroscope summarized be9a495.


Note

Medium Risk
Changes PTY spawn behavior and server config RPC; mistakes could break terminals or misreport installed shells, though existing fallback spawn logic is retained.

Overview
Adds an environment-scoped terminal shell preference (system, zsh, bash, fish) and wires it through contracts, server spawn logic, and the web Settings → General UI.

Server:TerminalManager reads terminalShell from server settings when opening or restarting PTYs (with fallback to the system shell if settings read fails). It exposes resolveAvailableShells() by probing PATH for installed shells; fish is included in spawn fallbacks. serverGetConfig returns availableTerminalShells alongside editors, with both discoveries sharing a renamed 5s timeout helper so config does not block indefinitely.

Web: General settings shows a shell selector built from installed shells; a previously selected shell that is no longer installed stays visible but disabled. Reset/search/dirty-state handling and user docs for the terminal setting are included.

Reviewed by Cursor Bugbot for commit be9a495. Bugbot is set up for automated code reviews on this repo. Configure here.

@coderabbitai

coderabbitaiBot commented Aug 3, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: b611925d-d8ec-4515-b558-1931d8267d0b

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Aug 3, 2026

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

One convention finding: a renamed helper keeps a back-compat alias instead of updating its only consumer.

Posted via Macroscope — Effect Service Conventions

Comment threadapps/server/src/ws.ts Outdated
@eranknafo2001
eranknafo2001 marked this pull request as ready for review August 12, 2026 23:10
Comment threadpackages/contracts/src/settings.ts

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Want fixes drafted automatically? Bugbot Autofix can create code changes for findings. A team admin can enable Autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 2cd84f9aed032118c55780b445687738fcc2c4a4. Configure here.

Comment threadapps/web/src/components/settings/SettingsPanels.tsx
@macroscopeapp

macroscopeappBot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new user-facing feature for selecting terminal shells, with changes spanning UI, server-side configuration, and runtime terminal spawning behavior. New features that modify how terminals are opened warrant human review.

You can customize Macroscope's approvability policy. Learn more.

@eranknafo2001
eranknafo2001force-pushed the t3code/support-bash-fish-shells-1 branch from 2cd84f9 to f56eac5CompareAugust 12, 2026 23:17
Eran Knafo added 3 commits August 13, 2026 02:20
- Add environment-level shell preferences for system default, Zsh, Bash, and Fish
- Apply the setting to new and restarted terminals with fallback resolution
- Expose the option in General settings and document terminal behavior
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@eranknafo2001
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(terminal): select installed shell for new sessions - #5268

Open
eranknafo2001 wants to merge 3 commits into
pingdotgg:mainfrom
eranknafo2001:t3code/support-bash-fish-shells-1
Open

feat(terminal): select installed shell for new sessions#5268
eranknafo2001 wants to merge 3 commits into
pingdotgg:mainfrom
eranknafo2001:t3code/support-bash-fish-shells-1

Conversation

@eranknafo2001

@eranknafo2001eranknafo2001 commented Aug 3, 2026

Copy link
Copy Markdown

Problem

The integrated terminal follows the environment shell without giving users an explicit choice, and the settings UI cannot tell which supported shells are actually installed on the connected machine.

Changes

  • add an environment-scoped terminal shell setting with System default, Zsh, Bash, and Fish
  • probe the connected environment's PATH for installed shells and publish those capabilities in server config
  • filter the settings dropdown to installed shells while preserving an unavailable prior selection as disabled
  • resolve the setting at spawn time so new and restarted terminals use the latest choice across web, desktop, and mobile clients
  • retain fallback shell behavior when the selected executable cannot start

Validation

  • 133 focused contract, terminal manager, settings, and client-runtime tests
  • focused WebSocket handshake integration test
  • contracts, client-runtime, server, and web typechecks
  • targeted lint, formatting, and diff checks

This is a draft because the settings UI has not yet received a manual browser pass or screenshots.

Implemented with GPT-5.6 Codex in T3 Code through the Codex harness.

Note

Add terminal shell selection to settings with per-platform shell discovery

  • Adds a terminalShell preference to ServerSettings and ServerSettingsPatch with forward-compatible decoding that defaults to "system".
  • Extends TerminalManager with resolveAvailableShells, which probes installed shells (including fish) and returns the available ones.
  • Includes availableTerminalShells in the serverGetConfig RPC response so the client knows which shells are installed.
  • Adds a Terminal Shell selector to the General settings panel in SettingsPanels.tsx, showing only installed shells and marking unavailable selections.
  • Adds terminal shell as a searchable settings item routing to /settings/general.

Macroscope summarized be9a495.


Note

Medium Risk
Changes PTY spawn behavior and server config RPC; mistakes could break terminals or misreport installed shells, though existing fallback spawn logic is retained.

Overview
Adds an environment-scoped terminal shell preference (system, zsh, bash, fish) and wires it through contracts, server spawn logic, and the web Settings → General UI.

Server:TerminalManager reads terminalShell from server settings when opening or restarting PTYs (with fallback to the system shell if settings read fails). It exposes resolveAvailableShells() by probing PATH for installed shells; fish is included in spawn fallbacks. serverGetConfig returns availableTerminalShells alongside editors, with both discoveries sharing a renamed 5s timeout helper so config does not block indefinitely.

Web: General settings shows a shell selector built from installed shells; a previously selected shell that is no longer installed stays visible but disabled. Reset/search/dirty-state handling and user docs for the terminal setting are included.

Reviewed by Cursor Bugbot for commit be9a495. Bugbot is set up for automated code reviews on this repo. Configure here.

@coderabbitai

coderabbitaiBot commented Aug 3, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: b611925d-d8ec-4515-b558-1931d8267d0b

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Aug 3, 2026

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

One convention finding: a renamed helper keeps a back-compat alias instead of updating its only consumer.

Posted via Macroscope — Effect Service Conventions

Comment threadapps/server/src/ws.ts Outdated
@eranknafo2001
eranknafo2001 marked this pull request as ready for review August 12, 2026 23:10
Comment threadpackages/contracts/src/settings.ts

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Want fixes drafted automatically? Bugbot Autofix can create code changes for findings. A team admin can enable Autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 2cd84f9aed032118c55780b445687738fcc2c4a4. Configure here.

Comment threadapps/web/src/components/settings/SettingsPanels.tsx
@macroscopeapp

macroscopeappBot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new user-facing feature for selecting terminal shells, with changes spanning UI, server-side configuration, and runtime terminal spawning behavior. New features that modify how terminals are opened warrant human review.

You can customize Macroscope's approvability policy. Learn more.

@eranknafo2001
eranknafo2001force-pushed the t3code/support-bash-fish-shells-1 branch from 2cd84f9 to f56eac5CompareAugust 12, 2026 23:17
Eran Knafo added 3 commits August 13, 2026 02:20
- Add environment-level shell preferences for system default, Zsh, Bash, and Fish
- Apply the setting to new and restarted terminals with fallback resolution
- Expose the option in General settings and document terminal behavior
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@eranknafo2001
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

feat(terminal): select installed shell for new sessions - #5268

Open
eranknafo2001 wants to merge 3 commits into
pingdotgg:mainfrom
eranknafo2001:t3code/support-bash-fish-shells-1
Open

feat(terminal): select installed shell for new sessions#5268
eranknafo2001 wants to merge 3 commits into
pingdotgg:mainfrom
eranknafo2001:t3code/support-bash-fish-shells-1

Conversation

@eranknafo2001

@eranknafo2001eranknafo2001 commented Aug 3, 2026

Copy link
Copy Markdown

Problem

The integrated terminal follows the environment shell without giving users an explicit choice, and the settings UI cannot tell which supported shells are actually installed on the connected machine.

Changes

  • add an environment-scoped terminal shell setting with System default, Zsh, Bash, and Fish
  • probe the connected environment's PATH for installed shells and publish those capabilities in server config
  • filter the settings dropdown to installed shells while preserving an unavailable prior selection as disabled
  • resolve the setting at spawn time so new and restarted terminals use the latest choice across web, desktop, and mobile clients
  • retain fallback shell behavior when the selected executable cannot start

Validation

  • 133 focused contract, terminal manager, settings, and client-runtime tests
  • focused WebSocket handshake integration test
  • contracts, client-runtime, server, and web typechecks
  • targeted lint, formatting, and diff checks

This is a draft because the settings UI has not yet received a manual browser pass or screenshots.

Implemented with GPT-5.6 Codex in T3 Code through the Codex harness.

Note

Add terminal shell selection to settings with per-platform shell discovery

  • Adds a terminalShell preference to ServerSettings and ServerSettingsPatch with forward-compatible decoding that defaults to "system".
  • Extends TerminalManager with resolveAvailableShells, which probes installed shells (including fish) and returns the available ones.
  • Includes availableTerminalShells in the serverGetConfig RPC response so the client knows which shells are installed.
  • Adds a Terminal Shell selector to the General settings panel in SettingsPanels.tsx, showing only installed shells and marking unavailable selections.
  • Adds terminal shell as a searchable settings item routing to /settings/general.

Macroscope summarized be9a495.


Note

Medium Risk
Changes PTY spawn behavior and server config RPC; mistakes could break terminals or misreport installed shells, though existing fallback spawn logic is retained.

Overview
Adds an environment-scoped terminal shell preference (system, zsh, bash, fish) and wires it through contracts, server spawn logic, and the web Settings → General UI.

Server:TerminalManager reads terminalShell from server settings when opening or restarting PTYs (with fallback to the system shell if settings read fails). It exposes resolveAvailableShells() by probing PATH for installed shells; fish is included in spawn fallbacks. serverGetConfig returns availableTerminalShells alongside editors, with both discoveries sharing a renamed 5s timeout helper so config does not block indefinitely.

Web: General settings shows a shell selector built from installed shells; a previously selected shell that is no longer installed stays visible but disabled. Reset/search/dirty-state handling and user docs for the terminal setting are included.

Reviewed by Cursor Bugbot for commit be9a495. Bugbot is set up for automated code reviews on this repo. Configure here.

@coderabbitai

coderabbitaiBot commented Aug 3, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: b611925d-d8ec-4515-b558-1931d8267d0b

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Aug 3, 2026

@macroscopeappmacroscopeappBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

One convention finding: a renamed helper keeps a back-compat alias instead of updating its only consumer.

Posted via Macroscope — Effect Service Conventions

Comment threadapps/server/src/ws.ts Outdated
@eranknafo2001
eranknafo2001 marked this pull request as ready for review August 12, 2026 23:10
Comment threadpackages/contracts/src/settings.ts

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Want fixes drafted automatically? Bugbot Autofix can create code changes for findings. A team admin can enable Autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 2cd84f9aed032118c55780b445687738fcc2c4a4. Configure here.

Comment threadapps/web/src/components/settings/SettingsPanels.tsx
@macroscopeapp

macroscopeappBot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new user-facing feature for selecting terminal shells, with changes spanning UI, server-side configuration, and runtime terminal spawning behavior. New features that modify how terminals are opened warrant human review.

You can customize Macroscope's approvability policy. Learn more.

@eranknafo2001
eranknafo2001force-pushed the t3code/support-bash-fish-shells-1 branch from 2cd84f9 to f56eac5CompareAugust 12, 2026 23:17
Eran Knafo added 3 commits August 13, 2026 02:20
- Add environment-level shell preferences for system default, Zsh, Bash, and Fish
- Apply the setting to new and restarted terminals with fallback resolution
- Expose the option in General settings and document terminal behavior
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L100-499 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@eranknafo2001