Atmos Custom Commands

SkillDev tools

Custom CLI commands: command definition in atmos.yaml, arguments, flags, shared native step types, when: conditions, output/UI steps, env vars, custom component types

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Atmos Custom Commands skill

What this skill tells your AI

The instructions your AI receives, as published by cloudposse/atmos in agent-skills/skills/atmos-custom-commands/SKILL.md and read by ahel’s review.

Use this skill when users define or modify project-specific Atmos CLI commands in the top-level commands section of atmos.yaml.

Custom commands replace scattered scripts with discoverable CLI commands that can use arguments, flags, environment variables, authentication identities, tool dependencies, component config, nested subcommands, and typed execution steps.

When a task is mainly about steps, step type, working_directory, step env, output, scripts, workdirs, or hook-compatible step payloads, also load atmos-steps.

Quick Shape

commands:
  - name: hello
    description: Say hello
    arguments:
      - name: name
        default: World
    steps:
      - type: say
        text: "Hello {{ .Arguments.name }}"
atmos hello
atmos hello Erik

For full field syntax, read references/command-syntax.md.

Agent Workflow

  1. Inspect existing commands in atmos.yaml and imported config before adding a new command.
  2. Prefer native typed steps over large shell blocks.
  3. Add flags and arguments with clear names and defaults.
  4. Use dependencies.tools for tools the command needs in its execution context.
  5. Use identity when the command needs Atmos Auth credentials.
  6. Verify with atmos <command> --help and a dry-run or read-only invocation when possible.

Native Step Preference

Default to structured steps before shell:

NeedPrefer
Run an Atmos commandtype: atmos
Operator messagessay, toast, markdown, table, pager
Data shapingformat, join, filter, write
Status/progressspin, stage, log, linebreak
Concurrencyparallel, matrix, wait, wait-all
Containers/emulatorscontainer, emulator
HTTP callshttp
Preconditionsrequire / assert
External command glueshell / exec

Shell is still appropriate for short glue commands, terminal-native tools, checked-in scripts, or commands that genuinely need shell semantics.

Common Patterns

Flags and Arguments

commands:
  - name: deploy-one
    arguments:
      - name: component
        required: true
    flags:
      - name: stack
        shorthand: s
        required: true
    steps:
      - type: atmos
        command: terraform deploy {{ .Arguments.component }} -s {{ .Flags.stack }}

Tool Dependencies

commands:
  - name: scan
    dependencies:
      tools:
        checkov: "latest"
    steps:
      - type: shell
        command: checkov --directory .

Authentication

commands:
  - name: prod-whoami
    dependencies:
      tools:
        aws-cli: "^2.0.0"
    identity: prod-readonly
    steps:
      - type: shell
        command: aws sts get-caller-identity

Custom Component Types

Use component_config when a custom command should resolve a component and stack before running:

commands:
  - name: render-app
    arguments:
      - name: component
        required: true
    flags:
      - name: stack
        shorthand: s
        required: true
    component_config:
      component: "{{ .Arguments.component }}"
      stack: "{{ .Flags.stack }}"
    steps:
      - type: shell
        command: ./scripts/render-app.sh

Routing

NeedSkill
Complete command schema and examplesreferences/command-syntax.md
Reusable multi-step orchestrationatmos-workflows
Shared step fields and step typesatmos-steps
Tool versions and PATH behavioratmos-toolchain
Auth providers, identities, assume role/root, OIDCatmos-auth
Components and component inheritanceatmos-components
Go templates and YAML functionsatmos-templates, atmos-yaml-functions

Guardrails

  • Do not override built-in commands unless the user explicitly wants that behavior.
  • Do not hide complex business logic inside inline YAML shell blocks. Move it to a checked-in script or use native step types.
  • Do not use custom commands for long-lived reusable orchestration when an Atmos workflow is a better fit.
  • Keep command names stable; they become user-facing CLI API.

Signals

GitHub stars
1k
Forks
175
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
atmos-custom-commands
Source
github.com/cloudposse/atmos