[Feature Request] Document Claude Code plugin runtime constraints across CLI, desktop, web, and IDE surfaces
Bug Description
Doc gap: plugin runtime constraints by Claude Code surface
---
Building a Claude Code plugin (Mycelium — product-thinking framework, ~50 skills, hooks on PreToolUse/PostToolUse/Stop/SessionStart/PostToolUseFailure, heavy Edit/Write to user project filesystem). The plugin install flow is documented well, but I can't tell from the public docs whether the runtime behaves identically across the four Claude Code surfaces — terminal CLI, desktop app (Mac/Windows), web app (claude.ai/code), IDE extensions (VS Code, JetBrains).
Three specific gaps:
- Plugin cache location by surface. Docs mention ~/.claude/plugins/cache/... for the terminal CLI. Where does the cache live on desktop? In the web app (browser-side or server-side)? Inside an IDE extension? ${CLAUDE_PLUGIN_ROOT} resolution presumably handles this, but I'd like to confirm.
- Filesystem access in the web app. Plugins that write to the user's project (canvas state, decision logs, configuration) need Edit/Write parity. Does the web app have the same filesystem permissions as the terminal CLI, or are there constraints I should design around (e.g., sandboxed scratch space, no project mutation)?
- Hook firing parity. Do PreToolUse, PostToolUse, PostToolUseFailure, SessionStart, Stop fire identically in the desktop app and IDE extensions? My plugin's reflexion loop fails-open if hooks don't fire, but it'd be good to know up front whether to recommend a specific surface for full functionality.
Telling a user "install this plugin" is much weaker if I have to caveat "experience varies by surface, please test in yours." Either explicit per-surface documentation, or a single line stating "plugin behavior is identical across all surfaces" (if that's the case), would let plugin authors give users a clean recommendation.
— Håvard Bartnes, github.com/haabe/mycelium
Environment Info
- Platform: darwin
- Terminal: iTerm.app
- Version: 2.1.123
- Feedback ID: b1589519-5b0b-472b-bf97-f6315fb33454
Errors
[{"error":"AxiosError: Request failed with status code 403\n at Cn (/$bunfs/root/src/entrypoints/cli.js:115:1194)\n at <anonymous> (/$bunfs/root/src/entrypoints/cli.js:120:12716)\n at emit (node:events:92:22)\n at endReadableNT (internal:streams/readable:865:50)\n at processTicksAndRejections (native:7:39)\n at request (/$bunfs/root/src/entrypoints/cli.js:122:2467)\n at processTicksAndRejections (native:7:39)","timestamp":"2026-05-08T08:33:56.778Z"},{"error":"RangeError: path should be a `path.relative()`d string, but got \"..\"\n at QY1 (/$bunfs/root/src/entrypoints/cli.js:445:15084)\n at z6H (/$bunfs/root/src/entrypoints/cli.js:445:15259)\n at _test (/$bunfs/root/src/entrypoints/cli.js:445:15801)\n at af (/$bunfs/root/src/entrypoints/cli.js:8723:8631)\n at U4_ (/$bunfs/root/src/entrypoints/cli.js:831:25706)\n at g4_ (/$bunfs/root/src/entrypoints/cli.js:831:28670)\n at z85 (/$bunfs/root/src/entrypoints/cli.js:2660:2480)\n at <anonymous> (/$bunfs/root/src/entrypoints/cli.js:2660:2977)\n at D85 (/$bunfs/root/src/entrypoints/cli.js:2660:4357)\n at at_ (/$bunfs/root/src/entrypoints/cli.js:2660:6434)","timestamp":"2026-05-08T09:53:08.571Z"},{"error":"Error: Request was aborted.\n at makeRequest (/$bunfs/root/src/entrypoints/cli.js:50:3448)\n at processTicksAndRejections (native:7:39)","timestamp":"2026-05-09T04:18:59.055Z"}]This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗