GitHub - vipulawl/claude-tips: Customize Claude Code spinner tips with live jokes, quotes, facts, or your own content

3 min read Original article ↗

Customize the Claude Code spinner tips with live jokes, quotes, facts, or anything you want — no more "Tip: Connect Claude to your IDE".

Claude Code shows a rotating tip while it thinks. I got bored of seeing that since i spend a lot of time on Claude code everyday. This tool replaces those with fresh content fetched from the internet. Works with any Claude Code session automatically — run it once and it persists.

Screenshot 2026-05-21 at 12 53 11

Quick start

git clone https://github.com/vipulawl/claude-tips.git
cd claude-tips
python3 claude_tips.py --provider jokes

That's it. Open any Claude Code session and you'll see jokes instead of tips.


How it works

Claude Code reads ~/.claude/settings.json at startup. This tool writes a spinnerTipsOverride key there with your content. No monkey-patching, no process injection — just a native Claude Code setting.

{
  "spinnerTipsOverride": {
    "tips": ["Why did the API return 418? It's a teapot.", "..."],
    "excludeDefault": true
  }
}

Does it persist across sessions?

Yes. Run the script once and the tips stay until you reset them. The only reason to re-run is if you want a fresh batch of jokes/quotes.

To auto-refresh every time you open a terminal, add this to your ~/.zshrc:

(cd ~/claude-tips && python3 claude_tips.py --provider jokes --count 15 > /dev/null 2>&1 &)

Or set up a cron job to refresh hourly:

0 * * * * cd ~/claude-tips && python3 claude_tips.py --provider jokes --count 15

Built-in providers

Provider Source API key needed
jokes JokeAPI — clean, programmer-friendly No
quotes ZenQuotes No
facts UselessFacts No
custom Your own list via --tips No

All built-in providers are free with no API key required.


Usage

# jokes (default)
python3 claude_tips.py --provider jokes

# quotes
python3 claude_tips.py --provider quotes --count 15

# random facts
python3 claude_tips.py --provider facts --count 5

# your own list
python3 claude_tips.py --provider custom --tips "Tip one" "Tip two" "Tip three"

# mix with Claude's default tips instead of replacing them
python3 claude_tips.py --provider jokes --keep-default

# auto-refresh every hour (keeps tips fresh)
python3 claude_tips.py --provider jokes --watch --interval 3600

# disable all tips entirely
python3 claude_tips.py --disable

# restore Claude's original default tips
python3 claude_tips.py --reset

Adding your own provider

Create a Python file with a fetch function:

# my_provider.py
import urllib.request, json

def fetch(count: int) -> list[str]:
    # fetch from wherever you want — news API, RSS, a local file, anything
    data = json.loads(urllib.request.urlopen("https://your-api.com/endpoint").read())
    return [item["text"] for item in data[:count]]

Run it:

python3 claude_tips.py --provider-file my_provider.py

The only requirement is that fetch(count: int) -> list[str] is defined in the file.


All CLI flags

Flag Default Description
--provider jokes Content provider: jokes, quotes, facts, custom
--provider-file Path to a Python file defining fetch(count) -> list[str]
--count 10 Number of tips to fetch
--tips Tip strings for --provider custom
--keep-default false Mix with Claude's built-in tips instead of replacing
--watch false Keep running, refresh on --interval
--interval 3600 Seconds between refreshes in watch mode
--disable Turn off all spinner tips
--reset Restore Claude's original default tips

Requirements

  • Python 3.9+
  • Claude Code CLI
  • No third-party packages — uses stdlib only (urllib, json, pathlib)

License

MIT