[tracking][dogfood] Build a full Agent Harness interface with Proto UI
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 35
- Forks
- 15
- Avg merge
- 2d 23h
- Merged PRs (30d)
- 107
Description
Goal
Build a real Agent Harness interface as an internal-HEAD Proto UI dogfood application. Every eligible reusable or behavioral UI surface must be authored through Proto UI prototypes, compositions, modules, host capabilities, adapters, and design-language outputs.
This program does not adopt assistant-ui, CopilotKit, AG-UI UI runtimes, AI Elements, Radix, React Aria, shadcn primitives, or another component/headless Agent UI stack. Competitors and their issue trackers are research evidence only.
The Harness application remains the App Maker and owns Agent-domain data and service behavior such as sessions, threads, runs, messages, tool calls, approvals, artifacts, persistence, transport, retries, and execution. Those domain facts may drive application-local Proto UI prototypes. They must not be promoted into neutral Base subjects merely because the dogfood application needs them.
Completion definition
A Harness surface is dogfooded when:
- reusable interaction semantics, state transitions, accessibility projection, focus, scrolling, input, dismissal, and visual feedback are owned by Proto UI;
- application code supplies Agent-domain data, content, service callbacks, and persistence, rather than recreating a parallel UI state machine;
- no third-party component, headless primitive, chat runtime, or Agent UI framework owns an eligible UI path;
- any missing general capability is represented by a linked Proto UI Prototype, Composition, Module, Host Capability, Adapter, or spec Issue;
- every matrix row reaches a final state:
dogfooded,app-local-proto,ready,research,blocked,native/static, orinfrastructure-exempt.
This parent closes only when no ready, research, or blocked row remains and all required evidence is current.
Architectural boundary
Proto UI-owned interface
At minimum, inventory and dogfood:
- application shell, responsive navigation, sidebar, panels, tabs, menus, dialogs, sheets, and pane controls;
- session/thread list, search, rename, status, unread/running indicators, and empty/loading/error states;
- transcript viewport, message layout, streaming/busy feedback, reasoning disclosure, tool invocation, human approval/input, retry, and jump-to-latest behavior;
- Composer input, send/stop actions, keyboard policy, validation/error feedback, and attachment presentation;
- plan/todo, file/subagent hierarchy, artifact shelf, code/log view, diff review, Inspector, and related workbench controls;
- design-language styling and tokens without an application-owned parallel design system.
App-local Proto UI prototypes
Agent-specific subjects should begin here unless independent cross-application evidence later justifies extraction:
HarnessMessageand message-part projection;ToolInvocation;ApprovalRequest/HumanInputRequest;ReasoningTrace;RunStatus/AgentLane;PlanView;ArtifactCard/DiffReview;- branch/checkpoint navigation.
These prototypes may own application-domain projection and semantic events, but must compose official Proto UI controls and must not duplicate generic focus, keyboard, scrolling, collection, text-control, overlay, or accessibility state machines.
Native/static and infrastructure exemptions
The matrix may explicitly exempt:
- Agent backend execution, inference, transport, persistence, authentication, and service orchestration;
- Markdown parsing, syntax highlighting, diff computation, terminal emulation, or document-model engines when they do not own the surrounding reusable UI contract;
- plain static document content where the host already owns the complete behavior;
- adapter/demo infrastructure whose purpose is to compare Proto UI hosts.
Every exemption needs a reason, owner, and re-review trigger. An exemption must not hide user-facing keyboard, focus, scrolling, dismissal, selection, form, or ARIA behavior.
Agent Harness Dogfood Coverage Matrix
M0 must publish one authoritative matrix. Each row records:
- stable surface ID and application path;
- user job and current implementation owner;
- target class:
official-prototype,composition,app-local-proto,native/static, orinfrastructure-exempt; - P/T/M/HC/Adapter/profile IDs and design-language entry where applicable;
- application-domain state owner and semantic events consumed/emitted;
- primary production host and React/Vue/WC equivalence evidence required for extracted reusable work;
- dependency Issue, owner, difficulty, milestone, state, and evidence links;
- temporary escape hatch and the public Issue that removes it.
Initial row families:
| Family | Representative surfaces |
|---|---|
| Shell | app frame, responsive navigation, sidebar, workspace panes, mobile sheet |
| Sessions | thread list, search, rename, status, archive/delete actions |
| Run | run header, mode/status, cancel/retry, usage/trace summary |
| Transcript | viewport, Message, message parts, follow-tail, history prepend, jump-to-latest |
| Agent activity | reasoning, steps, tool invocation, subagent lane, progress |
| Human gates | approval, edit-and-approve, reject, generic questionnaire/form input |
| Composer | multiline editor, send/stop, IME-safe keyboard policy, errors, attachments |
| Workspace | plan/todo, file tree, artifacts, code/log, diff review, Inspector |
| Scale | virtualized lists, stable item identity, streaming update batching |
| Accessibility | live announcements, busy regions, focus restoration, keyboard order, zoom/reflow |
| Advanced host surfaces | terminal, document/editor, sandbox/preview |
Report category totals separately. Do not publish a single completion percentage that hides blocked or exempt rows.
Program milestones
M0 — Inventory and baseline
- publish the coverage matrix and application surface inventory;
- define the consumer/import boundary and primary production host;
- capture baseline keyboard, accessibility, responsive-layout, streaming, long-list, remount/dispose, theme, and bundle evidence;
- split independently reviewable child Issues without duplicating existing #374, #388, #389, or #495.
M1 — Fixed-layout all-Proto vertical slice
Build a bounded three-region Harness: session list, transcript + Composer, and artifact tabs. Include User/Assistant messages, streaming text, Code Block, always-visible reasoning, Tool Invocation, inline Approval, Send/Stop, Error/Retry, and code/log artifacts.
M1 intentionally defers pane resizing, virtualization, file intake, Tree, full terminal/editor/browser surfaces, and branch editing.
M2 — Transcript and human interaction maturity
- Message Scroller follow-tail and anchor preservation;
- bounded Message, Code Block, and Composer compositions;
- Collapsible-backed reasoning/tool details after #388 permits the required slice;
- Questionnaire/review compositions;
- application-local Agent activity prototypes.
M3 — Workbench capabilities
- Input/Field-dependent search and forms after #389 prerequisites;
- hierarchy/Tree, artifact workspace, diff review, plan/todo;
- relative geometry and Resizable workbench after #495 prerequisites;
- attachments, Image, and File Intake after the relevant capability decisions, including #374 where applicable.
M4 — Scale, responsive behavior, and enforcement
- virtualized/windowed Collection and long transcript/log evidence;
- narrow/mobile layouts, keyboard-only journeys, high contrast, reduced motion, zoom/reflow;
- static checks preventing third-party UI ownership, raw internal imports outside an allowlist, and app-private generic state-machine drift;
- repeated mount/unmount/dispose, session switching, streaming updates, and stale callback tests.
M5 — Advanced host surfaces
Research and separately admit Terminal, text-document/editor, and sandbox/preview host domains only after the core Harness is useful. Do not overload Textarea or Code Block with those responsibilities.
Existing dependencies and non-duplicates
- #377 — authoritative prototype classification and publication governance.
- #500 / merged #501 — initially-private
@proto.ui/compositions-chatuiownership decision; Message and Code Block remain independently reviewable and need separate implementation authorization. - #388 — Collapsible/Accordion semantic work; this program must not open a duplicate Base Collapsible proposal.
- #389 — Base Input / Text Control prerequisite path; this program consumes it rather than creating a parallel input protocol.
- #374 — Image View semantic boundary; Attachment preview work must not invent a shadow Image owner.
- #495 — relative geometry, constrained drag-to-value, and interruptible motion research; Resizable/workbench work must reconcile with it.
- #420 — website self-hosting program; useful dogfood governance precedent but independent scope.
Child-Issue rules
Do not assign this parent as one implementation task. Each child must name:
- exact matrix rows and user journeys;
- current Proto UI entities and missing prerequisite;
- semantic owner and negative boundary;
- browser/adapter/accessibility evidence;
- non-goals and dependency Issues;
- whether the child is research, proposal/checkpoint, app-local dogfood, or authorized implementation.
Creating a child Issue does not itself authorize implementation where the repository requires a maintainer semantic or implementation checkpoint.
Acceptance criteria
Inventory and architecture
- Every user-facing Harness surface has exactly one matrix row and target class.
- No eligible surface is owned by a third-party component/headless/chat/Agent UI library.
- Application code contains no duplicate generic keyboard, pointer, focus, collection, scroll, dismissal, text-control, form, or ARIA state machine.
- App-local Agent prototypes are clearly separated from neutral Base and reusable compositions.
- Every generalizable gap has a public dependency Issue and removal path for temporary escapes.
Functional journeys
- Create/select a session, send a prompt, observe streaming output, stop a run, retry an error, inspect a tool call, resolve an approval, and open an artifact entirely through Proto UI-owned controls.
- Switching sessions during streaming does not leak state, focus, listeners, or stale callbacks.
- Transcript follow-tail pauses on user scroll and recovers through an explicit jump-to-latest control.
- Long histories/logs remain responsive after the scale milestone.
- Responsive layouts retain reachable controls and preserve the active work context.
Accessibility and host evidence
- Keyboard order, activation, disclosure, selection, Escape/dismissal, focus restoration, visible focus, accessible names/roles/states, and announcements are verified.
- IME composition is not mistaken for Composer submission.
- Busy and live-region behavior avoids token-by-token announcement spam.
- 320px, 390px, desktop, zoom/reflow, forced-colors/high-contrast, and reduced-motion evidence is recorded where applicable.
- Extracted reusable slices have real WC/React/Vue equivalence evidence; non-Web claims require separate host evidence.
Enforcement
- Static checks reject forbidden third-party UI imports and untracked matrix rows.
- Ordinary app UI consumes approved public/private dogfood surfaces rather than raw Core/Runtime/Module APIs outside a reviewed integration allowlist.
- Focused contract and browser tests cover every new Proto UI capability introduced by this program.
- The final matrix contains no
ready,research, orblockedrow.
Out of scope
- Making this program a v0.3 release blocker.
- Treating Agent-domain data/runtime semantics as automatic Base candidates.
- Building an Agent workflow designer before the end-user Harness is useful.
- Reimplementing an LLM/Agent runtime inside Proto UI.
- Claiming that a static Code Block is a terminal or that Textarea is a production code editor.
- Manufacturing prototypes only to improve a dogfood percentage.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with M0: publish the authoritative coverage matrix and application surface inventory, then define the consumer/import boundary and primary production host. Review the listed milestones, dependencies, and child-issue rules before selecting a bounded child; the program is done only when every matrix row has a final state and the required functional, accessibility, host, and enforcement evidence is current.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- frontend
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Active
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100