docs(adr): agent deployment — template/skills bundles → provider-tagged provisioning - #63
Merged
Merged
Conversation
…ed provisioning Studio stands up agents (not just observes): an agent = a prebuilt image tag + a plain-file bundle (config.toml + persona + skills). Studio holds a template/skills library, composes a per-agent bundle (template ⊕ overlay), and provisions it via a provider-tagged driver — pick an image tag + push the bundle to the runtime's file carrier (S3 state for ECS, ConfigMap/volume for k8s) + apply the workload. No build in the deploy path (compilation is CI/CD). Defers #49 Part D (remote editing of a running agent's files). Relates to #18 (desired state) and #60 (provider-tagged hermetic target). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Direction greenlit by Brett (2026-08-16). Slices 1&2 (template/skills library + compose; ECS provision) to follow. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This was referenced Aug 16, 2026
brettchien
added a commit
that referenced
this pull request
Aug 16, 2026
Slice 1 of the accepted agent-deployment ADR (#63): the compose seam. Author a template/overlay/skills library and preview the composed {path -> bytes} agent bundle. Studio-local, zero AWS/upstream. - crates/studio-compose: pure compose core (template ⊕ overlay + skills by-reference -> deterministic Bundle + image tag), last-writer-wins (overlay > skills > template), sha256 bundle digest. 17 unit tests. - src-tauri: compose_library_get/set + compose_preview commands; library persisted as one JSON doc under app config dir (like config.rs). - console: Compose tab (JSON library editor + template/overlay picker + bundle preview). Pure render helpers unit-tested. Verified: cargo test -p studio-compose (17), console tsc + 65 vitest + vite build. src-tauri Rust compiles under bundle-macos CI (GTK dep). Co-authored-by: Orca <orca@openab.dev> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
brettchien
pushed a commit
that referenced
this pull request
Aug 16, 2026
…rovision (deploy slice 2, path A) Slice 2 foundation of the agent-deployment ADR (#63), path A (extend the artifacts prefix; the runtime restores it into ~ at boot): - studio-compose: Bundle::artifact_objects(ns, name) — pure {path->bytes} → (artifacts/{ns}/{name}/{path}, bytes) mapping + artifacts_prefix(). Unit-tested (2 new). - oabctl manifest: new optional Spec.bundleFrom (mirrors bootstrapFrom; propagated through OABFleet expand). Legacy manifests unchanged (default None). - oabctl studio_api (additive, config-free): bundle_from_uri(), push_bundle() (put each object to the control-plane bucket), and provision() = push bundle then apply the manifest at its chosen image tag. Reuses parse_manifests + apply_manifests. Tests for bundle_from_uri + bundleFrom manifest round-trip. Deferred (next increments): oab-mcp deploy_provision tool + src-tauri command + Compose-tab Deploy button + create-wizard bundle support; and the openab image boot step that syncs bundleFrom prefix into ~ (cross-repo). Verified: cargo test -p studio-compose (19); cargo check -p oabctl (+ --tests). Full oabctl test + src-tauri build run under CI. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
brettchien
added a commit
that referenced
this pull request
Aug 16, 2026
…oy slice 2, path A) (#65) * feat(provision): compose→artifacts layout + bundleFrom + studio_api provision (deploy slice 2, path A) Slice 2 foundation of the agent-deployment ADR (#63), path A (extend the artifacts prefix; the runtime restores it into ~ at boot): - studio-compose: Bundle::artifact_objects(ns, name) — pure {path->bytes} → (artifacts/{ns}/{name}/{path}, bytes) mapping + artifacts_prefix(). Unit-tested (2 new). - oabctl manifest: new optional Spec.bundleFrom (mirrors bootstrapFrom; propagated through OABFleet expand). Legacy manifests unchanged (default None). - oabctl studio_api (additive, config-free): bundle_from_uri(), push_bundle() (put each object to the control-plane bucket), and provision() = push bundle then apply the manifest at its chosen image tag. Reuses parse_manifests + apply_manifests. Tests for bundle_from_uri + bundleFrom manifest round-trip. Deferred (next increments): oab-mcp deploy_provision tool + src-tauri command + Compose-tab Deploy button + create-wizard bundle support; and the openab image boot step that syncs bundleFrom prefix into ~ (cross-repo). Verified: cargo test -p studio-compose (19); cargo check -p oabctl (+ --tests). Full oabctl test + src-tauri build run under CI. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * feat(deploy): Compose→Deploy vertical — deploy_provision (slice 2, track ②) Wire the compose library to a one-click ECS deploy, end to end: - oabctl studio_api: load_manifest() reads the stored desired manifest (manifests/{ns}/{name}.yaml); redeploy() loads it, repoints image + bundleFrom, pushes the bundle, and applies — networking/resources/secrets ride along from the stored manifest, so a redeploy needs no infra input. - studio-cp: provision_from_library() — compose template⊕overlay, then redeploy; returns a ProvisionOutcome (image/digest/objects/action). - oab-mcp: new deploy_provision tool (thin dispatch into studio-cp). - src-tauri: deploy_provision command bridging to the sidecar tool. - console: Deploy form on the Compose tab (revealed after preview) — namespace/name/image tag → compose→push→apply, with result status. The agent must already be created (redeploy reuses its stored manifest); net-new agent networking-from-bootstrap is a follow-up, as is the openab image-side bundle consumption (still under discussion). Verified: cargo check -p oabctl / -p studio-cp / -p oab-mcp; console tsc + 65 vitest + vite build. Full workspace test + src-tauri build run under CI. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> --------- Co-authored-by: Orca <orca@openab.dev> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
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.
Direction ADR for the deployment vision we aligned on in-thread (2026-08-15).
The idea
Studio should stand up agents, not just observe them. Grounded on three facts:
config.toml+ persona +.claude/skills). Nothing in an agent's identity needs compiling.Decision (summary)
template ⊕ overlay, last-writer-wins).RuntimeDriver: pick an image tag + push the bundle to the runtime's file carrier (S3 state for ECS viapre_seed, ConfigMap/volume for k8s) + apply the workload. The driver is the only layer that knows S3-vs-ConfigMap.Boundaries
/acp(docs(adr): two consoles — management + per-agent agent consoles (endpoint registry + remote file editor) #49 Part D — editing a running agent) is deferred (different surface).Status: Proposed (draft) — direction alignment; open questions in §6 (bundle transport, template storage, skills-by-reference, image/file boundary).
🤖 Generated with Claude Code