Metadata
| Status | done |
|---|---|
| Assigned | agent-1261 |
| Agent identity | f51439356729d112a6c404803d88015d5b44832c6c584c62b96732b63c2b0c7e |
| Created | 2026-04-30T14:39:46.862051526+00:00 |
| Started | 2026-04-30T14:40:07.304012385+00:00 |
| Completed | 2026-04-30T15:12:19.355462035+00:00 |
| Tags | priority-high,fix,tui,ux,dialog,redesign, eval-scheduled |
| Eval score | 0.77 |
| └ blocking impact | 0.82 |
| └ completeness | 0.78 |
| └ constraint fidelity | 0.40 |
| └ coordination overhead | 0.78 |
| └ correctness | 0.75 |
| └ downstream usability | 0.75 |
| └ efficiency | 0.80 |
| └ intent fidelity | 0.90 |
| └ style adherence | 0.77 |
Description
Description
The current new-chat dialog is overloaded — surfaces all openrouter models as a pre-populated list (auto-discovered 'by usage'), confusing because the user never configured openrouter and didn't ask for that. Plus the layout is text-dense to the point of illegibility.
User direct guidance 2026-04-30:
'I've never configured anything this way, so I probably should just have like codex GPT 5.5 and clod colon opus, and then it should be possible to add a new one... that dialog should say which of the executors is it, claude, codex, nex, and then it should have just the space for the endpoint, maybe it should have the model name immediately after, like so you can enter it in a clear way. And the endpoint. And those three things, right? For nex. And for the codex and the cloud, then it's just going to be the model name. And then it'd be cool to verify that those actually work, but that's fine. Then we should probably be able to launch and have it go. Right now there's so much text on it, it's like illegible factory, there's too much stuff. Once we get it going, then later we can have the list of the last things we did by recency.'
Spec — minimal defaults + clean add flow
Default state of the dialog (minimal)
On open, show ONLY:
New chat
◉ codex:gpt-5.5 OpenAI Codex CLI (gpt-5.5)
○ claude:opus Claude CLI (Opus)
○ + Add new...
Name (optional): [_____________]
[Launch] [Cancel]
That's it. Two defaults + an Add option. No openrouter dump, no usage-history list, no executor radio cluster, no endpoint field, no model field. Quick selection for the common cases — codex or claude.
'Add new' flow (when user picks the third option)
Selecting + Add new... reveals a small inline form:
New chat — Add new
Executor: ◉ claude ○ codex ○ nex
Model: [____________]
Endpoint: [____________] (only when Executor=nex)
Name: [____________] (optional)
[Launch] [Cancel]
- Executor radio is the FIRST choice. Pick claude / codex / nex.
- Model field is always shown (always required).
- Endpoint field is only shown when Executor=nex — claude and codex auth themselves, no endpoint to specify.
- Tab cycles through fields. Enter on Launch button creates.
Optional: connection verification (deferable to v2)
Before Launch fires, optionally hit the endpoint with a small probe (e.g., /v1/models or a 1-token test request) and warn if unreachable. User said this would be 'cool but that's fine' — implement IF easy, defer if not.
Out of scope for v1 (defer)
- 'Last things we did by recency' list — user explicitly said this comes LATER ('Once we get it going, then later we can have...'). Don't implement now; the launcher_history memory note (
feedback_launcher_history_in_config_ui.md) wants this surfaced eventually but it's not part of THIS task. - OpenRouter auto-discovery dropdown — remove from default view entirely. Users who want openrouter add it via 'Add new' with executor=nex and a model spec like 'openrouter:anthropic/claude-opus-4-7' (OR if there's a clean way to list openrouter models inside the Add flow when nex+openrouter is chosen, that's a v2 enhancement, NOT in this scope).
- Multi-tab profile picker, profile dropdown, etc. — keep dialog truly minimal. Profile management belongs in
wg profileCLI / a different settings dialog.
Density goal
The current dialog overflows the visible area with model rows + endpoint section + execution cluster. The redesigned default state should fit in ~10 lines including the title, two options, the Add option, the Name field, and the Launch/Cancel buttons. The Add-new form expanded should fit in ~15 lines.
Validation
- Failing test or repro: open the new-chat dialog. Default state shows 2 options + 'Add new', NOT a populated openrouter list.
- Live smoke: pick 'codex:gpt-5.5' default → click Launch → chat spawns with codex executor + gpt-5.5 model. Same for claude:opus.
- Live smoke: pick 'Add new' → choose Executor=nex → enter model 'qwen3-coder' + endpoint 'https://lambda01.tail334fe6.ts.net:30000' → Launch → chat spawns with those values
- Live smoke: pick 'Add new' → Executor=claude → endpoint field is HIDDEN; only Model field shows
- Optional connection-verify probe is either implemented OR documented as deferred to v2 in the task log
- No regression of fix-new-chat-2 (no keystroke leak) or fix-paste-events (when that lands; no paste leak) or fix-new-chat-3 (when that lands; arrow-key editing in fields)
- cargo build + cargo test pass
- Permanent smoke scenario added covering both default and Add-new paths
- cargo install --path . was run before claiming done
Process note
This is a UX redesign, not a bug fix. The previous dialog was built with 'show everything, let user pick' which made sense as a starting point but creates noise once the user has specific preferences. Strip-it-down approach matches the user's repeatedly-stated preference for minimal-text + 'just let me launch' flows.
After this lands, the recurring open-ended new-chat-dialog issues (fix-new-chat / fix-new-chat-2 / fix-paste-events / fix-new-chat-3) should mostly resolve as side effects — fewer fields = fewer code paths to leak through.
Depends on
Required by
- (none)
Log
- 2026-04-30T14:39:46.846511074+00:00 Task paused
- 2026-04-30T14:39:46.899750014+00:00 Task published
- 2026-04-30T14:40:05.131848838+00:00 Lightweight assignment: agent=Careful Programmer (f5143935), exec_mode=full, context_scope=task, reason=Careful Programmer is the ideal fit: implementation task requiring meticulous attention to the minimal-defaults spec, comprehensive live smoke validation (5 checkpoints), no-regression assurance, and build/test verification — the Careful tradeoff directly matches this high-validation UX redesign.
- 2026-04-30T14:40:07.304017073+00:00 Spawned by coordinator --executor claude --model opus
- 2026-04-30T14:40:16.005530561+00:00 Starting: redesigning new-chat dialog to minimal defaults + clean Add-new flow
- 2026-04-30T14:55:54.517211708+00:00 USER REFINEMENT 2026-04-30: include readline-style text input in the redesign — arrow keys navigate within the input, Backspace deletes char before cursor (not just last), Home/End/Ctrl-A/Ctrl-E jump to start/end. Don't ship a redesigned dialog with primitive append-only inputs. Reuse an existing battle-tested ratatui input widget rather than hand-rolling — it's a classic 'one more keybinding' problem. Sibling task fix-new-chat-3 was investigating this concern but is being abandoned in favor of this redesign so the work doesn't fight the merge.
- 2026-04-30T15:03:53.574198961+00:00 Implementation complete. State + render + event handlers rewritten. 26 launcher unit tests pass. Lib test config::tests::test_global_config_path is pre-existing failure (unrelated, fails on main too — expects .workgraph/ path on system with .wg/).
- 2026-04-30T15:08:56.629507397+00:00 Smoke scenario added: launcher_redesign_default_and_addnew. Owners: redesign-new-chat + smoke-gate-is. Adopted redesign-new-chat as additional owner of tui_launcher_modal_does_not_leak_keys + tui_launcher_modal_does_not_leak_paste so the input-leak contracts stay green against the new state model.
- 2026-04-30T15:12:01.737867656+00:00 Committed: 5443353d7 — pushed to remote
- 2026-04-30T15:12:19.355465492+00:00 Task pending eval (agent reported done; awaiting `.evaluate-*` to score)
- 2026-04-30T15:14:45.207565868+00:00 PendingEval → Done (evaluator passed; downstream unblocks)