spinnerTipsOverride now takes an object: load tips from a file, relabel them, and drop the built-ins.
What's wrong with this entry?
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.
- The object takes
tips(the list itself),tipsFile(a path to a JSON file of the same shape),label(replaces the default "Tip" prefix), andexcludeDefault(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. idis a stable identifier of letters, digits,.,_and-, up to 64 characters;textis 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.spinnerTipsOverrideis now read from project scope too, but project settings are untrusted: only plain strings are accepted there, and object entries are dropped with the warningspinnerTipsOverride: object tip entries in ${s} are ignored; only plain strings are read from project settings, where the placeholder names the scope.tipsFileandlabelare ignored entirely when they come from an untrusted scope;tipsFileis honoured only from user settings, the--settingsflag, and managed settings installed on disk, and is read once per CLI process.- A
tipsFilearriving through remote managed settings is refused withspinnerTipsOverride.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_loadmetric. - 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
spinnerTipLabeland applies it to the narration tip; when the label is still the default "Tip" it renders lower-cased.
{ 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.
-
v2.1.227
Spinner tip about duplicating an artifact
Both mention spinner