[FEATURE] Native SKILL.local.md overlay — append local/private instructions onto a shared SKILL.md

Open 💬 1 comment Opened Jun 24, 2026 by mjkent

Preflight

  • [x] Searched existing issues. This is related but distinct from prior requests (see "Relation to existing issues" below) — it asks for an overlay/append onto an existing shared SKILL.md, not a separate private-skills directory.
  • [x] Single feature request.

Problem

Claude Code has a consistent "shared + local override" pattern everywhere except skills:

| Shared (tracked) | Local (gitignored) |
|-------------------------|--------------------------------|
| CLAUDE.md | CLAUDE.local.md |
| .claude/settings.json | .claude/settings.local.json |
| .claude/skills/<n>/SKILL.md | — nothing — |

Teams commit a shared .claude/skills/<name>/SKILL.md. Individual developers need private, local-only additions to that same skill — local paths, machine-specific tool commands, personal preferences — without editing the shared file, copying the whole skill, or generating SKILL.md with a preprocessor.

settings.local.json skillOverrides only toggles off/collapsed state; it cannot add content. CLAUDE.local.md adds instructions but not scoped to a skill and not surfaced when the skill is invoked.

Empirical current behavior (repro)

  1. Create .claude/skills/local-test/SKILL.md (prints "loaded SKILL.md").
  2. Add a sibling .claude/skills/local-test/SKILL.local.md (prints "loaded local").
  3. Invoke /local-test in a fresh session.

Result: SKILL.md loads; SKILL.local.md is silently ignored — no merge, no shadow, no warning. (CLI v2.x, confirmed.)

Proposed behavior

  • If .claude/skills/<name>/SKILL.local.md exists, load it after SKILL.md and treat its content as appended local/private context for that skill.
  • Optional and gitignorable; absence is a no-op.
  • Project-local overlay applies before user/plugin-installed skill fallbacks.
  • Consistent across CLI and claude.ai/code web/mobile where project skills are supported.

Precedence

  1. Shared SKILL.md
  2. Adjacent SKILL.local.md appended as local/private overlay
  3. settings.local.json skillOverrides still governs off/collapsed state

Why overlay (vs. a separate skills-local/ dir, as in #41967/#31155/#45094)

Those propose whole private skills. This is the missing complementary case: augmenting a shared skill in place — same mental model as CLAUDE.md → CLAUDE.local.md — so teams distribute one skill while each dev customizes locally.

Workaround today

A SessionStart/PreToolUse hook can regenerate SKILL.md by concatenating a base file + a local file. It works but produces a risky generated/tracked file and fights the dup-detection cache (see #56513, #20309). Native support avoids that.

Relation to existing issues

  • #41967 / #31155 / #45094 — separate gitignored skills dir or local:true (closed stale/dup). Complementary, not the same.
  • #56513 / #20309 — project-local skill precedence/caching bugs (one open). Overlap on load-order; this adds the overlay file.
  • #59607 — referenced a third-party SKILL.local.md convention; dup-closed. This is the native-support version.

View original on GitHub ↗

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