[FEATURE] Persistent in-place plugin loading (no cache)

Open 💬 2 comments Opened Jan 12, 2026 by ClementWalter

Preflight Checklist

  • [x] I have searched existing requests and this feature hasn't been requested yet
  • [x] This is a single feature request (not multiple features)

Problem Statement

When developing plugins with feedback loops that modify their own source code (e.g., self-improving plugins, learning systems), the current caching behavior breaks the workflow:

  1. Plugins installed via claude plugin install are copied to cache (~/.claude/plugins/cache/)
  2. Any edits made by the plugin go to the cached copy, not the original source
  3. Changes are lost on reinstall/update

The --plugin-dir flag solves this by loading plugins in-place without caching, but it's session-only and must be specified every time.

Current Workarounds:

  • Use --plugin-dir every session (tedious, requires alias/wrapper)
  • Manually symlink cache directories to source (fragile, breaks on update)
  • Store mutable state outside the plugin (requires restructuring)

Proposed Solution

Add a persistent way to load plugins in-place.

Option A: pluginDirs in settings.json

{
  "pluginDirs": [
    "/path/to/my-plugins"
  ]
}

Alternative Solutions

Option B: Per-plugin cache: false option

{
  "plugins": {
    "my-plugin@my-marketplace": {
      "cache": false
    }
  }
}

Option C: --plugin-dir equivalent in settings

{
  "defaultPluginDirs": [
    "/path/to/dev-plugins"
  ]
}

Priority

High - Significant impact on productivity

Feature Category

Plugin system

Use Case Example

  • Self-improving plugins: Sessions edit plugin source for continuous improvement
  • Plugin development: Rapid iteration without reinstalling
  • Shared team plugins: Single source of truth on network drive
  • Local marketplaces: Development workflows where source = runtime

Additional Context

The --plugin-dir flag already implements the desired behavior—this request is simply to make it persistent via configuration.

View original on GitHub ↗

This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗