anthropics / anthropics/claude-code

[BUG] No disk-sourced skills load in 2.1.271 — user skills and enabled-plugin skills both absent; only bundled skills register

Open
#95,367 1 comment 0 reactions 0 assignees View on GitHub
area:skills bug has repro platform:macos regression
Dominant language
Python
Stars
145k
Forks
23.1k
PR merge metrics
PR metrics pending

Description

## Summary

On 2.1.271 no skill that lives **on disk** registers. Neither the 12 user skills in `~/.claude/skills/` nor the skills shipped by an enabled plugin (`stripe@claude-plugins-official`) appear. The only skills available are the 13 compiled into the binary.

`Skill(good-morning)` returns `Unknown skill: good-morning`, and the name never appears in the available-skills list given to the model.

This reproduces in interactive sessions and in `claude -p`, across restarts.

## Environment

```
Claude Code 2.1.271 (native)
Commit: 3e71603b64bc
Platform: darwin-arm64 (macOS 27.0.0, APFS case-insensitive)
Install: ~/.local/share/claude/versions/2.1.271
claude doctor: "No installation issues found."
```

## Reproduction

```
$ ls ~/.claude/skills/
brain computer-use good-morning orchestration acme-archive acme-azure
acme-brain acme-repo acme-task acme-wiki standup unlazy

$ claude -p "List every skill name available to you, one per line."
dataviz
update-config
keybindings-help
code-review
simplify
fewer-permission-prompts
loop
schedule
claude-api
workflow-authoring
run
init
security-review
```

All 13 returned are bundled skills. None of the 12 on disk appear. `enabledPlugins` contains `{"stripe@claude-plugins-official": true}` and `~/.claude/plugins/cache/claude-plugins-official/stripe/0.8.2/skills/` exists with 8 `SKILL.md` files — none of those register either.

## What I ruled out

- **Directory casing.** The directory was `~/.claude/Skills` (capital S). Renamed to `skills` (two-step, case-insensitive FS). No change.
- **Symlinks.** All 12 entries are symlinks into a work root. I replaced one (`standup`) with a real directory (`cp -RL`) and re-ran: it still did not register. So symlinks alone do not explain it. (Noting 2.1.257's "component path that is a symlink ... now refused" hardening as possibly related, but the real-directory test argues it is not the whole story.)
- **Frontmatter.** `SKILL.md` files parse: `name`, `description` (~400 chars), `argument-hint`, `allowed-tools`. Same shape as skills that worked previously.
- **Org policy.** `policy-limits.json` restricts only `allow_remote_control`, `allow_quick_web_setup`, `enforce_web_search_mcp_isolation`. Nothing about skills. `remote-settings.json` is `{}`.
- **Settings.** No skill-related key in `~/.claude/settings.json`, and none in three dated backups of it.
- **Missing plugin install path.** The `installPath` in `installed_plugins.json` (0.8.2) exists on disk and contains `skills/`.

## Regression window

These skills worked recently: one of them generates timestamped HTML artifacts, and there are successful runs on disk dated **11, 14 and 15 Sep 2026**. By **17 Sep** every skill was gone.

2.1.271 was installed **14 Sep**, i.e. before the last known-good run, and `Last update attempt: none recorded` since. So the break does not line up with a version change on this machine — which is why I suspect state or discovery rather than a specific release, and why `claude doctor` passing is misleading here.

## Impact

Every user-authored and plugin-provided skill silently disappears. There is no warning, no count, and no error at startup — the skills simply are not in the list, and invoking one reports `Unknown skill`, which reads like the file is missing rather than like discovery failed. A startup diagnostic ("found N skill directories, loaded M, skipped K because ...") would have made this a one-minute diagnosis instead of a two-day one.

Possibly the persistent form of #85207, which was reported as a one-off on 2.1.226 where slash commands still worked; here they do not.

Contributor guide

No contributing guide indexed for this repository

Research direction

Start by reproducing the missing-skill behavior with `claude -p`, checking `~/.claude/skills/` and the enabled plugin cache described in the report. Trace the skill-discovery entry point for version 2.1.271 and compare bundled, user, and plugin sources. Done means disk-sourced skills register in interactive and non-interactive sessions, with useful diagnostics when discovery skips them.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
cli
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
38/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.