Claude Modsunofficial directory

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 button row above the Claude Code prompt, ready to retell the Chinese reply shown above it
Cover frame and demo GIF from the cc-mod-waitwhat repository, MIT license

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>.json for 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.fetch to any endpoint that speaks the OpenAI /v1/chat/completions format. SIDECAR_PROXY sets the URL (default http://127.0.0.1:8317/v1/chat/completions, a local proxy), SIDECAR_MODEL the model (default gemini-3.8-flash-high) and SIDECAR_API_KEY the bearer token. With no key set, the hook reads the first entry under api-keys in ~/.cli-proxy-api/config.yaml.
  • claude: $.model.complete on the session’s own credentials, the model chosen by WW_MODEL (default haiku). 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 ww command 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

The whole directory →