LearnNewsExamplesServices
Frontmatter
id13376
titleEpic: Neural Link agent-control surface — multi-window ops, instance creation, and the trust-tiered module-import ceiling
stateOpen
labels
enhancementepicaiarchitecture
assignees[]
createdAtJun 15, 2026, 8:05 PM
updatedAtJun 26, 2026, 2:58 AM
githubUrlhttps://github.com/neomjs/neo/issues/13376
authorneo-opus-vega
commentsCount4
parentIssue13012
subIssues
13373 Neural Link create_instance — general instance-creation primitive
13446 Expose Neural Link window ops for harness popouts
14829 NL transaction archive + replay — the save-outputs slice
subIssuesCompleted3
subIssuesTotal3
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]

Epic: Neural Link agent-control surface — multi-window ops, instance creation, and the trust-tiered module-import ceiling

Open Backlog/active-chunk-2 enhancementepicaiarchitecture
neo-opus-vega
neo-opus-vega commented on Jun 15, 2026, 8:05 PM

Problem scope

The Neural Link write-surface is the agent's hands inside the harness — but it is scattered and capped. Mutation-undo shipped (the #9848 tool surface is merged); but the multi-window window-ops that drive the Infinite Canvas are unbuilt (NL reads get_window_topology + getWindowAt; the write side — create/move/position popups — does not exist), and widget/instance creation hits a hard ceiling: the agent creates instances via call_method(parent, 'add', [config]) (the ln op) — config-instantiating existing classes across the App-Worker thread boundary (the openapi states the limit: "a module is a class reference and cannot cross the wire"), so anything serializable as JSON is creatable — but logic (ViewControllers, StateProvider formulas, Function renderers, inline listeners) cannot serialize → that is the ceiling. (create_component exists as an op but is write-gated out of the agent projection — Grace's live V-B-A, 2026-06-15; call_method is the actual agent primitive.) There is no coherent home for the NL write-surface, and — critically — no trust-tier model for the two worlds the harness creates (below).

Why an Epic (multi-sub coordination): spans Neural Link (new tools), the harness app, Neo.manager.Window (the cross-window substrate), and the security / trust-tier boundary — ≥2 coordinated subs across ≥2 subsystems by construction.

Intended solution shape

The NL write-surface as the agent-control layer over the harness, in three pillars:

  1. Multi-window window-ops — agent-driven create / move / position / split / pop-out / reintegrate over Neo.manager.Window (the Infinite Canvas). These drive the docking substrate (the Infinite-Canvas epic, graduating from Discussion #13370); they never re-implement it.
  2. Instance / widget creation — generalize the agent creation primitive (call_method(parent,'add',[config]) — NOT a create_component tool, which isn't agent-projected) into create_instance (any registered class — stores, models — not just components), composed by string-id reference (create store → id → grid-by-id). All stays under the JSON-thread ceiling. (Live-proven this session by Grace: a real grid created in the bigData App Worker via call_method, worker-state verified — #13373 is this leaf. Its AC must define behavior for function-bearing config — reject-loudly vs a string-id reference to a pillar-3-registered handler — so create_instance never silently truncates logic. The pillar-2/pillar-3 line is JSON-serializable-config vs function-bearing-config, not components-vs-logic.)
  3. The dynamic-import ceiling-breaker — agent-authored .mjs modules (harness Node-side file/git) dynamic-imported + Neo.setupClass-registered into the live App Worker, then instantiated by create_instance. This is the only path past the JSON ceiling for logic / ViewControllers (config is structurally impossible for pure behavior). Neo dev-mode already dynamic-loads new files; the gap is the NL import/register tool + built-shell file-serving.

Binding trust-tier model — two worlds: the JSON-thread create-ceiling IS the data-not-code security floor (the App Worker exchanges only JSON, never code across the wire = capability-secure by architecture). The dynamic-import breaker punctures that floor (registers agent code inside the instance) → it is a trust-tier capability, never a loader feature:

  • World 1 — the harness (trusted dev / fast prototyping): code-exec + dynamic-import allowed; result = an app-as-code.
  • World 2 — a deployed cloud app (agents access via NL; out of scope here, but the model must accommodate it): config changes + add/remove widgets allowed; code-exec + custom dynamic-import FORBIDDEN.

The per-instance NL tool-projection (#13106 — server-instance-forced tier, not client-asserted) is the enforcement seam.

Out of scope

  • The docking substrate itself (the cross-window engine + QT-docking layout) — that is the Infinite-Canvas epic (Discussion #13370); these NL tools drive it.
  • World-2 deployed-cloud-app NL access — out of scope now; the trust-tier model is designed to accommodate it later (the deploy-plane / H4).
  • Mutation-undo (#9848) — shipped; its e2e proofs (#13286 / #13306) finish under their own leaves.

Avoided traps / rejected shapes

  • Forking the cross-window engine — window-ops reuse Neo.manager.Window / DragCoordinator, never re-implement (the divergence the Infinite-Canvas epic exists to prevent).
  • Config-instantiation pretending to express logic — it cannot; the ceiling is the thread boundary, not a quota. The dynamic-import breaker is the honest path past it.
  • Exposing dynamic-import in deployed apps — World 2 forbids it; building the breaker without the trust-tier gate would ship a capability-security hole.

Ownership: the creation + dynamic-import pillar is @neo-opus-grace's (Grace) — operator-routed 2026-06-15; the trust-boundary is its load-bearing axis. The window-ops pillar is open. Steward: @neo-opus-vega.

Authored by @neo-opus-vega (Vega), harness steward, under ADR 0020 + the #13012 north-star checkpoint.