Claude Plugin Settings: the File, the Gap, and the Restart

Claude Code plugin settings live in one per-project file, and a change does not take effect until Claude Code restarts. The video covers the file's structure, the fail-safe quick-exit pattern, and the gap that settings never carry between projects.

1:38 video3 min readWatch on YouTube

Someone changes a plugin's enabled flag, saves the file, and expects the change to apply right away. The video says it does not: Claude Code has to restart first. It then walks through the single file where plugin settings live, the pattern that keeps hooks safe when that file is missing, and one gap that surprises people who expect settings to follow them across projects.

The wrong assumption

The video starts from a common guess: toggling a setting takes effect the moment the file is saved. It does not. The question the video poses is when a toggled setting actually applies, and the answer it gives is later, after a restart. That answer frames everything that follows.

Anatomy of the settings file

The pattern lives in one file, named .claude/pluginname.local.md, in the project root. It has two parts. The first is YAML frontmatter for structured settings. The second is a markdown body for prompts and instructions.

Three kinds of things read it: bash hooks, command files, and agent instructions. The file is per project and managed by the user, and it is never committed to git. The video says four things make the pattern work well, and the next section covers them.

Built to fail safe

The first practice is to design the schema first and decide on sensible defaults for when the file does not exist. Most users never create it, so the plugin has to behave correctly without it.

The second is for hooks to quick-exit. A hook checks that the file exists, then checks that the plugin is enabled, and otherwise exits immediately. That keeps a missing or disabled configuration from causing any side effects.

The third is the gitignore entry. Every project needs its own entry for the settings file, and the video stresses that this step is manual, not automatic. Nothing adds it for you.

The one gap

The video names one limitation worth knowing. A setting you configure in one project does not carry over to any other project, and there is no plugin-wide switch. Every project keeps its own file, its own flags, and its own restart. If you expected a single setting to follow you everywhere, it will not.

The contract in one line

The video closes by compressing it to a short contract: a plugin settings file works per project, not globally, and no change takes effect until Claude Code restarts. Set it, save it, restart it.

Key takeaways

  • Plugin settings live in .claude/pluginname.local.md in the project root.
  • The file has YAML frontmatter for structured settings and a markdown body for prompts and instructions.
  • Bash hooks, command files, and agent instructions can all read it.
  • Changes take effect only after Claude Code restarts.
  • Design the schema with sensible defaults first, since most users never create the file.
  • Hooks should quick-exit: check the file exists, check it is enabled, otherwise stop immediately.
  • The gitignore entry for the file must be added manually in each project.
  • Settings are per project, with no plugin-wide switch.

Try it yourself

Open a Claude Code session on your own plugin idea and ask it to add configurable settings: an enabled flag, a validation level, and a max-retries count. Then check three things. Does the file land in a per-project location that is kept out of git? Does the code guard with a quick exit before doing anything else? And does everything still work correctly when the settings file does not exist at all?

Chapters

  1. 0:00The naive framing: "does it apply right now?"
  2. 0:13Anatomy: the file
  3. 0:32Built to fail safe
  4. 0:50One gap
  5. 1:04Carry-out
  6. 1:15Your turn
  7. 1:35Outro
Full transcript(auto-generated, with timestamps)

The naive framing: "does it apply right now?"

[0:00]Someone assumed flipping a plugin's enabled flag in its settings file takes effect the moment you save the file. It doesn't. Claude code has to restart first. So, when I toggle a setting, does it take effect later? The pattern lives in one file,

Anatomy: the file

[0:13].claud/pluginname.local.md in the project root. It has two parts, YAML front matter for structured settings and a markdown body for prompts and instructions. Three things read it, bash hooks, command files, and agent instructions. It's per project, user managed, and never committed to get. Four things make it work well. Design

Built to fail safe

[0:32]The schema first and decide sensible defaults for when the file doesn't exist. Most users never create it. Hook should quick exit. Check the file exists. Check it's enabled. Otherwise, exit immediately. And every project needs its own git ignore entry for the file. That step is manual, not automatic. One gap worth knowing, a setting you configure in one project

One gap

[0:51]Doesn't carry over to any other project. There's no plugin-wide switch. Every project keeps its own file, its own flags, its own restart. If you expected one setting to follow you everywhere, it won't. A plugin settings file works per

Carry-out

[1:04]Project, not globally, and no change takes effect until Claude code restarts. Set it, save it, restart it. That's the whole contract. Your turn. Ask Claude to add configurable settings to a project,

Your turn

[1:16]An enabled flag, a validation level, and a max retries count. Watch three things. First, does the file land in a per project location kept out of git? Second, does the code guard with a quick exit? Check the file exists. Check it's enabled before doing anything else. Third, everything still work correctly when the settings file doesn't exist at all. Restart required. Lay 'em in for

Outro

[1:35]Bear.

More from Extending Claude — Skills, Plugins & Connectors

Humanitarians AI Lyrical Literacy Project