-
Notifications
You must be signed in to change notification settings - Fork 2
plat 215
PLAT-215 — guarded agent_browser download already uses platform staging; correct the stale external-only diagnosis
| Coordination | Value |
|---|---|
| Assigned agent | unassigned |
| Ticket state |
resolved — current guarded execution prevents the unsafe third-party destination write |
| Last synchronized | 2026-08-29 |
- Priority: P3 — the original data-loss report was real for a direct third-party destination write, but it is not the current guarded platform behavior.
-
Owner:
agent_go/pkg/browser/artifact_broker.go,workspace/security/browser_artifact.go. -
Related:
harness:agent_browser.download(Workflow/ICICI-BANK-PARSING, medium; canonical aftermerge_pulse_issuesfoldedPUL-8F2C747Einto it).
The earlier ticket record said download <selector> <destination> passed
straight to the third-party agent-browser CLI. That is stale. When the
session has an enabled folder guard, Executor.HandleAgentBrowser calls
prepareBrowserArtifact("download", ...), replaces the requested destination
with a fresh path under /tmp/agentworks-browser-artifacts/, and sends the
original destination only as an ArtifactTransfer instruction to the trusted
workspace server.
The third-party CLI therefore writes only to the managed staging location. On
successful completion, FinalizeBrowserArtifact validates that the original
destination is inside the workspace, covered by the current write allowlist,
and not blocked; only then does it atomically publish the staged file. An
unauthorized destination fails at this platform-owned finalization boundary,
after the third-party download has safely completed to staging. The platform
does not ask agent-browser to write the unauthorized destination, so its
cleanup-on-denial behavior is not exercised.
-
TestPrepareBrowserArtifactRewritesDownloadDestinationproves the CLI destination is replaced with managed staging. -
TestHandleAgentBrowserBrokersExplicitDownloadproves the outgoing browser command contains only the staging path while the transfer retains the requested destination. -
TestExecuteShellBrowserArtifactDestinationIsWorkspaceRelativeproves the trusted workspace server publishes only through the artifact-transfer path. -
FinalizeBrowserArtifactenforces workspace containment, write-path coverage, blocked-path checks, regular non-empty staged files, and atomic publish.
This protection applies to guarded workflow/session calls. Unguarded local
browser use intentionally keeps direct-path behavior because there is no
session authorization boundary to enforce. If a new data-loss report occurs,
first verify whether that call was unguarded or bypassed the agent_browser
executor before treating it as a third-party regression.
No new code is required by this correction; the safe broker was already shipped. The previous "no platform fix available" disposition was inaccurate.
Auto-synced from docs/ on main. Edit there, not here.