When we first told developers that WaitJI AI places ads inside Claude Code's thinking spinner, the immediate question was: how? Is it intercepting network requests? Injecting JavaScript? Patching the binary?
None of the above. The answer is far simpler โ and it uses an officially documented Claude Code feature that most developers don't know exists.
Claude Code stores its configuration in ~/.claude/settings.json. This file controls various aspects of how Claude Code behaves โ and one of those settings is spinnerVerbs.
By default, Claude Code cycles through a list of words in the thinking spinner: "Thinking", "Pondering", "Reflecting", "Considering", "Analyzing". These are the verbs that appear before the ellipsis as Claude Code processes your prompt.
The spinnerVerbs setting lets you replace this list entirely. Here's what the default config looks like:
{
"spinnerVerbs": {
"mode": "cycle",
"verbs": ["Thinking", "Pondering", "Reflecting"]
}
}
And here's what WaitJI AI writes to it:
{
"spinnerVerbs": {
"mode": "replace",
"verbs": ["WaitJI: Scaler โ India's top bootcamp ยท Apply now"]
}
}
This is not a hack. It is an officially documented configuration setting designed to let users and tools customise Claude Code's spinner text.
WaitJI AI's VS Code extension runs a background process called poller.mjs. Every 90 seconds, this daemon makes a single HTTP request to the WaitJI AI backend to fetch the latest ad for the current auction winner.
The response looks like this:
{
"ads": [{
"text": "Scaler โ India's top coding bootcamp ยท Apply now",
"url": "https://scaler.com/promo/waitji",
"adType": "spotlight",
"cpmPaise": 80000
}],
"servedAt": 1785094113986
}
The poller then writes this text to ~/.claude/settings.json under spinnerVerbs. Claude Code reads this config file dynamically โ so the next time you run a prompt, the spinner shows the new ad text instead of "Thinking...".
The Stream placement uses Claude Code's statusLine configuration โ another officially documented setting that controls what appears in the terminal status bar while Claude Code is running.
{
"statusLine": "โ WaitJI AI ยท Scaler โ India's top bootcamp"
}
This appears at the bottom of the terminal while Claude Code is active โ high volume, persistent brand awareness for the duration of every coding session.
The poller daemon is deliberately minimal:
~/.claude/settings.json โ one specific fileAds are served in real-time auction cycles. The highest bidder at any given moment wins the next impression. 90 seconds balances two requirements: fresh ad content for developers who run long sessions, and minimal network overhead.
In practice, most Claude Code sessions involve prompts every 30โ120 seconds. A 90-second polling interval means the ad shown is almost always the current auction winner โ not an outdated cached result.
WaitJI AI is not the only product using spinnerVerbs commercially. Kickbacks AI (kickbacksai.org) uses the same mechanism โ confirming that this approach is both technically legitimate and market-validated. The difference is that WaitJI AI is India-first, UPI-native, and built with transparent fraud protection.
Install the extension and watch the spinner yourself โ it takes 3 minutes.
Install WaitJI AI โ