Plugin Settings: Per-Project Config

Day 39 · Week 8 · Plugins — Full Package

Slack Message — copy & paste

🤖 Tip #39 — Use `.claude/<plugin-name>.local.md` for per-project plugin settings — gitignored YAML frontmatter that separates config from code.

#39 Claude Code

The Three Config Layers

  • **`.claude/<plugin-name>.local.md`**Per-project config with YAML frontmatter. The plugin reads the YAML for settings and ignores the markdown body. `.local` means gitignored, `.md` means it can include free-text notes.
  • **`.ai/config.yaml`**Shared team conventions that get committed. Build commands, branch names, project structure — everything the team agrees on.
  • **Spec directory files**Temporary per-ticket state in `.ai/specs/<id>/`. Created during work, discarded after merge.
  • **Why three layers**Team conventions are shared (config.yaml). Developer preferences are local (local.md). Ticket context is temporary (spec files). Each has a different lifecycle and audience.
Settings Per-Project local.md
#39 Plugins — Full Package

What Goes Where

  1. 1 **What goes in plugin settings (.local.md)**
    • `aem.author-url` — http://localhost:4502
    • `aem.author-url-qa` — https://qa-author.example.com
    • `aem.active-markets` — [gb, de, fr]
    • `aem.demo-parent-path` — /content/brand-a/gb/en
  2. 2 **What does NOT go here**
    • Secrets — use environment variables, never store directly
    • Shared team conventions — use `.ai/config.yaml` instead
    • Temporary state — use spec directory files
  3. 3 **Never store secrets directly**Reference environment variables instead (e.g., `auth-token: $AEM_AUTH_TOKEN`). The .local.md file is gitignored but secrets still shouldn't be in plain text.
  4. 4 **Check your project**Look for `.claude/*.local.md` files. If you're using plugins but don't have these, you may be missing per-project configuration.
Settings Per-Project local.md
Your screenshot here Optional — add a screenshot from your own workflow
KAI by Dragan Filipovic