Epic neomjs/neo#13349 owns the Agent Harness H2 path: chat/work surface -> constrained blueprint -> live first Neo widget. The current child chain covers the first rendered widget (#13353 / PR neomjs/neo#13354), visible transcript / accepted-blueprint evidence (#13355), and safe first-widget request intake (#13357).
ADR 0020 and neomjs/neo-agent-brain#144 both make the next product promise explicit: the first widget must be live-mutable after it appears, not just generated once. ADR 0020 states the canonical demo as "build me a neo grid" -> a pane that becomes its own window, live-mutable; neomjs/neo-agent-brain#144 states that the standalone harness mutates itself through the same Neural Link mechanism it uses to build apps.
Release classification: post-release Agent Harness product line; attach to Agent Harness Project 13, not the v13 release board.
The Problem
After neomjs/neo#13357, the user can submit the canonical first-widget request and see deterministic widget provenance. That still stops short of the H2 proof if the result cannot be changed through the same conversational surface. A static first widget is a better demo, not yet a co-inhabited live object.
This ticket owns the next small proof: bounded follow-up requests mutate the existing first-widget state. The slice must stay constrained and reversible in shape. It should accept only a small, explicit edit grammar over the first widget, such as title, row count, column visibility, or sample-data reset. It must not introduce arbitrary code execution, generic provider orchestration, durable persistence, or Node-git write-through.
The Architectural Reality
learn/agentos/decisions/0020-agent-harness-concept.md names pillar 2 as conversational app creation and the canonical demo as chat -> live blueprint emission -> live-mutable grid pane.
resources/content/issues/chunk-2/issue-13012.md names runtime mutation via Neural Link and separately names NL-mutation-to-commit write-through onto Node-git. Those are related but not the same leaf.
learn/agentos/NeuralLink.md lists constrained runtime mutation tools such as set_instance_properties, create_component, remove_component, undo, and redo. This ticket should consume the bounded runtime-mutation concept without opening the full developer/admin surface.
resources/content/issues/chunk-3/issue-13064.md classifies harness-facing Neural Link tool projection as read / write-locked / admin, and warns that embedded harness agents must not inherit the full developer surface by default.
resources/content/issues/chunk-3/issue-13221.md preserves undo/redo and transaction-stack work as separate Neural Link substrate. This ticket may depend on those affordances if they are available, but it should not reimplement them.
learn/agentos/HarnessDockZoneModel.md separates runtime component ownership from persistence. It treats persisted item.blueprint and saved layouts as their own JSON-first model boundary, so durable persistence/write-through remains a later H2 child.
The Fix
Add a one-PR H2 child slice that lets the AgentOS widget child app accept bounded follow-up edit requests after the initial first-widget request is captured.
Expected shape:
Reuse the request/transcript/evidence surface from neomjs/neo#13357 instead of creating a second chat path.
Parse a small deterministic edit grammar over the first widget, for example "rename it to ", "show 8 rows", "hide/show column ", or "reset sample data".
Apply accepted edits to the existing first-widget blueprint/runtime state from neomjs/neo#13353 rather than creating a replacement widget or a second hardcoded demo path.
Reflect accepted and rejected edit attempts in the evidence/transcript surface from neomjs/neo#13355.
Fail closed for unknown edit commands, overlong input, HTML-like input, invalid row/column bounds, and missing prerequisite widget state.
Keep provider invocation, streaming orchestration, Memory Core persistence, saved layouts, Node-git write-through, and Electron shell work out of scope.
Contract Ledger Matrix
Target Surface
Source of Authority
Proposed Behavior
Fallback
Docs
Evidence
First-widget follow-up edit surface
neomjs/neo#13349, ADR 0020, neomjs/neo#13357
Accepts bounded edit requests after first-widget intake exists
Unknown or unsafe commands render a bounded rejection state
JSDoc / @summary on parsing and projection helpers
Unit tests plus local render smoke
Edit grammar -> widget state projection
neomjs/neo#13353 blueprint contract
Mutates the existing first-widget blueprint/runtime state without creating a parallel widget path
Invalid bounds or missing widget state preserve current widget and surface an error
Helper docs name accepted fields and limits
Unit tests for each accepted edit and fail-closed branch
Harness-visible mutation authority
neomjs/neo#13064, Neural Link docs
Uses only bounded app-runtime mutation semantics appropriate for harness embedding
If write-locked substrate is unavailable, keep mutation local to deterministic state and name the residual
PR body evidence
Source assertion or test proving no admin/full-developer surface is exposed
Transcript/evidence reflection
neomjs/neo#13355 safe evidence surface
Shows accepted/rejected edit attempts without unsafe rendering
Unsafe text remains escaped / bounded
Component/helper summary
Unit/source assertion for no unsafe HTML path
Decision Record impact
Aligned with ADR 0020. No ADR amendment expected; this ticket implements the "live-mutable" part of the H2 canonical demo without changing product ordering, source placement, Neural Link authority tiering, or persistence boundaries.
Acceptance Criteria
The AgentOS widget child app exposes bounded follow-up edit submission after neomjs/neo#13357's first-widget request intake path exists.
Accepted edit commands mutate the existing first-widget blueprint/runtime state from neomjs/neo#13353 rather than creating a replacement widget or duplicate demo path.
At least two deterministic edits are supported, one label/title edit and one grid-shape/data edit.
Unknown commands, overlong input, HTML-like input, invalid row/column bounds, and missing prerequisite widget state fail closed to bounded visible states.
Accepted and rejected edit attempts appear in the transcript/evidence surface from neomjs/neo#13355 without unsafe HTML rendering.
The implementation does not call an LLM provider, persist transcript/widget state, write through to git, expose admin Neural Link tools, or introduce Electron shell/build-root behavior.
Focused unit coverage verifies accepted edits, rejected edits, blueprint-path reuse, safe rendering, and no duplicate widget path.
Local render smoke verifies initial intake, transcript/evidence, live widget, and follow-up edit surfaces work together after prerequisites land.
Out of Scope
Natural-language model invocation or streaming chat orchestration.
Durable transcript or widget persistence.
Saved dock-zone layouts or item.blueprint write-through.
Node-git commit/write-through flows.
Generic Neural Link admin tool exposure or tool-surface curation.
Multi-writer locking or undo/redo substrate implementation; those remain neomjs/neo-agent-brain#143 / neomjs/neo#13221-adjacent lanes.
Electron shell/build-root work; that remains neomjs/neo#13033.
Partner-private workflows or client-specific UI.
Avoided Traps / Gold Standards Rejected
Static one-shot widget: rejected. H2 must show that the widget remains live-mutable after creation.
Arbitrary code generation/editing: rejected. The first edit path uses a bounded grammar over known widget state.
Full Neural Link developer surface in the harness: rejected. Harness-embedded mutation must not imply admin capability.
Persistence bundled too early: rejected. Runtime edit and durable write-through are different boundaries.
Duplicate Electron support: rejected. neomjs/neo#13033 remains the canonical Electron shell/build-root lane.
Related
Parent: neomjs/neo#13349.
Grandparent: neomjs/neo-agent-brain#144.
Blocked by neomjs/neo#13357.
Prerequisite chain: neomjs/neo#13357 depends on neomjs/neo#13355, which depends on neomjs/neo#13353 / PR neomjs/neo#13354.
Sibling lane: neomjs/neo#13033 remains the Electron shell/build-root lane.
ADR: learn/agentos/decisions/0020-agent-harness-concept.md.
Duplicate / Claim Sweep
Live latest-open sweep: checked the latest 20 open issues immediately before creation on 2026-06-15T15:55:04Z. Relevant results were neomjs/neo#13349, neomjs/neo#13353, neomjs/neo#13355, neomjs/neo#13357, neomjs/neo-agent-brain#144, neomjs/neo#13033, neomjs/neo-agent-brain#143, neomjs/neo#13221, neomjs/neo#13287, and unrelated backlog issues; no equivalent first-widget live-edit / mutation child leaf was present.
Targeted live GitHub searches: "first-widget live edit", "first-widget mutation", and "H2 widget edit" returned no open duplicate.
A2A in-flight sweep: native list_messages / add_message tools are not exposed in this Codex Desktop surface (tool_search returned 0 this turn). I could not inspect private in-flight A2A claims from this harness. Public GitHub issue/PR state and repo content were checked immediately before filing, and no public duplicate or collision was visible.
Semantic KB sweep: ask_knowledge_base(query='Agent Harness H2 first widget live mutation edit path blueprint chat intake persistence write-through', type='all') surfaced ADR 0020, Neural Link, and HarnessDockZoneModel context; it confirmed live mutation/edit and persistence/write-through are distinct H2 boundaries.
Exact repo/content sweep: rg "first-widget live edit|first widget live edit|follow-up edit|widget edit command|live widget mutation|H2 widget edit" resources/content/issues resources/content/discussions .agents/workflows learn apps/agentos -n returned no existing child ticket.
Context
Epic neomjs/neo#13349 owns the Agent Harness H2 path: chat/work surface -> constrained blueprint -> live first Neo widget. The current child chain covers the first rendered widget (#13353 / PR neomjs/neo#13354), visible transcript / accepted-blueprint evidence (#13355), and safe first-widget request intake (#13357).
ADR 0020 and neomjs/neo-agent-brain#144 both make the next product promise explicit: the first widget must be live-mutable after it appears, not just generated once. ADR 0020 states the canonical demo as
"build me a neo grid" -> a pane that becomes its own window, live-mutable; neomjs/neo-agent-brain#144 states that the standalone harness mutates itself through the same Neural Link mechanism it uses to build apps.Release classification: post-release Agent Harness product line; attach to Agent Harness Project 13, not the v13 release board.
The Problem
After neomjs/neo#13357, the user can submit the canonical first-widget request and see deterministic widget provenance. That still stops short of the H2 proof if the result cannot be changed through the same conversational surface. A static first widget is a better demo, not yet a co-inhabited live object.
This ticket owns the next small proof: bounded follow-up requests mutate the existing first-widget state. The slice must stay constrained and reversible in shape. It should accept only a small, explicit edit grammar over the first widget, such as title, row count, column visibility, or sample-data reset. It must not introduce arbitrary code execution, generic provider orchestration, durable persistence, or Node-git write-through.
The Architectural Reality
learn/agentos/decisions/0020-agent-harness-concept.mdnames pillar 2 as conversational app creation and the canonical demo as chat -> live blueprint emission -> live-mutable grid pane.resources/content/issues/chunk-2/issue-13012.mdnames runtime mutation via Neural Link and separately names NL-mutation-to-commit write-through onto Node-git. Those are related but not the same leaf.learn/agentos/NeuralLink.mdlists constrained runtime mutation tools such asset_instance_properties,create_component,remove_component,undo, andredo. This ticket should consume the bounded runtime-mutation concept without opening the full developer/admin surface.resources/content/issues/chunk-3/issue-13064.mdclassifies harness-facing Neural Link tool projection as read / write-locked / admin, and warns that embedded harness agents must not inherit the full developer surface by default.resources/content/issues/chunk-3/issue-13221.mdpreserves undo/redo and transaction-stack work as separate Neural Link substrate. This ticket may depend on those affordances if they are available, but it should not reimplement them.learn/agentos/HarnessDockZoneModel.mdseparates runtime component ownership from persistence. It treats persisteditem.blueprintand saved layouts as their own JSON-first model boundary, so durable persistence/write-through remains a later H2 child.The Fix
Add a one-PR H2 child slice that lets the AgentOS widget child app accept bounded follow-up edit requests after the initial first-widget request is captured.
Expected shape:
Contract Ledger Matrix
Decision Record impact
Aligned with ADR 0020. No ADR amendment expected; this ticket implements the "live-mutable" part of the H2 canonical demo without changing product ordering, source placement, Neural Link authority tiering, or persistence boundaries.
Acceptance Criteria
Out of Scope
item.blueprintwrite-through.Avoided Traps / Gold Standards Rejected
Related
Parent: neomjs/neo#13349. Grandparent: neomjs/neo-agent-brain#144. Blocked by neomjs/neo#13357. Prerequisite chain: neomjs/neo#13357 depends on neomjs/neo#13355, which depends on neomjs/neo#13353 / PR neomjs/neo#13354. Sibling lane: neomjs/neo#13033 remains the Electron shell/build-root lane. ADR:
learn/agentos/decisions/0020-agent-harness-concept.md.Duplicate / Claim Sweep
Live latest-open sweep: checked the latest 20 open issues immediately before creation on 2026-06-15T15:55:04Z. Relevant results were neomjs/neo#13349, neomjs/neo#13353, neomjs/neo#13355, neomjs/neo#13357, neomjs/neo-agent-brain#144, neomjs/neo#13033, neomjs/neo-agent-brain#143, neomjs/neo#13221, neomjs/neo#13287, and unrelated backlog issues; no equivalent first-widget live-edit / mutation child leaf was present.
Targeted live GitHub searches:
"first-widget live edit","first-widget mutation", and"H2 widget edit"returned no open duplicate.A2A in-flight sweep: native
list_messages/add_messagetools are not exposed in this Codex Desktop surface (tool_searchreturned 0 this turn). I could not inspect private in-flight A2A claims from this harness. Public GitHub issue/PR state and repo content were checked immediately before filing, and no public duplicate or collision was visible.Semantic KB sweep:
ask_knowledge_base(query='Agent Harness H2 first widget live mutation edit path blueprint chat intake persistence write-through', type='all')surfaced ADR 0020, Neural Link, and HarnessDockZoneModel context; it confirmed live mutation/edit and persistence/write-through are distinct H2 boundaries.Exact repo/content sweep:
rg "first-widget live edit|first widget live edit|follow-up edit|widget edit command|live widget mutation|H2 widget edit" resources/content/issues resources/content/discussions .agents/workflows learn apps/agentos -nreturned no existing child ticket.Origin Session ID: 019ec8a7-1f8e-75a3-b223-fe59cc444776
Retrieval Hint: "Agent Harness H2 first-widget live edit bounded follow-up request mutation blueprint reuse no persistence no write-through"