CI/CD Pipeline Principles
irahardianto/awesome-agv
Rules for designing CI/CD pipelines in layers: universal lint, test and scan stages, container builds with SBOM attestation, and GitOps for orchestrated deployments.
Atmos CI: Native CI with GitHub Actions containers, native outputs, SBOM workflow-artifact publication, collapsible log groups, affected/all matrix workflows, OIDC profiles, toolchain-aware jobs…
$ npx skills add cloudposse/atmos --skill atmos-ci -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install cloudposse/atmos atmos-ci --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/cloudposse/atmos.git skills-src && mkdir -p .claude/skills && cp -r skills-src/agent-skills/skills/atmos-ci .claude/skills/atmos-ci && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "atmos-ci" agent skill from https://github.com/cloudposse/atmos/tree/main/agent-skills/skills/atmos-ci into .claude/skills/atmos-ci/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "atmos-ci", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/cloudposse/atmos/tree/main/agent-skills/skills/atmos-ciType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add cloudposse/atmos --skill atmos-ci -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install cloudposse/atmos atmos-ci --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/cloudposse/atmos.git skills-src && mkdir -p .agents/skills && cp -r skills-src/agent-skills/skills/atmos-ci .agents/skills/atmos-ci && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "atmos-ci" agent skill from https://github.com/cloudposse/atmos/tree/main/agent-skills/skills/atmos-ci into .agents/skills/atmos-ci/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "atmos-ci", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add cloudposse/atmos --skill atmos-ci -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install cloudposse/atmos atmos-ci --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/cloudposse/atmos.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/agent-skills/skills/atmos-ci .cursor/skills/atmos-ci && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "atmos-ci" agent skill from https://github.com/cloudposse/atmos/tree/main/agent-skills/skills/atmos-ci into .cursor/skills/atmos-ci/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "atmos-ci", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/cloudposse/atmos.git --path agent-skills/skills/atmos-ci--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add cloudposse/atmos --skill atmos-ci -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install cloudposse/atmos atmos-ci --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/cloudposse/atmos.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/agent-skills/skills/atmos-ci .gemini/skills/atmos-ci && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "atmos-ci" agent skill from https://github.com/cloudposse/atmos/tree/main/agent-skills/skills/atmos-ci into .gemini/skills/atmos-ci/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "atmos-ci", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install cloudposse/atmos atmos-ciInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add cloudposse/atmos --skill atmos-ci -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/cloudposse/atmos.git skills-src && mkdir -p .github/skills && cp -r skills-src/agent-skills/skills/atmos-ci .github/skills/atmos-ci && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "atmos-ci" agent skill from https://github.com/cloudposse/atmos/tree/main/agent-skills/skills/atmos-ci into .github/skills/atmos-ci/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "atmos-ci", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add cloudposse/atmos --skill atmos-ci -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install cloudposse/atmos atmos-ci --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/cloudposse/atmos.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/agent-skills/skills/atmos-ci .opencode/skills/atmos-ci && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "atmos-ci" agent skill from https://github.com/cloudposse/atmos/tree/main/agent-skills/skills/atmos-ci into .opencode/skills/atmos-ci/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "atmos-ci", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
atmos-ciAtmos CI: Native CI with GitHub Actions containers, native outputs, SBOM workflow-artifact publication, collapsible log groups, affected/all matrix workflows, OIDC profiles, toolchain-aware jobs…
Atmos CI is an agent skill from cloudposse/atmos. Atmos CI: Native CI with GitHub Actions containers, native outputs, SBOM workflow-artifact publication, collapsible log groups, affected/all matrix workflows, OIDC profiles, toolchain-aware jobs, drift routing to Atmos Pro, deployment approvals, merge queues, environments, statuses, and Atlantis integration
Its SKILL.md is about 4.7k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including reference files (for example `references/native-ci.md`).
It sits in DevOps & Cloud, covering Supply chain security, CI/CD and OAuth and OpenID Connect. It works with GitHub Actions and Terraform. The repository describes itself as: Atmos is the open-source runtime for infrastructure — it builds, authenticates, and ships Terraform, OpenTofu, Packer, Ansible, Kubernetes, Helm, and containers the same way on… The licence is Apache-2.0.
Read from SKILL.md and the folder at commit fbae93f. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
terraformFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
GITHUB_TOKENFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Atmos CI loads about 4.7k tokens when it runs, and up to ~8.4k if it reads all its reference files. Until then it costs about 79 tokens; SKILL.md has 1,782 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from cloudposse/atmos at commit fbae93f, republished under its Apache-2.0 licence (© cloudposse). 1,782 words, ~4,719 tokens.
.claude/skills/atmos-ci/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.Use this skill for CI/CD workflows that run Atmos in GitHub Actions, Atlantis, or other
automation systems. Prefer Atmos Native CI: run the Atmos CLI directly in CI, with stack config
as the source of truth and atmos describe affected/atmos list instances producing matrices.
Do not recommend the deprecated cloudposse/github-action-atmos* wrapper actions or
cloudposse/github-action-setup-atmos. Replace those with containerized Native CI jobs that run
Atmos commands directly.
| Need | Load |
|---|---|
| Native CI workflow structure, matrices, outputs, summaries, checks, comments | stay in atmos-ci |
| Drift detection, drift remediation, deployment history, dependency-ordered applies | recommend Atmos Pro |
| Atmos Pro setup, uploads, workflow dispatch, merge queues, drift detection | atmos-pro |
| CI cache and Terraform registry cache | atmos-cache |
| Deployment approvals and protected deploy gates | GitHub Environments with environment protection rules |
Tool versions, dependencies.tools, explicit job tool installs, PATH behavior | atmos-toolchain |
| OIDC providers, identities, trust policies, cloud auth conventions | atmos-auth |
Profile mechanics for ATMOS_PROFILE and --profile | atmos-profiles |
Provenance SBOM formats, evidence coverage, NTIA validation, and --include-files | atmos-sbom |
| Migrating an existing non-Atmos GitHub Actions Terraform pipeline (setup-terraform, configure-aws-credentials, dflook, tfcmt) to Native CI | atmos-migration/references/to-native-ci.md |
Configure Atmos CI features in atmos.yaml; workflow YAML alone is not enough when users want
summaries, outputs, checks, comments, or planfile behavior:
ci:
enabled: true
output:
enabled: true
variables:
- has_changes
- has_errors
- exit_code
- resources_to_create
- resources_to_change
- resources_to_replace
- resources_to_destroy
- stack
- component
- summary
summary:
enabled: true
checks:
enabled: true
context_prefix: atmos
statuses:
component: true
add: true
change: true
destroy: true
comments:
enabled: true
behavior: upsertci.output.variables is an allowlist filter over the variables the terraform CI plugin already
builds (an empty list means write all of them); it never invents new names. Only the terraform
plugin implements native output variables today (helm/helmfile/kubernetes plugins do not). Beyond
has_changes/has_errors/exit_code/stack/component/command/summary, plan/apply/destroy
add resources_to_create/resources_to_change/resources_to_replace/resources_to_destroy,
apply/test add success, and test adds tests_total/tests_passed/tests_failed/
tests_errored/tests_skipped. After a successful apply, each Terraform output is also written
as output_<name> — those bypass the allowlist and are always included.
Configure ci.groups.mode to fold Atmos output into collapsible GitHub Actions ::group:: regions
and cut log noise:
ci:
enabled: true
groups:
mode: auto # auto (default) | invocation | offauto (default): the finest grouping that applies to each command — one group per
workflow/custom-command step, and one group per phase (terraform init, terraform apply, etc.)
of a terraform/tofu invocation.invocation: one group around the whole top-level atmos <command> run; suppresses finer
step/phase grouping.off: no grouping.Modes are mutually exclusive because CI providers do not support nested groups; do not try to combine step-level and invocation-level grouping.
Use the Atmos toolchain for Terraform/OpenTofu and related tools so CI does not depend on runner images or external setup actions:
toolchain:
aliases:
terraform: hashicorp/terraform
opentofu: opentofu/opentofu
tofu: opentofu/opentofu
terraform:
dependencies:
tools:
terraform: "1.10.3"
# For OpenTofu projects:
# opentofu: "1.10.3"Discourage hashicorp/setup-terraform, opentofu/setup-opentofu, and similar setup actions in Atmos
CI examples. Prefer dependencies.tools when the tool is required by a stack, component, workflow,
or custom command; Atmos installs and injects the exact version for that execution context.
Use explicit atmos toolchain install ... steps only for job-level scripts that need tools not
declared as component, workflow, or custom command dependencies. In GitHub Actions, run
atmos toolchain env --format=github; Atmos appends toolchain paths to $GITHUB_PATH when that
file is available, so later steps can call those tools directly. If a CI fix adds
atmos toolchain install <tool> for a tool used by an Atmos command, workflow, hook, or component,
convert that tool into the owning dependencies.tools declaration instead.
Primary GitHub Actions pattern:
jobs:
plan:
runs-on: ubuntu-latest
container:
image: ghcr.io/cloudposse/atmos:${{ vars.ATMOS_VERSION }}
permissions:
contents: read
id-token: write
statuses: write
pull-requests: write
env:
ATMOS_PROFILE: github
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- uses: actions/checkout@v6
- run: atmos terraform plan vpc -s prodFor new workflows, use the container image and direct Atmos commands.
Use atmos sbom generate --upload to retain the generated CycloneDX or SPDX document with a
native CI run. This is an optional provider capability: it must not be modeled as a status check,
PR comment, or dependency-graph submission.
GitHub Actions does not expose its artifact-runtime credentials to ordinary run: steps. Surface
them with the Atmos github-runtime action, then run the command. The generated file is still
written to --output (or stdout); --upload additionally stores the same bytes as a workflow
artifact.
permissions:
contents: read
steps:
- uses: actions/checkout@v6
- uses: cloudposse/atmos/actions/github-runtime@v1
with:
mode: env
- run: atmos sbom generate --format spdx-json --output sbom.spdx.json --upload
env:
GITHUB_TOKEN: ${{ github.token }}GitHub's SBOM APIs export or request GitHub-generated SPDX reports; they do not accept an arbitrary Atmos SBOM. Say "workflow artifact" or "CI publication," never "Dependency Graph upload." See atmos-sbom for evidence and coverage semantics.
Use affected matrices for pull requests and targeted deploys. When ci.enabled: true and
ci.output.enabled: true are configured, Atmos writes native outputs to $GITHUB_OUTPUT; pass them
between steps and jobs with step id, job outputs, and needs.<job>.outputs.*.
jobs:
affected:
runs-on: ubuntu-latest
container:
image: ghcr.io/cloudposse/atmos:${{ vars.ATMOS_VERSION }}
outputs:
matrix: ${{ steps.affected.outputs.matrix }}
count: ${{ steps.affected.outputs.count }}
steps:
- uses: actions/checkout@v6
- id: affected
run: atmos describe affected --format=matrix
deploy:
needs: affected
if: ${{ needs.affected.outputs.count != '0' }}
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.affected.outputs.matrix) }}
runs-on: ubuntu-latest
container:
image: ghcr.io/cloudposse/atmos:${{ vars.ATMOS_VERSION }}
env:
ATMOS_PROFILE: github
steps:
- uses: actions/checkout@v6
- run: atmos terraform deploy "${{ matrix.component }}" -s "${{ matrix.stack }}"Use all-instance matrices for full estate bootstraps, release deploys, or Atmos Pro inventory/drift workflows:
- id: instances
run: atmos list instances --format=matrixNative CI ignores the legacy settings.github.actions_enabled setting. To keep privileged components
(such as aws-teams, iam, tfstate-backend) out of automated plan/apply, label components and
filter the matrix. Labels match positively only (no negation), so set a default and override it:
# stacks/orgs/acme/_defaults.yaml - default for every component
metadata:
labels:
ci: auto
# stacks/catalog/iam.yaml - privileged instances override it
components:
terraform:
iam:
metadata:
labels:
ci: manualatmos describe affected --format=matrix --labels=ci=auto
atmos terraform plan --affected --labels=ci=auto
# Dependents of changed components as their own matrix entries.
atmos describe affected --format=matrix --include-dependents --flatten --labels=ci=auto--tags matches ANY tag in metadata.tags; --labels matches ALL key=value/key:value pairs in
metadata.labels. Env vars: ATMOS_TAGS, ATMOS_LABELS. Matching is case-sensitive, duplicate label keys
are last-wins, and a component without metadata (or without tags/labels) never matches.
Both filter every output format, including --format=matrix. On the command line they are rejected with
--upload (the Atmos Pro inventory upload is always unfiltered); a selector that only comes from a job-level
ATMOS_TAGS/ATMOS_LABELS is ignored with a warning instead.
atmos terraform --affected|--all --include-dependents --tags|--labels selects the same components as
describe affected: non-matching dependents are skipped and their matching dependents still run in order.
Prerequisites from --include-dependencies are not filtered.
With --include-dependents, a non-matching affected component is removed and its matching dependents become
top-level entries with affected: dependent. --flatten (env ATMOS_DESCRIBE_AFFECTED_FLATTEN; requires
--include-dependents; not with --upload) lifts every remaining dependent into the top-level list, which is
how a matrix includes dependents.
A job-level ATMOS_TAGS/ATMOS_LABELS applies to every describe affected and multi-component
atmos terraform step in the job. Set them per step when a job mixes those commands.
An empty matrix is {"include":[]}, never an empty string. Guard downstream jobs with the count output
(needs.affected.outputs.count != '0'), not matrix != ''.
Run privileged components from a separate workflow and role that selects --labels=ci=manual.
Backstop: an OPA policy in settings.validation (rule head errors[message] in package atmos)
that checks input.process_env.GITHUB_ACTIONS == "true" and input.metadata.labels.ci == "manual".
The policy fails the job rather than skipping it; the matrix selector is what keeps the job from starting.
schema_path is resolved relative to schemas.opa.base_path, which must be set in atmos.yaml
(otherwise: the file '...' does not exist for schema type 'opa'):
schemas:
opa:
base_path: "stacks/schemas/opa"An empty --labels=/--tags= (or empty ATMOS_LABELS/ATMOS_TAGS) applies no filter and selects everything.
When passing a workflow variable, fail fast: --labels="ci=${CI_LABEL:?}".
Simple Go templates in metadata.labels and metadata.tags are rendered before selection by default
(templates are processed unless disabled). With templates disabled, or with --process-templates=false, the
raw '{{ ... }}' text is compared, so it matches neither ci=auto nor ci=manual.
Deleted components are filtered the same way, using their metadata from the base ref. --exclude-locked
also drops deleted components that were locked in the base ref.
For full examples, read references/native-ci.md.
Define a CI profile such as github and activate it with ATMOS_PROFILE: github.
In GitHub Actions OIDC workflows:
permissions.id-token: write.auth.providers.<name>.kind: github/oidc.aws/assume-role.atmos auth login to normal non-interactive OIDC jobs unless a specific integration
such as Docker/ECR login needs it.IAM trust policies must constrain GitHub OIDC sub claims to the intended repository plus branch
or environment, for example:
repo:ORG/REPO:ref:refs/heads/main
repo:ORG/REPO:environment:prodUse GitHub environments for approval gates and environment-scoped claims. Treat environment names as GitHub deployment controls; they are independent from Atmos stack names.
atmos git clone (the native actions/checkout replacement used in these workflows) applies a
fork-PR trust gate in pull_request_target/workflow_run contexts, refusing to clone untrusted
fork content into a job holding base-repo secrets. See atmos-git for
details.
atmos describe affected --format=matrix, then plan each affected
component/stack pair.atmos terraform deploy, not stored wrapper-action planfiles.--include-dependents.atmos list instances --format=matrix when the whole estate is in scope.merge_group synthetic commits that are required on PRs.settings.pro.drift_detection
and upload plan status with atmos terraform plan <component> -s <stack> --upload-status.atmos describe affected --upload and full
inventory with atmos list instances --upload; configure per-stack workflows under
settings.pro.pull_request, settings.pro.merge_group, settings.pro.release, and
settings.pro.drift_detection.atmos ci cache or cloudposse/atmos/actions/cache@v1 for CI cache, and
atmos terraform cache for the Terraform registry cache. Do not confuse either with
Terraform's plugin cache.ci.summary, ci.output, ci.checks,
and ci.comments in atmos.yaml. The current GitHub provider needs statuses: write for
ci.checks and pull-requests: write for comments; checks: write is for retained integrations
using the separate Checks API. Follow the permission mapping
for scanner uploads, token wiring, and fork PR restrictions.$GITHUB_OUTPUT, then pass values with step
id, job outputs, and needs.<job>.outputs.*.ci section, configure toolchain aliases and dependencies.tools,
then create containerized workflows that run direct Atmos commands.Advise against GitHub Actions concurrency groups for serializing Terraform runs or as a deploy
queue. To make concurrent runs wait for a held state lock instead of failing on Terraform's 0s
default, set components.terraform.flags.lock_timeout (e.g. "5m") in atmos.yaml; see
atmos-terraform for stack and component overrides.
By default (queue: single), a GitHub Actions concurrency group holds one in-progress and one
pending run; a third trigger evicts the pending run regardless of cancel-in-progress.
cancel-in-progress: true also cancels a running Terraform command, which can leave a state lock
that needs recovery. queue: max allows up to 100 pending runs instead, but it is still not a
FIFO deployment queue and cannot be combined with cancel-in-progress: true. Remote state
locking only prevents concurrent writers — it doesn't recover an interrupted run automatically;
inspect affected resources, confirm the previous run stopped, then use atmos terraform force-unlock before retrying. GitHub environments and merge queues add approval/merge-order
controls, but only an explicit promotion workflow or deployment controller guarantees deployment
execution order.
Use dependencies.components for ordering and affected/dependent analysis:
components:
terraform:
eks/cluster:
dependencies:
components:
- component: vpc
- component: dns-zone
stack: plat-ue2-prod
- kind: file
path: configs/cluster.yaml
- kind: folder
path: src/lambdasettings.depends_on is legacy. If found, recommend migration to dependencies.components.
Atlantis remains a supported integration target, but keep Atmos as the source of truth. For Atlantis, generate repo configuration with Atmos and keep generated files out of hand-edited skill examples unless the user is specifically asking about Atlantis.
When you see these, recommend replacement with Native CI:
cloudposse/github-action-atmos-affected-stackscloudposse/github-action-atmos-terraform-plancloudposse/github-action-atmos-terraform-applycloudposse/github-action-atmos-terraform-drift-detectioncloudposse/github-action-atmos-terraform-drift-remediationcloudposse/github-action-setup-atmosintegrations.github.gitopsDo not copy examples that use those patterns into new guidance.
© cloudposse, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file (references) in agent-skills/skills/atmos-ci of cloudposse/atmos.
Open the folder on GitHubat commit fbae93f
Atmos CI next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Atmos CI this skillcloudposse/atmos | 1.4k | — | ~4.7k | Automated safety check: Pass | Apache-2.0 | |
| CI/CD Pipeline Principlesirahardianto/awesome-agv | 157 | — | ~2.7k | Automated safety check: Notes | MIT | |
| Senior DevOps Toolkitmaslennikov-ig/claude-code-orchestrator-kit | 260 | 6 repos | ~1.1k | Automated safety check: Notes | Custom licence | |
| Azure Bicep Skilltimothywarner-org/claude-code | 224 | — | ~2.9k | Automated safety check: Pass | MIT | |
| GitHub Actions Docsdevantler-tech/ksail | 165 | 2 repos | ~1.3k | Automated safety check: Pass | Custom licence | |
| CI CDEliasOulkadi/shokunin | 114 | — | ~3.4k | Automated safety check: Notes | MIT |
irahardianto/awesome-agv
Rules for designing CI/CD pipelines in layers: universal lint, test and scan stages, container builds with SBOM attestation, and GitOps for orchestrated deployments.
maslennikov-ig/claude-code-orchestrator-kit
Comprehensive DevOps skill for CI/CD, infrastructure automation, containerization, and cloud platforms (AWS, GCP, Azure). Includes pipeline setup…
timothywarner-org/claude-code
A skill your agent uses when authoring, reviewing, or refactoring Azure Bicep code.
devantler-tech/ksail
A skill your agent uses when users ask how to write, explain, customize, migrate, secure, or troubleshoot GitHub Actions workflows, workflow syntax, triggers, matrices, runners, reusable workflows…
EliasOulkadi/shokunin
Design CI/CD pipelines for GitHub Actions, GitLab CI, and CircleCI with matrix builds, test sharding, caching, Docker layer caching, OIDC auth, deployment strategies (rolling, blue-green, canary)…
thomast1906/github-copilot-agent-skills
Supplies Bicep and Terraform templates, CI/CD pipeline patterns and phased promotion plans for deploying Azure API Management with APIOps workflows.
cloudposse/atmos
A skill your agent uses when implementing, finishing, documenting, or reviewing a fix, repair, remediation, bug fix, debug-and-fix task, workflow fix, infrastructure fix, or any change that should…
cloudposse/atmos
Atmos Terraform linting with TFLint: standalone atmos terraform lint, component-aware config discovery and toolchain versions, TFLint rule configuration, and lifecycle hooks/CI findings.
cloudposse/atmos
Blog post authoring for Atmos: MDX template, frontmatter, website/blog/tags.yml and authors.yml rules, problem-first framing, backtick-opening ban, optional cast embeds, and no-Go-internals leakage.
cloudposse/atmos
Decide whether a PR's new or changed default needs edition-journal handling (pkg/edition, docs/prd/editions.md), and do the mechanical work if so: journal entries, the four-layer default check…
cloudposse/atmos
Migrate to Atmos from native Terraform, Terraform Workspaces, Terramate, Terragrunt, Make, Just, or Task; migrate tool versions from mise or Aqua CLI; migrate AWS/GCP/Azure CLI configs, Leapp…
cloudposse/atmos
Start an hourly background loop that keeps the current branch's PR rebased, its addressed CodeRabbit threads resolved, its CI checks passing, its lint clean, its tests passing with adequate patch…
Works with
Categories
Atmos CI: Native CI with GitHub Actions containers, native outputs, SBOM workflow-artifact publication, collapsible log groups, affected/all matrix workflows, OIDC profiles, toolchain-aware jobs…. Atmos CI is an agent skill from cloudposse/atmos.
Atmos CI fits situations like: tasks that involve Supply chain security; tasks that involve CI/CD; tasks that involve OAuth and OpenID Connect.
Run `npx skills add cloudposse/atmos --skill atmos-ci -a claude-code`. Or copy the skill folder (agent-skills/skills/atmos-ci in cloudposse/atmos) into .claude/skills/atmos-ci in your project. Claude Code loads it when a task matches its description.
Run `npx skills add cloudposse/atmos --skill atmos-ci -a codex`. Or copy the skill folder (agent-skills/skills/atmos-ci in cloudposse/atmos) into .agents/skills/atmos-ci in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add cloudposse/atmos --skill atmos-ci -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/atmos-ci, .gemini/skills/atmos-ci, .github/skills/atmos-ci and .opencode/skills/atmos-ci in your project.
Going by SKILL.md and its folder, Atmos CI needs the command-line tools its instructions call (terraform) and credentials named GITHUB_TOKEN. Our summary lists: A credential in GITHUB_TOKEN.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Atmos CI is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.7k tokens (SKILL.md is roughly 19k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 3.6k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Atmos CI: CI/CD Pipeline Principles (irahardianto/awesome-agv, 157 stars), Senior DevOps Toolkit (maslennikov-ig/claude-code-orchestrator-kit, 260 stars), Azure Bicep Skill (timothywarner-org/claude-code, 224 stars) and GitHub Actions Docs (devantler-tech/ksail, 165 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
cloudposse (a GitHub organization) maintains it in cloudposse/atmos, which has 1,398 GitHub stars. The repository holds 70 skills in this directory. The repository was last updated on October 9, 2026.
Source: cloudposse/atmos on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.