Source Intelligence

DisclaimerUnofficial, and not affiliated with Anthropic. Nearly all of this is read straight out of what ships: npm bundles, captured prompts, published docs. Anthropic's own notes go in verbatim, marked as theirs. The rest is my reading, and every entry carries the strings behind it. If one looks wrong, vote it down and say why.

All of v2.1.247 Home All releases olderv2.1.246 v2.1.248newer
Claude Code v2.1.247

Configurable spinner tips: file-loaded, object-shaped, with a custom label

Use it now
Useful4 Signal2
Settings Notable

spinnerTipsOverride now takes an object: load tips from a file, relabel them, and drop the built-ins.

spinnerTipsOverride
What

The spinnerTipsOverride setting is now a full object rather than a list of strings, letting you supply tips inline or from a JSON file, replace the "Tip" prefix with your own label, and drop the tips that ship with Claude Code. Individual tips can carry an identifier, a per-tip cooldown and a priority weight so a curated set rotates the way you want. Parsing is lenient throughout, so a malformed field or entry is dropped rather than breaking settings loading, and what a scope is allowed to set depends on whether that scope is trusted.

Details
  • The object takes tips (the list itself), tipsFile (a path to a JSON file of the same shape), label (replaces the default "Tip" prefix), and excludeDefault (drops the built-in tips).
  • A tip entry is either a plain string or an object of the form { id, text, cooldownSessions?, priority? }; array members that are neither are dropped without rejecting the rest of the list.
  • id is a stable identifier of letters, digits, ., _ and -, up to 64 characters; text is capped at 500 characters and must be a single line.
  • cooldownSessions (default 0) is how many sessions to wait before showing a tip again; priority (default 0) breaks ties among tips that have never been shown.
  • spinnerTipsOverride is now read from project scope too, but project settings are untrusted: only plain strings are accepted there, and object entries are dropped with the warning spinnerTipsOverride: object tip entries in ${s} are ignored; only plain strings are read from project settings, where the placeholder names the scope.
  • tipsFile and label are ignored entirely when they come from an untrusted scope; tipsFile is honoured only from user settings, the --settings flag, and managed settings installed on disk, and is read once per CLI process.
  • A tipsFile arriving through remote managed settings is refused with spinnerTipsOverride.tipsFile from remote managed settings is ignored; ship inline tips or install the file path via managed-settings.json.
  • File load failures are logged and counted under the tips_org_tips_file_load metric.
  • The built-in tips are suppressed only when a trusted scope supplied tips, so if only a project supplied them the shipped defaults still show.
  • The spinner reads the label from application state as spinnerTipLabel and applies it to the narration tip; when the label is still the default "Tip" it renders lower-cased.
Evidence

{ id: stable id (letters, digits, ".", "_", "-"; max 64), text: the tip (max 500 characters, one line), cooldownSessions?: sessions to wait before showing it again (default 0), priority?: tie-break weight among never-shown tips (default 0) }, spinnerTipsOverride: object tip entries in ${s} are ignored; only plain strings are read from project settings, spinnerTipsOverride.tipsFile from remote managed settings is ignored; ship inline tips or install the file path via managed-settings.json, spinnerTipLabel

Strings lifted out of the shipped bundle, so the claim above can be checked against them.

Related

Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.

See this entry in the whole of v2.1.247 →