Project-Specific Slash Commands Not Loading in Claude Code 2.0.69 (macOS)
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?
Claude Code 2.0.69 on macOS is not discovering or loading project-specific slash commands from .claude/commands/ directory.
Symptoms:
- ❌ Commands in
.claude/commands/*.mddo NOT appear in autocomplete when typing/ - ❌ Commands do NOT appear in
/helpoutput - ❌ Commands are NOT included in SlashCommand tool context
- ❌ Attempting to execute commands (e.g.,
/my_command) fails - command not found - ✅ Plugin commands from
~/.claude/plugins/load and work correctly (67 plugin commands loaded successfully)
The same command files work correctly in Docker environment with identical Claude Code version 2.0.69, suggesting this is a macOS-specific bug.
What Should Happen?
Local project commands in .claude/commands/*.md should be:
- Discovered automatically when Claude Code starts in a project directory
- Available in autocomplete when typing
/ - Listed in
/helpoutput alongside plugin commands - Executable via SlashCommand tool when invoked
- Included in system context for command execution
Plugin commands work correctly - project commands should work the same way.
Error Messages/Logs
# Plugin commands loaded successfully
2025-12-13T17:07:38.300Z [DEBUG] Loaded 4 commands from plugin cognitive-orchestration default directory
2025-12-13T17:07:38.303Z [DEBUG] Loaded 4 commands from plugin data-intelligence default directory
2025-12-13T17:07:38.304Z [DEBUG] Loaded 4 commands from plugin ux-product default directory
2025-12-13T17:07:38.309Z [DEBUG] Loaded 4 commands from plugin frontend-excellence default directory
2025-12-13T17:07:38.311Z [DEBUG] Loaded 4 commands from plugin backend-security default directory
2025-12-13T17:07:38.318Z [DEBUG] Loaded 15 commands from plugin dev-accelerator default directory
2025-12-13T17:07:38.319Z [DEBUG] Loaded 4 commands from plugin infra-pipeline default directory
2025-12-13T17:07:38.320Z [DEBUG] Loaded 8 commands from plugin interview-assist default directory
2025-12-13T17:07:38.320Z [DEBUG] Loaded 3 commands from plugin personalities default directory
2025-12-13T17:07:38.321Z [DEBUG] Loaded 3 commands from plugin insight-engine default directory
2025-12-13T17:07:38.322Z [DEBUG] Loaded 5 commands from plugin observability-ops default directory
2025-12-13T17:07:38.322Z [DEBUG] Loaded 4 commands from plugin queue-orchestrator default directory
2025-12-13T17:07:38.323Z [DEBUG] Loaded 5 commands from plugin project-delivery default directory
2025-12-13T17:07:38.323Z [DEBUG] Total plugin commands loaded: 67
2025-12-13T17:07:38.517Z [DEBUG] Loaded plugins - Enabled: 13, Disabled: 0, Commands: 67, Agents: 76, Errors: 0
# SlashCommand tool includes ONLY plugin commands (project commands missing)
2025-12-13T17:07:39.290Z [DEBUG] Slash commands included in SlashCommand tool: /cognitive-orchestration:constructive_dissent, /cognitive-orchestration:multi_perspective, /cognitive-orchestration:orchestrate, /cognitive-orchestration:ultrathink, /data-intelligence:analytics, /data-intelligence:data, /data-intelligence:etl, /data-intelligence:timeseries, /ux-product:journey, /ux-product:product, /ux-product:user-research, /ux-product:ux, /frontend-excellence:frontend, /frontend-excellence:react, /frontend-excellence:state, /frontend-excellence:ui, /backend-security:api, /backend-security:auth, /backend-security:llm, /backend-security:security, /dev-accelerator:workflows:feature-development, /dev-accelerator:workflows:security-hardening, /dev-accelerator:workflows:tdd-cycle, /infra-pipeline:automate, /infra-pipeline:deploy, /infra-pipeline:infra, /infra-pipeline:pipeline, /interview-assist:behavioral, /interview-assist:coding, /interview-assist:leadership, /interview-assist:mock, /interview-assist:side-effects, /interview-assist:strategy, /interview-assist:system-design, /interview-assist:whiteboard, /personalities:analyze, /personalities:debate, /personalities:evaluate, /insight-engine:assumption_audit, /insight-engine:guest_expert, /insight-engine:synthesis_engine, /observability-ops:audit, /observability-ops:incident, /observability-ops:monitor, /observability-ops:slo, /observability-ops:trace, /queue-orchestrator:async, /queue-orchestrator:backpressure, /queue-orchestrator:distributed, /queue-orchestrator:queue, /project-delivery:metrics, /project-delivery:plan, /project-delivery:retro, /project-delivery:roadmap, /project-delivery:stakeholder
# Command files were successfully written by Claude Code
2025-12-13T17:28:57.553Z [DEBUG] Writing to temp file: /Users/username/projectfolder/.claude/commands/my_command.md.tmp.78262.1765646937553
2025-12-13T17:28:57.560Z [DEBUG] Renaming /Users/username/projectfolder/.claude/commands/my_command.md.tmp.78262.1765646937553 to /Users/username/projectfolder/.claude/commands/my_command.md
2025-12-13T17:28:57.561Z [DEBUG] File /Users/username/projectfolder/.claude/commands/my_command.md written atomically
2025-12-13T17:28:57.571Z [DEBUG] FileHistory: Tracked file modification for /Users/username/projectfolder/.claude/commands/my_command.md
2025-12-13T17:29:11.435Z [DEBUG] Writing to temp file: /Users/username/projectfolder/.claude/commands/custom_workflow.md.tmp.78262.1765646951435
2025-12-13T17:29:11.440Z [DEBUG] Renaming /Users/username/projectfolder/.claude/commands/custom_workflow.md.tmp.78262.1765646951435 to /Users/username/projectfolder/.claude/commands/custom_workflow.md
2025-12-13T17:29:11.440Z [DEBUG] File /Users/username/projectfolder/.claude/commands/custom_workflow.md written atomically
2025-12-13T17:29:11.453Z [DEBUG] FileHistory: Tracked file modification for /Users/username/projectfolder/.claude/commands/custom_workflow.md
Steps to Reproduce
- Create project with
.claude/commands/directory
``bash``
mkdir -p /Users/username/projectfolder/.claude/commands
- Add command file with correct frontmatter (e.g.,
.claude/commands/test.md)
```yaml
---
description: Test command to verify discovery
argument-hint: [arg1] [arg2]
allowed-tools: Bash(), Read(), Write(*)
---
This is a test command.
```
- Verify file permissions
``bash``
ls -la .claude/commands/test.md
# Should be readable: -rw-r--r--
- Start Claude Code 2.0.69 in the project directory
``bash``
cd /Users/username/projectfolder
claude
- Test command discovery
- Type
/to see autocomplete → only plugin commands appear - Type
/help→ only plugin commands listed - Try
/test→ command not found
Expected: /test command should appear and be executable
Actual: Command does not appear, only plugin commands load
Claude Model
Sonnet (default)
Is this a regression?
I don't know
Last Working Version
_No response_
Claude Code Version
2.0.69
Platform
Anthropic API
Operating System
macOS
Terminal/Shell
Terminal.app (macOS)
Additional Information
⚠️ Important Clue: Commands Work with --debug Flag
Critical finding: Project commands DO appear and work correctly when starting Claude Code with the --debug flag:
claude --debug
# Commands in .claude/commands/ are discovered and functional
Comparison:
- ✅
claude --debug→ Project commands load correctly - ❌
claude(normal mode) → Project commands do NOT load
This suggests:
- Debug mode may use a different code path for command discovery
- There could be a timing issue that debug mode avoids
- Normal mode may have an optimization or caching mechanism that's broken
- The command discovery logic exists but isn't being triggered in normal mode
Key Findings from Debug Logs
Log analysis reveals:
- ✅ 67 plugin commands loaded successfully
- ❌ NO log entries for loading project commands from
.claude/commands/ - ❌ SlashCommand tool context only includes plugin commands
- ✅ File write events confirm command files exist at correct location
Missing log entries (expected but not present):
- "Loaded commands from project"
- "Loaded X commands from .claude/commands"
- Any reference to discovering local command files
This confirms command files exist and are accessible, but project command discovery is completely skipped on macOS.
Version Testing
The break appeared to coincide with the auto-upgrade to version 2.0.69, leading to the initial suspicion of a regression. However:
- ❌ Reverted to version 2.0.65 - Commands still did not load
- ❌ Tested with 2.0.68 - Commands still did not load (if tested)
Conclusion: It's not clear if this is a regression or a pre-existing issue that was only recently discovered. The commands definitely work in Docker with 2.0.69, which points to a macOS-specific implementation issue rather than a recent breaking change.
Command File Details
Location:
/Users/username/projectfolder/.claude/commands/
├── my_command.md
├── custom_workflow.md
└── test.md
File Permissions:
-rw-r--r-- 1 username staff 27664 Dec 13 12:28 my_command.md
-rw-r--r-- 1 username staff 5615 Dec 13 12:29 custom_workflow.md
-rw-r--r-- 1 username staff 150 Dec 13 12:35 test.md
All files are readable and have correct permissions.
Sample Frontmatter (Verified Correct Format):
---
description: Execute one iteration - implement changes, validate, and document results
argument-hint: [scope] [iteration]
allowed-tools: Bash(*), Read(*), Write(*), Edit(*), Task(*), SlashCommand(*)
---
Format verified against official documentation:
- ✅ No
namefield (derived from filename) - ✅ No
argumentsarray (not supported) - ✅ Has
description(required for discovery) - ✅ Has
argument-hint(optional) - ✅ Has
allowed-tools(optional)
Workarounds Tested
❌ Failed Attempts:
- Restarting Claude Code - Commands still not discovered
- Clearing macOS extended attributes - No effect
- Using
--dangerously-skip-permissionsflag - Commands still not loaded - Checking file encoding - Files are UTF-8 (correct)
- Verifying working directory - Correct (
pwdmatches.claude/location)
✅ Working in Docker Environment:
The same command files work correctly when Claude Code runs in a Docker container:
Docker Configuration:
- Base Image: Ubuntu/Debian Linux
- Claude Code Version: Same (2.0.69, installed via npm)
- Volume Mounts:
- Project directory mounted at
/workspace(read/write) ~/.claudedirectory mounted from host (contains same settings, plugins, etc.)~/.gitconfigmounted (read-only)~/.sshmounted (read-only)- Working Directory: Container starts in
/workspace(project root) - Commands: Same
.claude/commands/*.mdfiles (via volume mount from macOS host)
Result: When running claude inside the Docker container, project commands load and work correctly.
Key observations:
- Same Claude Code binary version (2.0.69)
- Same command files (mounted from host filesystem)
- Same
~/.claudesettings directory (mounted from host) - Different OS: Linux (Docker) vs Darwin (macOS host)
This strongly suggests a macOS-specific bug in command discovery, potentially related to filesystem operations or path resolution that behaves differently on Darwin vs Linux.
🔄 Untested Workarounds:
- Global commands: Copy to
~/.claude/commands/instead of.claude/commands/ - Rollback to 2.0.68: Test if this is a regression in 2.0.69
Permissions Configuration
Commands are whitelisted in .claude/settings.local.json:
{
"allow": [
"SlashCommand(/my_command:*)",
"SlashCommand(/custom_workflow:*)"
]
}
Docker vs macOS Comparison
| Aspect | Docker (✅ Works) | macOS (❌ Broken) |
|--------|------------------|-------------------|
| Claude Code Version | 2.0.69 | 2.0.69 |
| Command Files | Same (mounted) | Same |
| File Permissions | Readable | Readable |
| Commands Load | Yes | No |
| Platform | Linux | Darwin |
Impact
This bug prevents using project-specific workflow automation commands, forcing users to:
- Use Docker containers (workaround overhead)
- Use global commands (loses project isolation)
- Use agents instead (different UX)
Configuration Files
.claude/settings.local.json:
{
"allow": [
"SlashCommand(/my_command:*)"
]
}
Working directory structure:
/Users/username/projectfolder/
├── .claude/
│ ├── commands/
│ │ ├── my_command.md
│ │ └── test.md
│ └── settings.local.json
└── (project files)This issue has 11 comments on GitHub. Read the full discussion on GitHub ↗