Interface·terminal·MIT
cc-mod-waitwhat
Buttons above the prompt retell the last reply in plain words. The model never sees it.

cc-mod-waitwhat puts two buttons above the Claude Code prompt. Press one and a model retells what Claude just said in plain words, drawn in the band above the prompt. The retell never enters the transcript, so Claude never sees it and the session’s context stays as it was.
It is the in-terminal version of the same author’s cc-sidecar-waitwhat, which reads the session’s JSONL file from a second terminal. The mod reads the conversation from inside Claude Code instead, and shares the sidecar’s environment variables, prompt files and cache. Inside the Herdr terminal it hands the retell to the sidecar in a split pane instead of drawing it in the band.
What it does
- 白話 (plain words) retells the last turn: your message plus everything Claude did in reply, tool calls included.
- 跟丟了 (lost the thread) retells the whole session from the start, conversation and tool calls, for when you fell behind several turns ago.
- 清除 (clear) hides the result. A dim line above the retell names the source that answered, how many characters went out and how long it took. When a source failed and the mod fell back to another, a second line gives the reason.
- Recap line. Five seconds after a turn ends, if you are not typing, the mod asks an external model for a three-field summary (goal, what is done now, what comes next), shows
recap · <now> → <next>as a dim line in the band and writes the same JSON to~/.cache/cc-recap/<session id>.jsonfor outside screens such as the author’s Collie. At most once a minute per session, and only when the conversation changed. - Labels, status lines and the built-in prompts are in Traditional Chinese. The prompts tell the model to answer in the language of the conversation and can be replaced with your own; the labels cannot.
Install
Needs Claude Code 2.1.287 or later and an interactive terminal. The author’s own floor is Claude Code 2.1.267.
claude plugin marketplace add GGGODLIN/cc-mod-waitwhat
claude plugin install cc-mod-waitwhat@cc-mod-waitwhat
The README installs from a local clone (claude plugin marketplace add /path/to/cc-mod-waitwhat); the commands above use the marketplace the repository declares, and --scope user on the second one puts the band in every session. Start claude: the button row is already above the prompt. Click a button, or press ctrl+x tab to move focus into the band, choose with the arrow keys and press Enter; Esc returns to the input. ctrl+x ctrl+a collapses the band. Nothing else is needed for a first try, because the fallback source for the two buttons uses the session’s own model; the recap line needs the http source below.
How it works
The module hooks ui.render for the AbovePrompt component and draws the buttons there. It registers no slash command on purpose: typing one writes its name into the transcript, and the model would read it on the next turn. A button press goes through ui.press, which the author checked leaves no record in the session’s JSONL.
On a press the hook calls $.session.messages(), keeps the last turn or the whole session, and flattens it into USER: and ASSISTANT: lines, each tool call clipped to 200 characters. That text goes, with a system prompt, to the first source in this chain that answers:
- cmd: a command named in
SIDECAR_CMD, run with$.process.run. The prompt arrives on stdin and the answer comes back on stdout, with a five-minute timeout. Arguments are split by shell rules but nothing goes through a shell, so no pipes or redirects. Skipped when the variable is unset. - http: a POST with
$.http.fetchto any endpoint that speaks the OpenAI/v1/chat/completionsformat.SIDECAR_PROXYsets the URL (defaulthttp://127.0.0.1:8317/v1/chat/completions, a local proxy),SIDECAR_MODELthe model (defaultgemini-3.8-flash-high) andSIDECAR_API_KEYthe bearer token. With no key set, the hook reads the first entry underapi-keysin~/.cli-proxy-api/config.yaml. - claude:
$.model.completeon the session’s own credentials, the model chosen byWW_MODEL(defaulthaiku). This is the fallback. It is one independent request with no history and no tools, so nothing enters the context, but it is a real model call on your account, capped at 1,500 output tokens.
SIDECAR_SOURCE=cmd or SIDECAR_SOURCE=http tries only that source before falling back to claude.
Whichever source answers receives the conversation text. With the defaults, the http attempt only reaches localhost; point SIDECAR_PROXY at a remote endpoint and the transcript leaves your machine.
Under Herdr. When both HERDR_PANE_ID and HERDR_WORKSPACE_ID are set, a button press does not retell in the band. It runs herdr pane split --current --direction right --no-focus with $.process.run, then herdr pane run <pane> "ww 1" (or ww for the whole session), which is the sidecar’s own command, and the band keeps one status line. The next press checks with herdr pane list that the pane is still there and reuses it. The sidecar finds the session through the inherited HERDR_TAB_ID. With only one of the two variables set, the band retell is used.
The recap. turn.start cancels any pending recap and turn.complete from the main agent schedules one, 5 seconds after the turn, or later if the last recap ran within the past minute. It skips when the prompt box holds a draft, under claude -p and when the conversation has not changed. It POSTs the tail of the conversation (about 5,000 tokens, 30% reserved for your own messages) to SIDECAR_PROXY with SIDECAR_API_KEY, model gpt-6-luna first and groq-gpt-oss-120b as fallback, 600 output tokens, low reasoning effort, 10 second timeout. It never falls back to the session’s model: without a reachable proxy the recap fails and writes a line to the debug log, nothing more. The README still names Groq as the first model; the code of 0.7.0 puts Luna first.
Every retell is cached in ~/.cache/cc-sidecar-waitwhat.json, keyed by a SHA-256 of the mode and the normalised conversation, 200 entries at most with the oldest dropped. The key no longer includes the source or the payload wrapper, so the band and the terminal ww hit each other’s entries. Pressing the same button on an unchanged conversation shows the stored retell at once, marked as a cache hit.
The two system prompts can be replaced with your own: ~/.config/cc-sidecar-waitwhat/plain.md for 白話 and wait-what.md in the same folder for 跟丟了. A non-empty file wins over the built-in prompt.
Limitations
- Terminal only. The desktop app and mobile have no band, and the hook steps aside on any other surface.
- One retell at a time: pressing a button while another is running does nothing.
- The recap line depends on an OpenAI-compatible endpoint in
SIDECAR_PROXY; with the default local proxy absent it simply never appears. - The Herdr split pane needs the sidecar’s
wwcommand installed and Herdr’s own environment; in any other terminal the retell stays in the band. - Version 0.7.0, with the recap and Herdr support added after the first release of September 2026.
Similar Claude Mods
cc-image-view
Thumbnails of pasted images above the prompt and under sent prompts, with a zoom pane.
paste-view
Previews of pasted text and thumbnails of pasted images, drawn above the prompt.
prompt-rail
Your session's prompts as a rail: hover to read one, click to jump back to it.
claude-queue
Prompts typed with /q wait in a stack above the prompt and go out when the turn ends.
Popular Claude Mods
The whole directory →firstmate-calm
Hides tool rows and swaps the spinner for a sailboat. Toggle with /calm, zero tokens.
pin-memo
Notes and clickable todos pinned above the prompt, back when you resume the session.
Flightdeck
Subagents, permission checks, advisor consults, context and cost, live in a pane.
statusline-anywhere
Your Claude Code status line, drawn above the prompt in the Claude Desktop app.





