CLI: SlashCommand/Skill execution indicators display twice
Environment
- Claude CLI Version: 2.0.36 (Claude Code)
- Platform: macOS (Darwin 25.0.0)
- Terminal: Kitty
- Installation: CLI version (
~/.local/bin/claude)
Bug Description
Tool execution indicators display twice (back-to-back) in the chat interface when using SlashCommand or Skill tools.
Affected Tools:
- ✅ SlashCommand (e.g.,
/conduct-research,/prime,/bug, etc.) - ✅ Skill (when invoking skills)
Unaffected Tools:
- ❌ Bash, Read, Write, Edit, Grep, Glob (normal display)
- ❌ Task, WebSearch, WebFetch (normal display)
Reproducible Steps
- Launch Claude CLI in terminal
- Execute any slash command:
/conduct-research - Observe chat output
Expected Behavior:
> /conduct-research is running…
[command executes]
Actual Behavior:
> /conduct-research is running…
> /conduct-research is running…
[command executes]
Impact
Severity: Low (cosmetic only)
User Impact:
- Duplicate messages appear back-to-back immediately
- Creates confusion that commands are executing twice
- In reality, commands execute once (confirmed via event logs)
- No functional impact - purely a display rendering issue
Evidence of Single Execution:
- Event logs show single tool invocations
- Hooks fire once per execution
- Agent spawning happens once (e.g., 10 agents, not 20)
- No performance impact
Root Cause Analysis
The duplication occurs specifically in the tool execution indicator rendering for SlashCommand and Skill tools, suggesting:
- Special rendering path: These tools use a different display mechanism than other tools
- Expansion logic: SlashCommand/Skill expand templates, possibly triggering duplicate render
- CLI-specific: Desktop app doesn't exhibit this behavior (unconfirmed)
Additional Context
Configuration checked:
- No duplicate command registrations in
~/.claude/settings.json - No shell aliases causing duplication (
type claudeshows clean binary) - No terminal echo issues (
sttysettings normal) - Hook system not generating duplicate output
Event log verification:
# PostToolUse events show single executions per command
tail -100 ~/.claude/hooks/logs/events.jsonl | \
grep SlashCommand | \
jq -r '.timestamp + " " + .event_type'
Suggested Fix
Investigate the rendering logic for SlashCommand and Skill tools in the CLI display layer. Likely a duplicate console.log() or double event listener firing the "tool is running" message.
Workaround
User workaround: Ignore duplicate messages - commands execute correctly once.
Reporter
Jeremy Johnson (@jeremydjohnson)
- UFC system maintainer
- Heavy Claude CLI user with extensive hook/command infrastructure
---
This issue has 4 comments on GitHub. Read the full discussion on GitHub ↗