[BUG] Incorrect skill deduplication on NFS filesystem - only 1 of 8 skills loads
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:
- skill-alpha
- skill-beta
- skill-gamma
- skill-delta
- skill-epsilon
- skill-zeta
- skill-eta
- 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
- Set up a project on an NFS filesystem
- Create 8 skills in
.claude/skills/, each with validSKILL.mdfiles - Ensure all have
userInvocable: truein frontmatter - Start Claude Code
- Run
/skillscommand - Observe that only 1 skill is available
- Check
~/.claude/debug/latestand see "same inode" deduplication messages
Hypothesis
Claude Code's skill deduplication logic may have a bug when running on NFS filesystems. Possible causes:
- Incorrect inode comparison logic
- NFS-specific inode handling issues
- Race condition during skill loading creating false duplicate detection
- 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:
- NFS filesystems with large inode numbers
- Multiple unique skills in the same directory structure
- 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_
This issue has 4 comments on GitHub. Read the full discussion on GitHub ↗