Repository navigation
Conversation
|
There was a problem hiding this comment.
Pull request overview
Adds a new user setting to collapse pinned tabs to icon-only chips (off by default), reclaiming tab-strip width while preserving key states (rename, tooltip title, dirty indicator, accessibility naming) across all tab row kinds.
Changes:
- Introduces
pinnedTabsIconOnlyas a persisted global setting (defaultfalse) and wires it into the tab-bar runtime model. - Implements icon-only rendering for pinned tabs across terminal, browser, editor, simulator, and agent-session rows (including tooltip +
aria-labelbehavior). - Refactors tab chrome into small components and adds targeted test coverage for collapse behavior, layout re-keying, and icon selection.
Reviewed changes
Copilot reviewed 25 out of 25 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| src/shared/global-settings-types.ts | Adds pinnedTabsIconOnly to the global settings type. |
| src/shared/default-global-settings.ts | Sets default pinnedTabsIconOnly: false. |
| src/renderer/src/i18n/locales/en.json | Adds English strings/keywords for the new setting. |
| src/renderer/src/components/tab-bar/use-tab-bar-runtime-model.ts | Exposes pinnedTabsIconOnly on the tab-bar runtime model from persisted settings. |
| src/renderer/src/components/tab-bar/use-tab-bar-item-projection.ts | Re-keys tab-strip layout memoization when icon-only mode toggles. |
| src/renderer/src/components/tab-bar/TerminalTabCloseButton.tsx | Extracts terminal close button into a dedicated component. |
| src/renderer/src/components/tab-bar/TabBar.tsx | Passes pinnedTabsIconOnly into tab item projection. |
| src/renderer/src/components/tab-bar/tab-title-tooltip.test.tsx | Updates test harness to provide the new pinnedIconOnly prop. |
| src/renderer/src/components/tab-bar/tab-bar-item-surface.tsx | Threads pinnedIconOnly through all row renderers. |
| src/renderer/src/components/tab-bar/tab-bar-item-model.ts | Includes pinnedTabsIconOnly in the tab-strip layout key to force re-measure on toggle. |
| src/renderer/src/components/tab-bar/SortableTab.update-depth-probe.test.tsx | Updates test harness to provide the new pinnedIconOnly prop. |
| src/renderer/src/components/tab-bar/SortableTab.tsx | Implements icon-only pinned terminal/agent tabs with tooltip + aria-label support. |
| src/renderer/src/components/tab-bar/SortableTab.rename-shortcut.test.tsx | Updates test harness to provide the new pinnedIconOnly prop. |
| src/renderer/src/components/tab-bar/pinned-tab-icon-only.ts | Adds shared collapse predicate and shared CSS class constants. |
| src/renderer/src/components/tab-bar/pinned-tab-icon-only.test.tsx | Adds unit tests for collapse predicate, row wiring, and layout re-keying. |
| src/renderer/src/components/tab-bar/EditorFileTabLeadingIcon.tsx | Extracts editor leading icon logic and adds simulator glyph handling. |
| src/renderer/src/components/tab-bar/EditorFileTabLeadingIcon.test.tsx | Adds tests for icon precedence and simulator glyph behavior. |
| src/renderer/src/components/tab-bar/EditorFileTab.tsx | Implements icon-only pinned editor tabs, including dirty-dot behavior and accessibility naming. |
| src/renderer/src/components/tab-bar/EditorFileTab.test.tsx | Updates test harness to provide the new pinnedIconOnly prop. |
| src/renderer/src/components/tab-bar/BrowserTab.tsx | Implements icon-only pinned browser tabs with aria-label naming when collapsed. |
| src/renderer/src/components/tab-bar/BrowserTab.test.tsx | Adds coverage for collapsed pinned browser tabs’ label removal + accessible naming. |
| src/renderer/src/components/settings/GeneralPane.tsx | Adds the new toggle in Settings → General → Navigation. |
| src/renderer/src/components/settings/general-search.ts | Adds the new setting to the General/Navigation search catalog. |
| src/main/codex-accounts/service-test-harness.ts | Updates settings test harness defaults with pinnedTabsIconOnly. |
| src/main/codex-accounts/runtime-home-settings-test-fixtures.ts | Updates runtime-home settings fixtures with pinnedTabsIconOnly. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
|
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:
No actionable comments were generated in the recent review. ℹ️ Recent review info
Walkthrough
Merge Risk:
|
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (1)
src/renderer/src/i18n/locales/en.json (1)
174-180: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winUse auto-generated localization keys.
The new
settings.general...IDs do not follow the repository convention used by the surroundingauto.components...entries. Generate keys from the file path and source text, then runpnpm run sync:localization-catalog. Update the TypeScript references to the generated keys.Based on learnings: new locale strings should use SHA1(file path + source text) keys and be propagated to locale catalogs with
pnpm run sync:localization-catalog.Source: Learnings
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Team
Run ID: 330e9ac0-a336-4413-aedd-7f6b2537303b
📥 Commits
Reviewing files that changed from the base of the PR and between 02a7742 and f3409bfd6ee6bc5a8b622250876574f1da3f93c3.
📒 Files selected for processing (25)
src/main/codex-accounts/runtime-home-settings-test-fixtures.tssrc/main/codex-accounts/service-test-harness.tssrc/renderer/src/components/settings/GeneralPane.tsxsrc/renderer/src/components/settings/general-search.tssrc/renderer/src/components/tab-bar/BrowserTab.test.tsxsrc/renderer/src/components/tab-bar/BrowserTab.tsxsrc/renderer/src/components/tab-bar/EditorFileTab.test.tsxsrc/renderer/src/components/tab-bar/EditorFileTab.tsxsrc/renderer/src/components/tab-bar/EditorFileTabLeadingIcon.test.tsxsrc/renderer/src/components/tab-bar/EditorFileTabLeadingIcon.tsxsrc/renderer/src/components/tab-bar/SortableTab.rename-shortcut.test.tsxsrc/renderer/src/components/tab-bar/SortableTab.tsxsrc/renderer/src/components/tab-bar/SortableTab.update-depth-probe.test.tsxsrc/renderer/src/components/tab-bar/TabBar.tsxsrc/renderer/src/components/tab-bar/TerminalTabCloseButton.tsxsrc/renderer/src/components/tab-bar/pinned-tab-icon-only.test.tsxsrc/renderer/src/components/tab-bar/pinned-tab-icon-only.tssrc/renderer/src/components/tab-bar/tab-bar-item-model.tssrc/renderer/src/components/tab-bar/tab-bar-item-surface.tsxsrc/renderer/src/components/tab-bar/tab-title-tooltip.test.tsxsrc/renderer/src/components/tab-bar/use-tab-bar-item-projection.tssrc/renderer/src/components/tab-bar/use-tab-bar-runtime-model.tssrc/renderer/src/i18n/locales/en.jsonsrc/shared/default-global-settings.tssrc/shared/global-settings-types.ts
Included review availability: Your plan provides up to 10 included reviews per hour; 9 remain after this review.
| 'settings.general.pinnedTabsIconOnly.description', | ||
| 'Hide the title on pinned tabs so they shrink to their icon and leave more room in the tab strip.' | ||
| )} | ||
| keywords={['pinned', 'tab', 'icon', 'compact', 'space']} |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
🔎 Supported by static analysis
🏁 Script executed:
#!/bin/bash
set -e
printf '%s\n' '--- repository conventions ---'
find /tmp/coderabbit-repo-knowledge/stablyai/orca-89dc44e4 -maxdepth 2 -type f -name '*.md' -print 2>/dev/null | sort
printf '%s\n' '--- GeneralPane.tsx ---'
sed -n '130,205p' src/renderer/src/components/settings/GeneralPane.tsx
printf '%s\n' '--- SearchableSetting.tsx ---'
cat -n src/renderer/src/components/settings/SearchableSetting.tsx
printf '%s\n' '--- general-search.ts ---'
cat -n src/renderer/src/components/settings/general-search.tsRepository: stablyai/orca
Length of output: 17871
🏁 Script executed:
#!/bin/bash
set -e
printf '%s\n' '--- GeneralPane imports, keyword definitions, and section guard ---'
rg -n -C 8 'tabOrderKeywords|pinnedTabsIconOnly|getGeneralNavigationSearchEntries|matchesSettingsSearch|searchQuery' src/renderer/src/components/settings/GeneralPane.tsx
printf '%s\n' '--- settings-search contract ---'
cat -n src/renderer/src/components/settings/settings-search.ts
printf '%s\n' '--- localized keyword helpers ---'
cat -n src/renderer/src/components/settings/settings-search-keywords.tsRepository: stablyai/orca
Length of output: 17211
Pass localized aliases to SearchableSetting.
SearchableSetting filters its content with matchesSettingsSearch. A localized icon, compact, or space query can match getGeneralNavigationSearchEntries and render the Navigation section, but the switch uses only English keywords and returns null. Reuse the localized keyword list or remove the duplicate inner filter. Add a non-English regression test.
There was a problem hiding this comment.
ℹ️ No critical issues — two minor points inline worth confirming before merge.
Reviewed changes
pinnedTabsIconOnlysetting — new opt-in boolean (default off) wired throughglobal-settings-types,default-global-settings, the General settings pane, and settings search; read intouseTabBarRuntimeModeland threaded to every row kind.- Icon-only collapse —
shouldCollapsePinnedTabToIconplus theTAB_ICON_ONLY_*width/root classes applied acrossSortableTab,BrowserTab, andEditorFileTab; collapsed pinned tabs drop their label, shrink-wrap to the glyph, and get anaria-labelplus a hover tooltip. - Layout re-key —
buildTabStripLayoutKeynow includes the setting so strip overflow measurement re-runs when the toggle flips. - Refactors —
EditorFileTabLeadingIconextracted (mode → simulator → file-type glyph precedence,Smartphonefor simulator tabs) andTerminalTabCloseButtonextracted fromSortableTab. - Drive-by fix — a pinned dirty editor tab keeps its unsaved-changes dot on hover instead of blanking the slot.
- Tests — collapse predicate, five-row-kind coverage, layout-key re-key, accessible-name coverage, and leading-icon precedence tests.
DeepSeek Pro (free via Pullfrog for OSS) | 𝕏
There was a problem hiding this comment.
Actionable comments posted: 1
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Team
Run ID: ffcffb1d-0d93-4449-b473-11e03ca09793
📥 Commits
Reviewing files that changed from the base of the PR and between f3409bfd6ee6bc5a8b622250876574f1da3f93c3 and 29cc0dfadcd22fe2cf3cc58bd4b341f288fdd64f.
📒 Files selected for processing (3)
src/renderer/src/components/tab-bar/EditorFileTab.tsxsrc/renderer/src/components/tab-bar/collapsed-editor-tab-state.test.tssrc/renderer/src/components/tab-bar/collapsed-editor-tab-state.ts
Included review availability: Your plan provides up to 10 included reviews per hour; 8 remain after this review.
There was a problem hiding this comment.
✅ No new issues found — both prior inline concerns are addressed cleanly.
Reviewed changes
- Status-state recovery — collapsed pinned editor tabs now surface git status and
deleted/renamedexternal mutation through a newgetCollapsedEditorTabStatehelper: a tinted dot plus a status suffix in the tooltip andaria-label, with external mutation outranking git status to match the expanded tab's strikethrough semantics. - Double-click rename — the tab root gained an
onDoubleClickthat opens the rename input when collapsed, restoring parity withSortableTab; the pre-existing preview-promotion branch is unchanged apart from areturn. - Tests —
collapsed-editor-tab-state.test.tspins the projection for clean, modified, deleted/renamed, and dirty files; all 17 tab-bar tests pass locally.
DeepSeek Pro (free via Pullfrog for OSS) | 𝕏
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes
- Additive unsaved-changes reporting —
getCollapsedEditorTabStateno longer returns early ontabStatus, so a file that is both modified on disk and dirty in the buffer now readsREADME.md (M, unsaved)in the tooltip andaria-labelinstead of silently dropping the dirty state. External mutation still outranks git status, matching the expanded tab's strikethrough semantics. - Regression coverage —
collapsed-editor-tab-state.test.tspins both combinations (git status + unsaved, external mutation + unsaved) with exact assertions that would fail against the previous early-return logic.
The dotColor result is unchanged for every input combination — only the stateLabel/title text gains the appended unsaved segment — so the dot rendering cannot regress.
DeepSeek Pro (free via Pullfrog for OSS) | 𝕏
777a1a1 to
28a9c77
Compare
|
Note GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer. |
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes
- Favicon consolidation —
BrowserTab.tsxdropped its localBrowserTabFaviconin favor of the sharedBrowserFaviconfrom@/components/browser-favicon(already used byTabBarCreateEntryRowand the worktree-jump palette), removing ~40 lines of duplicated image/fallback/retry logic. The collapsed-modearia-labelandPin/label suppression are untouched. - Behavior parity verified — the shared component's normalized fallback and
size-3 mr-1 shrink-0 … drop-shadowclasses match the old localGlobeexactly; its stricter URL validation (http(s)/data:imageonly) mirrors the filter already applied at the source inbrowser-page-webview-navigation-handlers.ts, so no real favicon is dropped.decoding="async"/loading="lazy"/fetchPriority="low"on the<img>are the same attributes the sibling surfaces already use. - Test rename — the favicon retry test renamed its trailing local from
resetRendertoretryRender, clarifying it against the adjacent reset test; no assertion changed.
DeepSeek Pro (free via Pullfrog for OSS) | 𝕏
28a9c77 to
8d53ce5
Compare
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes
- Inlined collapse predicate —
shouldCollapsePinnedTabToIcondeleted; the three-term boolean (isPinned && pinnedIconOnly && !isEditing/!isRenaming) inlined at the three call sites (BrowserTab,EditorFileTab,SortableTab). - Consolidated width constants —
TAB_ICON_ONLY_CONTAINER_WIDTH_CLASSESandTAB_ICON_ONLY_ROOT_CLASSESmoved frompinned-tab-icon-only.tsintotab-width-rules.tsalongside the other width constants. - Hoisted translate calls — duplicate
translate()invocations inGeneralPane.tsxfor the pinned-tabs-icon-only title and description extracted into local consts. - Test cleanup — dropped the source-regex census test and the dead
shouldCollapsePinnedTabToIconunit tests; the five-row-kind fixture test and layout-key test are preserved.
DeepSeek Pro (free via Pullfrog for OSS) | 𝕏
7eb16cd to
ac3768b
Compare
There was a problem hiding this comment.
✅ No new issues found — this run is a rebase plus the #18099 conflict resolution, with no change to the collapse behavior reviewed previously.
Reviewed changes
- Rebase onto current
main— squashed to a single commit and rebased ontomain(d19be48), which had diverged since the prior review. #18099conflict resolution —BrowserTabnow hands the sharedBrowserFaviconitsloadingprop (tab.loading && !tab.loadError && !isBlankBrowserTab(tab)) and drops the localbg-sky-500/80loading dot. The condition is byte-identical to the removed dot; the favicon-to-spinner swap and blue tint are#18099's design, not this PR's, andsize-3is preserved on both so collapsed width is unaffected.- Absorbed main-side changes — the tab floor dropped
min-w-[88px]→min-w-[72px](#18871) intab-width-rules.tsand the matching tooltip-test assertion;SortableTabgained thecanSplitTerminalprop (defaultedfalseintab-bar-item-surface.tsx);en.jsonpicked up unrelated main-side strings.
The collapse predicate, collapsed-editor-tab-state.ts, double-click rename, and setting plumbing are byte-for-byte the prior-reviewed state.
DeepSeek Pro (free via Pullfrog for OSS) | 𝕏
ac3768b to
6109d75
Compare
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes
- Rebase onto current
main— the PR was squashed and rebased onto2265fce; the collapse logic,collapsed-editor-tab-state.ts,EditorFileTabLeadingIcon,TerminalTabCloseButton, and the setting plumbing are byte-identical to the previously approved state. - Dropped codex-accounts fixture edits —
service-test-harness.tsandruntime-home-settings-test-fixtures.tsno longer hand-writepinnedTabsIconOnly: false. They were refactored onmainto delegate throughcreateCodexAccountSettings→createGlobalSettingsFixture→buildDefaultSettings, which already supplies the new default, so the per-fixture edit is obsolete. Verified the fixture chain still resolves the setting. - Absorbed main-side changes — editor rename-focus refactor (
onCloseAutoFocus),terminal-tab-activity-statusstale-title handling, andminimaxEndpoint/i18n additions landed via the rebase rather than as PR-authored edits.
DeepSeek Pro (free via Pullfrog for OSS) | 𝕏
6109d75 to
a4d1f8b
Compare
a4d1f8b to
6f3c0c5
Compare
| className: cn(TAB_CONTAINER_WIDTH_CLASSES, docks && 'sticky inset-x-0 z-10'), | ||
| className: cn( | ||
| iconOnly ? TAB_ICON_ONLY_CONTAINER_WIDTH_CLASSES : TAB_CONTAINER_WIDTH_CLASSES, | ||
| docks && 'sticky inset-x-0 z-10' |
There was a problem hiding this comment.
When someone manually scrolls an overflowing tab strip away from the active tab, this sticky slot stays at the edge above the other tabs. A tab that scrolls underneath it can still be visible but cannot be clicked. The automatic reveal path leaves room for the docked tab, but wheel, arrow-button, and scrollbar scrolling do not.
There was a problem hiding this comment.
Thanks — this one is pre-existing rather than introduced here. The docking condition (isActive && !isTabDragActive) and the sticky inset-x-0 z-10 classes are unchanged from main; they come from #24010. This PR only threads iconOnly into the width choice, which is why that line shows up in the diff.
If anything the collapse narrows the problem: a docked pinned tab in icon-only mode is 25px wide instead of 180–220px, so it covers much less of the strip. I would rather leave the docking behaviour to its own change than redesign it inside this one.
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes
Reviewed the delta since the prior Pullfrog review — a rebase onto current main plus one PR-authored refactor. All previous review threads are resolved.
- Width logic moved into
useTabStripSlotProps— the hook gains an optionaliconOnlyflag and now selectsTAB_ICON_ONLY_CONTAINER_WIDTH_CLASSESitself, still composing the main-side dock classes (sticky inset-x-0 z-10) when the tab is active.BrowserTab,SortableTab, andEditorFileTabdrop their outer-wrapperclassNameconditional and the now-unused width imports, passing the flag to the hook instead. The same slot element still carries the width, so rendering is unchanged. - New hook test —
use-tab-strip-slot-props.test.tspins the default fixed width, the icon-only shrink-wrap (asserting the fixedw-[180px]is gone), and that an active icon-only tab still docks. Ran it locally: 3/3 pass. - Rebase absorption — the
useTabStripSlotPropsdock/sticky mechanism is a main-side addition the PR now extends; all five row kinds still receivepinnedTabsIconOnly.ClientHostedBrowserTabcalls the hook without the flag, which is correct — it is a pinless in-memory row that can never be pinned.
DeepSeek Flash (free via Pullfrog for OSS) | 𝕏
6f3c0c5 to
093d06b
Compare
A pinned tab keeps a full-width label it rarely needs — its icon already identifies it. Since tabs no longer shrink below 144px, a strip of six tabs overflows and the pinned ones scroll out of view. Behind a new General → Navigation toggle (off by default), a pinned tab collapses to its glyph and hands its width back: in a 1280px window six tabs go from 864px of content in a 464px strip, with the pinned tabs scrolled off, to 512px that fits. The collapse yields to any state the label would otherwise be the only carrier of: - An open rename editor takes the field back, and double-click still opens it on a collapsed editor tab (the root takes the gesture, since the label span that owns it is gone). - The hover card still shows the full title, and the tab root gets an explicit aria-label since dnd-kit marks it role="button" and there is no longer any text to name it. - An editor tab's git status, deleted/renamed state and unsaved changes come back as one tinted dot plus a suffix — "README.md (M, unsaved)". External mutation outranks git status, matching the expanded tab's strikethrough; unsaved is additive so one signal never shadows another. Also fixes a pre-existing defect the collapse would amplify: a pinned tab renders no close button, so the dirty dot's hover-hide left the slot blank and dropped the tab's only unsaved-changes signal. The width comes from the strip's existing useTabStripSlotProps hook, which gains an iconOnly option rather than being overridden per tab, so an active collapsed tab still docks. SortableTab and EditorFileTab both sit at the 400-line max-lines ceiling, so the terminal close button and the editor icon logic move verbatim into their own modules rather than suppressing the rule. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
093d06b to
23ade7c
Compare

ELI5
Pinned tabs keep their full-width title even though their icon is enough to recognise them. Tabs never shrink below 144px, so with a handful open the strip overflows and the pinned tabs scroll out of view. This adds an opt-in setting that shrinks pinned tabs to just their icon, giving the space back to the rest of the tab strip.
What Changed
Before: a pinned tab is as wide as any other tab (144–300px) and shows its title plus a pin glyph. Six tabs in a 1280px window already overflow, and the pinned tabs at the start of the strip scroll out of view.
After: with Settings → General → Navigation → Show pinned tabs as icons only turned on (off by default), a pinned tab collapses to a 25px chip showing only its icon, so more tabs fit before the strip has to scroll. Unpinned tabs are unchanged.
It applies to every tab kind (terminal, agent session, editor, browser, simulator). The collapse steps aside wherever the title was the only place some information lived:
aria-label(the tab is arole="button"with no visible text once collapsed).README.md (M, unsaved).Mechanism: the setting is a new
pinnedTabsIconOnlyboolean in global settings. The tab bar reads it once and passes it to every row it renders (throughTabBarItemRow); each tab component drops the label when the tab is pinned and not being renamed, and passes that to the strip's existinguseTabStripSlotPropshook, which swaps the fixed tab width for a shrink-to-fit one (active collapsed tabs still dock as before). The tab strip's overflow measurement is re-keyed on the setting so scrolling stays correct when the widths change.One small existing issue is fixed in the same code, because collapsing makes it visible: a pinned tab has no close button, so the unsaved-changes dot used to vanish on hover and leave nothing behind. It now stays.
SortableTab.tsxandEditorFileTab.tsxwere both at the 400-line limit, so the terminal close button and the editor tab's icon logic move, unchanged, into their own files instead of suppressing the rule.Why
Pinning is how people mark the tabs they keep open all day, so those are exactly the tabs whose icon is already familiar. Hiding their titles is the cheapest way to free space without touching how unpinned tabs behave.
Alternatives considered:
Linked Issue
Related: #2996 (pinned tabs), #9459 (pinned tabs in an overflowing tab strip).
Visual Proof
Measured in a 1280px-wide window with three pinned and three unpinned tabs:
Before (setting off), after (setting on), and the setting itself:
Testing
Verified in a dev build driven over CDP (macOS), toggling the real Settings switch: collapsed widths, strip overflow, accessible names, rename round-trip, the git-status/unsaved dot and label, all five tab kinds, and turning the setting off restoring everything. The setting was also toggled and exercised by hand.
Automated: new tests cover every row kind receiving the setting, the tab strip re-measuring when it changes, the collapsed editor state (status, deleted/renamed and unsaved in combination), and the slot-width hook choosing the shrink-to-fit width while still docking an active tab. Ran
pnpm tc,check:code-quality:changed(0 findings), the tab-bar and settings test suites (2,042 passing), the max-lines ratchet, and the localization checks.The change is renderer-only and has no platform-specific code, no IPC or wire changes, and no effect on SSH/remote behaviour.
AI Disclosure
Written with Claude Code (Claude models). I directed the change, tested it by hand, and reviewed every change before it was pushed.
Review
Agent skill upstream boundary
docs/reference/agent-skill-sharing-upstream-boundary.mdand copies or mechanically translates no upstream skill-installer source, tests, fixtures, registry entries, path tables, comments, or documentation.Notes
Security: no new inputs, IPC or network access; the only new data is one boolean setting. Cross-platform: no platform-specific code. Remote SSH / mobile: renderer-only, no wire changes. Backwards compatibility: the setting defaults to off and existing profiles without it read as off.
Checklist
N/Awith reasonpnpm lint,pnpm typecheck,pnpm test, andpnpm buildpass (or CI will cover; local preferred)🤖 Generated with Claude Code
https://claude.ai/code/session_016hmmFsseoDoJRcgWjCeUmc