Feature Request: Built-in Skill activation/deactivation (enable/disable per session or globally)

Resolved 💬 3 comments Opened Mar 27, 2026 by lisa3907 Closed Mar 30, 2026

Summary

Add built-in support to activate or deactivate individual Skills without removing them from the project. Currently, all Skills placed in .claude/skills/ are always loaded into every conversation, consuming context tokens regardless of relevance.

---

Problem

Skills are loaded at the start of every conversation. As a project grows and accumulates many Skills (e.g., 10+), every session pays the token cost of all skill descriptions — even when most of them are irrelevant to the current task.

Example: A session focused on writing unit tests doesn't need stripe-payment or s3-file-upload loaded. A session doing initial architecture design doesn't need pds-test or tdd-razor-pages.

There is currently no way to say "load only these 4 skills for this session."

---

Proposed Solution

Option A — CLI flags (preferred)

# Disable a skill globally (persists across sessions)
claude skill off stripe-payment
claude skill off s3-file-upload

# Re-enable
claude skill on stripe-payment

# List all skills with active/inactive status
claude skill list

# Apply a named preset (defined in .claude/skills.json or CLAUDE.md)
claude skill preset test

Option B — Session-scoped via slash command

/skill off stripe-payment     # disables for this session only
/skill on tdd-razor-pages
/skill list
/skill preset dev

Option C — enabled frontmatter field in SKILL.md

---
name: stripe-payment
description: Multi-provider payment gateway integration
enabled: false          # <-- new field; Claude skips loading this skill
---

---

Preset Support

Allow grouping skills into named presets in .claude/settings.json or a dedicated config:

{
  "skillPresets": {
    "init":    ["clean-architecture-dotnet", "csharp-coding-standards", "efcore-patterns"],
    "dev":     ["razor-page-crud", "signalr-integration", "stripe-payment", "efcore-patterns"],
    "test":    ["tdd-razor-pages", "pds-test", "database-performance"],
    "release": ["pds-test", "tdd-razor-pages", "database-performance"]
  }
}

Then apply with:

claude skill preset dev
# or in-session:
/skill preset test

---

Current Workaround

The only workaround today is manually moving skill folders in/out of .claude/skills/ using a custom script:

.claude/skills/           ← Claude loads these
.claude/skills-inactive/  ← Claude ignores these (arbitrary folder name)

We wrote a PowerShell script to manage this, but it feels like something Claude Code should handle natively:

# skill-manager.ps1 — workaround we had to build ourselves
.\scripts\skill-manager.ps1 list
.\scripts\skill-manager.ps1 preset dev
.\scripts\skill-manager.ps1 off stripe-payment

This works but requires users to manually manage filesystem state and restart Claude Code to pick up changes.

---

Expected Behavior

| Command | Result |
|---------|--------|
| claude skill list | Shows all skills with ON/OFF status and description from SKILL.md |
| claude skill off <name> | Disables skill; excluded from context in future sessions |
| claude skill on <name> | Re-enables skill |
| claude skill preset <name> | Activates a preset group, deactivates the rest |
| /skill list | Same, but scoped to current session only |

---

Why This Matters

  • Token efficiency: Projects with 10+ skills waste context on irrelevant skill descriptions every session
  • Phase-based workflows: Different project phases (init, dev, test, release) need different skill sets
  • Team projects: Different team members working on different areas benefit from different active skill sets
  • Scales with the ecosystem: As the Claude Code skill marketplace grows, users will accumulate more skills — this problem will only get worse without a management mechanism

---

Related

View original on GitHub ↗

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