docs(adr): agent-consoles Part D — Studio-brokered fs, exec-backed (MCP = federation fallback) - #71
Merged
Merged
Conversation
…eration fallback) Revises the remote file editor's backend after the design call. fs stays Studio-brokered (agent never holds the credential; `oab` grant stays management-only), but the backend is chosen by one axis — **does Studio own the target's runtime?** - Backend 1 (primary, every agent in the fleet today): Studio's platform exec channel — ECS `ExecuteCommand` / k8s `pods/exec` — with a control- plane credential Studio already holds. Ships now, no openab dependency. - Backend 2 (fallback, federation): the target-hosted fs MCP server over the `oab` relay, for an agent Studio can reach only over `/acp` but whose platform it does not own. Depends on openab; deferred until such an agent exists. Consequence: the fleet's fs write is no longer gated on an upstream fs server — that item drops from "gating dependency" to "federation fallback." The trade the exec backend buys, stated plainly: gating (`roots`/`writable`) becomes Studio-enforced (path validation + argv-form exec), not resource- enforced, and a control-plane credential enters the fs path — held only by Studio's broker, never by an agent. - §5 Part D rewritten around the two-backend model + the deciding axis. - §6/§7 re-pointed: read+write ship over exec for owned runtimes; the MCP server is the deferred federation fallback; security consequences updated (enforcement locus, control-plane cred in the fs path). - §8: OQ#1 re-resolved (two backends); new OQ#2 on the exec backend's enforcement locus. Closing slices: (4) read+write over exec (no openab), (5) federation MCP backend when needed. Supersedes the Part D mechanism locked in #70 (fs = target-exposed MCP server as the sole backend). Docs-only. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Revises the remote file editor (Part D) backend after the follow-up design call. fs stays Studio-brokered — the management agent never holds a target's credential; the
oabgrant stays management-only — but the backend is chosen by one axis: does Studio own the target's runtime?This supersedes the Part D mechanism locked in #70 (fs = a target-exposed MCP server as the sole backend).
The decision
ExecuteCommand(SSM) / k8spods/exec— using a control-plane credential it already holds (it is the plane that scales these services). Ships now, no openab dependency; covers 100% of the current fleet./acpbut whose platform it does not own, fs rides a small files server the agent exposes, relayed throughoab. The previously-decided MCP mechanism; depends on openab, deferred until such an agent exists — exec can't reach a platform Studio doesn't own.Unchanged: the Studio-brokered topology and the actor (management agent + UI hit one Studio fs surface). The rejected alternative is handing the agent the exec credential / each target's bearer directly — that concentrates cluster-grade RCE in an LLM.
The trade the exec backend buys (stated plainly)
roots/writableat the resource; exec has no OS root-fence, so with exec these become Studio-side path validation + argv-form exec — advisory, not resource-enforced. A Studio path-validation bug = full-container write. Mitigations: canonicalization + prefix checks, argv-form (no shell-string interpolation),writabledefault-off, explicit Apply.Sections touched
Docs-only.
🤖 Generated with Claude Code