Home

mweinbach / agent-coworker

publicmweinbach/agent-coworker
Overview Code History Branches Pull requestsIssuesInsights
main
HomeOverview Code PRsIssues

feat: settings overhaul — Tool Access hub, subagents UX, per-workspace subagent availability (#196)

3 months ago

a4a548d
Authored
Max Weinbach7/4/2026, 1:15:03 PM
* feat(desktop): add SettingsStatTile and EntityIcon settings primitives

Co-authored-by: Cursor <cursoragent@cursor.com>

* feat: icon metadata for MCP servers, marketplace entries, and plugin skills

- MCPServerConfig accepts optional icon (URL or data URI) that round-trips
  through upsert/read; plugin servers fall back to the owning plugin logo
- marketplace.json entries parse interface icon/logo/brandColor into
  availablePlugins/availableSkills interface metadata
- plugin bundled skills embed icon_small/icon_large data URIs like
  standalone skills
- protocol docs + harness tests for each path

Co-authored-by: Cursor <cursoragent@cursor.com>

* feat(desktop): rebuild Tool Access as the plugins/MCP/marketplace hub

Tool Access now hosts installed plugins, marketplace installs, skills, all-layer MCP servers (user/workspace/plugin/system) with icon+env/headers editors, flag-gated Codex connectors, and the relocated Search settings. Drops the provider stat grid and makes refreshPluginsCatalog self-sufficient (server + control socket).

Co-authored-by: Cursor <cursoragent@cursor.com>

* refactor(desktop): retire standalone plugins/skills view for Tool Access

- Route sidebar Plugins nav and openSkills through Settings > Tool Access
- Delete SkillsView, PluginsCatalogPage, SkillsCatalogPage, card grids, and
  plugin management workspace state (pluginManagementWorkspaceId/Mode)
- Move still-used dialogs (ImportDialog, Install/Detail dialogs, skillUtils)
  under src/ui/settings/toolAccess/
- Remove dead WorkspacesPage surface=all tab shell; relocate per-workspace
  settings toggle into the defaults Advanced actions collapsible
- Update tests: drop catalog page/plugin management suites, retarget dialog
  imports, remap legacy skills view cache assertions to settings

Co-authored-by: Cursor <cursoragent@cursor.com>

* refactor(desktop): migrate Desktop, Updates, Developer settings pages to SettingsPrimitives

Co-authored-by: Cursor <cursoragent@cursor.com>

* refactor(desktop): migrate Usage, Chats, Memory, Subagents settings pages to SettingsPrimitives

Co-authored-by: Cursor <cursoragent@cursor.com>

* refactor(desktop): dedupe settings ownership and collapse Backups stat tiles

- remove Workspace backups toggle from Defaults Behavior card (Backups page owns it)
- delete WorkspaceDefaultsSummary strip (Models owns provider/model/routing display)
- merge Privacy & Telemetry read-only status section into inline toggle pills, keep kill-switch row
- replace Backups InlineMetric stat tiles with a single status row

Co-authored-by: Cursor <cursoragent@cursor.com>

* refactor(desktop): standardize settings header and section action buttons

- chrome header actions use outline sm consistently (Remote Access start button)
- section action slots use outline sm buttons with data-icon lucide icons
- Subagents Refresh/New, Updates check/restart/release-notes, Desktop quick chat, Developer LibreOffice check
- Tool Access dialog triggers (Import, New plugin, New skill) drop pill styling for the shared contract

Co-authored-by: Cursor <cursoragent@cursor.com>

* chore: regenerate JSON-RPC schema artifacts for MCP icon field

Co-authored-by: Cursor <cursoragent@cursor.com>

* idk

* refactor(desktop): use SettingsSection for Defaults and Provider Settings on Models page

Co-authored-by: Cursor <cursoragent@cursor.com>

* refactor(desktop): float Defaults and Provider Settings headers outside their cards to match Providers

Co-authored-by: Cursor <cursoragent@cursor.com>

* style(desktop): soften outline button border to border/60

Co-authored-by: Cursor <cursoragent@cursor.com>

* feat(desktop): default Subagents to global scope with workspace picker scoped to Workspace tab

Co-authored-by: Cursor <cursoragent@cursor.com>

* refactor(desktop): simplify Subagents settings page

Move Refresh/New into the settings header, drop the redundant nested
section header, collapse profile rows into a single divided list with
entity icons, and trim status pills to only meaningful states
(Disabled, Built-in, Main, Shadowed). Replace the raw profile ref and
template metadata line with the profile description, and swap the
static one-off-chat note for a scope-aware caption. Includes stray
biome formatting fixes in DesktopPage and sidebar-ui test.

Co-authored-by: Cursor <cursoragent@cursor.com>

* refactor(desktop): float section headers above cards across settings pages

Co-authored-by: Cursor <cursoragent@cursor.com>

* feat: per-workspace availability overrides for global subagents

Adds cowork/agentProfiles/workspaceAvailability/set (protocol 7.41) so a
global or built-in subagent can be disabled for a single workspace without
editing the global profile. Overrides persist in the workspace
agent-profiles/workspace-overrides.json file, catalog entries expose
workspaceDisabled, and workspace-disabled profiles drop out of
effectiveProfiles and spawn resolution. The desktop Subagents Workspace tab
now lists global subagents with per-workspace availability switches; the
locked Main Agent profile stays always available.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix: address PR review feedback

* test: isolate JSON-RPC desktop feature flags

* fix: address tool access review feedback

* fix: align mcp tool access workspace state

* fix: address plugin review feedback

* idk

* fix: preserve chat selection when opening tool access

* more

* fix: stabilize settings icons and runtime smoke

* fix: disambiguate MCP settings targets

* fix: preserve ambiguous Tool Access chats

---------

Co-authored-by: Cursor <cursoragent@cursor.com>

Parentd29ebab

127 files changed
  • .cursor/mcp.json+8−0
  • .mcp.json+1−1
  • AGENTS.md+1−1
  • apps/desktop/README.md+2−2
  • apps/desktop/electron/services/remoteDebug.ts+3−1
  • apps/desktop/src/App.tsx+19−68
  • apps/desktop/src/app/pluginManagement.ts+0−56
  • apps/desktop/src/app/store.actions/agentProfiles.ts+30−1
  • apps/desktop/src/app/store.actions/bootstrap.ts+63−95
  • apps/desktop/src/app/store.actions/mcp.ts+8−4
  • apps/desktop/src/app/store.actions/plugins.ts+17−34
  • apps/desktop/src/app/store.actions/skillPluginHelpers.ts+2−17
  • apps/desktop/src/app/store.actions/skills.ts+7−17
  • apps/desktop/src/app/store.actions/thread.ts+0−9
  • apps/desktop/src/app/store.actions/workspace.ts+0−8
  • apps/desktop/src/app/store.helpers.ts+22−8
  • apps/desktop/src/app/store.helpers/controlSocket.ts+1−13
  • apps/desktop/src/app/store.helpers/persistence.ts+0−6
  • apps/desktop/src/app/store.helpers/runtimeState.ts+0−1
  • apps/desktop/src/app/store.ts+0−2
  • apps/desktop/src/app/types.ts+1−7
  • apps/desktop/src/app/workspaceDisplayTargets.ts+13−0
  • apps/desktop/src/components/ui/button.tsx+1−1
  • apps/desktop/src/components/ui/skeleton.tsx+13−0
  • apps/desktop/src/styles/platform/linux.css+0−4
  • apps/desktop/src/styles/platform/win32.css+0−4
  • apps/desktop/src/ui/Sidebar.tsx+8−30
  • apps/desktop/src/ui/SkillsView.tsx+0−92
  • apps/desktop/src/ui/chat/ChatFeed.tsx+1−1
  • apps/desktop/src/ui/layout/AppTopBar.tsx+2−70
  • apps/desktop/src/ui/layout/PrimaryContent.tsx+1−12
  • apps/desktop/src/ui/plugins/PluginCardGrid.tsx+0−89
  • apps/desktop/src/ui/plugins/PluginsCatalogPage.tsx+0−150
  • apps/desktop/src/ui/settings/SettingsPrimitives.tsx+135−11
  • apps/desktop/src/ui/settings/pages/ArchivedChatsPage.tsx+50−66
  • apps/desktop/src/ui/settings/pages/BackupPage.tsx+22−51
  • apps/desktop/src/ui/settings/pages/DesktopPage.tsx+114−119
  • apps/desktop/src/ui/settings/pages/DeveloperPage.tsx+195−223
  • apps/desktop/src/ui/settings/pages/McpServersPage.tsx+278−169
  • apps/desktop/src/ui/settings/pages/MemoryPage.tsx+205−212
  • apps/desktop/src/ui/settings/pages/OpenAiNativeConnectorsPage.tsx+115−138
  • apps/desktop/src/ui/settings/pages/PrivacyTelemetryPage.tsx+7−27
  • apps/desktop/src/ui/settings/pages/ProvidersPage.tsx+102−63
  • apps/desktop/src/ui/settings/pages/RemoteAccessPage.tsx+23−39
  • apps/desktop/src/ui/settings/pages/SettingsIntentPages.tsx+34−3
  • apps/desktop/src/ui/settings/pages/SubagentsPage.tsx+211−127
  • apps/desktop/src/ui/settings/pages/ToolAccessPage.tsx+443−0
  • apps/desktop/src/ui/settings/pages/UpdatesPage.tsx+145−166
  • apps/desktop/src/ui/settings/pages/UsagePage.tsx+30−34
  • apps/desktop/src/ui/settings/pages/WorkspacesPage.tsx+427−580
  • apps/desktop/src/ui/settings/pages/mcpServerDraft.ts+37−16
  • apps/desktop/src/ui/{import => settings/toolAccess}/ImportDialog.tsx+11−17
  • apps/desktop/src/ui/{plugins => settings/toolAccess}/InstallPluginDialog.tsx+8−6
  • apps/desktop/src/ui/{skills => settings/toolAccess}/InstallSkillDialog.tsx+10−7
  • apps/desktop/src/ui/{plugins => settings/toolAccess}/PluginDetailDialog.tsx+7−7
  • apps/desktop/src/ui/{skills => settings/toolAccess}/SkillDetailDialog.tsx+6−6
  • apps/desktop/src/ui/{skills/utils.tsx => settings/toolAccess/skillUtils.tsx}+2−2
  • apps/desktop/src/ui/skills/AvailableSkillCardGrid.tsx+0−61
  • apps/desktop/src/ui/skills/InstallationCardGrid.tsx+0−91
  • apps/desktop/src/ui/skills/SkillsCatalogPage.tsx+0−185
  • apps/desktop/src/ui/skills/index.ts+0−1
  • apps/desktop/test/app-topbar.test.tsx+0−88
  • apps/desktop/test/bootstrap-cache.test.ts+8−113
  • apps/desktop/test/chat-feed-scroller.test.tsx+1−1
  • apps/desktop/test/chat-view.stability.test.tsx+4−2
  • apps/desktop/test/control-socket.provider.test.ts+1−1
  • apps/desktop/test/electron-builder-runner.test.ts+10−7
  • apps/desktop/test/{plugins-catalog-page.test.ts => install-plugin-dialog.test.ts}+2−351
  • apps/desktop/test/install-skill-dialog.test.ts+298−0
  • apps/desktop/test/jsonrpc-single-connection.test.ts+21−0
  • apps/desktop/test/mcp-servers-page.test.tsx+435−2
  • apps/desktop/test/plugin-actions.test.ts+6−10
  • apps/desktop/test/plugin-detail-dialog.test.tsx+1−1
  • apps/desktop/test/plugin-management.test.ts+0−48
  • apps/desktop/test/privacy-telemetry-page.test.tsx+1−1
  • apps/desktop/test/protocol-v2-events.test.ts+36−30
  • apps/desktop/test/providers-page.test.ts+88−0
  • apps/desktop/test/settings-nav.test.ts+187−8
  • apps/desktop/test/settings-primitives.test.tsx+62−0
  • apps/desktop/test/sidebar-ui.test.tsx+0−77
  • apps/desktop/test/skill-detail-dialog.test.ts+1−1
  • apps/desktop/test/skill-plugin-actions.harness.ts+0−4
  • apps/desktop/test/skills-actions.test.ts+1−2
  • apps/desktop/test/skills-catalog-page.test.ts+0−603
  • apps/desktop/test/subagents-page.test.ts+137−4
  • apps/desktop/test/workspace-display-targets.test.ts+19−0
  • apps/desktop/test/workspace-settings-sync.harness.ts+0−1
  • apps/desktop/test/workspace-settings-sync.lifecycle.test.ts+1−3
  • apps/desktop/test/workspace-startup.test.ts+0−2
  • apps/desktop/test/workspaces-page.test.ts+255−98
  • docs/generated/websocket-jsonrpc.d.ts+25−23
  • docs/generated/websocket-jsonrpc.schema.json+1−1
  • docs/websocket-protocol.md+12−2
  • opencode.json+1−1
  • src/coworkRuntime/runtime.ts+5−0
  • src/mcp/configRegistry.ts+1−0
  • src/mcp/configRegistry/layers.ts+2−0
  • src/mcp/configRegistry/parser.ts+1−0
  • src/mcp/index.ts+8−0
  • src/plugins/manifest.ts+73−6
  • src/plugins/marketplace.ts+18−4
  • src/plugins/mcp.ts+5−0
  • src/plugins/remoteMarketplace.ts+3−0
  • src/server/agents/profiles.ts+135−9
  • src/server/jsonrpc/routes/agentProfiles.ts+35−0
  • src/server/jsonrpc/routes/mcp.ts+16−4
  • src/server/jsonrpc/schema.agentProfiles.ts+7−0
  • src/server/protocol.ts+1−1
  • src/server/session/AgentSession.ts+26−12
  • src/server/session/McpManager.ts+13−13
  • src/server/session/SessionContext.ts+5−2
  • src/server/session/SessionRuntime.ts+13−9
  • src/server/session/SessionRuntimeSupport.ts+15−4
  • src/server/session/mcp/McpAuthFlow.ts+35−19
  • src/server/session/mcp/McpServerResolver.ts+6−3
  • src/server/session/mcp/McpValidationFlow.ts+5−7
  • src/shared/agentProfiles.ts+22−0
  • src/shared/jsonrpcControlSchemas.ts+18−0
  • src/types.ts+2−0
  • test/agentProfiles.test.ts+127−0
  • test/coworkRuntime.test.ts+3−27
  • test/desktop-release.workflow.test.ts+3−1
  • test/jsonrpc.control-schemas.test.ts+56−0
  • test/jsonrpc.routes.review-fixes.test.ts+96−6
  • test/mcp.config-registry.test.ts+83−0
  • test/plugins.catalog.test.ts+88−0
  • test/skills.marketplace.test.ts+63−0