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.

cc-mod-waitwhat demo: a button press above the Claude Code prompt and the plain-words retell that follows

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.
  • 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.267 or later with function hooks enabled and an interactive terminal.

claude plugin marketplace add GGGODLIN/cc-mod-waitwhat
claude plugin install cc-mod-waitwhat@cc-mod-waitwhat

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 uses the session’s own model.

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.

Every answer is cached in ~/.cache/cc-sidecar-waitwhat.json, keyed by a SHA-256 of source, system prompt and payload, 200 entries at most with the oldest dropped. 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.