📦 Other Changes
test: Improve coverage for mock AWS auth provider credential and identity flows @Copilot (#2511)
- Expanded mock AWS authentication provider coverage for credential expiration, expiration accessors, environment projection without secret leakage, validation, identity metadata, provider selection, credential-file paths, environment preparation, persisted credential loading, invalid JSON, missing credentials, logout, and idempotent deletion.
feat: add plugin distribution and verification services @osterman (#3457)
- Adds plugin distribution and trust services for catalogs, discovery, installation, lockfiles, package management, signing, signature verification, authentication adapters, and structured output. Packages are verified before installation, archive and alias conflicts are rejected, configuration updates remain transactional, and compatible variants are preserved for installation, cache verification, signatures, and frozen offline restores.
feat: add plugin bootstrap and authoring services @osterman (#3458)
- Adds plugin bootstrap and authoring services, including configuration-driven build, scaffold, conformance, OIDC, and output workflows. Archive installation preserves configured entrypoint names and permissions, rejects collisions, and rolls back incomplete installs while retaining recovery artifacts when cleanup cannot finish.
feat(cli): add discovery metadata for core commands @osterman (#3466)
- Core command registration can now own documentation URLs and ordered examples through backward-compatible metadata options. Documentation and example lists inherit independently, and aliases retain the metadata of their source commands.
feat(cli): add discovery metadata for supporting commands @osterman (#3467)
- Adds documentation URLs and ordered examples to supporting commands, including authentication, AI/MCP, Git, toolchain and version management, secrets, and developer utilities. Nested commands register their own metadata, while commands without dedicated pages inherit their parent documentation.
docs: demonstrate CI failure annotations locally @osterman (#3472)
- Updates the CI failure annotations changelog and policy example README with a runnable local preview, expected annotation output, intentional exit code
77, and early admission behavior.
fix(ci): stabilize quality reporting and CI dependencies @osterman (#3476)
- Quality reporting now selects the newest CI and Codecov checks, publishes one pending snapshot followed by the final report, and recovers unfinished reports and active reruns beyond 24 hours. Reports are grouped into Readiness, Reviews, and Measures, while race-shard retries, Windows artifact hosts, local fixtures, and local Atmos Pact execution are supported.
Add runnable CDK examples with casts for the CDK tutorial @osterman (#3481)
- Adds runnable
examples/cdk-cloudformationandexamples/cdk-terraformapplications using the native CloudFormation and Terraform components against the local Floci AWS emulator, without requiring an AWS account. Each example includes akind: stepssynth hook with per-step freshness and anatmos testsmoke check, and is linked from the CDK tutorial.
Clean up stale overrides in copyable Atmos examples @osterman (#3485)
- Cleans up 57 copyable Atmos examples by removing incidental logging, redundant approval and initialization settings, and global auto-approval overrides while retaining required configuration and intentional demonstrations. Quick-start guidance and generated config snapshots are updated for the current inherited
Warninglog level.
chore(review): encourage extracting legacy catch-all packages @osterman (#3521)
- Adds CodeRabbit path instructions encouraging focused extraction of touched behavior and tests into owning packages, with thin adapters where necessary.
chore: bump Claude Code plugin version to v1.233.2 @cloudposse-releaser[bot] (#3528)
- Bumps the Claude Code plugin version to
v1.233.2.
fix(release): recognize landed native stack members @osterman (#3536)
- Release history now recognizes merged native-stack PRs when their merge commits are present in the verified release source range, even if GitHub retains the original parent branch as the PR base. Unmerged, unrelated, or otherwise invalid PRs continue to fail release validation.
fix(ci): re-check quality:ready PRs whose head status fails @osterman (#3539)
- The scheduled Quality Gate reconciler now re-evaluates a
quality:readyPR when its combined commit status isfailureorerror, even if the report is current and the commit is more than 24 hours old.quality:not-readyPRs and pending statuses are not selected.
fix(ci): select current workflow results in quality gate @osterman (#3540)
- Quality Gate now selects the newest workflow run by creation time and run ID when multiple runs target one commit, and excludes GitHub Actions checks only when their check-suite ID identifies a superseded run. Current failures and pending runs, unknown or shared suite IDs, external checks, and synthetic merge-commit checks remain enforced.
fix: plugin release inputs and changelog release badge @osterman (#3554)
- Removes the repository root
go.modfrom theauth-secretsplugin release inputs and bumpsauth-secretsto1.0.1. Changelog posts now show a release badge from frontmatter, detected release data, orUnreleased, and the CDK hooks post includes thecastandcastTitlemetadata required for its timeline card.
✨ Features
feat(cast): interpret VHS tapes and add atmos cast record @osterman (#2889)
type: caststeps can interpret VHS tapes supplied inline withtape:or from.tapefiles withtape_file:, without invokingvhsor writing generated YAML.mode: stepsproduces executable shell steps with individual exit codes, whilemode: sessionreplays interactive PTY behavior including waits, screenshots, keypresses, and shell setup.
Add stack planning, selectors, CI, and directory scaffolding @osterman (#3429)
- Adds dependency-aware
atmos stack planandstack test, selectors for--stack,--component,--all, and--affected, and introspection throughstack list,stack describe, andstack instances.--dry-runpreviews plans, tests, and hooks without execution, whilestack create --targetcan generate one or multiple decomposed stack directories with independent validation and rollback.
feat(cast): Starlark cast recorder, script source, and CI cast checks @osterman (#3431)
- Adds
cast.recorder(...)for Starlark scripts, combining command execution, terminal interactions, assertions, policies, replacements, cast generation, and read-only fingerprint validation.type: scriptsteps can load local.star,.py,.sh, and.bashfiles throughsource:, andcasts validate allis backed by CI reachability and terminal checks.
Add stack lifecycle orchestration and scaffold creation @osterman (#3442)
- Adds dependency-aware
atmos stack deployandstack destroy, plus scaffold-backed single-filestack create. Hook declarations are validated against registered lifecycle events for unpinned projects and editions from2026-10-19, while earlier editions retain arbitrary hook names.
Add safe Doctor migrations and fix nested error rendering @osterman (#3454)
- Adds safe Doctor migrations from legacy naming patterns and tokens to templates, gated by production before-and-after identity checks. Plain errors no longer contain raw Markdown, terminal color is preserved through wrappers, metadata explanations are separated from actionable hints, and hook dispatch logs move to Debug.
feat: enable native Go plugins and OIDC authentication @osterman (#3459)
- Enables the experimental native plugin command family, startup integration, built-in OCI identity, CLI policy checks, and OIDC authentication. Adds
plugin build --platformand--all-platformswith environment bindings and partial-success reporting, while preserving policy output field names and YAML/JSON compatibility.
feat(policy): add validation engines and shared runtime context @osterman (#3461)
- Adds native OPA and JSON Schema policy engines with boolean and diagnostic Rego results, YAML/JSON file checks, and shared environment, runtime, version/FIPS, calendar, and CI evidence across all four engines. Deployment and authentication guardrails and shared version/date checks are included.
fix(yaml): require explicit function tags with edition compatibility @osterman (#3463)
- Unpinned configurations and editions from
2026-10-20now require explicit YAML function tags, preserving tag identity through loading, merging, templates, deferred evaluation, and serialization. Quoted strings such as"!env SOMETHING"remain literal, while legacy behavior is retained withedition: "2026-10-19".
feat(cli): add --docs and --example command discovery @osterman (#3468)
- Command help and usage errors now show copyable documentation URLs, with global
--docsto print or open them and--exampleto select and initialize an example.--docs=md/--docs=markdownfetches and renders Markdown with bounded downloads, progress, cancellation, and resolved relative links, while discovery works before normal validation and outside an Atmos project.
Add Fogg migration and CDK guides with CloudFormation improvements @osterman (#3471)
- Adds Fogg migration, AWS CDK, and CDK Terrain guides and tutorials. CloudFormation synthesis hooks now run before generated files are read, with inherited
regionand duration-basedtimeoutsettings plus Doctor migrations for legacy minute values.
feat: conditional stack imports and tagging tutorials; fix deferred rendering @osterman (#3473)
- Adds conditional stack imports through
when, allowing labels and tags to select optional mixins and identify component instances for selectors such asatmos list instances --tags pciand--labels pci:true. It also fixes deferred inherited-map rendering beneath YAML function overrides so replaced values are not rendered prematurely.
Validate merged stack auth and preserve secret discovery safety @osterman (#3487)
- Adds
auth validate --stackwith optional--componentto validate each selected component's merged authentication configuration while retaining strict global validation. Secret discovery remains lazy, the default GCP ADC specification is supported, and the first SOPS write after key generation is repaired.
Generalize component executable overrides and execution flags @osterman (#3488)
- Adds consistent
--commandsupport to Terraform, Helmfile, Packer, and Ansible while preserving compatibility flags and command-line precedence. Helmfile dry-run behavior, global options, and stderr forwarding are also corrected.
Run repository checks through Atmos Git hooks and Starlark @osterman (#3494)
- Replaces the pre-commit framework with a shared YAML/Starlark suite for Git hooks, repository check and format commands, CI, and autofix. Native Git sandboxes, atomic writes, staged and unstaged edit preservation, bounded parallel copying, and terminal-aware progress are included.
feat(starlark): add modules, records, and typed configuration @osterman (#3505)
- Adds
module.load(path)andstruct(**fields)to automation scripts, with cached imports, frozen exports, cycle detection, cancellation, and parallel loading. The newstdlib/configpackage provides typed YAML/JSON loading, local or HTTPS JSON Schema validation, immutable records, source diagnostics, defaults, bounds, enums, andconfig1.merge(config2)with configurable list strategies.
feat(plugins): add public releases, catalog, and auth-secrets @osterman (#3510)
- Adds public OCI plugin releases and catalog discovery, with
cloudposse/auth-secretsas the first independently versioned package. Native commands now coverplugin release,release plan,test --build --coverprofile,verify-public, andcatalog sync --inventory, whilesecrets/storeandsecrets/envprovide scoped secret access and masked environment projection.
feat(starlark): add stdin, file writes, and script-local OS controls @osterman (#3526)
- Adds
stdin=toexec.run,component.exec, and allatmos.*wrappers, sending exact bytes without a shell or command-line payload. The predeclaredosmodule providesgetenv,environ(),getcwd,platform,arch, invocation-localsetenvandchdir, andfs.write_file(path, content, overwrite=False, mode=0o600)supports exclusive creation and permission-preserving overwrite.
feat(yaml): support bounded parallel exec evaluation @osterman (#3527)
- Adds
settings.functions.exec.max_concurrencyto bound concurrent evaluation of ordinary!execexpressions, with a default of1. Results retain their document positions, outstanding commands are cancelled after failure, policy checks occur before execution, and--skip=execbehavior is preserved.
Add conditional retries for component error events @osterman (#3542)
- Adds
action: retrypolicies with scalar, list, wildcard, predicate, alias, and retry settings across supported component types and emulators, while preserving cancellation, Terraform exit codes, and existing fallback behavior. AWS config and credential updates are serialized on Windows, and screengrab recordings stage temporary files on the destination filesystem for atomic publication.
🐛 Bug Fixes
fix(ai): use provider default models in --ai config hints @pcbeingused333 (#3413)
- AI setup hints now take each provider's model from its
DefaultModel, including the Anthropic model shown when AI is not enabled, instead of maintaining a separate hardcoded list. Hints therefore track provider default changes and no longer suggest retired or invalid model IDs.
fix(include): resolve base_path before the working directory @djal (#3426)
!includeand!include.rawnow resolve bare relative paths againstbase_pathbefore the working directory, while./and../paths remain strictly relative to the including manifest. The working directory remains a last resort for bare paths, improvingatmos describe affecteddetection when included files are rebased into another checkout.
test: cover a stack-wide terraform_workspace_template, list it in metadata docs @bercedev (#3453)
- Stack-wide
terraform_workspace_templateis now covered in component metadata, and the metadata documentation lists it alongsideterraform_workspace_pattern.
refactor: establish shared API and native plugin SDK @osterman (#3455)
- Establishes the shared
pkg/apicontracts, standalone Go plugin SDK, protocol bindings, native transport, and manifest/configuration primitives while preserving deprecatedpkg/automationimports. Native plugins select compatible CPU variants using immutable Atmos build metadata without OS or architecture fallback.
fix: unify credential handling and OCI registry access @osterman (#3456)
- Adds shared extension-registry descriptors, unified authentication construction, OCI registry support, and policy/configuration primitives. Credential publication and provider logout cleanup are serialized, nested registry-auth deadlocks are prevented, and GHCR token priority is preserved.
fix(terraform): run lifecycle hooks in prepared workdirs @osterman (#3462)
- Terraform lifecycle hooks now run in prepared work directories for bulk init and test operations, including destroy and per-component hooks, with resolved paths and credentials available to after-hooks. Tool-version discovery is scoped to each project's configuration.
fix: preserve Helm repository auth and AWS ambient context @osterman (#3470)
- Native Helm render, install, and upgrade chart lookup now preserve repository credentials, TLS options, and credential-forwarding policy. AWS ambient authentication context is populated while retaining SDK discovery,
AWS_PROFILE, and explicit managed credential overrides.
Preserve literal values and diagnose YAML function scope @osterman (#3486)
- Stack function values and literal template text now remain explicit through loading, merging, templates, and output, while stack random and current-working-directory evaluation is supported. Doctor diagnoses functions in unsupported locations, and raw YAML shielding no longer affects decoded command arguments or import paths.
fix: upgrade Node.js to 24.22.1 and Go to 1.26.10 for CVEs @osterman (#3502)
- Updates the downloaded AWS SAML driver runtime and website toolchain to Node
24.22.1, moves the website from Node 25 to the Node 24 LTS line, and upgrades Go to1.26.10. Patcheddompurify,launch-editor, andfollow-redirectsoverrides are also applied.
fix(stacks): resolve inherited metadata.component directories @osterman (#3508)
- Inherited
metadata.componentdirectories are now resolved before backend generation while preserving explicit overrides, legacy selection, and disabled metadata inheritance. This fixes component execution paths and affected-component detection for inherited metadata.
build: streamline releases and pin GitHub Actions runners @osterman (#3509)
- Release builds now publish six binaries and six Linux packages, retiring prebuilt Linux 386, 32-bit ARM, and FreeBSD downloads.
atmos release cut --resumecan recover unfinished production releases, and shared Git hook launchers select the current checkout'sbuild/atmosorbuild/atmos.exebefore falling back to the system binary.
fix(terraform): propagate skipped functions to nested lookups @osterman (#3513)
- Terraform nested output and state lookups now propagate evaluation options such as
--skip=secretand partition caches by skip list, preventing dependency lookups from contacting skipped secret providers.
fix(terraform): run tests without generating a backend @osterman (#3514)
- Terraform tests no longer generate a backend file when
auto_generate_backend_fileis enabled, so provider-free test modules do not requirebackend_type. Existing backend files are preserved.
fix(secret): honor scoped providers during key generation @osterman (#3515)
secret keygen -s <stack>now resolves stack, component, and type providers without evaluating secret values, including provider-only stacks with imported or templated configuration. Ambiguous provider overrides and unmatched explicit selections are rejected.
fix(sops): resolve nested recipient files and relative rules @osterman (#3516)
- SOPS discovery now searches from the encrypted file for nested
.sops.yamlfiles and generates matching rules relative to each recipients file, supporting relative and absolute paths, custom secret directories, and both Unix and Windows separators. Omittedspec.filevalues derive wildcard rules from the configured secrets directory.
fix(secret): allow stack secrets without a component @osterman (#3517)
secret setandsecret validatenow support stack- and globally scoped declarations without requiring an unrelated component. Instance-scoped operations continue to require a component.
fix(commands): honor stack on custom Atmos steps @osterman (#3518)
- Custom
type: atmossteps now pass their renderedstackto child commands when no explicit stack flag is present, placing it before passthrough--and preserving explicit flags such as-sprod.
fix(emulator): validate the Kubernetes API port before startup @osterman (#3519)
- Emulator specification validation now rejects Kubernetes configurations that replace the port list without retaining
6443/tcp, preventing startup with no bound Kubernetes API server port.
fix(ui): render email autolinks once and clarify test behavior @osterman (#3520)
- Terminal email autolinks are rendered once instead of twice, while explicit Markdown destinations remain unchanged. Documentation clarifies
--help=all, stack-variable injection, and retained Terraform test files.
fix(sops): restore missing recipients from existing age keys @osterman (#3522)
- SOPS key generation can recover a missing public recipient from an existing age private key without changing private key material. Existing recipient rules and explicit recipients are preserved, while ambiguous multiple identities produce a remediation error.
feat(duration): human-readable minutes/hours in resource-usage summary @osterman (#3529)
- Resource-usage summaries now format durations of a minute or more as
34m 47sor1h 2m 3s, omitting zero units; sub-minute values retain formats such as800msand45.2s. The localTotal for this invocationsummary and Native CI Terraform summary now use the sharedduration.Formatbehavior.
fix(security): reduce scanner noise and patch dependencies @osterman (#3541)
- Reduces Semgrep noise for same-repository actions, reports security backlogs by scanner, and documents remaining findings. Go is upgraded to
1.26.10, dependency patches are applied forbody-parser,fast-uri, andserialize-javascript, and Terraform hook test state is restored between runs.
fix(auth): isolate store identity auth from the component manager @osterman (#3546)
- Adds
AuthenticateIsolatedto authenticate an identity using a separate manager that shares effective configuration, credential store, validator, and realm without changing the caller's chain, stack information, or credentials. Store authentication for AWS, Azure, and GCP now uses this isolated context, preventing store identity resolution from changing subsequent component state or secret lookups.
fix(ai): default Gemini to gemini-3.8-flash @pcbeingused333 (#3553)
- Changes the default Gemini model to
gemini-3.8-flash; the TUI fallback provider list and--aisetup hints follow automatically. The function-calling hint and AI provider documentation now use the new model.
fix(imports): support oci:// in stack and atmos.yaml imports @osterman (#3556)
- Stack manifests and
atmos.yamlimports now supportoci://host/repo:tag//pathsources for files, directories, and globs, includingnested_imports: remote. OCI artifacts are pulled once per invocation into the XDGstack-importscache and honorimports.ttl; missing paths returnErrOCIImportMissingPathwith a hint.
fix(ai): report cached prompt tokens for OpenAI-compatible providers @pcbeingused333 (#3565)
- OpenAI-compatible response parsing now reports cached prompt tokens from
usage.prompt_tokens_details.cached_tokensinUsage.CacheReadTokens, soatmos ai chatand executor usage output show cache reads for OpenAI, Grok, Ollama, Azure OpenAI, and other compatible providers.
🤖 Automatic Updates
chore(deps): bump github.com/posthog/posthog-go from 1.12.6 to 1.17.4 @dependabot[bot] (#2764)
- Updates
github.com/posthog/posthog-gofrom1.12.6to1.17.4, including fixes for duplicatedistinct_idflag properties and retries for transient feature-flag request failures.
chore(deps): update dependency @types/node to v22.20.5 @renovate[bot] (#3422)
- Updates the development dependency
@types/nodefrom22.20.4to22.20.5.
chore(deps): update dependency tsx to v4.23.15 @renovate[bot] (#3423)
- Updates the
tsxdependency from4.23.13to4.23.15, including fixes for bare built-in namespace inheritance, CommonJSrequire.cacheandrequire.extensionsexposure, and portable namespacedregister()declarations.
build(deps): bump al.essio.dev/pkg/shellescape from 1.6.0 to 1.6.1 @dependabot[bot] (#3425)
- Updates
al.essio.dev/pkg/shellescapefrom1.6.0to1.6.1.
chore(deps): update dependency prettier to v3.9.10 @renovate[bot] (#3507)
- Updates Prettier from
3.9.9to3.9.10, including a Markdown table parsing fix through themicromark-extension-gfm-tableupdate.
chore(deps): bump golang.org/x/tools from 0.51.0 to 0.52.0 in /tools/lintroller @dependabot[bot] (#3534)
- Updates
golang.org/x/toolsfrom0.51.0to0.52.0, including dependency, gopls, SSA, declaration-movement, and cache improvements.
chore(deps): bump github.com/aws/aws-sdk-go-v2 from 1.47.1 to 1.47.3 @dependabot[bot] (#3559)
- Updates
github.com/aws/aws-sdk-go-v2from1.47.1to1.47.3, including thesmithy-gosparse-in-dense fix and regenerated AWS clients and API models.
chore(deps): bump github.com/PuerkitoBio/goquery from 1.12.0 to 1.13.0 @dependabot[bot] (#3560)
- Updates
github.com/PuerkitoBio/goqueryfrom1.12.0to1.13.0, adding the top-levelgoquery.Texthelper and performance improvements.