[Feature Request] Document Claude Code plugin runtime constraints across CLI, desktop, web, and IDE surfaces

Resolved 💬 1 comment Opened May 9, 2026 by haabe Closed Jun 7, 2026

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:

  1. 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.
  2. 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)?
  3. 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"}]

View original on GitHub ↗

This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗