A comprehensive analysis of all processing words used in the Claude Code CLI (@anthropic-ai/claude-code) across its version history.
This repository contains tools and data analyzing the whimsical "processing words" displayed by Claude Code while it's thinking. These gerund-form verbs (words ending in -ing) add personality to the CLI experience.
- 139 versions analyzed (from v0.2.9 to v1.0.48)
- 100% extraction success rate
- 3 distinct phases of processing words:
- 56 words (v0.2.9 - v0.2.41): Original set missing "Pontificating"
- 57 words (v0.2.42 - v1.0.28): Standard set
- 90 words (v1.0.29 - current): Expanded set with 33 new whimsical additions
processing-words-all-versions.json- Comprehensive data for all versionsprocessing-words-history.json- Simplified word arrays per versionprocessing-words-analysis-report.json- Summary statistics and insightsknown-processing-words.json- Dictionary of all 90 known processing words
extract-processing-words-robust.js- Main extraction script using pattern matchingextract-batch.js- Batch processing script for handling large version rangescombine-batches.js- Combines batch results into final datasets
- Added "Pontificating" to complete the standard set (56 → 57 words)
- Major expansion adding 33 new words (57 → 90 words)
- New words include whimsical additions like:
- Flibbertigibbeting
- Discombobulating
- Wizarding
- Booping
- And 29 more creative verbs
- Processing words are stored in minified JavaScript variables
- Variable names change with each build (e.g., Lj6, pz5, zw5, jy6)
- The 90 processing words are all positive/whimsical verbs - no concerning words like "Terminating" or "Crashing" appear in the dataset
- All processing words are unique with no duplicates in the array
The CLI includes a sophisticated dynamic configuration system that can fetch additional "spinner words" from Anthropic's servers at runtime:
- Static Processing Words: Hardcoded array of 90 words
- Dynamic Configuration: Fetches additional words via the
tengu_spinner_wordsconfiguration key - Merger System: Combines static and dynamic words:
[...hardcodedWords, ...dynamicWords] - Default Fallback: Uses empty array
{words: []}if dynamic fetch fails
- Uses React hooks for state management
- Includes environment variable checks to disable in certain contexts (e.g.,
DISABLE_TELEMETRY) - Random word selection every 1000ms for display
- Memoization prevents unnecessary re-fetching
- 5-minute cache TTL for configuration data
"Tengu" appears to be the internal project codename for Claude Code CLI:
- Configuration keys:
tengu_spinner_wordsfor dynamic words - Telemetry events:
tengu_oauth_*,tengu_config_*,tengu_preflight_check_failed - Used consistently throughout the codebase for feature flags and analytics
The name likely references the Japanese mythological creature known for wisdom and mischief, fitting the CLI's whimsical personality.
The dynamic system powered by Statsig provides several advantages:
- Real-time Updates: Update spinner words without releasing new CLI versions
- A/B Testing: Test different word sets with user segments
- Seasonal Content: Add holiday or event-specific words dynamically
- User Personalization: Customize words based on user type (pro/max/enterprise)
- Gradual Rollout: Test new words with small user percentages first
- Analytics: Track which words appear most often and user engagement
This architecture explains why static analysis finds only 90 unique words - the system is designed to be extensible through server-side configuration.
The spinner word system follows this flow:
- Initialization: CLI starts and loads static words (90 items)
- Dynamic Fetch: Attempts to fetch additional words from Statsig
- Merge: Combines static and dynamic word arrays
- Selection: Randomly picks words from combined list
- Display: Shows selected word in spinner component
- Fallback: Uses only static words if dynamic fetch fails
This ensures reliable operation even without network connectivity while enabling real-time customization when connected.
To run the extraction on new versions:
# Extract all versions from 0.2.9 onwards
node extract-processing-words-robust.js
# Or process in batches
node extract-batch.js 1 # Process batch 1 (first 30 versions)
node extract-batch.js 2 # Process batch 2 (next 30 versions)
# etc...
# Combine batch results
node combine-batches.jsThe analysis discovered 119 unique variable names used across versions, showing how the minified code changes with each build. Examples include: Aq6, At6, C31, CL3, Cu5, D31, DE5, Dt6, Ed5, F31, and many more.
This analysis is provided for educational and research purposes. The Claude Code CLI is property of Anthropic.