Skip to content

docs(adr): agent deployment — template/skills bundles → provider-tagged provisioning - #63

Merged
brettchien merged 2 commits into
mainfrom
docs/adr-agent-deployment-templates
Aug 16, 2026
Merged

docs(adr): agent deployment — template/skills bundles → provider-tagged provisioning#63
brettchien merged 2 commits into
mainfrom
docs/adr-agent-deployment-templates

Conversation

@brettchien

Copy link
Copy Markdown
Contributor

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:

  • An agent = a prebuilt image tag + a plain-file bundle (config.toml + persona + .claude/skills). Nothing in an agent's identity needs compiling.
  • Compilation is CI/CD, never the deploy path — Studio consumes an image tag.
  • The runtime isn't always ECS — k8s is on the roadmap, so deploy is provider-tagged from the start.

Decision (summary)

  • Studio holds a template/skills library; composes a per-agent bundle (template ⊕ overlay, last-writer-wins).
  • Provision via a provider-tagged RuntimeDriver: pick an image tag + push the bundle to the runtime's file carrier (S3 state for ECS via pre_seed, ConfigMap/volume for k8s) + apply the workload. The driver is the only layer that knows S3-vs-ConfigMap.
  • Credential/region binding reuses the hermetic, provider-tagged approach from feat(desktop): provider-tagged, hermetic oab-mcp target (backend) #60; desired state records into the Fleet Store (ADR: Fleet Store & Control-Plane State Ownership #18) when it lands.

Boundaries

Status: Proposed (draft) — direction alignment; open questions in §6 (bundle transport, template storage, skills-by-reference, image/file boundary).

🤖 Generated with Claude Code

brettchien and others added 2 commits August 15, 2026 23:42
…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>
@brettchien
brettchien merged commit 3982f87 into main Aug 16, 2026
1 check passed
@brettchien
brettchien deleted the docs/adr-agent-deployment-templates branch August 16, 2026 06:35
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant