Coding Status for Discord
Your Discord status, now Flibbertigibbeting.


A VS Code extension that turns your editor activity into Discord Rich Presence: the language you're in, the time you've been at it, and a rotating spinner word borrowed from Claude Code's loading animation. Your status reads Cogitating..., Moonwalking..., or the occasional Flibbertigibbeting... while you code.
Install
Grab it from the VS Code Marketplace, search Coding Status in the Extensions view, or run ext install Achilleees.coding-status-for-discord from Quick Open (Ctrl+P).
Features
- Zero configuration: install and it works
- Zero runtime dependencies: the Discord IPC client is hand-rolled; nothing third-party ships in the bundle
- 187 spinner words from Claude Code, rotating every 15 seconds (configurable)
- Editable word lists: merge or replace the built-ins, or fork and prune the default Claude list
- Language detection with per-language icons for 43 languages (and growing)
- Framework detection: your status reads
Working in TypeScript · Next.js, auto-detected from your project's manifests
- Session elapsed time shown on your Discord profile
- Smart state: changes the status line when you're debugging, reviewing a diff, or focused on the terminal
- Idle handling: slows down, pauses, or clears presence when VS Code loses focus for too long
- Optional repo button: a clickable link to your git remote on your profile (opt-in, off by default)
- Toggle command & keybinding: hide presence any time (
Ctrl+Alt+D / Cmd+Alt+D)
- Preview command: see exactly what others see, buttons included
- Auto-reconnects if Discord is restarted
- Silently does nothing if Discord isn't running: no errors, no noise
- No telemetry, no network calls beyond the local Discord IPC socket
How it works
When VS Code is open and Discord is running on the same machine, the extension connects to Discord over its local IPC socket and sets your Rich Presence. Every 15 seconds it rotates to a new spinner word. No accounts, no API keys, no setup.
Commands
| Command |
Description |
Toggle Coding Status Presence |
Pause or resume the presence. Paused clears the presence from Discord entirely. State does not persist across VS Code restarts. Bound to Ctrl+Alt+D (Cmd+Alt+D on macOS). |
Preview Current Presence |
Pop up the exact status line, details, and buttons your presence is sending, including the repo button, which Discord shows to others but never to you. |
Edit Default Word List |
Open an editable copy of the built-in Claude word list (enables editDefaultWords). Your edits live in defaultWordList; the originals are never touched. |
Reset Default Word List |
Clear defaultWordList and turn editDefaultWords off; rotation falls back to the built-in list. (The setting is emptied, not repopulated.) |
All commands live under the Coding Status category in the command palette.
Settings
All settings live under the claudeSpinner.* namespace (internal ID, kept stable across renames) and live-reload on change.
All 18 settings (click to expand)
| Setting |
Type |
Default |
What it does |
claudeSpinner.enabled |
boolean |
true |
Master switch. Off → disconnect from Discord. |
claudeSpinner.cycleSpeed |
number (5–120) |
15 |
Seconds between word rotations. 5s minimum respects Discord's rate limit. |
claudeSpinner.cycleWords |
boolean |
true |
Rotate the word. Off → pick one word on activation and keep it. |
claudeSpinner.customWords |
string[] |
[] |
Extra words mixed into the rotation. Each entry 1–125 characters. Case-sensitive: "working" and built-in "Working" both appear. |
claudeSpinner.customWordsMode |
merge / replace |
merge |
merge mixes your custom words into the defaults; replace uses only your custom words (falls back to the defaults when your list is empty). |
claudeSpinner.editDefaultWords |
boolean |
false |
Use your edited copy of the default list (defaultWordList) instead of the built-in 187. |
claudeSpinner.defaultWordList |
string[] |
[] |
Your editable copy of the default Claude words. Populated by Edit Default Word List; only consulted when editDefaultWords is on. |
claudeSpinner.showLanguage |
boolean |
true |
Show the second status line beneath the cycling word. Working in X, the smart-state variants, and the workspace suffix all live on it; off hides that line entirely. |
claudeSpinner.detectFramework |
boolean |
true |
Append the detected framework to the language line (Working in TypeScript · Next.js). Shown only for files in the framework's language family. |
claudeSpinner.showWorkspace |
boolean |
false |
Append the workspace folder name to the status line. Off by default for privacy. |
claudeSpinner.showRepoButton |
boolean |
false |
Add a button linking to the active workspace's git remote, labeled with its host. Off by default for privacy; visible to others, not to you. |
claudeSpinner.showElapsedTime |
boolean |
true |
Show the session elapsed time on your profile. Counts from when VS Code opened, not from when the extension was last enabled; disabling and re-enabling does not reset the timer. |
claudeSpinner.showLanguageIcon |
boolean |
true |
Use a per-language icon as the small overlay. Falls back to the Claude logo. |
claudeSpinner.smartState |
boolean |
true |
Vary the status line when debugging, reviewing a diff, or focused on the terminal. Requires showLanguage (it varies that same line). |
claudeSpinner.idleBehavior |
slow / pause / clear / none |
slow |
What happens when VS Code loses focus past the idle threshold. |
claudeSpinner.idleThresholdMinutes |
number (1–60) |
5 |
Minutes after the VS Code window loses focus before idle mode engages. |
claudeSpinner.wordRarity |
boolean |
false |
Opt-in weighted pick: common (~70%), uncommon (~25%), rare (~5%). |
claudeSpinner.timeBasedPools |
boolean |
false |
Opt-in bias by session length: warming-up, in-the-zone, deep-session word groups. Tier classification uses a monotonic clock that pauses during system sleep on macOS/Linux, so multi-hour sleeps may briefly desynchronize the displayed tier from Discord's wall-clock elapsed time until the session resumes ticking. |
Smart state priority
When smartState is on, the status line follows this priority:
- Debug session active →
Debugging in {language}
- Most recent interaction was in the terminal (and a terminal is open) →
In the terminal
- Active tab is a diff editor →
Reviewing in {language}
- Otherwise →
Working in {language}
Your last interaction wins overlaps: working in the terminal while a diff tab is visually active shows In the terminal, not Reviewing. Toggle showWorkspace to append — {workspace} to rules 1–4 above. The whole line is gated on showLanguage; when no language is detected and no smart trigger is active, the state line is omitted. There is no standalone workspace-only line.
Idle behaviors
When VS Code loses focus for idleThresholdMinutes:
slow: the cycle interval quadruples (clamped to 120s)
pause: cycling stops, last presence stays visible
clear: cycling stops, presence cleared from Discord
none: no change, keep cycling normally
Re-focusing pushes a fresh presence immediately and restores the normal cycle.
Customizing the word list
Three independent knobs, simplest first:
- Add your own words: list them in
customWords. By default they're merged into the rotation alongside the built-ins.
- Replace instead of merge: set
customWordsMode to replace and only your customWords are used (the built-ins step aside). With no custom words it falls back to the built-ins, so the rotation is never empty.
- Edit the defaults themselves: run Edit Default Word List to open an editable copy of the built-in 187 in
defaultWordList, prune or tweak it, then turn on editDefaultWords. Reset Default Word List clears your copy and turns editDefaultWords off, so rotation falls back to the built-ins. This is separate from customWords; the originals are never mutated.
Language icons
Dedicated icons for 43 languages and frameworks; anything else falls back to the Claude logo while keeping its name in the tooltip.
Full list
TypeScript, JavaScript, React (.tsx / .jsx), Vue, Svelte, Astro, Python, Rust, Go, Java, C, C++, C#, HTML, CSS, Ruby, PHP, Swift, Kotlin, Dart, Lua, Elixir, Haskell, Scala, Shell (+ bash, zsh, fish), SQL, JSON, YAML, Markdown, R, MATLAB, Julia, OCaml, F#, Clojure, Erlang, Perl, Groovy, PowerShell, Objective-C (+ Objective-C++), GraphQL, Docker, LaTeX.
Missing one you use? Open an issue and I'll add it.
Framework detection
With detectFramework on (the default), the status line appends the framework you're working in: Working in TypeScript · Next.js. It's read straight from your project's manifests (package.json, pyproject.toml, requirements.txt, Gemfile, pubspec.yaml). No guessing, no network call.
Detected frameworks:
- JavaScript / TypeScript: Next.js, Nuxt, SvelteKit, Remix, Astro, Gatsby, Angular, NestJS, Vue, Svelte, SolidJS, Preact, React, Electron, Express
- Python: Django, FastAPI, Flask
- Ruby: Rails
- Dart: Flutter
Two things keep it honest:
- Most-specific wins. Within a JavaScript project the more specific framework is shown: a repo with both Next.js and React reads
Next.js; SvelteKit beats Svelte, Nuxt beats Vue.
- Gated by the active file's language. The framework shows only for files in its own language family, so a Python script in a Next.js repo still reads
Working in Python. A polyglot monorepo surfaces the right framework per file.
Turn it off to keep the bare language line.
Opt in with showRepoButton and your presence gains a button linking to the active workspace's git remote, labeled with its host (e.g. github.com). The URL is read from .git/config, normalized to a clean https:// link with any embedded credentials stripped.
It's off by default for privacy, and, like every Discord button, it's visible to other people viewing your profile, never to you. Use Preview Current Presence to see exactly what it looks like.
Note that the extension makes no network calls, so it can't tell public repos from private ones: the button appears for any workspace with a git remote, and for a private repo viewers still see the host and repo path (the link just won't open for them). Leave it off for projects you'd rather not advertise.
The Word List
All 187 words (click to expand)
Accomplishing Actioning Actualizing
Architecting Baking Beaming
Beboppin' Befuddling Billowing
Blanching Bloviating Boogieing
Boondoggling Booping Bootstrapping
Brewing Bunning Burrowing
Calculating Canoodling Caramelizing
Cascading Catapulting Cerebrating
Channeling Channelling Choreographing
Churning Clauding Coalescing
Cogitating Combobulating Composing
Computing Concocting Considering
Contemplating Cooking Crafting
Creating Crunching Crystallizing
Cultivating Deciphering Deliberating
Determining Dilly-dallying Discombobulating
Doing Doodling Drizzling
Ebbing Effecting Elucidating
Embellishing Enchanting Envisioning
Evaporating Fermenting Fiddle-faddling
Finagling Flambéing Flibbertigibbeting
Flowing Flummoxing Fluttering
Forging Forming Frolicking
Frosting Gallivanting Galloping
Garnishing Generating Gesticulating
Germinating Gitifying Grooving
Gusting Harmonizing Hashing
Hatching Herding Honking
Hullaballooing Hyperspacing Ideating
Imagining Improvising Incubating
Inferring Infusing Ionizing
Jitterbugging Julienning Kneading
Leavening Levitating Lollygagging
Manifesting Marinating Meandering
Metamorphosing Misting Moonwalking
Moseying Mulling Mustering
Musing Nebulizing Nesting
Newspapering Noodling Nucleating
Orbiting Orchestrating Osmosing
Perambulating Percolating Perusing
Philosophising Photosynthesizing Pollinating
Pondering Pontificating Pouncing
Precipitating Prestidigitating Processing
Proofing Propagating Puttering
Puzzling Quantumizing Razzle-dazzling
Razzmatazzing Recombobulating Reticulating
Roosting Ruminating Sautéing
Scampering Schlepping Scurrying
Seasoning Shenaniganing Shimmying
Simmering Skedaddling Sketching
Slithering Smooshing Sock-hopping
Spelunking Spinning Sprouting
Stewing Sublimating Swirling
Swooping Symbioting Synthesizing
Tempering Thinking Thundering
Tinkering Tomfoolering Topsy-turvying
Transfiguring Transmuting Twisting
Undulating Unfurling Unravelling
Vibing Waddling Wandering
Warping Whatchamacalliting Whirlpooling
Whirring Whisking Wibbling
Working Wrangling Zesting
Zigzagging
Requirements
- Discord desktop app running on the same machine as VS Code
- That's it
Privacy
- No telemetry, ever
- No network calls beyond the local Discord IPC socket
showWorkspace is off by default, so your folder name never leaves your machine unless you turn it on
showRepoButton is off by default, so your repo URL is only shown if you opt in (and it broadcasts the remote's host and path whether the repo is public or private)
Thanks
Thanks for installing! If you enjoy it, a star on GitHub goes a long way - it's honestly how I decide what to keep polishing. Bugs, feature requests, and new-language suggestions are all welcome in issues.
Credits
The spinner word list comes from Claude Code by Anthropic. Most language icons are from Devicon; a few data-format icons (JSON, YAML, SQL) come from the Material Icon Theme, both MIT-licensed. The Anthropic logomark is from Simple Icons (CC0), and the VS Code logo is from Devicon. The hand-rolled Discord IPC client was modeled on the protocol implementation in @xhayper/discord-rpc - no longer a dependency, but it lit the way.
Huge thanks to every maintainer of those projects.
License
MIT