[FEATURE] Match terminal spinner verb behavior in VS Code (one verb per turn)
Preflight Checklist
- [x] I have searched existing requests and this feature hasn't been requested yet
- [x] This is a single feature request (not multiple features)
Problem Statement
The Claude Code VS Code extension and terminal CLI behave differently with spinnerVerbs. The terminal picks one random verb per Claude turn and keeps it on screen until the turn ends. The VS Code webview rotates through a shuffled list on a hardcoded [2000, 3000, 5000] ms schedule.
If you customize spinnerVerbs.verbs to multi-word phrases, the terminal shows them long enough to read. The VS Code webview swaps them out before you finish reading. The same setting produces a noticeably worse experience in one of the two surfaces.
Proposed Solution
Make the VS Code webview match the terminal: select one verb per turn and keep it for the duration of that turn, instead of rotating on an interval.
If continuous rotation is desired in the webview, expose the schedule in settings.json, for example:
"spinnerVerbs": {
"mode": "replace",
"verbs": ["..."],
"rotationIntervals": [4000, 6000, 8000]
}
A rotationCadence: "match-terminal" | "fast" | "slow" enum would also work.
Alternative Solutions
The only workaround today is patching webview/index.js in the installed extension to rewrite the hardcoded interval array. That gets overwritten on every extension update.
Priority
Low - Nice to have
Feature Category
Configuration and settings
Use Case Example
- I customize spinnerVerbs.verbs in ~/.claude/settings.json with a long themed list of multi-word phrases.
- In the terminal CLI, each Claude turn shows one verb that stays put until the turn ends. Readable.
- In the VS Code extension, the same verbs cycle every 2-5 seconds and most are unreadable before they're replaced.
- With matching behavior (or a rotationIntervals setting), the customization works in both surfaces.
Additional Context
Verified by reading both bundles.
Terminal CLI: the verb is set once per Claude turn via something equivalent to spinnerVerb = sample(verbs), stored in a React useState lazy initializer that never resets. No rotation timer.
VS Code webview: the spinner component runs a setInterval that cycles through a shuffled copy of the verb list on a hardcoded [2000, 3000, 5000] ms schedule.
Related but distinct: #56453, #52532, #48807 cover which verbs are shown, not how often (or whether) they rotate.
This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗