Repository navigation
Description
Part of the system RFC #66 (layer L5, the dining room). Layers L0–L1 there (update off 0.1.2, Hermes ACP fixes) come before most items below.
Priority order (updated 2026-11-02)
This lists every problem the owner hit in the T3 Code Android app, the desktop app and the CLI setup. Sources: his T3 threads (statev2 snapshot), Hermes/OMP session history, and data/operations/t3code-setup.md. Each one now has a tracking issue. Upstream refs are written as plain numbers to avoid cross-links, and upstream posts still go through the gate.
P0: breaks or misleads daily use
- fix(acp): failed turns hide the real cause behind "Internal error" / "Failed to open … provider session" #58 Failed turns hide the real cause. 32 of 405 runs failed (27 on Hermes ACP), and the user only saw "Internal error" or "Failed to open … session". Joins upstream
5943/17072. - fix(acp): edit-approval payload exceeds the 8 MiB gateway frame and wedges the session hermes-agent#688 Edit-approval frame over 8 MiB wedges the Hermes session. This was the cause of the 8 "Internal error" runs. The fix exists but is uncommitted and not live.
- Sessions started outside T3 (Tern, Hermes app) don't reach T3, and imported ones are empty #59 Sessions started in Tern or the Hermes app don't reach T3, and imported ones are empty. fix(acp): list and attach native gateway conversations hermes-agent#656 is live and a stopgap auto-import is running. History hydration (upstream
22015) and mobile import remain. Two Ideas drafts await owner approval. - Hermes threads show idle while its background work and subagents are still running #60 Hermes threads show idle while background work and subagents still run. T3's fix (upstream
24610) is Claude-only. Hermes upstream137069/137380. - Agent-started thread stuck in Plan mode on Android while Runtime says Full access #61 Agent-started thread stuck in Plan mode on Android while Runtime says Full access. This is upstream
29250+27819: join, don't duplicate. Open upstream fixes: PRs29267and29275. - No effort/thinking control for Hermes in T3. T3 already renders ACP
configOptions, but Hermes ACP returns an empty list (acp_adapter/server.py:1090). Hermes-side, existing upstream venues: Hermes136084,78229,18326. No new issue, so it is tracked here.
P1: Android speedups with code already written (one lab APK verifies all three)
7. #51 Hermes icon, #50 hold to steer, #49 context meter. Code is on feat/android-voice-context-steer, but no test has run (the MBP queue was held). Needs focused tests and a device pass.
8. Inline html_render for Hermes threads (the generative-UI track below). Upstream 29130; Julius's fix, PR 29141, is now verified on Android with stock Hermes (comment posted 2026-11-02). Our Hermes-side fix is parked.
9. #63 Worktree handoff on Hermes ACP kills the run and leaves the continuation and cwd behind. Joins upstream 22971.
10. #62 Android render errors and low-memory exits. Needs a logcat repro first. (The WebView-tap blank was a harness artifact.)
P2: next
11. #48 Continuous voice. Code exists, blocked on the transcription backend choice (on-device Android vs host).
12. #54 Nudge chips, #65 "Needs you" queue (web preview built, rendered flow unverified).
13. #64 Desktop/CLI setup friction: update path, claude-history-home error, Usage missing OMP/Hermes, no settings CLI. First step: update from 0.1.2 to current, then re-check before reporting anything upstream.
P3: later
14. OpenUI v2 chart boards and the A/B (generative-UI track below).
15. #55 Next-action button RFC (after #54 proves out).
Out of scope here: the Hermes Android app's own issues (live-mode regex error, stale-gateway model switch, refresh-token disconnects). They belong to kvnloo/hermes-android and Hermes.
Track: generative UI everywhere
Request
Agent-made visuals should show up where the conversation happens on every surface. Today a published html_render page doesn't appear in Hermes threads, and Android has no native generative-UI path. This wave covers both: get inline pages working, then add native OpenUI chart boards that are compared fairly with the HTML path.
Evidence
- Inline pages missing for Hermes threads (all clients). Hermes registers the MCP server that T3 passes over ACP as
editor_<name>_<8-hex tag>, and reports calls asmcp__editor_t3_code_<tag>__html_render. Inpackages/provider-acp,extractMcpToolCallIdentityandresolveT3McpToolIdtreat that as a foreign server, so theisHtmlRenderrecovery (takeHtmlRender→{htmlRender}) never runs. The stored item then has nohtmlRenderreference, and web, desktop and mobile all skip the inline row. - Verified on device. In a frozen replay copy, I changed only the tool identity to
t3-code.html_renderand cleared the Android test app's client cache. After that, the chart rendered inline in the feed of thecom.t3tools.t3code.openuilab build. Force-stopping the app alone keeps the stale cached item. - The page works on Android when opened directly. Opened as an attachment, the WebView page passes every interaction: treemap drill-down and Back, tile readouts, stacked-area day values, and heatmap cells.
- Reference cohort for the chart families: RFC: OpenUI-generated visual replies with Tern/Luau — verified loop, optional TanStack/Jev oh-my-pi#143 (Code/Churn explorer RFC), [RFC] Native Tern TSP surface for Hermes TUI hermes-agent#432 (RepoExplorer / HottestFiles), feat(chat): inline xyflow diagrams, images and declarative UI dash#87, and Theo's Oct 6 T3 Code visualization post (stacked area, activity heatmap, Code/Churn treemap).
- Earlier browser A/B (exploratory, not causal). Median whole-test time for OpenUI vs json-render was 6.8 / 8.0 s, 6.5 / 7.4 s and 6.6 / 9.0 s across three cases. Provider cache and load were not controlled.
Work in this wave
- Hermes fix: kvnloo/hermes-agent
fix/acp-editor-mcp-identity. ACP tool titles map editor-supplied servers back to the editor's own name (mcp__t3_code__html_render), which T3'sT3_MCP_TITLE_CALLalready recognizes. Tool tests pass; verified in a live T3 turn on web and Android (see the 2026-11-02 results comment). - Lab base:
experiment/openui-android-replay.openui-v1reports as native Android views.T3_OPENUI_LAB_BUILD=1builds a separate package with its own scheme and no OTA, so it never replaces the standard app. - Chart design, stacked on the lab base:
experiment/openui-chart-catalog. Anopenui-v2chart board with Treemap (drill-down and Back), BarChart, StackedArea and Heatmap panels. They render as native views on Android and as SVG/HTML on web.- Layout, validation, readouts and catalog wording live in the dependency-free
packages/client-runtime/src/openUiCharts.ts. Each client binds the schemas to its own zod and OpenUI copies, which avoids duplicate React or zod instances. - There are reference answers for the three source-demo prompts. The isolated smoke run passes against stock
@openuidev1.0.2, including SSR of all three boards.
- Layout, validation, readouts and catalog wording live in the dependency-free
Open questions
- Defensive T3 fix? Should T3 also accept
editor_<alias>_<hex>server names, in case other ACP agents rename servers the same way? Or is fixing the agent side enough? - Feed blanking on Android. Tapping inside an inline
html_renderWebView blanks the Android feed until the user scrolls. So far this has been seen only on an agent-owned virtual display. Needs a repro on the main display. - Prompt delivery for v2. How should the v2 catalog prompt reach agents (MCP tool description, skill, or system prompt), so both libraries get identical prompt overhead in the A/B?
Acceptance
- A live Hermes turn in T3 shows
html_renderinline on web, desktop and Android, with no replay edits. - Lab APK built from
experiment/openui-chart-catalog; all three prompts render as native boards, and every interaction passes on device. - Same-prompt A/B run where only the UI library changes (stock
html_rendervs OpenUI v2), timed by whole-test traces, with prompt and token overhead recorded. - Inline WebView taps no longer blank the Android feed.
- Docs in
docs/user/openui-reports.mdmatch the shipped behavior.
Fork-local first. Upstream venues to join, not duplicate: upstream 15968 (inline visualizations), plus upstream 29130 (filed 2026-11-02 by another user: the same editor_t3_code_<id> namespace bug), so join that instead of filing a new one.
Activity
[-]UX wave: generative UI everywhere — inline html_render for Hermes threads + native OpenUI chart boards[/-][+]UX wave: T3 Code daily-driver fixes + generative UI everywhere (prioritized)[/+]kvnloo commentedon Nov 2, 2026
Generative-UI track: results (2026-11-02)
Inline
html_renderfor Hermes threads: verified live. I ran a sandbox T3 server (runtime 0.1.2) with Hermes ACP ongpt-6.1-sol. The same request was sent once with the stock Hermes and once with the Hermes fix loaded.editor_t3_code_<tag>.html_renderwith a plain text result. No inline page appears on web (0 iframes) or on the Android lab build.t3-code.html_renderwith an{htmlRender}result, and the page renders inline on both web and Android. Taps inside the inline page work, and the feed stays intact.fix/acp-editor-mcp-identityat921a4a2adbc. It is rebased on current NousResearch main, which still has the bug; 26 ACP tool tests pass. No PR yet.29130is the same bug. Julius's PR29141fixes it on the T3 side (runtimeModel.ts). Both fixes can coexist. I have not checked29141on Android yet; that is still the plan from RFC: T3 Code as the restaurant — one front of house for every kitchen (UX wave = dining room) #66.html_rendercalls carrying a ~16 KB page failed twice as invalid JSON, and the model still said "published". A ~3 KB page worked.OpenUI v2 chart boards (
experiment/openui-chart-catalog@eebe70d411). Fleet build c3 passed mobile and webtsc, 16 node tests, 6 OpenUI smoke tests and Gradle (APK sha256688542b0…2add). It is installed as the lab package only.gpt-6.1-soland 10/10 for the default model.home/kvn/).kvnloo commentedon Nov 2, 2026
Upstream posts and corrections (2026-11-02, later)
Posted upstream at the owner's request:
29141(Julius's T3-side fix for the inline-page bug): a comment with an Android check on unmodified Hermes. PR heada5c3df8b21was run from source and the prompt was sent from the phone. The item was stored ast3-code.html_renderand the page rendered inline. Comment id6590233564. The PR is linked to this T3 thread.20049("Optional OpenUI input for html_render"): the chart-board prototype, the format A/B and screenshots. It also asks maintainers whether they prefer a fenced block orhtml_renderinput. Comment iddiscussioncomment-19361918.Format A/B (
gpt-6.1-sol,hermes chat, 5 cases × 2 reps, order alternated; data inv2/ab-1/):Decisions:
fix/acp-editor-mcp-identity(921a4a2adbc) is parked. Upstream29141covers the seam in T3, and Hermes's editor-name prefix was intentional (its ACP-9 change). Opening a second fix would compete with the carrier. The branch stays on the fork in case another ACP client needs it.Correction to my earlier comment:
html_renderfailed as invalid JSON" claim was wrong.read_filecaps each line at 2,000 characters (tools/file_operations.py,... [truncated]). The test page is a single 16 KB line. The model copied the truncated text into its call, the JSON broke at the cut, and the model still replied "published".kvnloo commentedon Nov 3, 2026
Added #69 (per-host icons: mobile icon picker + optional icon-only host labels) under P2. Per-host icons already exist on web; this tracks the mobile gap and the option to hide host-name text.
kvnloo commentedon Nov 3, 2026
Generative-UI track, next step: draft PR #71 adds brand-colored activity rows ("Searched Gmail · invoices") and four read-only app cards for openui-v2 boards (Uber/Lyft rides, Gmail, Google Maps, GitHub PR), with a 40 s demo of a real Hermes turn. The phone-side "let T3 use my other apps" idea is split out as RFC #70.
kvnloo commentedon Nov 3, 2026
Share/handoff RFC: #72
kvnloo commentedon Nov 4, 2026
Hermes side of the generative-UI track: landed on fork branches (2026-11-03)
html_render+ MCPrawOutput+ editor MCP identityfix/acp-html-render-inline@f8d77a0tests/acp_adapter: 458 passed, 0 failed; ruff cleanfix/acp-editor-mcp-identity, fast-forwarded921a4a2→f8d77a0/stats+trace_queryboardsfeat/stats-dashboard@c9f96d8tests/acp_adapter: 483 passed, 0 failed; ruff cleanmain+ pingdotgg#711 + pingdotgg#710integration/t3-ux-wave@b382a19_meta.serverIdwith its own regex. They are now merged and share one parser, so title and_metacannot disagree. T3 reads_metafirst and falls back to the title, so both paths are covered.exporter.pywas hidden by the root.gitignoreexport*rule, so a clean checkout failed to import it. Fetching the plugin catalog before the built-in menu also broke four ACP ordering tests.84496839, Oct 22 main plus fix(acp): list and attach native gateway conversations hermes-agent#656's commits and uncommitted work, including the fix: Pending user input displays with "Pending Approval" status pingdotgg/t3code#688 fix). That build has neither change. Making it live means moving the install to a branch that unionsintegration/t3-ux-wavewith a current Add option to make commit messages follow Conventional style including scopes pingdotgg/t3code#656 and the fix: Pending user input displays with "Pending Approval" status pingdotgg/t3code#688 fix, then restarting the Hermes ACP processes. That is an owner step; nothing was installed or restarted.preview/tern-frontend. That branch is the Tern TS-frontend dogfood lane. It is 12,133 commits behindmainand has no ACP gateway code. A real merge touches 11,450 files with 33 conflicts, which is the owner-gated sync in sync: Tern frontend preview onto current main (needs Kevin OK) hermes-agent#540.Upstream (plain numbers, nothing posted): T3 29130 / 29141, 15968; Hermes 72433. The proposed upstream comments wait for owner approval.
kvnloo commentedon Nov 4, 2026
UX bundle plan + verification wave 1 (2026-11-04)
Plan: we join the work maintainers are already landing instead of opening our own upstream PRs.
maria/redesign/<layer>branches.pr:needs-verificationneed independent checks on real environments.Fork items are being split into small add-ons on existing upstream carriers:
/handoff): the guest-share part goes onto upstream PR 29391;/handoffbecomes evidence on Idea 27708.Full plan, dependency graph and conflict analysis are in
data/operations/t3code-ux-bundle/20261104/PLAN.md.Wave 1 is running four lanes:
Each upstream PR gets at most one evidence comment, posted only after a parent review against the live head. The ledger is in
.../wave1/STATUS.md.