[BUG] Incorrect skill deduplication on NFS filesystem - only 1 of 8 skills loads

Resolved 💬 4 comments Opened Jan 30, 2026 by RonyKositsky Closed Feb 28, 2026

Preflight Checklist

  • [x] I have searched existing issues and this hasn't been reported yet
  • [x] This is a single bug report (please file separate reports for different bugs)
  • [x] I am using the latest version of Claude Code

What's Wrong?

GitHub Issue: Claude Code Skill Loading Bug

Issue Title

Incorrect skill deduplication on NFS filesystem - only 1 of 8 skills loads

Issue Body

Summary

Claude Code's skill deduplication logic incorrectly marks 7 out of 8 project skills as duplicates, leaving only 1 skill available. Debug logs show skills are being skipped due to "same inode already loaded" despite all skills having unique inodes.

Environment

  • Claude Code Version: 2.1.25
  • Filesystem: NFS (remote mount)
  • Platform: Linux
  • Working Directory: /nfs/project/myproject

Expected Behavior

All 8 skills in .claude/skills/ should be loaded and available via /skills command:

  1. skill-alpha
  2. skill-beta
  3. skill-gamma
  4. skill-delta
  5. skill-epsilon
  6. skill-zeta
  7. skill-eta
  8. skill-theta

Actual Behavior

Only 1 skill (skill-alpha) is loaded and available. The /skills command shows:

1 skill

Project skills (.claude/skills)
skill-alpha · ~144 description tokens

Debug Log Evidence

From ~/.claude/debug/latest:

2026-01-30T05:59:27.554Z [DEBUG] Skipping duplicate skill 'skill-gamma' from projectSettings (same inode already loaded from projectSettings)
2026-01-30T05:59:27.554Z [DEBUG] Skipping duplicate skill 'skill-eta' from projectSettings (same inode already loaded from projectSettings)
2026-01-30T05:59:27.554Z [DEBUG] Skipping duplicate skill 'skill-beta' from projectSettings (same inode already loaded from projectSettings)
2026-01-30T05:59:27.554Z [DEBUG] Skipping duplicate skill 'skill-zeta' from projectSettings (same inode already loaded from projectSettings)
2026-01-30T05:59:27.554Z [DEBUG] Skipping duplicate skill 'skill-delta' from projectSettings (same inode already loaded from projectSettings)
2026-01-30T05:59:27.554Z [DEBUG] Skipping duplicate skill 'skill-epsilon' from projectSettings (same inode already loaded from projectSettings)
2026-01-30T05:59:27.554Z [DEBUG] Skipping duplicate skill 'skill-theta' from projectSettings (same inode already loaded from projectSettings)
2026-01-30T05:59:27.554Z [DEBUG] Deduplicated 7 skills (same inode)
2026-01-30T05:59:27.554Z [DEBUG] Loaded 1 unique skills (managed: 0, user: 0, project: 8, legacy commands: 0)

Key observation: It says "project: 8" skills were found initially, but after "deduplication," only "1 unique skills" remains.

Proof That Inodes Are Unique

SKILL.md File Inodes

All SKILL.md files have unique inodes:

$ stat -c "%i %n" .claude/skills/*/SKILL.md
9259177933760815043 .claude/skills/skill-alpha/SKILL.md
9259177933760815084 .claude/skills/skill-beta/SKILL.md
9259177933760815088 .claude/skills/skill-gamma/SKILL.md
9259177933760815091 .claude/skills/skill-delta/SKILL.md
9259177933760815087 .claude/skills/skill-epsilon/SKILL.md
9259177933760815092 .claude/skills/skill-zeta/SKILL.md
9259177933760815507 .claude/skills/skill-eta/SKILL.md
9259177933760815518 .claude/skills/skill-theta/SKILL.md
Skill Directory Inodes

Skill directories also have unique inodes:

$ stat -c "%i %n" .claude/skills/skill-alpha .claude/skills/skill-gamma .claude/skills/skill-beta
9259177933740693875 .claude/skills/skill-alpha
9259177933740713284 .claude/skills/skill-gamma
9259177933676879230 .claude/skills/skill-beta

Skill File Structure

All skills have valid YAML frontmatter with userInvocable: true:

$ grep -r "userInvocable:" .claude/skills/*/SKILL.md
.claude/skills/skill-alpha/SKILL.md:userInvocable: true
.claude/skills/skill-beta/SKILL.md:userInvocable: true
.claude/skills/skill-gamma/SKILL.md:userInvocable: true
.claude/skills/skill-delta/SKILL.md:userInvocable: true
.claude/skills/skill-epsilon/SKILL.md:userInvocable: true
.claude/skills/skill-zeta/SKILL.md:userInvocable: true
.claude/skills/skill-eta/SKILL.md:userInvocable: true
.claude/skills/skill-theta/SKILL.md:userInvocable: true

NFS Filesystem Details

The project directory is on an NFS mount, evidenced by:

  • Numerous .nfs* lock files in skill directories
  • Very large inode numbers (typical of NFS filesystems)
  • Working directory path: /nfs/project/... (automounter path)

Steps to Reproduce

  1. Set up a project on an NFS filesystem
  2. Create 8 skills in .claude/skills/, each with valid SKILL.md files
  3. Ensure all have userInvocable: true in frontmatter
  4. Start Claude Code
  5. Run /skills command
  6. Observe that only 1 skill is available
  7. Check ~/.claude/debug/latest and see "same inode" deduplication messages

Hypothesis

Claude Code's skill deduplication logic may have a bug when running on NFS filesystems. Possible causes:

  1. Incorrect inode comparison logic
  2. NFS-specific inode handling issues
  3. Race condition during skill loading creating false duplicate detection
  4. Comparing wrong file/directory for inode matching

Impact

  • Users on NFS filesystems cannot use multiple project skills
  • Severely limits Claude Code functionality for development teams using networked storage
  • No workaround available without moving project to local filesystem

Additional Notes

  • Attempting to invoke a "missing" skill directly fails with "Unknown skill: skill-gamma"
  • The skills are genuinely not loaded, not just hidden from the UI
  • All skill files are valid (confirmed via Python YAML parsing)
  • File permissions are correct (readable by user)

Requested Fix

Please fix the skill deduplication logic to correctly handle:

  1. NFS filesystems with large inode numbers
  2. Multiple unique skills in the same directory structure
  3. Proper inode comparison to avoid false positives

What Should Happen?

I want to see al my skills properly

Error Messages/Logs

Steps to Reproduce

Mentioned above

Claude Model

None

Is this a regression?

I don't know

Last Working Version

_No response_

Claude Code Version

2.1.25

Platform

Anthropic API

Operating System

Other Linux

Terminal/Shell

Other

Additional Information

_No response_

View original on GitHub ↗

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