Note
This is an automated response from a bot acting on maria's behalf. This issue has had no activity since 2026-08-03. Is it still relevant on the current version? If so, your version and OS would help.
When Claude Code runs a configured Stop hook that injects a follow-up message, T3 Code does not clearly preserve and display the full sequence of events in the main conversation UI.
This happens across T3 Code platforms, including mobile.
The underlying Claude Code sequence is effectively:
Stop hook runs and supplies another message/instruction to Claude.In T3 Code, the original response from step 2 is not clearly shown as its own visible assistant message before the stop hook. Instead, the stop-hook activity and/or earlier output can be condensed into the expandable work log, while the main conversation primarily shows the final response after the hook.
This is dangerous because the first response often contains the main result, summary, warnings, or other important information. The user may forget that the stop hook ran, never expand the work log, and miss information Claude believes it already delivered.
By default, T3 Code should visibly preserve the full chronological sequence in the main conversation, for example:
The exact visual treatment of the stop hook can vary, but the important requirements are:
I have confirmed this with Claude Code. After reviewing the behavior further, I do not believe this issue applies to Codex, and I cannot confirm it for other harnesses.
Note
This is an automated response from a bot acting on maria's behalf. This issue has had no activity since 2026-08-03. Is it still relevant on the current version? If so, your version and OS would help.
Note
🤖 OpenAI assistant (exact model identifier unavailable) responding on behalf of Elliot
Sorry I can't be more helpful here. I haven't checked this on recent releases, so I can't confirm whether the Stop-hook behavior still reproduces.
For historical context, I filed this on August 3, 2026, when v0.0.31 was the latest stable release. I didn't record my exact build, so that's a date-based reference, not a confirmed installed version.
Still reproduces on t3 v0.1.3-nightly.20261026.3726 (Linux/WSL2, Claude provider, claude-opus-5-5).
Sequence in one run / one provider turn:
Stop hook failed (yarn typecheck, missing node_modules), so Claude continued in the same turn: 2 commands.After the run settled, only message 3 stayed visible; the answer from step 1 was folded under "Worked for 40s". Both messages are stored as separate assistant_message turn items in statev2.sqlite, so it's the client fold (deriveTurnFolds keeps only the last assistant message per run). #14698 fixes this case.
additionalContextNot limited to failing or user-written blocking hooks. Here it was a third-party design-lint plugin's Stop hook that returns additionalContext, after a long agent turn.
Environment: T3 Code (Nightly) app on macOS, Claude provider (Agent SDK), Opus.
Session JSONL, one turn (UTC):
| Time | Record |
|---|---|
| 01:33:05 | assistant text: the real answer (long) |
| 01:33:06 | 3 × attachment, then system/stop_hook_summary |
| 01:33:09, 01:33:13 | two short assistant text messages (continuation) |
| 01:33:13 | second system/stop_hook_summary |
UI behaviour:
deriveTerminalAssistantMessageIds picks the last assistant message per runId; the continuation shares the run.deriveTurnFolds folds earlier assistant text and tool work once nothing is streaming. So an already-rendered final answer gets demoted when a later message lands: the flicker.ClaudeAdapterV2.ts recognises /goal Stop-hook feedback, but I found no item emitted for other Stop-hook continuations, so the client has no boundary to respect.#14698 would stop the hiding, but the continuation would still read as the answer.
The options panel remained visible, but the written answer disappeared from the default conversation view.
An inline HTML panel with four options was followed by a substantive written answer. A configured Stop hook then requested a short finish-time update. The continuation produced a brief completion notice.
The screenshot shows the HTML options/explanation panel and that short notice, while the substantive answer is absent. The user expected the actual content, not just the options. This is not a failed option-click report. The options were part of the inline HTML, not T3's native question control.
Saved history contains both assistant messages in the same run:
| Message | Updated, UTC | Stored text length |
|---|---|---|
| Substantive answer | 21:49:41.347 | 2,942 characters |
| Post-hook notice | 21:49:47.846 | 65 characters |
The blocking Stop-hook feedback occurred between those responses. The original answer remains in stored history. This supports a display or folding problem, but the affected client's expanded work log was not inspected.
Expected: keep the original written answer visible by default alongside the HTML panel. Show the hook feedback and continuation separately.
Version: running T3 server 0.1.7-nightly.20261101.4035, macOS arm64. Exact client build and surface were not independently established. One observed incident; frequency unknown.
The local hook was removed at the user's request and the answer repeated later. T3 source and database records were unchanged.
Screenshot attachment is not yet included because browser upload automation is unavailable.
Note
🤖 gpt-6.1-sol responding on behalf of Elliot
PR #27747 now contains both incorporated follow-ups and the owner's newer main conflict resolution at decb42631d944e208e13509b1ddcce3743dad3bb. Hosted checks pass on that exact head and CodeRabbit reviewed it without actionable findings. The prior privacy thread is resolved. This remains open upstream; no main merge or release rollout is claimed.
Real SDK capture established the additionalContext-only hook-response path; its guarded detection shares the continuation notice with the existing synthetic-user path for blocking hooks, without duplicate block notices. The captured replay covers both continuations, while web/mobile fold regressions preserve the preceding answer. Output-bearing hook lifecycle frames are omitted from native persistence without altering adapter input.
The owner's 354-test local report applies to earlier head 3003733. Earlier live-client evidence retains its original commit labels; I have not rerun native clients at the newer head. Historical backfill and exit-code-2/SubagentStop variants are not established by this captured path. Keep this issue open until accepted coverage lands on upstream main.