Repository navigation
feat(composer): opt-in QA suggestions with a customizable model and prompt - #1
sittitanaporn-a11y wants to merge 1 commit into
Conversation
…rompt After a turn settles, the web composer can ask a model what the user would plausibly send next and render it as faded ghost text in the empty composer; Tab accepts it. The server reads an end-preserving tail of the thread through the existing projection and text-generation boundary, so no thread turn, event, message, or provider session is created; requests are bound to the latest completed assistant message and rechecked before provider launch. The feature is not hardwired to "QA": a dedicated model (composerSuggestionModelSelection, nullable, falling back to the thread model), a display name (composerSuggestionLabel), and custom instructions (composerSuggestionInstructions) let it act as a docs, security, or UX reviewer. Custom instructions replace only the persona and focus rules; the JSON output contract, the one-line limit, and the untrusted-transcript guard are always appended. Mobile has no toggle or request path. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
Thanks for the original implementation. We are taking the feature in a different direction based on testing and remote-client behavior. We kept the core UX: suggestions come from the agent's own turn, appear as ghost text in the composer, and can be accepted with Tab. The main architectural change is that the original design created a separate model request after each turn using only a short recent-message tail. That adds usage and latency, and the reduced context can make the suggestion miss what the agent just understood. The new implementation generates the suggestion as part of the agent's existing turn, so it uses the full conversation context and returns without another request or extra wait. The preference is now stored per client and sent with each turn instead of being persisted as a server-wide setting. Different clients can therefore use different preferences against the same remote server. Codex applies the choice per turn. Claude keeps the choice selected when its first session starts in a thread because its system prompt is session-scoped. The dedicated suggestion model and QA-specific defaults were removed so suggestions follow the current conversation and the user's existing instructions. Thanks for the ghost-text and keyboard interaction work. We kept that part in the new implementation. |
|
Closing this PR because the feature has been replaced by the client-preference implementation on feat/prompt-suggestion. |
…'s own turn Opt-in server setting asks Codex and Claude sessions to end each reply with a tagged one-line proposal for the user's next prompt. Ingestion holds the tag back from streamed deltas, strips it at completion, and carries the suggestion on the assistant message through the projection and SQLite (migration 058). The web composer shows it as ghost text when idle and empty; Tab accepts it. Replaces the side-call design from PR Type-Delta#1: no extra model call, no separate suggestion model, no rename setting. Model: claude-fable-5-1 orchestrating gpt-6-astra, gpt-5.6-luna, claude-opus-5 subagents (Codex harness in T3 Code)
What
Opt-in QA suggestions: after a turn settles, the composer can ask a model what you would plausibly send next and shows it as faded ghost text in the empty composer — press Tab to accept.
How it works
Not hardwired to "QA"
Three Settings → General controls make it reusable as a docs / security / UX reviewer:
composerSuggestionModelSelection, nullable) — lock suggestions to one model, or fall back to the thread's own model.composerSuggestionLabel) — rename the feature.composerSuggestionInstructions) — rewrite the persona and focus.Custom instructions replace only the persona and focus rules; the JSON output contract, the one-line length limit, and the untrusted-transcript guard are always appended after them, so a rewritten focus cannot change the response shape or disable the injection guard.
Verification
vp run typecheck(15/15) andvp checkclean.Split out from a combined feature branch so this PR contains only the QA-suggestions work.
🤖 Generated with Claude Code — model: Claude Opus 4.8 (1M context)