fix(composer): show project skills in menus - #7909
Conversation
Co-authored-by: maria <254055478+maria-rcks@users.noreply.github.com>
Thread transfer impact✅ Thread transfer remains within every enforced ceiling.
Baseline: Scenario and decoded snapshot size10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.
Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed. |
There was a problem hiding this comment.
One finding: the new slash-command branch of isComposerMenuLoading reaches an empty-state copy path in ComposerCommandMenu that only special-cases the skill trigger, so a pending project-skills query renders file-search copy in the / menu.
Posted via Macroscope — UI Consistency
| ((composerTriggerKind === "skill" || composerTriggerKind === "slash-command") && | ||
| projectSkillsQuery.isPending); |
There was a problem hiding this comment.
Extending the loading flag to the slash-command trigger surfaces the wrong copy. ComposerCommandMenu only branches loading text on triggerKind === "skill" and otherwise falls back to "Searching workspace files..." (ComposerCommandMenu.tsx lines 114-117), so when / is open with no matching items yet (e.g. a query that currently matches only an un-loaded project skill) the menu says it is searching workspace files even though no path search is running.
Smallest fix: either keep the new pending condition scoped to composerTriggerKind === "skill", or add a slash-command branch to the loading copy in ComposerCommandMenu so it reads "Searching workspace skills..." — i.e. gate the file-search wording on triggerKind === "path" instead of using it as the default.
Posted via Macroscope — UI Consistency
There was a problem hiding this comment.
fixed in 8cf3736 with a regression test: slash-trigger loading now says "Searching workspace skills..." rather than file-search copy.
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using high effort and found 2 potential issues.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 6e99ce6. Configure here.
ApprovabilityVerdict: Skipped Macroscope did not run approvability analysis for this PR. Macroscope could not determine whether this PR modifies its approvability configuration, so the PR was not approved automatically. A PR that may change the rules that govern approval is never approved automatically. |
Co-authored-by: maria <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: maria <254055478+maria-rcks@users.noreply.github.com>

problem
the composer only used the provider snapshot for skills, so project-only skills could be missing while global skills still appeared.
fix
projects.listSkillsrpc scoped to the active workspace and provider.agents/skillsfor every provider, plus native project roots for claude, cursor, grok, and opencode/and$menus on web, desktop, and mobile.agents/skillsroottesting
ui
no layout changes. this populates the existing skill rows in both composer menus.
model:
gpt-5.6-solharness: Hermes Agent
request provenance
Note
Medium Risk
Adds a new workspace-scoped RPC that reads SKILL.md files from the given cwd, plus composer menu data sources. Auth is read-only and discovery is tested, but wrong cwd or merge order would surface the wrong skills.
Overview
Composer skill menus no longer rely only on the provider snapshot. Web and mobile now query project skills for the thread/worktree cwd and merge them with global provider skills so project-only skills appear and same-name project skills win.
Adds a read-only
projects.listSkillsRPC.WorkspaceEntries.listSkillsscans.agents/skillsfor every driver plus native roots (.claude,.cursor,.grok,.opencode), parsesSKILL.mdfrontmatter, and prefers native dirs over common ones on name collisions.mergeProviderSkillsis the client merge. Slash and skill menus use the merged list; loading copy is “Searching workspace skills...” for those triggers (not file-search text). Mobile path search and skill fetch now takethreadCwdinstead of the parent project workspace root.Reviewed by Cursor Bugbot for commit 1ced740. Bugbot is set up for automated code reviews on this repo. Configure here.
Note
Show project-scoped skills in web and mobile composer menus
projects.listSkillsthat discovers skills from.agents/skillsand provider-native directories, parsesSKILL.mdfrontmatter, and merges duplicates by name with provider-native precedencemergeProviderSkillsinclient-runtimeto overlay project skills onto provider skills by nameChatComposer(web) andThreadComposer(mobile) to query project skills by cwd and selected provider driver, then pass merged skills to slash and skill menus with correct loading copyAuthOrchestrationReadScoperequirement for the new RPC inRpcAuthorizationprojectCwdtothreadCwdinThreadComposerPropsand removesprojectWorkspaceRootfromThreadDetailScreenProps; all in-tree call sites inThreadRouteScreenare updated but out-of-tree consumers must adaptMacroscope summarized 1ced740.