Drops the whimsical word from the line that runs while Claude works and from the one that closes a turn, leaving the elapsed time, tokens and duration where…

Takes the whimsical word out of the line Claude Code draws while it works, and leaves the request data where Claude Code puts it:
✢ Sauteing… (12s · ↓ 300 tokens · thinking) before
✢ (12s · ↓ 300 tokens · thinking) after
The line that closes a turn gets a plain verb in place of its word:
✻ Baked for 3s · done 9:01 AM before
✻ Worked for 3s · done 9:01 AM after
Only the word is replaced. The time, tokens, thinking and effort are still Claude Code's own, drawn in the same place. A message that stands in for the word while a task runs (Running tests…) says what the turn is doing, so it is kept.
claude plugin marketplace add thefuga/claude-x
claude plugin install stfu@claude-x
It has no options: disable it (claude plugin disable stfu@claude-x) to get the words back.
Anything: it reads and keeps no state, and no other mod draws these lines.
Claude Code puts its own word back when it is handed an empty one, so the running line gets a space instead, which leaves a few blank cells before the numbers. The closing line always reads <word> for <time>, so an empty word would leave for 3s; Worked reads as a sentence. Both were checked on Claude Code 2.1.291.
hooks/register.ts 19 lines1import type { Register } from 'claude-code'
2
3// What stands in for the word. The engine draws its own word again for an empty one, so the running
4// line takes a space; the closing line reads `<word> for 3s`, so it takes a plain verb.
5const BLANK = ' '
6const CLOSED = 'Worked'
7
8export const register: Register = on => {
9 // The line that runs while a turn does (`Sauteing… (12s · ↓ 300 tokens)`): the word and its
10 // ellipsis go, and the engine still draws the time, tokens and thinking after them. A message that
11 // stands in for the word (a task's own `Running tests`) says what the turn is doing, so it stays.
12 on('ui.render', { component: 'Spinner' }, ($, e, next) =>
13 e.props.message === null ? next({ ...e, props: { ...e.props, word: BLANK, suffix: '' } }) : next(e),
14 )
15
16 // The line that closes a turn (`Baked for 3s`).
17 on('ui.render', { component: 'TurnDuration' }, ($, e, next) => next({ ...e, props: { ...e.props, word: CLOSED } }))
18}
19