Context
#141 wires declarative capabilities (surfaces/runtime/workflow/tools) through the create/update API so agents are authorable as data. That is safe today only because agent creation is operator-only (epic #58 is demand-gated). This issue is the guardrail that must land before the same authoring path is opened to untrusted third-party creators.
The risk
Declaring runtime:"coding"|"browser" + a workflow binding gives an agent's Pilot the ability to drive a CLI or real browser on a subscriber's machine (via pags up) or the subscriber's connected accounts. The blast radius is bounded by:
- closed-enum capabilities (no arbitrary code — that's
customSurfaces, separately guarded),
- Pro-gating,
- subscriber consent (they choose to run the runner),
- per-connector write-consent (
instance_connector_consent).
But a malicious or low-quality third-party agent that declares a runtime and lures a subscriber into running pags up is a real abuse vector once creation is open.
What this issue must decide/build
Critical assessment
This is a policy + UX problem more than a code one — the enforcement points already exist (capability resolution, consent gate, Pro-gate). The missing pieces are (1) a trust tier on the creator, (2) an honest subscribe-time disclosure, (3) keeping the one genuinely code-executing surface (customSurfaces) off the open path. Until this lands, #141's capability-write routes must remain owner/admin-gated (they are).
Refs: #74, #75 (trust model epic), #58 (open-to-third-parties epic), #52 (Tier-2 sandbox), #141 (the wiring this gates).
Context
#141 wires declarative
capabilities(surfaces/runtime/workflow/tools) through the create/update API so agents are authorable as data. That is safe today only because agent creation is operator-only (epic #58 is demand-gated). This issue is the guardrail that must land before the same authoring path is opened to untrusted third-party creators.The risk
Declaring
runtime:"coding"|"browser"+ aworkflowbinding gives an agent's Pilot the ability to drive a CLI or real browser on a subscriber's machine (viapags up) or the subscriber's connected accounts. The blast radius is bounded by:customSurfaces, separately guarded),instance_connector_consent).But a malicious or low-quality third-party agent that declares a runtime and lures a subscriber into running
pags upis a real abuse vector once creation is open.What this issue must decide/build
runtime/workflow. Options: (a) keep operator/admin-only and require review to flip an agent to a runtime capability; (b) acreatortrust tier that unlocks runtime declaration after review; (c) allow declaration but require an explicit subscriber consent screen naming the capability ("this agent will run code on your machine").runtime/workflow/write-scoped connector tools before the user commits, distinct from the current silent capability resolution.customSurfacesstays operator-only / sandboxed (it loads a code bundle into the console origin) — must NOT ride the Wire declarative capabilities (surfaces/runtime/workflow/tools) through create + update — the missing authoring path (#51) #141 path open to creators. Cross-link the Tier-2 sandbox ([3P] Tier-2: sandboxed creator code via Dynamic Workers (CRITICAL PATH) #52).Critical assessment
This is a policy + UX problem more than a code one — the enforcement points already exist (capability resolution, consent gate, Pro-gate). The missing pieces are (1) a trust tier on the creator, (2) an honest subscribe-time disclosure, (3) keeping the one genuinely code-executing surface (
customSurfaces) off the open path. Until this lands,#141's capability-write routes must remain owner/admin-gated (they are).Refs: #74, #75 (trust model epic), #58 (open-to-third-parties epic), #52 (Tier-2 sandbox), #141 (the wiring this gates).