* plan: mcp-activity
* plan: mcp-activity list format
* plan: mcp-activity answers and live step lines
* mcp: a silent line per step of Claude's work, completed at its end
* plan: mcp-activity as implemented
* mcp: finalize step lines within a day and load only the hook's modules
* plan: mcp-activity review decisions as implemented
* plan: mcp-session-usage
* plan: mcp-live-answers
* plan: mcp-live-answers answers and the end line with the usage
* plan: mcp-session-usage, plan usage by the status line, one end line
* plan: mcp-session-usage, the end line settled with live-answers
* plan: mcp-live-answers end line with the plan usage, shared fast request
* plan: mcp-live-answers keeps tokens in context
* plan: mcp-session-usage, status line through postToService
* mcp: end live step lines by the wall clock
* mcp: exact spec ranges and measured hook load time
* mcp: Claude's answers live as Claude writes them, and one end line per turn
A prompt that starts a turn gets an empty silent live message, which the turn's first text, step or answer fills. The MessageDisplay hook, dist/display.js, passes each batch of Claude's text to the service, and the hub streams each text into a silent live message, updated at most every 3 s and finalized at its end. At Stop the streamed answer is claimed, or the answer is posted silent, and the end line !- ✅ Done in DURATION! follows as the turn's only alert.
* plan: mcp-live-answers as implemented
* mcp: usage of each turn in its end line, model and effort switch lines
* plan: mcp-session-usage as implemented
* mcp: one refusal post for a refused answer, in the turn's opening message
A text that a group preference refuses counts as the answer at Stop, so the answer is not posted again. A refused post that would fill the opening message fills it with its refusal text. A refused text ends at once, also when it outgrows a message, and an update scheduled before its end is skipped. Plan decision 37.
* mcp: live posts survive a lost opening message and end within a day
A failed update of the opening message drops it, and the post is sent as a new message; a text that was never posted no longer stands for the answer. Texts and opening messages end 23 hours after their send by the wall clock, as steps do. When the update with a refusal fails too, the opening message gets ⏹️ Stopped and the end line follows. The opening message is kept before User's post and sent after it.
* docs: the status line step of the plugin README
* mcp: a dropped opening message ends with ⏹️ Stopped
When the update of the opening message fails without a refusal, the hub finalizes it, so after a transient failure it does not stay live.
* mcp: effort level only from the status line once it reports
Hooks report the turn's level, xhigh after ultrathink, while the status line reports the session's level; docs: effort updated at each tool step, data folder writable only by the user.
* mcp: end line without the check mark, small print only
* mcp: one token format, the compaction line's, in the end line
* mcp: append the end line to the last message of the answer
* mcp: keep a finished text live until Stop adds the end line, docs
* mcp: priority 1 in the update that adds the end line, quotes of answers without it
* mcp: an answer without a turn record quotes no prompt pushed before the latest answer