Managed tools and environments
Platform administrators control the software available inside intent runtimes. The platform ships one protected Standard environment and a catalog of tool definitions. Administrators publish exact tool versions, compose those versions into environments, and publish environment revisions that space owners can assign.
Standard provides the protected AgentCore runtime plus Node.js and Python.
It also includes MarkItDown for agents to extract text and tables from PDF,
DOCX, and XLSX files already present in their workspace. Agents invoke
markitdown path/to/document.pdf when needed; the platform does not run an
automatic conversion step.
Java, Go, Rust, Maven, and Gradle are shipped as tool definitions, not as predefined JVM, Go, Rust, or Polyglot environments. Administrators can add other tools, such as a .NET SDK, without changing the application source.
Quick start
Choose the path that matches your task:
| Goal | What to do |
|---|---|
| Use the built-in Node.js and Python runtime | Use Standard. New spaces use it unless a different default is set. |
| Create a Java, Go, Rust, Maven, or Gradle runtime | Publish the required shipped tool versions, create an environment, then publish it. |
| Add another SDK or CLI | Add and verify a tool, publish its exact version, then include it in an environment. |
| Upgrade a tool without changing existing runs | Add the new tool version, create and publish a new environment revision, then create new intents. |
| Make an environment available to a space | Assign the published environment before creating the intent. |
| Diagnose a failed or blocked build | Review tool failures and security findings or environment build evidence. |
The normal flow is:
flowchart LR
T["Publish exact tool versions"] --> E["Build an environment revision"]
S["Standard<br/>Node.js + Python"] --> E
E --> P["Publish the environment"]
P --> A["Assign it to a space"]
A --> I["Create an intent<br/>runtime snapshot is pinned"]
Publishing a newer tool or environment revision never changes an existing intent. New intents snapshot the currently published revision of the space-assigned environment.
Detailed guide
Access and responsibilities
The managed build views are under Admin -> Environments and require the
platform-admin role:
- Tools imports, builds, verifies, publishes, and recommends tool versions.
- Environments composes published tool versions into runtime images.
Space Owners and Admins select a published environment under Space Settings -> Environment. Space Members can see the assignment but cannot change it.
The object model
| Object | Meaning |
|---|---|
| Standard | The protected AgentCore base, Node.js, Python, runtime files, user, entrypoint, port, and health behavior. |
| Tool family | A stable capability such as java, go, rust, maven, gradle, or dotnet-sdk. |
| Tool version | An immutable, verified tool artifact for one exact version and one architecture (arm64 or x86_64). |
| Environment | A named toolchain based on one published environment. |
| Environment revision | An immutable image recipe and runtime created from exact tool-version and base-revision snapshots. |
| Space assignment | The environment whose current published revision will be used by new intents. |
| Intent snapshot | The exact environment revision, image digest, runtime target, compatibility version, and verification result captured when an intent is created. |
The important invariants are:
- Only published tool versions can be added to an environment.
- Only a
READYtool version or environment revision can be published. - Published tool versions and environment revisions are immutable.
- Publishing or recommending a tool version never rewrites an existing environment revision.
- Publishing a new environment revision affects new intents for assigned spaces. Existing intents stay pinned to their original runtime target.
Shipped tool definitions
The catalog bootstrap creates these tool families and initial version definitions:
| Tool | Initial version | Dependency |
|---|---|---|
| Java JDK | 21.0.8 |
None |
| Go SDK | 1.24.6 |
None |
| Rust Toolchain | 1.89.0 |
None |
| Apache Maven | 3.9.11 |
Recommended Java |
| Gradle | 9.0.0 |
Recommended Java |
The scheduled bootstrap queues independent initial versions for import. Maven and Gradle remain drafts until Java has a published recommended version because their own functional checks require Java.
On a deployment that publishes the x86_64 core image (Instances compute enabled), the bootstrap also creates an x86_64 version of each of the five tools, next to the arm64 one, and starts the Java, Go, and Rust x86_64 builds. Nothing is published or recommended automatically: the x86_64 versions wait for the same build, review, publish, and recommend steps as the arm64 ones, and x86_64 Maven and Gradle stay drafts until x86_64 Java is published and recommended. See x86_64 tool versions.
These are catalog entries only. They do not create space-selectable environments by themselves.
Tool-version lifecycle
The Tools workspace shows a visual path for every selected version:
Define -> Build -> Check -> Publish -> Recommend
The active step includes a waiting indicator while CodeBuild or ECR is still working. CodeBuild logs are available as soon as the build supplies a log URL, and Open ECR is available after the image exists.
| Status | Meaning | Available action |
|---|---|---|
DRAFT |
Definition is editable and no build is active. | Edit or start the build |
QUEUED |
CodeBuild has been requested. | Wait or open CodeBuild logs |
BUILDING |
Source import, installation, normalization, and functional checks are running. | Open CodeBuild logs |
SCANNING |
The immutable OCI artifact exists and ECR scan results are being evaluated. | Wait or open ECR |
SECURITY_REVIEW |
Critical or High findings, or a scan limitation, require an explicit administrator decision. | Review the findings or scan limitation |
READY |
Source, artifact, scan decision, and verification evidence are complete. | Publish |
PUBLISHED |
The immutable version can be selected by environments. | Make recommended when it should be the default |
FAILED |
Import, installation, scan processing, or verification failed. | Inspect the error, edit, or retry |
Refreshing the browser is not required while a build is active; the view polls the version until it reaches a reviewable or terminal status.
Add a new tool
Prepare the source
Before opening the form, identify:
- An exact version.
- The architecture,
arm64orx86_64. The architecture choice appears only when the deployment publishes the x86_64 core image; otherwise every version is arm64. - The publisher's official Linux archive URL for that architecture.
- The distribution and publisher, for example Amazon Corretto and Amazon Web Services.
- The tool type, such as Java JDK, Go SDK, or Other CLI.
For the normal case, that is all the version form requires. The tool type supplies the executable paths, environment variables, dependencies, version command, and functional check. Open Advanced options only for an unusual archive layout, installer, dependency, package prerequisite, or verification command.
The optional advanced checksum fields can record a publisher-provided checksum and public checksum-evidence URL. The platform always pins the downloaded artifact to its calculated SHA-256 even when those fields are empty.
The import path accepts public HTTPS archives ending in:
.tar.gz.tgz.tar.xz.zip
The source URL must not contain credentials, query parameters, fragments, or embedded secrets. The platform rejects private, local, link-local, and metadata-service destinations. The source download is bounded, redirects are revalidated, and the archive is checked for traversal paths, unsafe links, special files, excessive entry counts, and excessive expanded size.
Source uploads are not supported. Tool definitions import from public HTTPS URLs so the retained source has an auditable publisher location.
Current import limits are:
| Limit | Maximum |
|---|---|
| Source archive download | 1024 MiB |
| Archive entries | 200,000 |
| Expanded archive content | 4096 MiB |
| Normalized tool output | 1536 MiB |
| Final AgentCore environment image | 2048 MiB |
Create the family and first version
- Open Admin -> Environments -> Tools.
- Choose New tool family.
- Enter a human-readable Name, for example
.NET SDK. - Enter or accept the stable lowercase ID, for example
dotnet-sdk. - Enter the Publisher, Category, and Description.
- Enter the Exact version.
- Select the Tool type.
- Select the Architecture when offered. It defaults to
arm64. - Enter the Linux ARM64 download URL (or Linux x86_64 download URL).
- Choose Create and start build.
Creating the family and creating its first version happen together. A tool family can later contain multiple published versions. For the first version, the family name and publisher are also used as the distribution identity.
The tool ID is a durable catalog key. Do not include the version in it. Use
dotnet-sdk, not dotnet-sdk-8. The version belongs to the tool-version
record.
Choose a tool type
Tool types fill in executable paths, environment variables, dependencies, the version command, and a representative functional check:
| Tool type | Functional verification |
|---|---|
| Java | Runs java -version, compiles a class with javac, and runs it. |
| Go | Runs go version, builds a small Go program, and runs it. |
| Rust | Runs rustc --version, creates a Cargo project, builds it, and runs it. |
| Maven | Runs mvn --version and validates a minimal project offline. Adds Java as a dependency. |
| Gradle | Runs gradle --version and executes a minimal task offline. Adds Java as a dependency. |
| .NET | Runs dotnet --version, creates a console project, builds it, and runs it. |
| Generic CLI | Runs the configured version command. Add a custom verifier when a version check alone is insufficient. |
Selecting a tool type is a starting point, not a bypass. Review the generated executable paths and expected version before building.
Publisher checksum and source trust
The publisher checksum section is optional. Supply both:
- A SHA-256 or SHA-512 digest published by the vendor.
- A public evidence URL from which the platform can independently find that digest.
The catalog displays:
- Publisher verified when the downloaded archive matches the supplied publisher digest and the digest is also found at the independently fetched evidence URL.
- Platform pinned when the platform computed and retained its own SHA-256 digest but no independently verified publisher evidence was supplied.
Both trust levels pin the imported source and resulting OCI artifact by digest. Publisher verified adds independent evidence about who published the source.
The first successful source import is retained under its digest. Retrying an installer or verifier correction reuses that retained source instead of silently downloading a new archive.
Generated archive installation
Use generated installation whenever the archive already contains the desired tool layout.
Set Root folders to remove to the number of wrapper directories that should
be removed during extraction. For example, an archive containing
tool-1.2.3/bin/tool needs one root folder removed when bin/tool should be
at the normalized tool root.
Generated installation extracts the verified archive without executing publisher-supplied installation code.
Custom installation
Enable the custom installer only when extraction is insufficient. The Bash script receives:
TOOL_SOURCE: the read-only retained source archive.TOOL_OUTPUT: the writable directory that must contain the normalized tool.TOOL_ARCHIVE_FORMAT: the detected source format.
The installer runs inside a nested container with:
- No AWS credentials.
- No EC2 or ECS metadata access.
- No Docker socket.
- No host mounts other than the retained source and output directory.
- No access to private or link-local networks.
- Bounded CPU, memory, process count, temporary storage, and output size.
Public internet access is available to the installer. If the script downloads additional mutable content, the published OCI digest remains immutable and verified, but rerunning the script is not guaranteed to produce the same artifact. Prefer the retained source archive and exact checksums whenever possible.
Do not put credentials or secrets in installer scripts. The API rejects common secret patterns, and definitions are visible to platform administrators.
Executables and dependencies
Under Executables, dependencies, and custom verification:
- List each executable as
name=relative/path, for exampledotnet=dotnetorjava=bin/java. - Select another tool family when this tool cannot be verified or used without it.
- Add required Debian packages as
package=exact-version. - Add non-secret variables as
NAME=value. - Use
${TOOL_ROOT}when a variable should point at the normalized tool root.
A dependency resolves to that family's published recommended version for the
same architecture. A dependent version cannot build until every dependency has
a published recommended version of that architecture
(TOOL_RECOMMENDED_DEPENDENCY_MISSING), and a dependency of the other
architecture is rejected (TOOL_ARCHITECTURE_MISMATCH). The platform rejects missing families, self-dependencies,
dependency cycles, executable collisions, package-version conflicts, and
environment-variable conflicts.
Custom verification
Every version requires a version command and expected output. Use the optional networkless verifier for additional behavior that the selected preset does not cover.
The verifier:
- Runs as the non-root runtime user.
- Has no network access.
- Uses isolated writable caches for SDKs and build tools.
- Can read up to 32 text fixture files supplied in the form.
- Receives fixture files read-only.
- Must complete within the build's resource and time limits.
Use fixture files for a minimal real project, configuration file, or expected output. Do not include credentials or production data.
Example: add a .NET SDK
- Choose New tool family.
- Set Name to
.NET SDKand ID todotnet-sdk. - Set Publisher to
Microsoftand Category toLanguage SDK. - Enter the exact SDK version.
- Select the .NET SDK tool type.
- Enter Microsoft's official Linux ARM64 SDK archive URL (or the x64 archive,
with Architecture set to
x86_64). - Choose Create and start build.
- Review the source, artifact, package inspection, and functional check.
- Publish the version.
- Make it recommended if it should be the default .NET SDK for new environment drafts.
This adds .NET as a selectable tool. It does not create or publish a .NET environment automatically.
What a tool build verifies
A successful CodeBuild job is only one part of the tool decision. The catalog records evidence for:
- Source import: validated public URL, resolved redirects, source size, platform SHA-256, and optional publisher evidence.
- Archive safety: bounded entry count and expanded size, safe relative paths, safe links, and no special files.
- Installation: generated extraction or sandboxed installer output.
- Artifact normalization: executable paths exist, symlinks remain inside the tool root, and output stays within the tool-artifact size limit.
- OCI publication: an immutable tool image and digest for the version's architecture. The build checks that the image architecture matches.
- SBOM: an SPDX document generated from the normalized payload.
- Security scan: ECR findings with severity, advisory, package, and package version where available, or a recorded administrator decision when ECR cannot scan the normalized artifact.
- Runtime compatibility: the protected core digest and compatibility version used for verification.
- Version check: the configured command contains the exact expected output.
- Functional check: the selected preset and optional custom verifier run as the non-root runtime user.
The Tools view retains the source digest, trust level, official source link, artifact digest, compressed size, runtime contract, findings, acceptance identity, failure detail, and CodeBuild logs.
Review failures and security findings
Build or verification failure
For a FAILED version:
- Open CodeBuild logs and read the field-specific failure detail shown in the version.
- Choose Edit when the archive layout, executable path, installer, package, variable, version command, or verifier is wrong.
- Choose Save and rebuild to store the corrected definition and queue a new build.
- Choose Retry only when the definition is already correct and the failure was transient.
The exact version string cannot be changed while editing. Create a new version when the version number changes.
Security review
Critical or High ECR findings move the version to SECURITY_REVIEW; they do
not erase a successful artifact build. ECR Basic scanning cannot inspect some
normalized artifacts that intentionally contain no operating-system package
database. Those versions also move to SECURITY_REVIEW with the scanner
limitation retained as evidence.
The administrator can:
- Leave the version unpublished and remediate its source or dependencies.
- Choose Review package findings when Critical or High package findings
were detected, then explicitly continue to record the decision and move the
version to
READY. - Choose Continue without scan when ECR cannot inspect the artifact format. The dialog explains that this is a scanner limitation, not a detected vulnerability.
Acceptance does not publish the version. The findings and acceptance record remain visible after publication and in every environment revision that snapshots that tool version.
Publish and recommend tools
Publishing and recommending are separate decisions:
| Action | Effect |
|---|---|
| Publish | Makes one exact immutable version available for explicit environment selection. |
| Make recommended | Makes one published version the default for new selections and dependency resolution. |
Multiple versions of the same tool can remain published. Each architecture has its own recommendation: one arm64 version and one x86_64 version per tool family. Make recommended on an x86_64 version sets only the x86_64 recommendation, and the other way round.
Publishing a newer version does not automatically recommend it. Recommending a new version:
- Changes the version selected when an administrator first enables that tool in an environment editor.
- Changes the dependency version automatically selected for tools such as Maven or Gradle.
- Marks affected environments of the same architecture with a tool-update warning. An x86_64 recommendation never flags arm64 environments.
- Does not change an existing environment revision.
- Does not change an active or completed intent.
Choosing Replace recommendation directly replaces the current recommended version within that tool family. The existing recommendation does not need to be removed first.
For shipped tools, publish and recommend Java before building Maven or Gradle. This applies per architecture: x86_64 Maven and Gradle can only build once x86_64 Java is published and recommended.
Add or update a tool version
To add a newer version or another distribution:
- Open the tool family in Admin -> Environments -> Tools.
- Choose Add distribution or version.
- Enter the distribution, publisher, exact version, architecture (when offered), and the Linux download URL for that architecture. The existing family supplies the tool type.
- Choose Create and start build.
- Review the lifecycle and evidence.
- Publish the version.
- Choose Make recommended or Replace recommendation only when the new version should become the default.
The prior published version remains selectable. Environments pinned to it remain valid.
For example, add Amazon Corretto as another version in the existing
Java JDK family. Set Distribution to Amazon Corretto, Publisher to
Amazon Web Services, choose the exact Corretto version and archive, then
publish and replace the Eclipse Temurin recommendation if Corretto should
become the default. Both distributions remain selectable.
To correct an unpublished version, use Edit while its status is DRAFT or
FAILED. Published versions cannot be edited; create another version instead.
x86_64 tool versions
x86_64 tool versions exist only on deployments that publish the x86_64 core
image, which enable_instances_compute provides (see
Compute types). Without it the
Architecture field and the Add x86_64 build action are hidden, and the
API rejects x86_64 builds with AMD64_CORE_IMAGE_MISSING.
Each architecture is a separate tool version of the same family, with its own download, checksum, build, security review, publication, and recommendation. x86_64 versions build on an x86_64 CodeBuild fleet against the amd64 build of the protected core, and their checks run natively on x86_64.
To add the x86_64 build of a version that exists for arm64:
- Select the arm64 version in the tool family.
- Choose Add x86_64 build. The form copies the version, layout, installer, and verification of the arm64 version and clears the download URL and publisher checksum.
- Enter the publisher's x86_64 archive URL, and its checksum if you record one.
- Review the installer when the arm64 version uses a custom installer script. A tool-type preset script, such as the Rust installer, is switched to the x86_64 target automatically; a script you edited by hand is copied unchanged and may still contain arm64-specific paths.
- Choose Create and start build, then review, publish, and recommend the x86_64 version as usual.
An x86_64 environment can only select x86_64 tool versions and an arm64 environment only arm64 versions. x86_64 versions show an x86_64 badge in the version list.
Architecture-related errors:
| Code | When |
|---|---|
AMD64_CORE_IMAGE_MISSING |
An x86_64 tool build or x86_64 environment is requested and no x86_64 core image exists. |
TOOL_ARCHITECTURE_IMMUTABLE |
An edit changes the architecture of an existing version. Create a new version instead. |
TOOL_ARCHITECTURE_MISMATCH |
A tool depends on, or an environment selects, a tool version of the other architecture. |
TOOL_RECOMMENDED_DEPENDENCY_MISSING |
A dependency has no published recommended version for the dependent version's architecture. |
BASE_ARCHITECTURE_MISMATCH |
An environment derives from a base environment of the other architecture. |
Select a specific Java, Go, Rust, or other tool version
Tool versions are selected on an environment revision, not globally:
- Publish every exact version that administrators should be able to use.
- Open Admin -> Environments -> Environments.
- Create an environment or open an existing environment.
- Enable the tool when it is not inherited from the base.
- Select the exact published version from the version control.
- Choose Create Draft or Save as New Revision.
- Build, review, and publish that environment revision.
When a tool has only one published version, the editor shows its version and an Add action; there is no redundant version selector. The tool can be removed again before the revision is saved. A selector appears when:
- More than one published version is available.
- The base already includes the tool and a published version can override the inherited version.
The recommended version is preselected when a tool is enabled. It is a default, not a restriction. Any published version shown by the selector can be chosen.
Create an environment
Open Admin -> Environments -> Environments and choose New environment.
- Enter a name and description. Optionally provide a stable environment ID; otherwise one is generated from the name.
- Select a published Base environment. Use Standard unless the new environment intentionally extends another published custom environment.
- Review the protected Node.js and Python versions and any tools inherited from the base.
- Search or browse the tool catalog and choose Add for each capability. The recommended published version is selected initially.
- Use the version selector when multiple published versions exist or when overriding a tool inherited from the base.
- Review dependencies marked Required or Automatic. They are added at their recommended published versions.
- Expand Advanced settings only when catalog tools do not cover the need. Add exact apt packages, non-secret environment variables, or restricted single-line build commands as structured rows.
- Review the live Composition summary and projected compressed size.
AgentCore runtime images must remain at or below
2048 MiB. - Choose Create draft.
- Open Revisions, select the draft revision, and choose Build.
Environment variables and build commands cannot replace protected runtime behavior, inject secrets, change the runtime user, entrypoint, command, port, or health contract, or overwrite protected platform variables.
Compute types: microVMs and Instances
The compute type decides where and how an environment's agent sessions run:
- microVMs (default) — serverless AgentCore microVMs with managed session
storage (1 GiB at
/mnt/workspace), billed per session. - Instances — EC2 managed instances in the platform account, provisioned through AgentCore capacity providers, with a persistent EBS workspace volume per session, account-level controls (Savings Plans, ODCRs, data stays in-account) and sessions of up to 14 days.
The architecture (arm64 or x86_64) is a separate choice: it decides
which image is built and which catalog tool builds apply, independently of
where the image runs.
An environment's compute is the pair { type, architecture } — the compute
type (microvms | instances) and the CPU architecture (arm64 | x86_64)
are independent axes. Which combinations a deployment can build and run is
exposed by GET /environments/capabilities as a matrix
(combinations[].{type, architecture, available, reason?, allowedInstanceTypes?}),
and the Compute selector renders exactly the available cells. Today the
matrix is:
| type \ architecture | arm64 | x86_64 |
|---|---|---|
microvms |
default | not offered by the service yet |
instances |
with enable_instances_compute |
with enable_instances_compute + the amd64 core image |
Enable it on the deployment
The compute type is opt-in per deployment:
enable_instances_compute = true
# Optional overrides (these are the defaults)
instances_allowed_instance_types = ["m6i.large"] # x86_64; burstable (t-family) is not supported
instances_allowed_instance_types_arm64 = ["m7g.large"] # arm64 (Graviton); [] disables arm64 Instances
instances_workspace_gib = 50
Enabling the flag provisions the x86_64 (amd64) build of the platform core
image and the VPC wiring the instances attach to, and grants the status lambda
the capacity-provider provisioning permissions. The Terraform variables are the
only source of this configuration: both the API (capability matrix and draft
validation) and the status poller (capacity-provider creation) read the same
values, and the Lambda code has no defaults of its own. When the flag is off (the default), the
Instances cells are unavailable in the capability matrix, the compute selector
only offers microVMs, and the API rejects Instances drafts with
INSTANCES_COMPUTE_NOT_CONFIGURED.
Turning the flag off again after Instances environments have been used
does not destroy anything that live runtimes depend on: the capacity-provider
operator role is created unconditionally (capacity providers are retained and
keep referencing it), and existing capacity providers, runtimes, and published
revisions are left in place. New Instances drafts are refused, and no new
image build of an existing Instances environment is admitted until the flag is
re-enabled (see below).
Workspace cleanup is not gated by the flag: the poller keeps its
DeleteCapacityProviderSession permission, so queued releases still complete
and intents on retained Instances runtimes can still be deleted.
An instance family is built for one architecture only, so each architecture
has its own allowlist; the capability matrix reports the list per cell, and an
architecture whose list is empty is reported as NO_INSTANCE_TYPES and cannot
be selected.
Changing an allowlist or instances_workspace_gib
produces a new capacity provider on the next runtime creation; runtimes
created earlier keep the provider they were built with.
Build admission. Every new image build of an existing environment —
Build, Retry, Rebuild and the bulk rebuild — is checked against
the same capability matrix before anything is created: if the environment's
compute cell is unavailable on the deployment (flag off, its architecture's
allowlist empty, or the x86_64 core image missing), the request is rejected
with the cell's code (INSTANCES_COMPUTE_NOT_CONFIGURED, NO_INSTANCE_TYPES,
AMD64_CORE_IMAGE_MISSING) and no revision, build context or CodeBuild run is
created. A bulk rebuild that names environments explicitly is rejected as a
whole and lists the unbuildable ones; the implicit "everything with an update"
rebuild skips them and reports them under skipped. Saving a draft is not a
build and stays allowed. Admission only gates new builds: published
revisions, intents already pinned to a snapshot (including resume and
rewind), and workspace cleanup keep working.
Create an Instances environment
With the flag enabled, New environment shows a Compute selector:
- one entry per available cell of the capability matrix, for example Serverless microVMs (arm64), EC2 Instances (arm64) and EC2 Instances (x86_64). Instances entries list the instance types the deployment allows for that architecture.
Both the compute type and the architecture are fixed at creation and cannot be changed afterwards. The architecture — not the compute type — decides which catalog tools and bases apply: an x86_64 environment lists only tool versions with an x86_64 build and derives from Standard (the build swaps in the published core revision's x86_64 image variant) or from another x86_64 environment; an arm64 environment — on either compute type — uses the arm64 builds.
The build, security review, and publish flows are the same on both compute
types, with one difference on Instances: runtime validation first has to
provision an EC2 instance, so a cold start can take several minutes. The revision stays
VERIFYING while the poller re-attaches to the same validation session until
the instance is up (bounded by MANAGED_INSTANCES_VALIDATION_MAX_POLLS,
30 polls by default). The poll runs every minute and can outlast that
interval, so each revision's verification is leased to one poll at a time;
only the lease holder creates, reuses or releases the validation session. The
lease holder adopts a session retained by an earlier poll before it does
anything else, so every way the validation can end, including a failed
endpoint check, releases that session. Ending a validation is recorded before
it is irreversible: the outcome is written together with retiring the session
id (it is never invoked again), then the session is deleted or queued for
cleanup, then the revision becomes READY or FAILED. A poll that finds a
recorded outcome finishes it instead of validating again, so a failed write or
an interrupted poll never reuses a released session and never loses its
cleanup.
Persistent workspaces and cost
Each Instances session attaches a dedicated EBS workspace volume (gp3,
instances_workspace_gib, 50 GiB by default) mounted at /mnt/workspace. The
volume survives session stops, idle timeouts, and instance lifetimes — an
intent can resume exactly where it left off, including across parallel unit
lanes, which each get their own session and volume.
Because the volume persists, it also keeps billing until its session is explicitly deleted. The platform distinguishes stopping a session (the compute ends, the workspace is retained and re-attached by the next invocation of the same session id) from releasing it (the workspace is deleted). The volume retention policy is explicit and bound to the intent's lifetime:
| Event | Operation | Workspace volume |
|---|---|---|
| A stage is parked / a unit lane finishes | stop | retained — resume re-attaches it |
A run ends (SUCCEEDED / CANCELLED) |
stop | retained — rewind relaunches into the same workspace |
| Rewind / relaunch | stop | retained — re-attached by session id |
| Compose, discussion assist, Quorum edit | stop at most | retained with the intent — the ids are reused |
| The intent is permanently deleted | release | deleted with the intent |
| Environment runtime validation ends | release | deleted (disposable session) |
| A space probe ends (capabilities, MCP or connection check) | release | deleted right after the probe |
A workspace is part of the intent's state for as long as the intent exists: a finished run can be rewound and a parked stage resumed, and both rely on the checkout and conversation state on the volume. On deletion, every session of the intent is stopped and released: the main session, all unit-lane sessions (including lanes from earlier plans), every compose session, the Quorum-edit session and one session per discussion thread. Each of these is derived from a record that exists before the session is first invoked (unit, compose and Quorum-edit rows, discussion threads), so none is missed. The auxiliary sessions are not released earlier because their ids are reused, and a deleted Instances session cannot be started again.
Space-level probes (CLI capabilities, Test on MCP servers and on an agent
connection) open a fresh session against the space's environment. On
Instances the probe first records its cleanup as durable work, deferred by 15
minutes so the poller does not race the probe, then runs, then deletes the
session and removes the record. If the response is lost or the delete fails,
the record stays and the poller deletes the session after the deferral. If
the record cannot be written, the probe does not run. The fallback
authentication qualification never opens a session on Instances: it uses the
authentication support the revision's validation recorded, and asks to
republish the environment if none was recorded. A release that
fails for any reason other than the session already being gone is queued as
durable cleanup work (SESSION_CLEANUP# records on the environment registry
table) and retried by the environments status poller until the volume is gone
— the same mechanism covers validation sessions. Whoever holds a session id
keeps it until the release is completed or queued: if queueing itself fails,
an intent delete returns 503 with nothing deleted, and a validation stays
VERIFYING with its session until the next poll, so the identity of a volume
is never dropped.
EC2 instances themselves start on demand and are reclaimed by the capacity provider; you pay for instance time while sessions are active plus EBS storage for volumes of intents that still exist.
What an environment build verifies
The generated Dockerfile:
- Starts from the exact pinned base revision and digest.
- Copies each selected tool from its exact OCI digest.
- Installs exact apt package versions.
- Applies non-secret variables and restricted build commands.
- Restores the protected non-root runtime user.
- Retains the platform-owned runtime files, entrypoint, command, port, and health behavior.
The build then checks:
- The target architecture (arm64, or x86_64 for Instances environments) and the pinned base digest.
- Protected runtime files against the base.
- Non-root execution and writable workspace behavior.
- The generated SPDX SBOM.
- Tool version commands and representative builds.
- Container startup,
/ping, shutdown, and runtime invariants. - Final image size.
- ECR vulnerability findings.
- AgentCore runtime and endpoint creation.
- Capability and deterministic command checks through the created endpoint.
The revision reaches READY only after image validation, the security decision,
and AgentCore runtime validation succeed.
Environment-revision lifecycle
The revision workspace shows the process as a visual path:
Define -> Build -> Check -> Verify -> Publish
The active Build, Check, or Verify step displays a waiting indicator. CodeBuild logs are shown when available, and the ECR repository is linked after the image has been created.
| Status | Meaning | Available action |
|---|---|---|
DRAFT |
Editable recipe snapshot, not yet built. | Build |
QUEUED |
CodeBuild has been requested. | Wait or refresh |
BUILDING |
The composed image and local checks are running. | Open CodeBuild logs |
SCANNING |
ECR scan results are being evaluated. | Wait or open ECR |
SECURITY_REVIEW |
Critical or High findings require a recorded decision. | Review findings |
VERIFYING |
AgentCore runtime and endpoint validation are running. | Wait or refresh |
READY |
All required checks passed or findings were explicitly accepted. | Publish |
PUBLISHED |
This is, or was, a published immutable revision. | Create another revision for changes |
SUPERSEDED |
A newer revision is now published. | Existing intent snapshots remain valid |
FAILED |
Image build, scan processing, or runtime validation failed. | Inspect evidence and Retry when appropriate |
RETIRED |
The environment no longer accepts changes or new assignments. | No restore action is currently available |
The evidence view separates image-build success, security findings, and runtime validation. A successful image can therefore remain visible even when it is waiting for security review or later runtime validation fails.
Publish an environment
Select a READY revision and choose Publish.
Publication atomically moves the environment's published-revision pointer. The previous published revision becomes superseded but remains retained while active intent snapshots reference its runtime artifacts.
After publication:
- The environment appears in Space Settings -> Environment.
- New intents in spaces already assigned to that environment use the newly published revision.
- Existing intents continue using their snapshotted revision and endpoint.
- Draft, failed, and ready revisions do not affect space execution until one is published.
Update an environment
Environment revisions are immutable. Every change creates another draft revision.
Use a newer tool version
- Publish the new tool version.
- Recommend it when it should become the default. Affected environments show a recommended-tool update warning.
- Open the environment.
- Open Definition and select the desired exact version in the tool list.
- Review the composition summary and choose Save as new revision.
- Open Revisions, then build, review, and publish the new revision.
The warning is informational. No revision changes until the administrator selects versions and saves a new revision.
Use a newer base revision
When the published base changes, dependent environments show an update warning. Choose Rebuild on Latest Base to clone the current recipe and change only its pinned base revision.
The rebuilt revision still requires image validation, security review when applicable, runtime validation, and manual publication.
When both base and tool updates are available, edit the environment and use Save as New Revision so the exact tool selections are explicit.
Retry a failed revision
Use Retry only when the same recipe and pinned base are still valid. If a newer base is required or the pinned digest is unavailable, use Rebuild on Latest Base instead.
A failed attempt never replaces the currently published revision and never changes space assignments.
Select an environment for a space
- Open the space.
- Open Space Settings -> Environment.
- Select a published environment.
- Review its included tools, exact published revision, image digest, and runtime compatibility version.
- Review repository compatibility warnings.
- Choose Assign Environment.
Compatibility warnings compare detected repository stacks with the tools in the selected environment. They are advisory; assignment is still allowed.
New spaces are assigned the default environment, which is Standard unless a platform administrator has chosen another.
The assignment stores the environment ID, not a mutable container reference. When an intent is created, the platform resolves that environment's current published revision and snapshots:
- Environment ID and name.
- Revision ID.
- Image digest.
- AgentCore runtime ARN and version.
- Runtime endpoint.
- Runtime compatibility version.
- Verification result.
- Resolved tool versions.
Changing the space assignment affects only intents created afterward. Running, waiting, rewound, cancelled, and resumed intents continue to target their original snapshotted runtime and endpoint.
Choose the environment before creating the intent that should use it.
Set the default environment for new spaces
New spaces use Standard unless a platform administrator chooses another default:
- Open Admin -> Environments -> Environments.
- Select a published environment and choose Set as default. A star marks the current default in the list.
To go back to Standard, choose Set as default on Standard.
An environment can only be the default when its published revision passes the same check as intent creation: published, verified, with a runtime and image digest, and on a supported runtime compatibility version. Otherwise the change is refused with the reason.
The default is read when a space is created and stored as that space's assignment, so:
- Existing spaces keep their environment when the default changes.
- Space owners can still assign another environment afterwards.
- If the default stops passing the check later, for example after a platform upgrade raises the runtime compatibility version, new spaces use Standard and the projects Lambda logs a warning. Space creation is never blocked.
The default environment cannot be retired: retiring it returns
DEFAULT_ENVIRONMENT. Choose another default first.
Platform administrators can also read and change the setting with GET and
PUT /environments/settings/default, using a body of
{ "environmentId": "<id>" }.
Audit an intent's environment
Intent details and audit output show the immutable environment snapshot used by the run. Use those values when diagnosing a difference between two runs:
- A space may have been reassigned after the older intent was created.
- A newer revision may have been published for the same environment ID.
- A tool recommendation may have changed without that tool version being incorporated into the published environment.
The space setting describes what the next intent will use. The intent snapshot describes what that specific intent actually uses.