Title: feat(copilot): gate user skills to explicit slash-attach by j15z · Pull Request #5536 · simstudioai/sim · GitHub
Open Graph Title: feat(copilot): gate user skills to explicit slash-attach by j15z · Pull Request #5536 · simstudioai/sim
X Title: feat(copilot): gate user skills to explicit slash-attach by j15z · Pull Request #5536 · simstudioai/sim
Description: Summary Stops the copilot from adopting a workspace user-skill as its own instructions unless the user explicitly slash-attaches it. A user-created skill whose description reads like a behavioral instruction (e.g. a "pirate" skill described as "respond like a pirate") was being obeyed by the copilot on ordinary messages. The skill's name + description sit in the always-on ## Skills block of the workspace context, and the model simply followed them — no tool call, no user request. The block's copy actively encouraged it: "call the load_user_skill tool … then follow them." This PR closes both paths: Removes the load_user_skill tool and its three payload callers (chat payload, mothership execute route, inbox executor), deleting lib/mothership/skills.ts. The copilot can no longer autonomously pull a user skill's full content into its own instructions. Reframes the inventory: ## Skills -> ## Agent Block Skills — NOT FOR YOU, with a one-line guardrail so a skill's description is not read as a command. User skills still reach the copilot as behavior — but only via an explicit /-attach, which routes through the separate ## Active Skills block ("treat as authoritative instructions"). Agent-block skills (load_skill) and manage_skill authoring are untouched. Also prunes dead load_user_skill references and the now-orphaned includeMothershipTools param (its only reader was the removed tool). No linked issue. Type of Change Bug fix New feature Breaking change Documentation Other: removes the load_user_skill copilot tool (intentional behavior change) Testing Unit tests — 36 passing across every touched file: payload.test.ts + post.test.ts — 16/16 (cover buildCopilotRequestPayload; confirm the removed includeMothershipTools was never load-bearing) workspace-context.test.ts, hidden-tools.test.ts, skills/operations.test.ts, skills-resolver.test.ts — 20/20 Static checks: tsc --noEmit clean for the feature; biome check clean on all changed files. Behavior verified against real mothership traces (the important evidence): Before — a brand-new chat where the user typed only "Good morning", with zero tool calls, still got a reply in pirate speak. The model obeyed the skill's description straight out of the always-on inventory (no load_user_skill call, no VFS read). After — the same skill is adopted only when explicitly slash-attached: the request carries a skill context item and the mothership injects it under ## Active Skills, which the model follows. A plain message no longer triggers it. Reviewers should focus on: workspace-context.ts — the NOT FOR YOU framing is a prompt-level guardrail, so its strength is empirical. It holds against the pirate repro; a deliberately adversarial skill description is the interesting edge case. The load_user_skill removal spans three payload callers — worth confirming none were missed (grep -r load_user_skill returns 0). tools/index.ts and log-details/utils.ts — the dead || 'load_user_skill' clauses were dropped while the still-live load_skill (agent-block) path is deliberately preserved. Checklist Code follows project style guidelines Self-reviewed my changes Tests added/updated and passing No new warnings introduced I confirm that I have read and agree to the terms outlined in the Contributor License Agreement (CLA) Screenshots/Videos No UI changes. The behavior is observable in the copilot's responses and in mothership traces rather than in the interface. 🤖 Generated with Claude Code
Open Graph Description: Summary Stops the copilot from adopting a workspace user-skill as its own instructions unless the user explicitly slash-attaches it. A user-created skill whose description reads like a behavioral i...
X Description: Summary Stops the copilot from adopting a workspace user-skill as its own instructions unless the user explicitly slash-attaches it. A user-created skill whose description reads like a behavioral i...
Opengraph URL: https://github.com/simstudioai/sim/pull/5536
X: @github
Domain: github.com
| route-pattern | /:user_id/:repository/pull/:id/files(.:format) |
| route-controller | pull_requests |
| route-action | files |
| fetch-nonce | v2:7f83914f-44fe-aaba-46d8-b79370350a96 |
| current-catalog-service-hash | ae870bc5e265a340912cde392f23dad3671a0a881730ffdadd82f2f57d81641b |
| request-id | 9026:3A4603:B51DFF:102EFB9:6A634200 |
| html-safe-nonce | b61cfd4c81200fa7d5b63e2b42711758d415b60a928eb2a9339dcad95596a5df |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI5MDI2OjNBNDYwMzpCNTFERkY6MTAyRUZCOTo2QTYzNDIwMCIsInZpc2l0b3JfaWQiOiI0Mjc2OTQxNDE0NTMyODU4MzY4IiwicmVnaW9uX2VkZ2UiOiJpYWQiLCJyZWdpb25fcmVuZGVyIjoiaWFkIn0= |
| visitor-hmac | 453224a599101fa072234410418c6746aac1e991a704a00d61d239535f39c197 |
| hovercard-subject-tag | pull_request:4023827311 |
| github-keyboard-shortcuts | repository,pull-request-list,pull-request-conversation,pull-request-files-changed,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/simstudioai/sim/pull/5536/files |
| twitter:image | https://avatars.githubusercontent.com/u/96924014?s=400&v=4 |
| twitter:card | summary_large_image |
| og:image | https://avatars.githubusercontent.com/u/96924014?s=400&v=4 |
| og:image:alt | Summary Stops the copilot from adopting a workspace user-skill as its own instructions unless the user explicitly slash-attaches it. A user-created skill whose description reads like a behavioral i... |
| og:site_name | GitHub |
| og:type | object |
| hostname | github.com |
| expected-hostname | github.com |
| None | 59e55daad7174ca59d63c6974d58276ccb5477442e550bebb3c035e1bef11c94 |
| turbo-cache-control | no-preview |
| diff-view | unified |
| go-import | github.com/simstudioai/sim git https://github.com/simstudioai/sim.git |
| octolytics-dimension-user_id | 199344406 |
| octolytics-dimension-user_login | simstudioai |
| octolytics-dimension-repository_id | 912559512 |
| octolytics-dimension-repository_nwo | simstudioai/sim |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 912559512 |
| octolytics-dimension-repository_network_root_nwo | simstudioai/sim |
| turbo-body-classes | logged-out env-production page-responsive full-width |
| disable-turbo | true |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 990295d92a4cc7b63fbbd83a046217cd7d77d49c |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width