<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>atmos Blog</title>
        <link>https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog</link>
        <description>atmos Blog</description>
        <lastBuildDate>Wed, 11 Mar 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <item>
            <title><![CDATA[AI-Powered Analysis for Atmos Commands with the Global --ai Flag]]></title>
            <link>https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/ai-powered-analysis-with-global-ai-flag</link>
            <guid>https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/ai-powered-analysis-with-global-ai-flag</guid>
            <pubDate>Wed, 11 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Add --ai to any Atmos command and get instant AI-powered analysis of the output. Successful plans get]]></description>
            <content:encoded><![CDATA[<p>Add <code>--ai</code> to any Atmos command and get instant AI-powered analysis of the output. Successful plans get
summarized, errors get explained with step-by-step fixes — zero workflow changes required.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="how-it-works">How It Works<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/ai-powered-analysis-with-global-ai-flag#how-it-works" class="hash-link" aria-label="Direct link to How It Works" title="Direct link to How It Works" translate="no">​</a></h2>
<ol>
<li class="">Run any Atmos command with <code>--ai</code></li>
<li class="">The command executes normally — output streams to your terminal in real-time</li>
<li class="">After the command completes, the captured output is sent to the AI provider</li>
<li class="">The AI analysis appears below the command output</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="plan-analysis">Plan Analysis<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/ai-powered-analysis-with-global-ai-flag#plan-analysis" class="hash-link" aria-label="Direct link to Plan Analysis" title="Direct link to Plan Analysis" translate="no">​</a></h2>
<div><div class="terminal"><div class="window-bar"><div class="window-controls"><div class="control-dot close-dot"></div><div class="control-dot minimize-dot"></div><div class="control-dot maximize-dot"></div></div><h1>atmos terraform plan --ai</h1></div><div class="viewport"><div><div class="language-console codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-console codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token plain">$ atmos terraform plan vpc -s ue1-prod --ai</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">Terraform will perform the following actions:</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  # null_resource.vpc will be created</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  + resource "null_resource" "vpc" {</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      + id       = (known after apply)</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      + triggers = {</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">          + "availability_zones"  = "us-east-1a,us-east-1b,us-east-1c"</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">          + "environment"         = "production"</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">          + "nat_gateway_enabled" = "true"</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">          + "vpc_cidr"            = "10.10.0.0/16"</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        }</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    }</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">Plan: 1 to add, 0 to change, 0 to destroy.</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">✓ AI analysis complete</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  ## Terraform Plan Summary:  vpc  in  ue1-prod</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  ### Plan Succeeded — 1 Resource to Create</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">   Metric     │ Value</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  ────────────┼───────</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">   To Add     │ 1</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">   To Change  │ 0</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">   To Destroy │ 0</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  A  null_resource.vpc  will be created with CIDR  10.10.0.0/16 ,</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  3 availability zones, and NAT Gateways enabled.</span><br></span></code></pre></div></div></div></div></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="error-explanation">Error Explanation<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/ai-powered-analysis-with-global-ai-flag#error-explanation" class="hash-link" aria-label="Direct link to Error Explanation" title="Direct link to Error Explanation" translate="no">​</a></h2>
<p>When commands fail, the AI explains the root cause and provides actionable fixes:</p>
<div><div class="terminal"><div class="window-bar"><div class="window-controls"><div class="control-dot close-dot"></div><div class="control-dot minimize-dot"></div><div class="control-dot maximize-dot"></div></div><h1>atmos terraform plan --ai (error)</h1></div><div class="viewport"><div><div class="language-console codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-console codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token plain">$ atmos terraform plan vpc -s ue1-pro --ai</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">✓ AI analysis complete</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  ## Component Not Found Error</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">   Atmos cannot locate the  vpc  component within the  ue1-pro  stack.</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  ## Quick Fix</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">   Check                           │ Command</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  ─────────────────────────────────┼────────────────────────────────────</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">   Stack name is correct           │  atmos list stacks</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">   Component is defined in stack   │  atmos list components -s ue1-pro</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">   No YAML syntax errors           │  atmos validate stacks</span><br></span></code></pre></div></div></div></div></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="domain-specific-analysis-with---skill">Domain-Specific Analysis with <code>--skill</code><a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/ai-powered-analysis-with-global-ai-flag#domain-specific-analysis-with---skill" class="hash-link" aria-label="Direct link to domain-specific-analysis-with---skill" title="Direct link to domain-specific-analysis-with---skill" translate="no">​</a></h2>
<p>Pair <code>--ai</code> with <code>--skill</code> for domain-specific expertise. Combine multiple skills with commas or repeated flags:</p>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Terraform expertise for plan analysis</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos terraform plan vpc </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">-s</span><span class="token plain"> ue1-prod </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--ai</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--skill</span><span class="token plain"> atmos-terraform</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Multiple skills (comma-separated)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos terraform plan vpc </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">-s</span><span class="token plain"> ue1-prod </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--ai</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--skill</span><span class="token plain"> atmos-terraform,atmos-stacks</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Multiple skills (repeated flag)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos terraform plan vpc </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">-s</span><span class="token plain"> ue1-prod </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--ai</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--skill</span><span class="token plain"> atmos-terraform </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--skill</span><span class="token plain"> atmos-stacks</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="enable-via-environment-variable">Enable via Environment Variable<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/ai-powered-analysis-with-global-ai-flag#enable-via-environment-variable" class="hash-link" aria-label="Direct link to Enable via Environment Variable" title="Direct link to Enable via Environment Variable" translate="no">​</a></h2>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Enable for all commands in the session</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token builtin class-name" style="color:rgb(255, 203, 139)">export</span><span class="token plain"> </span><span class="token assign-left variable" style="color:rgb(214, 222, 235)">ATMOS_AI</span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain">true</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos terraform plan vpc </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">-s</span><span class="token plain"> ue1-prod</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># With skills</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token assign-left variable" style="color:rgb(214, 222, 235)">ATMOS_AI</span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain">true </span><span class="token assign-left variable" style="color:rgb(214, 222, 235)">ATMOS_SKILL</span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain">atmos-terraform,atmos-stacks atmos terraform plan vpc </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">-s</span><span class="token plain"> ue1-prod</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="works-with-everything">Works with Everything<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/ai-powered-analysis-with-global-ai-flag#works-with-everything" class="hash-link" aria-label="Direct link to Works with Everything" title="Direct link to Works with Everything" translate="no">​</a></h2>
<p>The <code>--ai</code> flag works with <strong>any</strong> Atmos command:</p>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos terraform plan vpc </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">-s</span><span class="token plain"> ue1-prod </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--ai</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos terraform apply vpc </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">-s</span><span class="token plain"> ue1-prod </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--ai</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos describe stacks </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--ai</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos validate stacks </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--ai</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos list components </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--ai</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="try-it">Try It<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/ai-powered-analysis-with-global-ai-flag#try-it" class="hash-link" aria-label="Direct link to Try It" title="Direct link to Try It" translate="no">​</a></h2>
<div class="action-card"><h2>Explore the AI Example</h2><div><p>Try <code>--ai</code> and <code>--skill</code> with a complete multi-region infrastructure project using mock components — no cloud credentials required.</p><div><a class="button button--lg button--primary" href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/examples/ai">Browse Example</a></div></div><div class="action-card__cta-group"></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="learn-more">Learn More<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/ai-powered-analysis-with-global-ai-flag#learn-more" class="hash-link" aria-label="Direct link to Learn More" title="Direct link to Learn More" translate="no">​</a></h2>
<ul>
<li class=""><a class="" href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/cli/configuration/ai">AI Configuration</a> — Full configuration reference</li>
<li class=""><a class="" href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/cli/global-flags">Global Flags</a> — All global flags including <code>--ai</code> and <code>--skill</code></li>
<li class=""><a class="" href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/cli/configuration/ai/skills">AI Skills</a> — Available skills for domain-specific analysis</li>
</ul>]]></content:encoded>
            <category>Feature</category>
            <category>DX</category>
        </item>
        <item>
            <title><![CDATA[Global `ignore_missing_template_values` for Stack Imports]]></title>
            <link>https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/global-ignore-missing-template-values</link>
            <guid>https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/global-ignore-missing-template-values</guid>
            <pubDate>Mon, 09 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Atmos now supports a global templates.settings.ignoremissingtemplatevalues option in atmos.yaml, eliminating the need to set ignoremissingtemplatevalues: true on every individual catalog import.]]></description>
            <content:encoded><![CDATA[<p>Atmos now supports a global <code>templates.settings.ignore_missing_template_values</code> option in <code>atmos.yaml</code>, eliminating the need to set <code>ignore_missing_template_values: true</code> on every individual catalog import.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="what-changed">What Changed<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/global-ignore-missing-template-values#what-changed" class="hash-link" aria-label="Direct link to What Changed" title="Direct link to What Changed" translate="no">​</a></h2>
<p>Previously, if you used Go templates in imported stack manifests (e.g. for dynamic component generation or external systems like Datadog), you had to annotate every import:</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token key atrule">import</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> </span><span class="token key atrule">path</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"catalog/datadog-monitors"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">ignore_missing_template_values</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token boolean important" style="color:rgb(255, 88, 116)">true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> </span><span class="token key atrule">path</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"catalog/eks-cluster-tmpl"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">ignore_missing_template_values</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token boolean important" style="color:rgb(255, 88, 116)">true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> </span><span class="token key atrule">path</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"catalog/rds-cluster-tmpl"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">ignore_missing_template_values</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token boolean important" style="color:rgb(255, 88, 116)">true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># ... repeat for every catalog import</span><br></span></code></pre></div></div>
<p>For teams with hundreds of catalog imports, this was a maintenance burden.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="the-fix">The Fix<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/global-ignore-missing-template-values#the-fix" class="hash-link" aria-label="Direct link to The Fix" title="Direct link to The Fix" translate="no">​</a></h2>
<p>Set it once, globally, in <code>atmos.yaml</code>:</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token key atrule">templates</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">settings</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">ignore_missing_template_values</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token boolean important" style="color:rgb(255, 88, 116)">true</span><br></span></code></pre></div></div>
<p>That's it. All imports across your entire project will now silently skip missing template values instead of failing.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="why-this-matters">Why This Matters<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/global-ignore-missing-template-values#why-this-matters" class="hash-link" aria-label="Direct link to Why This Matters" title="Direct link to Why This Matters" translate="no">​</a></h2>
<p>Many teams use Go templates in stack manifests to dynamically generate Atmos components (e.g. multi-flavor clusters, per-region replicas), or to pass configuration to external monitoring/observability systems (e.g. Datadog, Grafana). In these cases, not every template variable needs to be provided by Atmos — some are resolved later by the external system.</p>
<p>The <code>ignore_missing_template_values</code> setting instructs Atmos to replace any missing template variable with an empty string rather than returning an error. Setting this globally removes the friction of adding it to every import.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="per-import-override-still-works">Per-Import Override Still Works<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/global-ignore-missing-template-values#per-import-override-still-works" class="hash-link" aria-label="Direct link to Per-Import Override Still Works" title="Direct link to Per-Import Override Still Works" translate="no">​</a></h2>
<p>The global setting is a default. Individual imports can still override it in either direction:</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># atmos.yaml</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">templates</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">settings</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">ignore_missing_template_values</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token boolean important" style="color:rgb(255, 88, 116)">true</span><span class="token plain">  </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># global default</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># stacks/prod.yaml</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">import</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> </span><span class="token key atrule">path</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"catalog/strict-config"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">ignore_missing_template_values</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token boolean important" style="color:rgb(255, 88, 116)">false</span><span class="token plain">  </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># override: fail on missing values for this import</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="difference-from-skip_templates_processing">Difference from <code>skip_templates_processing</code><a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/global-ignore-missing-template-values#difference-from-skip_templates_processing" class="hash-link" aria-label="Direct link to difference-from-skip_templates_processing" title="Direct link to difference-from-skip_templates_processing" translate="no">​</a></h2>
<table><thead><tr><th>Setting</th><th>Behavior</th></tr></thead><tbody><tr><td><code>skip_templates_processing: true</code></td><td>Skips template processing entirely — templates are preserved as-is</td></tr><tr><td><code>ignore_missing_template_values: true</code></td><td>Processes templates but silently ignores missing variables</td></tr></tbody></table>
<p>Use <code>skip_templates_processing</code> when an import contains Go template syntax meant for another system. Use <code>ignore_missing_template_values</code> when you want Atmos to process your templates but tolerate missing variables.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="get-involved">Get Involved<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/global-ignore-missing-template-values#get-involved" class="hash-link" aria-label="Direct link to Get Involved" title="Direct link to Get Involved" translate="no">​</a></h2>
<p>We'd love to hear your feedback! Please <a href="https://github.com/cloudposse/atmos/issues" target="_blank" rel="noopener noreferrer" class="">open an issue</a> if you have questions or suggestions.</p>]]></content:encoded>
            <category>Feature</category>
            <category>DX</category>
        </item>
        <item>
            <title><![CDATA[Introducing Atmos AI: Your Infrastructure-Aware AI Assistant]]></title>
            <link>https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-ai</link>
            <guid>https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-ai</guid>
            <pubDate>Sat, 07 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[We're excited to introduce Atmos AI, an intelligent assistant built directly into Atmos CLI that understands your infrastructure-as-code like no other AI assistant can.]]></description>
            <content:encoded><![CDATA[<p>We're excited to introduce <strong>Atmos AI</strong>, an intelligent assistant built directly into Atmos CLI that understands your infrastructure-as-code like no other AI assistant can.</p>
<p>Unlike general-purpose AI coding assistants, Atmos AI has deep, native understanding of Atmos stacks, components, inheritance patterns, and infrastructure workflows. It's not just an AI that knows about code—it's an AI that truly understands <em>your infrastructure</em>.</p>
<p>With support for 7 AI providers (including local/offline Ollama), persistent sessions with full conversation memory, tool execution with granular permissions and persistent permission cache, specialized skills for specific tasks, and seamless IDE integration via MCP—Atmos AI brings the productivity patterns of industry-leading AI systems to infrastructure management.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="the-problem">The Problem<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-ai#the-problem" class="hash-link" aria-label="Direct link to The Problem" title="Direct link to The Problem" translate="no">​</a></h2>
<p>Infrastructure-as-code management is complex. Engineers lose hours searching documentation, debugging YAML configurations, understanding stack inheritance across dozens of files, and onboarding team members. The problem isn't lack of tools—it's the <strong>cognitive overhead</strong> of managing complex infrastructure.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="the-solution-atmos-ai">The Solution: Atmos AI<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-ai#the-solution-atmos-ai" class="hash-link" aria-label="Direct link to The Solution: Atmos AI" title="Direct link to The Solution: Atmos AI" translate="no">​</a></h2>
<p>Atmos AI solves this through <strong>infrastructure-aware intelligence</strong>. It's like having an expert Atmos engineer available 24/7, ready to analyze your stacks, validate configurations, answer questions, and help with best practices.</p>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="see-it-in-action">See It in Action<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-ai#see-it-in-action" class="hash-link" aria-label="Direct link to See It in Action" title="Direct link to See It in Action" translate="no">​</a></h3>
<p>Ask a question about your infrastructure and Atmos AI automatically inspects your stacks, components, and configuration:</p>
<div><div class="terminal"><div class="window-bar"><div class="window-controls"><div class="control-dot close-dot"></div><div class="control-dot minimize-dot"></div><div class="control-dot maximize-dot"></div></div><h1>atmos ai ask (Claude)</h1></div><div class="viewport"><div><div class="language-console codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-console codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token plain">$ atmos ai ask "what stacks and components do we have in the infra?"</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">👽 Thinking...</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  I'll list all the available stacks and components in your infrastructure.</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  Based on the infrastructure configuration, here are the stacks and components:</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  ## Stacks (4 total)</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  1. **ue1-network** - Network stack in us-east-1</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  2. **ue1-prod** - Production stack in us-east-1</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  3. **uw2-network** - Network stack in us-west-2</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  4. **uw2-prod** - Production stack in us-west-2</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  ## Components by Stack</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  ### ue1-network</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  • tgw/attachment - Transit Gateway attachment</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  • tgw/hub - Transit Gateway hub</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  • vpc - Virtual Private Cloud</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  ### ue1-prod</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  • tgw/attachment - Transit Gateway attachment</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  • vpc - Virtual Private Cloud</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  ### uw2-network</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  • tgw/attachment - Transit Gateway attachment</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  • tgw/cross-region-hub-connector - Cross-region Transit Gateway connector</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  • vpc - Virtual Private Cloud</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  ### uw2-prod</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  • tgw/attachment - Transit Gateway attachment</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  • vpc - Virtual Private Cloud</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  ## Summary</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  Your infrastructure is organized across two AWS regions (us-east-1 and us-west-2),</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  with dedicated network and production stacks in each region. The network stacks</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  contain Transit Gateway hubs for network connectivity, while the production stacks</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  use Transit Gateway attachments to connect to the network infrastructure. All stacks</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  include VPC components for network isolation.</span><br></span></code></pre></div></div></div></div></div></div>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="what-makes-atmos-ai-different">What Makes Atmos AI Different?<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-ai#what-makes-atmos-ai-different" class="hash-link" aria-label="Direct link to What Makes Atmos AI Different?" title="Direct link to What Makes Atmos AI Different?" translate="no">​</a></h3>
<ul>
<li class=""><strong>Deep Atmos Understanding</strong> — Knows stack structure, inheritance patterns, component relationships, and provides context-aware recommendations.</li>
<li class=""><strong>Full Conversation Memory</strong> — Remembers entire chat history within sessions. Resume conversations days or weeks later with full context.</li>
<li class=""><strong>Tool Execution</strong> — Analyzes infrastructure automatically via read-only operations, real-time YAML/Terraform validation, and a granular permission system.</li>
<li class=""><strong>Multi-Provider Support</strong> — 7 providers including local/offline Ollama. Switch providers mid-conversation with Ctrl+P.</li>
<li class=""><strong>Persistent Sessions</strong> — SQLite-backed storage with named sessions, auto-compact, and cross-platform support.</li>
<li class=""><strong>Non-Interactive Execution</strong> — Run AI prompts programmatically for scripting and CI/CD with structured JSON output.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="key-features">Key Features<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-ai#key-features" class="hash-link" aria-label="Direct link to Key Features" title="Direct link to Key Features" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="1-infrastructure-aware-intelligence">1. Infrastructure-Aware Intelligence<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-ai#1-infrastructure-aware-intelligence" class="hash-link" aria-label="Direct link to 1. Infrastructure-Aware Intelligence" title="Direct link to 1. Infrastructure-Aware Intelligence" translate="no">​</a></h3>
<p>Atmos AI has <strong>native tools</strong> to inspect your infrastructure:</p>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token plain">You: What VPC CIDR does production use?</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">AI: Let me check your configuration</span><span class="token punctuation" style="color:rgb(199, 146, 234)">..</span><span class="token plain">.</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">Executes: atmos describe component vpc </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">-s</span><span class="token plain"> prod-use1-network</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    Your production VPC uses CIDR </span><span class="token number" style="color:rgb(247, 140, 108)">10.2</span><span class="token plain">.0.0/16 with public subnets,</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    private subnets, and NAT Gateways enabled </span><span class="token keyword" style="color:rgb(127, 219, 202)">in</span><span class="token plain"> all AZs.</span><br></span></code></pre></div></div>
<p>Available tools include <code>atmos_describe_component</code>, <code>atmos_list_stacks</code>, <code>atmos_validate_stacks</code>, <code>validate_file_lsp</code>, file operations, and web search. See <a class="" href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/cli/configuration/ai/tools">Tool System documentation</a> for the full list.</p>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="2-real-time-validation-with-lsp">2. Real-Time Validation with LSP<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-ai#2-real-time-validation-with-lsp" class="hash-link" aria-label="Direct link to 2. Real-Time Validation with LSP" title="Direct link to 2. Real-Time Validation with LSP" translate="no">​</a></h3>
<p>Atmos AI integrates with Language Server Protocol to provide <strong>IDE-quality validation</strong> directly in the chat — catching typos, deprecated properties, and schema violations in YAML, Terraform, and HCL files.</p>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="3-persistent-sessions-with-full-memory">3. Persistent Sessions with Full Memory<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-ai#3-persistent-sessions-with-full-memory" class="hash-link" aria-label="Direct link to 3. Persistent Sessions with Full Memory" title="Direct link to 3. Persistent Sessions with Full Memory" translate="no">​</a></h3>
<p>Unlike basic chatbots that forget context, Atmos AI <strong>remembers everything</strong> within a session. Start an architecture discussion on Monday, resume Tuesday with full context, and reference earlier decisions a week later — all with the same named session.</p>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos ai chat </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--session</span><span class="token plain"> vpc-migration</span><br></span></code></pre></div></div>
<p>Sessions are stored in SQLite with visual session picker (Ctrl+L), provider awareness, and auto-compact for extended conversations. See <a class="" href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/cli/configuration/ai/sessions">Sessions documentation</a>.</p>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="4-specialized-ai-skills">4. Specialized AI Skills<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-ai#4-specialized-ai-skills" class="hash-link" aria-label="Direct link to 4. Specialized AI Skills" title="Direct link to 4. Specialized AI Skills" translate="no">​</a></h3>
<p>Atmos AI provides <strong>21+ specialized skills</strong> you can install from the marketplace:</p>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Install all official skills with one command</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos ai skill </span><span class="token function" style="color:rgb(130, 170, 255)">install</span><span class="token plain"> cloudposse/atmos</span><br></span></code></pre></div></div>
<p>Skills include <strong>atmos-terraform</strong>, <strong>atmos-stacks</strong>, <strong>atmos-validation</strong>, <strong>atmos-components</strong>, <strong>atmos-config</strong>, and many more — each with tailored prompts and tool access for its domain.</p>
<p><strong>Switch skills with Ctrl+A</strong> during conversations! See <a class="" href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/cli/configuration/ai/skills">AI Skills documentation</a>.</p>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="5-multi-provider-support">5. Multi-Provider Support<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-ai#5-multi-provider-support" class="hash-link" aria-label="Direct link to 5. Multi-Provider Support" title="Direct link to 5. Multi-Provider Support" translate="no">​</a></h3>
<p>Choose the right AI for your needs:</p>
<table><thead><tr><th>Provider</th><th>Best For</th><th>Privacy</th></tr></thead><tbody><tr><td><strong>Anthropic (Claude)</strong></td><td>Complex reasoning, analysis</td><td>Cloud</td></tr><tr><td><strong>OpenAI (GPT)</strong></td><td>Code generation, refactoring</td><td>Cloud</td></tr><tr><td><strong>Google (Gemini)</strong></td><td>Large context windows</td><td>Cloud</td></tr><tr><td><strong>xAI (Grok)</strong></td><td>Real-time knowledge</td><td>Cloud</td></tr><tr><td><strong>Ollama (Local)</strong></td><td><strong>Complete privacy, offline</strong></td><td><strong>100% Local</strong></td></tr><tr><td><strong>AWS Bedrock</strong></td><td>Enterprise, AWS-native</td><td>AWS</td></tr><tr><td><strong>Azure OpenAI</strong></td><td>Enterprise, Azure-native</td><td>Azure</td></tr></tbody></table>
<p><a class="" href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/cli/configuration/ai/providers#ollama-installation">Ollama</a> runs AI models <strong>entirely on your machine</strong> — zero API costs, complete privacy, offline capable, and compliance ready. Enterprise teams can use AWS Bedrock or Azure OpenAI for data residency, VPC isolation, and audit logging.</p>
<p>See <a class="" href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/cli/configuration/ai/providers">AI Providers documentation</a> for setup instructions.</p>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="6-project-instructions-atmosmd">6. Project Instructions (ATMOS.md)<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-ai#6-project-instructions-atmosmd" class="hash-link" aria-label="Direct link to 6. Project Instructions (ATMOS.md)" title="Direct link to 6. Project Instructions (ATMOS.md)" translate="no">​</a></h3>
<p>Provide <strong>project-specific context</strong> to the AI across all sessions via an <code>ATMOS.md</code> file — human-readable Markdown that's version-controlled with your repo. Include your organization's naming conventions, common commands, stack patterns, and CIDR allocations.</p>
<p>See <a class="" href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/cli/configuration/ai/instructions">Project Instructions documentation</a>.</p>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="7-model-context-protocol-mcp-integration">7. Model Context Protocol (MCP) Integration<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-ai#7-model-context-protocol-mcp-integration" class="hash-link" aria-label="Direct link to 7. Model Context Protocol (MCP) Integration" title="Direct link to 7. Model Context Protocol (MCP) Integration" translate="no">​</a></h3>
<p>Use Atmos tools from <strong>any MCP-compatible client</strong> — Claude Desktop, VSCode/Cursor, or custom clients:</p>
<div class="language-json codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-json codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token property" style="color:rgb(128, 203, 196)">"mcpServers"</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token property" style="color:rgb(128, 203, 196)">"atmos"</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token property" style="color:rgb(128, 203, 196)">"command"</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"atmos"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token property" style="color:rgb(128, 203, 196)">"args"</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token string" style="color:rgb(173, 219, 103)">"mcp"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"start"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></span></code></pre></div></div>
<p>Learn more: <a class="" href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/ai/mcp-server">MCP Server documentation</a></p>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="8-permission-system">8. Permission System<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-ai#8-permission-system" class="hash-link" aria-label="Direct link to 8. Permission System" title="Direct link to 8. Permission System" translate="no">​</a></h3>
<p>A <strong>three-tier security model</strong> protects your infrastructure:</p>
<ul>
<li class=""><strong>Allowed Tools</strong> — Execute without prompting (e.g., <code>atmos_describe_component</code>, <code>atmos_list_stacks</code>, <code>read_file</code>)</li>
<li class=""><strong>Restricted Tools</strong> — Require confirmation (e.g., <code>edit_file</code>, <code>write_stack_file</code>, <code>write_component_file</code>)</li>
<li class=""><strong>Blocked Tools</strong> — Never execute (e.g., <code>execute_bash_command</code>, <code>execute_atmos_command</code>)</li>
</ul>
<p>Permission decisions persist across sessions in <code>.atmos/ai.settings.local.json</code>, reducing prompt fatigue by 80%+. Every tool execution is logged with timestamp, user, and context.</p>
<p>See <a class="" href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/cli/configuration/ai/tools">Tool System documentation</a> for configuration details.</p>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="9-non-interactive-execution-and-cicd-integration">9. Non-Interactive Execution and CI/CD Integration<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-ai#9-non-interactive-execution-and-cicd-integration" class="hash-link" aria-label="Direct link to 9. Non-Interactive Execution and CI/CD Integration" title="Direct link to 9. Non-Interactive Execution and CI/CD Integration" translate="no">​</a></h3>
<p>Execute AI prompts programmatically with structured output:</p>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Simple execution</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos ai </span><span class="token builtin class-name" style="color:rgb(255, 203, 139)">exec</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"List all production stacks"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># JSON output for parsing</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos ai </span><span class="token builtin class-name" style="color:rgb(255, 203, 139)">exec</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"Analyze VPC configuration"</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--format</span><span class="token plain"> json </span><span class="token operator" style="color:rgb(127, 219, 202)">&gt;</span><span class="token plain"> analysis.json</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># CI/CD integration</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token assign-left variable" style="color:rgb(214, 222, 235)">result</span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token variable" style="color:rgb(214, 222, 235)">$(</span><span class="token variable" style="color:rgb(214, 222, 235)">atmos ai </span><span class="token variable builtin class-name" style="color:rgb(255, 203, 139)">exec</span><span class="token variable" style="color:rgb(214, 222, 235)"> </span><span class="token variable string" style="color:rgb(173, 219, 103)">"Check for security issues"</span><span class="token variable" style="color:rgb(214, 222, 235)"> </span><span class="token variable parameter variable" style="color:rgb(214, 222, 235)">--format</span><span class="token variable" style="color:rgb(214, 222, 235)"> json</span><span class="token variable" style="color:rgb(214, 222, 235)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">if</span><span class="token plain"> </span><span class="token builtin class-name" style="color:rgb(255, 203, 139)">echo</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"</span><span class="token string variable" style="color:rgb(214, 222, 235)">$result</span><span class="token string" style="color:rgb(173, 219, 103)">"</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">|</span><span class="token plain"> jq </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">-e</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'.success == false'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">then</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token builtin class-name" style="color:rgb(255, 203, 139)">exit</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">1</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">fi</span><br></span></code></pre></div></div>
<p><strong>JSON Output Structure:</strong></p>
<div class="language-json codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-json codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token property" style="color:rgb(128, 203, 196)">"success"</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token boolean" style="color:rgb(255, 88, 116)">true</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token property" style="color:rgb(128, 203, 196)">"response"</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"Analysis complete..."</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token property" style="color:rgb(128, 203, 196)">"tool_calls"</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token property" style="color:rgb(128, 203, 196)">"tool"</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"atmos_list_stacks"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token property" style="color:rgb(128, 203, 196)">"success"</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token boolean" style="color:rgb(255, 88, 116)">true</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token property" style="color:rgb(128, 203, 196)">"tokens"</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token property" style="color:rgb(128, 203, 196)">"prompt"</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">120</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token property" style="color:rgb(128, 203, 196)">"completion"</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">80</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token property" style="color:rgb(128, 203, 196)">"cached"</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">50</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token property" style="color:rgb(128, 203, 196)">"metadata"</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token property" style="color:rgb(128, 203, 196)">"model"</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"claude-sonnet-4-6"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token property" style="color:rgb(128, 203, 196)">"provider"</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"anthropic"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></span></code></pre></div></div>
<p>Supports multiple output formats (JSON, text, markdown), standard exit codes, stdin piping, and session context for multi-turn scripts. Learn more: <a class="" href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/cli/commands/ai/exec">atmos ai exec documentation</a></p>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="10-token-caching-for-cost-savings">10. Token Caching for Cost Savings<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-ai#10-token-caching-for-cost-savings" class="hash-link" aria-label="Direct link to 10. Token Caching for Cost Savings" title="Direct link to 10. Token Caching for Cost Savings" translate="no">​</a></h3>
<p>Atmos AI supports <strong>prompt caching</strong> to dramatically reduce API costs — up to 90% savings by reusing frequently-sent content like system prompts and project instructions.</p>
<table><thead><tr><th>Provider</th><th>Caching Discount</th></tr></thead><tbody><tr><td><strong>Anthropic</strong></td><td>90%</td></tr><tr><td><strong>OpenAI / Azure</strong></td><td>50%</td></tr><tr><td><strong>Gemini</strong></td><td>Free</td></tr><tr><td><strong>Grok</strong></td><td>75%</td></tr><tr><td><strong>Bedrock</strong></td><td>Up to 90%</td></tr></tbody></table>
<p>Most providers cache automatically. For Anthropic, enable explicit cache markers in <code>atmos.yaml</code>:</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token key atrule">ai</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">providers</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">anthropic</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">cache</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">enabled</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token boolean important" style="color:rgb(255, 88, 116)">true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">cache_system_prompt</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token boolean important" style="color:rgb(255, 88, 116)">true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">cache_project_instructions</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token boolean important" style="color:rgb(255, 88, 116)">true</span><br></span></code></pre></div></div>
<p>Learn more: <a class="" href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/cli/configuration/ai/providers#token-caching">Token Caching documentation</a></p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="getting-started">Getting Started<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-ai#getting-started" class="hash-link" aria-label="Direct link to Getting Started" title="Direct link to Getting Started" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="1-configure-atmos-ai">1. Configure Atmos AI<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-ai#1-configure-atmos-ai" class="hash-link" aria-label="Direct link to 1. Configure Atmos AI" title="Direct link to 1. Configure Atmos AI" translate="no">​</a></h3>
<p>Add to your <code>atmos.yaml</code>:</p>
<div><div class="file"><div class="tab"><h1><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="gear" class="svg-inline--fa fa-gear fa-1x" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M495.9 166.6c3.2 8.7 .5 18.4-6.4 24.6l-43.3 39.4c1.1 8.3 1.7 16.8 1.7 25.4s-.6 17.1-1.7 25.4l43.3 39.4c6.9 6.2 9.6 15.9 6.4 24.6c-4.4 11.9-9.7 23.3-15.8 34.3l-4.7 8.1c-6.6 11-14 21.4-22.1 31.2c-5.9 7.2-15.7 9.6-24.5 6.8l-55.7-17.7c-13.4 10.3-28.2 18.9-44 25.4l-12.5 57.1c-2 9.1-9 16.3-18.2 17.8c-13.8 2.3-28 3.5-42.5 3.5s-28.7-1.2-42.5-3.5c-9.2-1.5-16.2-8.7-18.2-17.8l-12.5-57.1c-15.8-6.5-30.6-15.1-44-25.4L83.1 425.9c-8.8 2.8-18.6 .3-24.5-6.8c-8.1-9.8-15.5-20.2-22.1-31.2l-4.7-8.1c-6.1-11-11.4-22.4-15.8-34.3c-3.2-8.7-.5-18.4 6.4-24.6l43.3-39.4C64.6 273.1 64 264.6 64 256s.6-17.1 1.7-25.4L22.4 191.2c-6.9-6.2-9.6-15.9-6.4-24.6c4.4-11.9 9.7-23.3 15.8-34.3l4.7-8.1c6.6-11 14-21.4 22.1-31.2c5.9-7.2 15.7-9.6 24.5-6.8l55.7 17.7c13.4-10.3 28.2-18.9 44-25.4l12.5-57.1c2-9.1 9-16.3 18.2-17.8C227.3 1.2 241.5 0 256 0s28.7 1.2 42.5 3.5c9.2 1.5 16.2 8.7 18.2 17.8l12.5 57.1c15.8 6.5 30.6 15.1 44 25.4l55.7-17.7c8.8-2.8 18.6-.3 24.5 6.8c8.1 9.8 15.5 20.2 22.1 31.2l4.7 8.1c6.1 11 11.4 22.4 15.8 34.3zM256 336a80 80 0 1 0 0-160 80 80 0 1 0 0 160z"></path></svg><span>atmos.yaml</span></h1></div><div class="viewport"><div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token key atrule">ai</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">enabled</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token boolean important" style="color:rgb(255, 88, 116)">true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">default_provider</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"anthropic"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">providers</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">anthropic</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">model</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"claude-sonnet-4-6"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">api_key</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token tag" style="color:rgb(127, 219, 202)">!env</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"ANTHROPIC_API_KEY"</span><br></span></code></pre></div></div></div></div></div>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="2-set-up-your-provider">2. Set Up Your Provider<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-ai#2-set-up-your-provider" class="hash-link" aria-label="Direct link to 2. Set Up Your Provider" title="Direct link to 2. Set Up Your Provider" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># For Claude (Anthropic)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token builtin class-name" style="color:rgb(255, 203, 139)">export</span><span class="token plain"> </span><span class="token assign-left variable" style="color:rgb(214, 222, 235)">ANTHROPIC_API_KEY</span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token string" style="color:rgb(173, 219, 103)">"sk-ant-..."</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># For Ollama (Local/Offline) - no API key needed</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">ollama pull llama4</span><br></span></code></pre></div></div>
<p>See <a class="" href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/cli/configuration/ai/providers">AI Providers</a> for all provider setup instructions.</p>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="3-start-using-atmos-ai">3. Start Using Atmos AI<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-ai#3-start-using-atmos-ai" class="hash-link" aria-label="Direct link to 3. Start Using Atmos AI" title="Direct link to 3. Start Using Atmos AI" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Interactive chat</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos ai chat</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Named session</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos ai chat </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--session</span><span class="token plain"> infrastructure-review</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Quick question</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos ai ask </span><span class="token string" style="color:rgb(173, 219, 103)">"What components are in production?"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Non-interactive execution</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos ai </span><span class="token builtin class-name" style="color:rgb(255, 203, 139)">exec</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"List all production stacks"</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--format</span><span class="token plain"> json</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># MCP server for Claude Desktop</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos mcp start</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="whats-next">What's Next?<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-ai#whats-next" class="hash-link" aria-label="Direct link to What's Next?" title="Direct link to What's Next?" translate="no">​</a></h2>
<p>We're continuously improving Atmos AI. Here's what's shipped and what's coming:</p>
<p><strong>Recently Completed:</strong></p>
<ul>
<li class="">Non-Interactive Execution (<code>atmos ai exec</code>)</li>
<li class="">Structured JSON Output with standard exit codes</li>
<li class="">Token Caching (Prompt Caching) — up to 90% cost savings</li>
<li class="">Conversation Checkpointing — export/import sessions</li>
<li class="">Automatic Context Discovery with .gitignore support</li>
<li class="">Skill Marketplace — install community skills from the Agent Skills registry</li>
</ul>
<p><strong>Coming Soon:</strong></p>
<ul>
<li class="">Enhanced LSP (HCL, JSON Schema)</li>
<li class="">Advanced Analytics — token usage tracking, cost analysis</li>
<li class="">Multi-Skill Workflows — skill delegation and collaboration</li>
<li class="">IDE Plugins — native VSCode/JetBrains integration</li>
<li class="">Private Skill Registries and advanced security</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="learn-more">Learn More<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-ai#learn-more" class="hash-link" aria-label="Direct link to Learn More" title="Direct link to Learn More" translate="no">​</a></h2>
<ul>
<li class=""><a class="" href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/cli/configuration/ai">Configuration Guide</a> - Complete configuration reference</li>
<li class=""><a class="" href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/cli/configuration/ai/providers">AI Providers</a> - All 7 providers with setup instructions</li>
<li class=""><a class="" href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/cli/configuration/ai/tools">Tool System</a> - Tool execution and permissions</li>
<li class=""><a class="" href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/cli/configuration/ai/skills">AI Skills</a> - Marketplace-installed skills</li>
<li class=""><a class="" href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/cli/configuration/ai/sessions">Sessions</a> - Session management and auto-compact</li>
<li class=""><a class="" href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/cli/configuration/ai/instructions">Project Instructions</a> - ATMOS.md documentation</li>
<li class=""><a class="" href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/ai/mcp-server">MCP Server</a> - Claude Desktop integration</li>
<li class=""><a class="" href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/ai/troubleshooting">Troubleshooting</a> - Common issues and solutions</li>
<li class=""><a href="https://atmos.tools/" target="_blank" rel="noopener noreferrer" class="">Atmos Documentation</a></li>
</ul>
<p><strong>Get Involved:</strong></p>
<ul>
<li class=""><a href="https://github.com/cloudposse/atmos/issues" target="_blank" rel="noopener noreferrer" class="">GitHub Issues</a></li>
<li class=""><a href="https://github.com/cloudposse/atmos/discussions" target="_blank" rel="noopener noreferrer" class="">Community Discussions</a></li>
</ul>
<hr>
<p>Happy infrastructure engineering!</p>]]></content:encoded>
            <category>Feature</category>
            <category>DX</category>
        </item>
        <item>
            <title><![CDATA[Introducing Atmos LSP: IDE-Native Infrastructure Configuration]]></title>
            <link>https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-lsp</link>
            <guid>https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-lsp</guid>
            <pubDate>Sat, 07 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[We're excited to introduce Atmos LSP, bringing IDE-quality features directly to your infrastructure configuration workflow—no context switching, no manual validation, no documentation hunting.]]></description>
            <content:encoded><![CDATA[<p>We're excited to introduce <strong>Atmos LSP</strong>, bringing IDE-quality features directly to your infrastructure configuration workflow—no context switching, no manual validation, no documentation hunting.</p>
<p>Atmos LSP provides comprehensive Language Server Protocol integration that transforms how you write and validate Atmos configurations. Get instant feedback on errors, autocomplete for Atmos keywords, hover documentation without leaving your editor, and seamless integration with external language servers for YAML and Terraform validation.</p>
<p>With support for 13+ editors (VS Code, Neovim, Zed, Cursor, Emacs, and more), multiple transport protocols, and deep AI integration—writing infrastructure configuration now feels like writing code in a modern IDE.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="the-problem">The Problem<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-lsp#the-problem" class="hash-link" aria-label="Direct link to The Problem" title="Direct link to The Problem" translate="no">​</a></h2>
<p>Infrastructure configuration is error-prone and time-consuming. Engineers constantly:</p>
<ul>
<li class=""><strong>Context switch</strong> between editor and terminal to validate configurations</li>
<li class=""><strong>Run commands manually</strong> to check syntax errors (<code>atmos validate stacks</code>)</li>
<li class=""><strong>Search documentation</strong> for correct YAML structure and Atmos keywords</li>
<li class=""><strong>Discover errors late</strong> during terraform plan or apply</li>
<li class=""><strong>Fix typos manually</strong> without autocomplete assistance</li>
<li class=""><strong>Navigate large configs</strong> without structural overview</li>
</ul>
<p>Even simple typos in YAML can cause deployment failures that take hours to debug. The feedback loop is too long, and the cost of mistakes is too high.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="the-solution-atmos-lsp">The Solution: Atmos LSP<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-lsp#the-solution-atmos-lsp" class="hash-link" aria-label="Direct link to The Solution: Atmos LSP" title="Direct link to The Solution: Atmos LSP" translate="no">​</a></h2>
<p>Atmos LSP brings <strong>IDE-native infrastructure configuration</strong> through the Language Server Protocol (LSP)—the same standard that powers modern code editors.</p>
<p><strong>What You Get:</strong></p>
<ul>
<li class=""><strong>Real-time validation</strong> as you type—catch errors before committing</li>
<li class=""><strong>Autocomplete</strong> for Atmos keywords, components, and variables</li>
<li class=""><strong>Hover documentation</strong> explains Atmos concepts without leaving your editor</li>
<li class=""><strong>Multi-editor support</strong>—works in VS Code, Neovim, Zed, Cursor, Emacs, and 8+ others</li>
<li class=""><strong>External LSP integration</strong>—unified YAML and Terraform validation</li>
<li class=""><strong>AI integration</strong>—enables AI assistants to validate configurations accurately</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="dual-component-design">Dual-Component Design<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-lsp#dual-component-design" class="hash-link" aria-label="Direct link to Dual-Component Design" title="Direct link to Dual-Component Design" translate="no">​</a></h3>
<p>Atmos LSP consists of two complementary components:</p>
<p><strong>1. Atmos LSP Server</strong> - Native Atmos-specific features</p>
<ul>
<li class="">Autocomplete for Atmos keywords (<code>import</code>, <code>components</code>, <code>vars</code>, etc.)</li>
<li class="">Hover documentation for all Atmos concepts</li>
<li class="">Real-time Atmos-specific validation</li>
<li class="">Multi-transport support (stdio, TCP, WebSocket)</li>
</ul>
<p><strong>2. Atmos LSP Client</strong> - External language server integration</p>
<ul>
<li class="">Manages multiple LSP servers (yaml-language-server, terraform-ls)</li>
<li class="">Routes files to appropriate server by type</li>
<li class="">Aggregates diagnostics from all servers</li>
<li class="">Provides unified interface for AI tools</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="key-features">Key Features<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-lsp#key-features" class="hash-link" aria-label="Direct link to Key Features" title="Direct link to Key Features" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="1-real-time-validation">1. Real-Time Validation<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-lsp#1-real-time-validation" class="hash-link" aria-label="Direct link to 1. Real-Time Validation" title="Direct link to 1. Real-Time Validation" translate="no">​</a></h3>
<p>Get instant feedback as you type—no more waiting for <code>atmos validate stacks</code>:</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># stacks/prod/vpc.yaml</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">import</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> stacks/base  </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># ❌ Error: imports must be arrays</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">components</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">terraform</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">vpc</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">vars</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">cidr_block</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> 10.0.0.0/16      </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># ✅ Valid</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">vpc_ciddr</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> 10.1.0.0/16       </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># ⚠️  Warning: Unknown property</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">                                     </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic">#     (did you mean 'cidr_block'?)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">availability_zones</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">          </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># ⚠️  Warning: Property deprecated</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">          </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> us</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">east</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">1a               </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic">#     Use 'azs' instead</span><br></span></code></pre></div></div>
<p><strong>Validation Triggers:</strong></p>
<ul>
<li class="">Real-time as you type</li>
<li class="">On document save</li>
<li class="">On document open</li>
<li class="">Manual validation request</li>
</ul>
<p><strong>Validation Types:</strong></p>
<ul>
<li class=""><strong>YAML Syntax</strong> - Malformed YAML detection</li>
<li class=""><strong>Atmos Structure</strong> - Stack schema validation</li>
<li class=""><strong>Import Arrays</strong> - Ensures imports are valid lists</li>
<li class=""><strong>Component Sections</strong> - Validates terraform/helmfile structure</li>
<li class=""><strong>Type Safety</strong> - Checks value types match expectations</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="2-intelligent-autocomplete">2. Intelligent Autocomplete<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-lsp#2-intelligent-autocomplete" class="hash-link" aria-label="Direct link to 2. Intelligent Autocomplete" title="Direct link to 2. Intelligent Autocomplete" translate="no">​</a></h3>
<p>Stop memorizing Atmos keywords—let autocomplete guide you:</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Type 'com' and press Ctrl+Space</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">com</span><span class="token punctuation" style="color:rgb(199, 146, 234)">|</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    ↓</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Autocomplete suggests:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">components</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">terraform</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  helmfile</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><br></span></code></pre></div></div>
<p><strong>Autocomplete Categories:</strong></p>
<p><strong>Top-Level Keywords:</strong></p>
<ul>
<li class=""><code>import</code> - Import other stack files</li>
<li class=""><code>components</code> - Define infrastructure components</li>
<li class=""><code>vars</code> - Stack variables</li>
<li class=""><code>settings</code> - Stack settings</li>
<li class=""><code>metadata</code> - Stack metadata</li>
</ul>
<p><strong>Component Types:</strong></p>
<ul>
<li class=""><code>terraform</code> - Terraform components</li>
<li class=""><code>helmfile</code> - Helmfile components</li>
</ul>
<p><strong>Common Variables:</strong></p>
<ul>
<li class=""><code>namespace</code>, <code>tenant</code>, <code>environment</code>, <code>stage</code>, <code>region</code></li>
<li class=""><code>enabled</code> - Enable/disable pattern</li>
<li class=""><code>tags</code> - Resource tags</li>
</ul>
<p><strong>Settings:</strong></p>
<ul>
<li class=""><code>spacelift</code> - Spacelift integration</li>
<li class=""><code>atlantis</code> - Atlantis integration</li>
<li class=""><code>validation</code> - Validation rules</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="3-hover-documentation">3. Hover Documentation<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-lsp#3-hover-documentation" class="hash-link" aria-label="Direct link to 3. Hover Documentation" title="Direct link to 3. Hover Documentation" translate="no">​</a></h3>
<p>Get context-aware documentation without leaving your editor:</p>
<p><strong>Hover over <code>import</code>:</strong></p>
<div class="language-markdown codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-markdown codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token bold punctuation" style="color:rgb(199, 146, 234)">**</span><span class="token bold content">import</span><span class="token bold punctuation" style="color:rgb(199, 146, 234)">**</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">Import other Atmos stack configuration files.</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">Import paths are relative to the stacks directory.</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token bold punctuation" style="color:rgb(199, 146, 234)">**</span><span class="token bold content">Example:</span><span class="token bold punctuation" style="color:rgb(199, 146, 234)">**</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">```yaml</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">import:</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token list punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> catalog/vpc</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token list punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> mixins/kubernetes</span><br></span></code></pre></div></div>
<p><strong>Note:</strong> Imports are processed sequentially, and later imports
can override values from earlier imports.</p>
<div class="language-text codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-text codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">**Documented Keywords:**</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">- Stack structure: `import`, `components`, `vars`, `settings`, `metadata`</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">- Component types: `terraform`, `helmfile`</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">- Stack variables: `namespace`, `tenant`, `environment`, `stage`, `region`</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">- Common patterns: `enabled` flag, resource `tags`</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">### 4. Multi-Editor Support (13+ IDEs)</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">Works with your favorite editor—same experience everywhere:</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">| Editor | Status | Setup |</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">|--------|--------|-------|</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">| **VS Code** | Yes | LSP client extension |</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">| **Neovim** | Yes | nvim-lspconfig |</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">| **Cursor** | Yes | LSP client (VS Code fork) |</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">| **Zed** | Yes | Built-in LSP config |</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">| **Emacs** | Yes | lsp-mode |</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">| **Vim** | Yes | vim-lsp plugin |</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">| **Sublime Text** | Yes | LSP package |</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">| **Helix** | Yes | languages.toml |</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">| **IntelliJ IDEA** | Yes | LSP4IJ plugin |</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">| **Kate** | Yes | LSP client plugin |</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">| **Lapce** | Yes | Built-in LSP |</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">| **Atom** | Yes | atom-languageclient |</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">| **Eclipse** | Yes | LSP4E |</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">**Universal Setup Pattern:**</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">```json</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">{</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  "atmos-lsp": {</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    "command": "atmos",</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    "args": ["lsp", "start"],</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    "filetypes": ["yaml"]</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  }</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">}</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="5-multi-transport-support">5. Multi-Transport Support<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-lsp#5-multi-transport-support" class="hash-link" aria-label="Direct link to 5. Multi-Transport Support" title="Direct link to 5. Multi-Transport Support" translate="no">​</a></h3>
<p>Choose the right transport for your environment:</p>
<p><strong>stdio (Default)</strong> - Desktop IDE integration</p>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos lsp start</span><br></span></code></pre></div></div>
<p><strong>TCP</strong> - Remote development and testing</p>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos lsp start </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--transport</span><span class="token plain"> tcp </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--address</span><span class="token plain"> localhost:7777</span><br></span></code></pre></div></div>
<p><strong>WebSocket</strong> - Web-based editors</p>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos lsp start </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--transport</span><span class="token plain"> websocket </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--address</span><span class="token plain"> localhost:7777</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="6-external-lsp-server-integration">6. External LSP Server Integration<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-lsp#6-external-lsp-server-integration" class="hash-link" aria-label="Direct link to 6. External LSP Server Integration" title="Direct link to 6. External LSP Server Integration" translate="no">​</a></h3>
<p>Atmos LSP Client manages external language servers for unified validation:</p>
<p><strong>Supported Servers:</strong></p>
<table><thead><tr><th>Server</th><th>Purpose</th><th>File Types</th></tr></thead><tbody><tr><td><strong>yaml-language-server</strong></td><td>YAML validation with JSON Schema</td><td><code>.yaml</code>, <code>.yml</code></td></tr><tr><td><strong>terraform-ls</strong></td><td>Terraform HCL validation</td><td><code>.tf</code>, <code>.tfvars</code>, <code>.hcl</code></td></tr><tr><td><strong>json-languageserver</strong></td><td>JSON validation</td><td><code>.json</code></td></tr><tr><td><strong>Any LSP Server</strong></td><td>Extensible via config</td><td>Custom</td></tr></tbody></table>
<p><strong>Configuration:</strong></p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># atmos.yaml</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">lsp</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">enabled</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token boolean important" style="color:rgb(255, 88, 116)">true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">servers</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">yaml-ls</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">command</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"yaml-language-server"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">args</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token string" style="color:rgb(173, 219, 103)">"--stdio"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">filetypes</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token string" style="color:rgb(173, 219, 103)">"yaml"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"yml"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">initialization_options</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">yaml</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">          </span><span class="token key atrule">validation</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token boolean important" style="color:rgb(255, 88, 116)">true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">          </span><span class="token key atrule">hover</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token boolean important" style="color:rgb(255, 88, 116)">true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">          </span><span class="token key atrule">completion</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token boolean important" style="color:rgb(255, 88, 116)">true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">terraform-ls</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">command</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"terraform-ls"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">args</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token string" style="color:rgb(173, 219, 103)">"serve"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">filetypes</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token string" style="color:rgb(173, 219, 103)">"tf"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"tfvars"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"hcl"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">initialization_options</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">experimentalFeatures</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">          </span><span class="token key atrule">validateOnSave</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token boolean important" style="color:rgb(255, 88, 116)">true</span><br></span></code></pre></div></div>
<p><strong>Benefits:</strong></p>
<ul>
<li class="">Single unified validation experience</li>
<li class="">Automatic file routing by extension</li>
<li class="">Diagnostic aggregation from multiple servers</li>
<li class="">Consistent error reporting</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="7-ai-integration">7. AI Integration<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-lsp#7-ai-integration" class="hash-link" aria-label="Direct link to 7. AI Integration" title="Direct link to 7. AI Integration" translate="no">​</a></h3>
<p>Enable AI assistants to validate configurations with the <code>validate_file_lsp</code> tool:</p>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token plain">You: Validate stacks/prod/vpc.yaml</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">AI: </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">Uses validate_file_lsp tool</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    Found </span><span class="token number" style="color:rgb(247, 140, 108)">3</span><span class="token plain"> issues </span><span class="token keyword" style="color:rgb(127, 219, 202)">in</span><span class="token plain"> stacks/prod/vpc.yaml:</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    ERRORS </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token number" style="color:rgb(247, 140, 108)">2</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain">:</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token number" style="color:rgb(247, 140, 108)">1</span><span class="token plain">. Line </span><span class="token number" style="color:rgb(247, 140, 108)">15</span><span class="token plain">, Col </span><span class="token number" style="color:rgb(247, 140, 108)">5</span><span class="token plain">: Unknown property </span><span class="token string" style="color:rgb(173, 219, 103)">'vpc_ciddr'</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">       Did you mean </span><span class="token string" style="color:rgb(173, 219, 103)">'vpc_cidr'</span><span class="token plain">?</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token number" style="color:rgb(247, 140, 108)">2</span><span class="token plain">. Line </span><span class="token number" style="color:rgb(247, 140, 108)">23</span><span class="token plain">, Col </span><span class="token number" style="color:rgb(247, 140, 108)">3</span><span class="token plain">: Invalid CIDR block </span><span class="token function" style="color:rgb(130, 170, 255)">format</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    WARNINGS </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token number" style="color:rgb(247, 140, 108)">1</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain">:</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token number" style="color:rgb(247, 140, 108)">1</span><span class="token plain">. Line </span><span class="token number" style="color:rgb(247, 140, 108)">30</span><span class="token plain">, Col </span><span class="token number" style="color:rgb(247, 140, 108)">7</span><span class="token plain">: Property </span><span class="token string" style="color:rgb(173, 219, 103)">'availability_zones'</span><span class="token plain"> is deprecated</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">       Use </span><span class="token string" style="color:rgb(173, 219, 103)">'azs'</span><span class="token plain"> instead</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    Would you like me to </span><span class="token builtin class-name" style="color:rgb(255, 203, 139)">help</span><span class="token plain"> fix these issues?</span><br></span></code></pre></div></div>
<p><strong>AI Integration Features:</strong></p>
<ul>
<li class="">Precise line and column numbers for errors</li>
<li class="">Clear error/warning separation</li>
<li class="">Suggested fixes when available</li>
<li class="">Summary statistics</li>
<li class="">Supports all AI providers (Claude, GPT, Gemini, Ollama, etc.)</li>
</ul>
<p>Learn more: <a class="" href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/ai">Atmos AI Documentation</a></p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="real-world-use-cases">Real-World Use Cases<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-lsp#real-world-use-cases" class="hash-link" aria-label="Direct link to Real-World Use Cases" title="Direct link to Real-World Use Cases" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="1-catch-errors-early">1. Catch Errors Early<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-lsp#1-catch-errors-early" class="hash-link" aria-label="Direct link to 1. Catch Errors Early" title="Direct link to 1. Catch Errors Early" translate="no">​</a></h3>
<p><strong>Before Atmos LSP:</strong></p>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Edit stacks/prod/vpc.yaml in editor</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token function" style="color:rgb(130, 170, 255)">vim</span><span class="token plain"> stacks/prod/vpc.yaml</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Save and exit</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Validate manually in terminal</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos validate stacks</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># ❌ Error: line 15: unknown property 'vpc_ciddr'</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Go back to editor, fix, repeat...</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token function" style="color:rgb(130, 170, 255)">vim</span><span class="token plain"> stacks/prod/vpc.yaml</span><br></span></code></pre></div></div>
<p><strong>With Atmos LSP:</strong></p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Edit stacks/prod/vpc.yaml</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Error appears instantly as you type:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">vpc_ciddr</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> 10.0.0.0/16  </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># ⚠️  Unknown property (did you mean 'vpc_cidr'?)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">                        </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Red squiggly line appears immediately</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Fix it right away:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">vpc_cidr</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> 10.0.0.0/16   </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># ✅ Valid - green checkmark</span><br></span></code></pre></div></div>
<p><strong>Result:</strong> Catch typos in seconds, not minutes.</p>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="2-learn-atmos-structure">2. Learn Atmos Structure<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-lsp#2-learn-atmos-structure" class="hash-link" aria-label="Direct link to 2. Learn Atmos Structure" title="Direct link to 2. Learn Atmos Structure" translate="no">​</a></h3>
<p><strong>Before:</strong></p>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># What top-level keywords are available?</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Open documentation...</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Search for "stack structure"...</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Copy example...</span><br></span></code></pre></div></div>
<p><strong>With Atmos LSP:</strong></p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Start typing at root level</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Press Ctrl+Space</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Autocomplete shows:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> import</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> components</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> vars</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> settings</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> metadata</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Hover over any keyword for documentation</span><br></span></code></pre></div></div>
<p><strong>Result:</strong> Discover Atmos features without leaving your editor.</p>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="3-unified-yaml-and-terraform-validation">3. Unified YAML and Terraform Validation<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-lsp#3-unified-yaml-and-terraform-validation" class="hash-link" aria-label="Direct link to 3. Unified YAML and Terraform Validation" title="Direct link to 3. Unified YAML and Terraform Validation" translate="no">​</a></h3>
<p><strong>Before:</strong></p>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Validate YAML syntax</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">yamllint stacks/prod/vpc.yaml</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Validate Terraform</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token builtin class-name" style="color:rgb(255, 203, 139)">cd</span><span class="token plain"> components/terraform/vpc</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">terraform validate</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Check Atmos structure</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos validate stacks</span><br></span></code></pre></div></div>
<p><strong>With Atmos LSP:</strong></p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># All validation happens automatically in editor:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># - YAML syntax (yaml-language-server)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># - Atmos structure (atmos lsp server)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># - Terraform HCL (terraform-ls)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># All errors shown inline with precise locations</span><br></span></code></pre></div></div>
<p><strong>Result:</strong> One unified validation experience.</p>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="4-ai-powered-configuration-review">4. AI-Powered Configuration Review<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-lsp#4-ai-powered-configuration-review" class="hash-link" aria-label="Direct link to 4. AI-Powered Configuration Review" title="Direct link to 4. AI-Powered Configuration Review" translate="no">​</a></h3>
<p><strong>Before:</strong></p>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Copy file contents</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Paste into AI chat</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Ask for validation</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># AI provides generic advice</span><br></span></code></pre></div></div>
<p><strong>With Atmos LSP + AI:</strong></p>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token plain">You: Validate stacks/prod/vpc.yaml</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">AI: </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">Uses validate_file_lsp tool </span><span class="token keyword" style="color:rgb(127, 219, 202)">for</span><span class="token plain"> precise validation</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    Found </span><span class="token number" style="color:rgb(247, 140, 108)">2</span><span class="token plain"> issues:</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token number" style="color:rgb(247, 140, 108)">1</span><span class="token plain">. Line </span><span class="token number" style="color:rgb(247, 140, 108)">15</span><span class="token plain">, Col </span><span class="token number" style="color:rgb(247, 140, 108)">5</span><span class="token plain">: </span><span class="token string" style="color:rgb(173, 219, 103)">'vpc_ciddr'</span><span class="token plain"> should be </span><span class="token string" style="color:rgb(173, 219, 103)">'vpc_cidr'</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token number" style="color:rgb(247, 140, 108)">2</span><span class="token plain">. Line </span><span class="token number" style="color:rgb(247, 140, 108)">30</span><span class="token plain">, Col </span><span class="token number" style="color:rgb(247, 140, 108)">7</span><span class="token plain">: </span><span class="token string" style="color:rgb(173, 219, 103)">'availability_zones'</span><span class="token plain"> is deprecated</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    I can fix both issues. Would you like me to:</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token number" style="color:rgb(247, 140, 108)">1</span><span class="token plain">. Update vpc_ciddr → vpc_cidr</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token number" style="color:rgb(247, 140, 108)">2</span><span class="token plain">. Migrate availability_zones → azs array</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    Apply fixes? </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">yes/no</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><br></span></code></pre></div></div>
<p><strong>Result:</strong> AI gets precise error locations and can suggest specific fixes.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="getting-started">Getting Started<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-lsp#getting-started" class="hash-link" aria-label="Direct link to Getting Started" title="Direct link to Getting Started" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="1-start-lsp-server-ide-integration">1. Start LSP Server (IDE Integration)<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-lsp#1-start-lsp-server-ide-integration" class="hash-link" aria-label="Direct link to 1. Start LSP Server (IDE Integration)" title="Direct link to 1. Start LSP Server (IDE Integration)" translate="no">​</a></h3>
<p><strong>VS Code Setup:</strong></p>
<p>Create <code>.vscode/settings.json</code>:</p>
<div class="language-json codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-json codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token property" style="color:rgb(128, 203, 196)">"atmos-lsp"</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token property" style="color:rgb(128, 203, 196)">"command"</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"atmos"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token property" style="color:rgb(128, 203, 196)">"args"</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token string" style="color:rgb(173, 219, 103)">"lsp"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"start"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token property" style="color:rgb(128, 203, 196)">"filetypes"</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token string" style="color:rgb(173, 219, 103)">"yaml"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token property" style="color:rgb(128, 203, 196)">"settings"</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token property" style="color:rgb(128, 203, 196)">"atmos"</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token property" style="color:rgb(128, 203, 196)">"configPath"</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"${workspaceFolder}/atmos.yaml"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></span></code></pre></div></div>
<p>Install a generic LSP client extension (like "LSP" by sublimelsp).</p>
<p><strong>Neovim Setup:</strong></p>
<p>Add to your config:</p>
<div class="language-lua codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-lua codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token plain">require('lspconfig').atmos.setup{</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  cmd = { 'atmos', 'lsp', 'start' },</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  filetypes = { 'yaml' },</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  root_dir = function(fname)</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    return require('lspconfig.util').root_pattern('atmos.yaml', '.git')(fname)</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  end,</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">}</span><br></span></code></pre></div></div>
<p><strong>See Full Setup Guides:</strong></p>
<ul>
<li class=""><a class="" href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/lsp/lsp-server#editor-configuration">VS Code setup</a></li>
<li class=""><a class="" href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/lsp/lsp-server#editor-configuration">Neovim setup</a></li>
<li class=""><a class="" href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/lsp/lsp-server#editor-configuration">13+ other editors</a></li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="2-configure-external-lsp-servers-optional">2. Configure External LSP Servers (Optional)<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-lsp#2-configure-external-lsp-servers-optional" class="hash-link" aria-label="Direct link to 2. Configure External LSP Servers (Optional)" title="Direct link to 2. Configure External LSP Servers (Optional)" translate="no">​</a></h3>
<p>Add to <code>atmos.yaml</code> for YAML and Terraform validation:</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token key atrule">lsp</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">enabled</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token boolean important" style="color:rgb(255, 88, 116)">true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">servers</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># YAML validation</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">yaml-ls</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">command</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"yaml-language-server"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">args</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token string" style="color:rgb(173, 219, 103)">"--stdio"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">filetypes</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token string" style="color:rgb(173, 219, 103)">"yaml"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"yml"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">root_patterns</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token string" style="color:rgb(173, 219, 103)">"atmos.yaml"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">".git"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">initialization_options</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">yaml</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">          </span><span class="token key atrule">validation</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token boolean important" style="color:rgb(255, 88, 116)">true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">          </span><span class="token key atrule">hover</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token boolean important" style="color:rgb(255, 88, 116)">true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">          </span><span class="token key atrule">completion</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token boolean important" style="color:rgb(255, 88, 116)">true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Terraform validation</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">terraform-ls</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">command</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"terraform-ls"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">args</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token string" style="color:rgb(173, 219, 103)">"serve"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">filetypes</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token string" style="color:rgb(173, 219, 103)">"tf"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"tfvars"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"hcl"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">root_patterns</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token string" style="color:rgb(173, 219, 103)">".terraform"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">".git"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">initialization_options</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">experimentalFeatures</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">          </span><span class="token key atrule">validateOnSave</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token boolean important" style="color:rgb(255, 88, 116)">true</span><br></span></code></pre></div></div>
<p><strong>Install External Servers:</strong></p>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Install yaml-language-server</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token function" style="color:rgb(130, 170, 255)">npm</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">install</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">-g</span><span class="token plain"> yaml-language-server</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Install terraform-ls</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># macOS</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">brew </span><span class="token function" style="color:rgb(130, 170, 255)">install</span><span class="token plain"> terraform-ls</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Linux</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token function" style="color:rgb(130, 170, 255)">curl</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">-LO</span><span class="token plain"> https://releases.hashicorp.com/terraform-ls/latest/terraform-ls_latest_linux_amd64.zip</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token function" style="color:rgb(130, 170, 255)">unzip</span><span class="token plain"> terraform-ls_latest_linux_amd64.zip</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token function" style="color:rgb(130, 170, 255)">sudo</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">mv</span><span class="token plain"> terraform-ls /usr/local/bin/</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="3-start-editing">3. Start Editing<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-lsp#3-start-editing" class="hash-link" aria-label="Direct link to 3. Start Editing" title="Direct link to 3. Start Editing" translate="no">​</a></h3>
<p>Open any Atmos stack file:</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># stacks/prod/vpc.yaml</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Start typing - autocomplete appears</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">com</span><span class="token punctuation" style="color:rgb(199, 146, 234)">|</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    ↓ (Ctrl+Space)</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">components</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Hover for documentation</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">import</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">  </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># ← Hover here for docs</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> catalog/vpc</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Real-time validation</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">vpc_ciddr</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> 10.0.0.0/16  </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># ⚠️  Instant error</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">vpc_cidr</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> 10.0.0.0/16   </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># ✅ Fixed</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="advanced-features">Advanced Features<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-lsp#advanced-features" class="hash-link" aria-label="Direct link to Advanced Features" title="Direct link to Advanced Features" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="diagnostic-formatting">Diagnostic Formatting<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-lsp#diagnostic-formatting" class="hash-link" aria-label="Direct link to Diagnostic Formatting" title="Direct link to Diagnostic Formatting" translate="no">​</a></h3>
<p>Three output formats for different use cases:</p>
<p><strong>1. Full Format</strong> - Human-readable</p>
<div class="language-text codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-text codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token plain">ERRORS (2):</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">1. Line 15, Col 5: Unknown property 'vpc_ciddr' (did you mean 'vpc_cidr'?)</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">   Source: yaml-language-server</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">2. Line 23, Col 3: Invalid CIDR block format</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">   Source: yaml-language-server</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">WARNINGS (1):</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">1. Line 30, Col 7: Property 'availability_zones' is deprecated, use 'azs'</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">   Source: yaml-language-server</span><br></span></code></pre></div></div>
<p><strong>2. Compact Format</strong> - One line per issue</p>
<div class="language-text codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-text codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token plain">vpc.yaml:15:5: error: Unknown property 'vpc_ciddr' (yaml-ls)</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">vpc.yaml:23:3: error: Invalid CIDR block format (yaml-ls)</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">vpc.yaml:30:7: warning: Property 'availability_zones' is deprecated (yaml-ls)</span><br></span></code></pre></div></div>
<p><strong>3. AI-Optimized Format</strong> - Structured for AI</p>
<div class="language-text codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-text codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token plain">Found 3 issue(s) in /stacks/prod/vpc.yaml:</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">ERRORS (2):</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">1. Line 15, Col 5: Unknown property 'vpc_ciddr' (did you mean 'vpc_cidr'?)</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">2. Line 23, Col 3: Invalid CIDR block format</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">WARNINGS (1):</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">1. Line 30, Col 7: Property 'availability_zones' is deprecated, use 'azs'</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="multi-server-diagnostic-aggregation">Multi-Server Diagnostic Aggregation<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-lsp#multi-server-diagnostic-aggregation" class="hash-link" aria-label="Direct link to Multi-Server Diagnostic Aggregation" title="Direct link to Multi-Server Diagnostic Aggregation" translate="no">​</a></h3>
<p>Diagnostics from all LSP servers combined:</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># stacks/prod/eks.yaml</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">import</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> catalog/vpc       </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># ✅ Atmos LSP: Valid import</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">components</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">terraform</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">eks</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">vars</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">cluster_name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"prod"</span><span class="token plain">  </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># ✅ yaml-ls: Valid YAML syntax</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">cluster_versio</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"1.27"</span><span class="token plain">  </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># ⚠️  yaml-ls: Unknown property</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">                                </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># ⚠️  Atmos LSP: Typo detection</span><br></span></code></pre></div></div>
<p><strong>Aggregation Features:</strong></p>
<ul>
<li class="">Collect from all servers</li>
<li class="">Deduplicate overlapping diagnostics</li>
<li class="">Sort by severity and location</li>
<li class="">Filter by severity level</li>
<li class="">Per-file diagnostic access</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="document-lifecycle">Document Lifecycle<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-lsp#document-lifecycle" class="hash-link" aria-label="Direct link to Document Lifecycle" title="Direct link to Document Lifecycle" translate="no">​</a></h3>
<p>LSP tracks your editing workflow:</p>
<p><strong>1. Document Open</strong> → Initial validation + publish diagnostics
<strong>2. Document Change</strong> → Real-time re-validation (debounced)
<strong>3. Document Save</strong> → Final validation
<strong>4. Document Close</strong> → Clear diagnostics, free resources</p>
<p><strong>Thread-Safe:</strong></p>
<ul>
<li class="">Document collection protected with RWMutex</li>
<li class="">Concurrent access supported</li>
<li class="">No race conditions</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="performance">Performance<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-lsp#performance" class="hash-link" aria-label="Direct link to Performance" title="Direct link to Performance" translate="no">​</a></h2>
<p><strong>Validation Speed:</strong></p>
<ul>
<li class="">Initial validation: &lt;100ms for typical stack files</li>
<li class="">Real-time updates: &lt;50ms (debounced)</li>
<li class="">Large files (&gt;1000 lines): &lt;200ms</li>
</ul>
<p><strong>Resource Usage:</strong></p>
<ul>
<li class="">Memory: ~10-50MB per server</li>
<li class="">CPU: Minimal (validation only on change)</li>
<li class="">Network: None (all local)</li>
</ul>
<p><strong>Optimizations:</strong></p>
<ul>
<li class="">Debounced validation (avoid validation on every keystroke)</li>
<li class="">Async diagnostic publishing (non-blocking)</li>
<li class="">Thread-safe concurrent access</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="whats-coming-next">What's Coming Next<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-lsp#whats-coming-next" class="hash-link" aria-label="Direct link to What's Coming Next" title="Direct link to What's Coming Next" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="short-term-next-3-months">Short-term (Next 3 Months)<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-lsp#short-term-next-3-months" class="hash-link" aria-label="Direct link to Short-term (Next 3 Months)" title="Direct link to Short-term (Next 3 Months)" translate="no">​</a></h3>
<p><strong>Go-to-Definition:</strong></p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token key atrule">import</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> catalog/vpc  </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Ctrl+Click → Opens stacks/catalog/vpc.yaml</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">components</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">terraform</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">vpc</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">component</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> vpc</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">module  </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Ctrl+Click → Opens components/terraform/vpc-module/</span><br></span></code></pre></div></div>
<p><strong>Document Symbols (Outline View):</strong></p>
<div class="language-text codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-text codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token plain">Outline:</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">├── imports (3)</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">│   ├── catalog/vpc</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">│   ├── catalog/eks</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">│   └── mixins/common</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">├── components</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">│   ├── terraform</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">│   │   ├── vpc</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">│   │   ├── eks</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">│   │   └── rds</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">└── vars</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    ├── namespace</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    ├── environment</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    └── region</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="medium-term-3-6-months">Medium-term (3-6 Months)<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-lsp#medium-term-3-6-months" class="hash-link" aria-label="Direct link to Medium-term (3-6 Months)" title="Direct link to Medium-term (3-6 Months)" translate="no">​</a></h3>
<p><strong>Find References:</strong></p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token key atrule">vars</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">vpc_id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> vpc</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token number" style="color:rgb(247, 140, 108)">123</span><span class="token plain">  </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Find all references → Shows all files using vpc_id</span><br></span></code></pre></div></div>
<p><strong>Rename Symbol:</strong></p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token key atrule">vars</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">old_name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> value  </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Rename to new_name → Updates all usages across files</span><br></span></code></pre></div></div>
<p><strong>Code Actions (Quick Fixes):</strong></p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token key atrule">vpc_ciddr</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> 10.0.0.0/16  </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Quick fix: Change to 'vpc_cidr'</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="long-term-6-months">Long-term (6+ Months)<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-lsp#long-term-6-months" class="hash-link" aria-label="Direct link to Long-term (6+ Months)" title="Direct link to Long-term (6+ Months)" translate="no">​</a></h3>
<p><strong>Cross-File Validation:</strong></p>
<ul>
<li class="">Validate component references exist</li>
<li class="">Check variable consistency across stacks</li>
<li class="">Detect circular imports</li>
<li class="">Dependency analysis</li>
</ul>
<p><strong>Enhanced Schema Support:</strong></p>
<ul>
<li class="">JSON Schema integration</li>
<li class="">Custom validation rules</li>
<li class="">Pluggable validators</li>
<li class="">User-defined schemas</li>
</ul>
<p><strong>Performance Improvements:</strong></p>
<ul>
<li class="">Parsed document caching</li>
<li class="">Incremental text sync</li>
<li class="">Background processing</li>
<li class="">Metrics and profiling</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="security--privacy">Security &amp; Privacy<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-lsp#security--privacy" class="hash-link" aria-label="Direct link to Security &amp; Privacy" title="Direct link to Security &amp; Privacy" translate="no">​</a></h2>
<p><strong>LSP Server:</strong></p>
<ul>
<li class="">Read-only access to opened documents</li>
<li class="">No file system access beyond provided documents</li>
<li class="">No network access</li>
<li class="">Validates user input safely</li>
</ul>
<p><strong>LSP Client:</strong></p>
<ul>
<li class="">Spawns only configured, trusted servers</li>
<li class="">Local stdio communication only</li>
<li class="">No network communication</li>
<li class="">No credential handling</li>
</ul>
<p><strong>Privacy:</strong></p>
<ul>
<li class="">All processing 100% local</li>
<li class="">No telemetry or analytics</li>
<li class="">No document content sent to cloud</li>
<li class="">External servers may have own policies (check yaml-ls, terraform-ls docs)</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="troubleshooting">Troubleshooting<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-lsp#troubleshooting" class="hash-link" aria-label="Direct link to Troubleshooting" title="Direct link to Troubleshooting" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="lsp-server-not-starting">LSP Server Not Starting<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-lsp#lsp-server-not-starting" class="hash-link" aria-label="Direct link to LSP Server Not Starting" title="Direct link to LSP Server Not Starting" translate="no">​</a></h3>
<p><strong>Check:</strong></p>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Verify atmos is in PATH</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token function" style="color:rgb(130, 170, 255)">which</span><span class="token plain"> atmos</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Test LSP server manually</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos lsp start</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Should wait for stdin (Ctrl+C to exit)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Check Atmos version (LSP requires v1.50.0+)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos version</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="no-autocomplete-or-validation">No Autocomplete or Validation<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-lsp#no-autocomplete-or-validation" class="hash-link" aria-label="Direct link to No Autocomplete or Validation" title="Direct link to No Autocomplete or Validation" translate="no">​</a></h3>
<p><strong>VS Code:</strong></p>
<ol>
<li class="">Check Output panel → "Atmos LSP" for errors</li>
<li class="">Verify LSP client extension is installed</li>
<li class="">Reload window (Cmd/Ctrl+Shift+P → "Reload Window")</li>
</ol>
<p><strong>Neovim:</strong></p>
<div class="language-lua codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-lua codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token plain">-- Check LSP status</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">:LspInfo</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">-- Check logs</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">:lua vim.cmd('e ' .. vim.lsp.get_log_path())</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="external-lsp-server-not-working">External LSP Server Not Working<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-lsp#external-lsp-server-not-working" class="hash-link" aria-label="Direct link to External LSP Server Not Working" title="Direct link to External LSP Server Not Working" translate="no">​</a></h3>
<p><strong>Check server is installed:</strong></p>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># YAML server</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">yaml-language-server </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--version</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Terraform server</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">terraform-ls version</span><br></span></code></pre></div></div>
<p><strong>Check configuration:</strong></p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># atmos.yaml - verify paths are correct</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">lsp</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">servers</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">yaml-ls</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">command</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"yaml-language-server"</span><span class="token plain">  </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Must be in PATH</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">args</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token string" style="color:rgb(173, 219, 103)">"--stdio"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><br></span></code></pre></div></div>
<p><strong>Enable debug logging:</strong></p>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Set environment variable before starting editor</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token builtin class-name" style="color:rgb(255, 203, 139)">export</span><span class="token plain"> </span><span class="token assign-left variable" style="color:rgb(214, 222, 235)">ATMOS_LOGS_LEVEL</span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain">Debug</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="learn-more">Learn More<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/introducing-atmos-lsp#learn-more" class="hash-link" aria-label="Direct link to Learn More" title="Direct link to Learn More" translate="no">​</a></h2>
<p><strong>Documentation:</strong></p>
<ul>
<li class=""><a class="" href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/lsp/lsp-server">LSP Server Guide</a> - Complete server setup for 13+ editors</li>
<li class=""><a class="" href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/lsp/lsp-client">LSP Client Guide</a> - External server integration</li>
<li class=""><a class="" href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/cli/configuration/ai/tools#available-tools">AI Integration</a> - AI validation tool</li>
<li class=""><a class="" href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/cli/configuration">Configuration Reference</a> - Full atmos.yaml options</li>
</ul>
<p><strong>LSP Resources:</strong></p>
<ul>
<li class=""><a href="https://microsoft.github.io/language-server-protocol/" target="_blank" rel="noopener noreferrer" class="">Language Server Protocol Specification</a></li>
<li class=""><a href="https://github.com/redhat-developer/yaml-language-server" target="_blank" rel="noopener noreferrer" class="">yaml-language-server</a></li>
<li class=""><a href="https://github.com/hashicorp/terraform-ls" target="_blank" rel="noopener noreferrer" class="">terraform-ls</a></li>
</ul>
<p><strong>Related Features:</strong></p>
<ul>
<li class=""><a class="" href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/ai">Atmos AI</a> - AI-powered infrastructure assistance</li>
<li class=""><a class="" href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/cli/commands/validate/usage">Atmos Validation</a> - Validation commands</li>
<li class=""><a class="" href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/stacks">Atmos Stacks</a> - Stack structure and inheritance</li>
</ul>
<p><strong>Get Involved:</strong></p>
<ul>
<li class=""><a href="https://github.com/cloudposse/atmos/issues" target="_blank" rel="noopener noreferrer" class="">GitHub Issues</a></li>
<li class=""><a href="https://github.com/cloudposse/atmos/discussions" target="_blank" rel="noopener noreferrer" class="">Community Discussions</a></li>
</ul>
<hr>
<p>Happy configuring!</p>]]></content:encoded>
            <category>Feature</category>
            <category>DX</category>
        </item>
        <item>
            <title><![CDATA[Per-Target Version Overrides in Vendor Manifests]]></title>
            <link>https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/vendor-target-version-overrides</link>
            <guid>https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/vendor-target-version-overrides</guid>
            <pubDate>Wed, 04 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Vendor targets now accept optional version overrides, enabling multiple versions of the same component from a single source entry.]]></description>
            <content:encoded><![CDATA[<p>Vendor targets now accept optional version overrides, enabling multiple versions of the same component from a single source entry.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="what-changed">What Changed<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/vendor-target-version-overrides#what-changed" class="hash-link" aria-label="Direct link to What Changed" title="Direct link to What Changed" translate="no">​</a></h2>
<p>The <code>targets</code> field in vendor manifests now supports both the original string syntax and a new map syntax with <code>path</code> and <code>version</code> keys. When a target specifies its own <code>version</code>, the source URL template is re-resolved with that version.</p>
<p><strong>Before</strong> (still works):</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token key atrule">targets</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"components/terraform/vpc"</span><br></span></code></pre></div></div>
<p><strong>New map syntax with per-target version override:</strong></p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token key atrule">targets</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> </span><span class="token key atrule">path</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"components/terraform/vpc/{{.Version}}"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">version</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"2.1.0"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> </span><span class="token key atrule">path</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"components/terraform/vpc/{{.Version}}"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">version</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"3.0.0"</span><br></span></code></pre></div></div>
<p>Both syntaxes can be mixed freely within the same targets list.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="why-this-matters">Why This Matters<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/vendor-target-version-overrides#why-this-matters" class="hash-link" aria-label="Direct link to Why This Matters" title="Direct link to Why This Matters" translate="no">​</a></h2>
<p>Previously, vendoring multiple versions of the same component required duplicating the entire source entry for each version. With per-target version overrides, a single source entry can vendor the same component to multiple paths with different versions:</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token key atrule">spec</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">sources</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> </span><span class="token key atrule">component</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> vpc</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">source</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"github.com/cloudposse/terraform-aws-vpc.git///?ref={{.Version}}"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">version</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"2.1.0"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">targets</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"components/terraform/vpc"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> </span><span class="token key atrule">path</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"components/terraform/vpc/{{.Version}}"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">          </span><span class="token key atrule">version</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"3.0.0"</span><br></span></code></pre></div></div>
<p>This vendors version 2.1.0 to <code>components/terraform/vpc</code> and version 3.0.0 to <code>components/terraform/vpc/3.0.0</code>, all from a single source definition.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="how-to-use-it">How to Use It<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/vendor-target-version-overrides#how-to-use-it" class="hash-link" aria-label="Direct link to How to Use It" title="Direct link to How to Use It" translate="no">​</a></h2>
<p>Update your <code>vendor.yaml</code> to use the map syntax for any targets that need a different version than the source-level default. The <code>path</code> field is required; the <code>version</code> field is optional. When <code>version</code> is omitted, the target inherits the source-level version as before.</p>
<p>See the <a class="" href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/design-patterns/version-management/vendoring-components">vendoring documentation</a> for more details and examples.</p>]]></content:encoded>
            <category>Feature</category>
        </item>
        <item>
            <title><![CDATA[Multi-Cloud Documentation and Design Patterns]]></title>
            <link>https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/multi-cloud-docs</link>
            <guid>https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/multi-cloud-docs</guid>
            <pubDate>Tue, 03 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Atmos has always been cloud agnostic, but our documentation hasn't always reflected that. This release adds comprehensive multi-cloud documentation including a new design pattern for organizing stacks across different cloud providers.]]></description>
            <content:encoded><![CDATA[<p>Atmos has always been cloud agnostic, but our documentation hasn't always reflected that. This release adds comprehensive multi-cloud documentation including a new design pattern for organizing stacks across different cloud providers.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="what-changed">What Changed<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/multi-cloud-docs#what-changed" class="hash-link" aria-label="Direct link to What Changed" title="Direct link to What Changed" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="multi-cloud-overview-page">Multi-Cloud Overview Page<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/multi-cloud-docs#multi-cloud-overview-page" class="hash-link" aria-label="Direct link to Multi-Cloud Overview Page" title="Direct link to Multi-Cloud Overview Page" translate="no">​</a></h3>
<p>A new <a class="" href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/multi-cloud">Multi-Cloud</a> page explains how Atmos works with any cloud provider that Terraform supports. It includes a cloud concept mapping table that translates equivalent concepts across AWS, Azure, and GCP — from organizational hierarchy (Organizations vs Management Groups vs Folders) to networking (VPC vs VNet vs VPC Network) to identity (IAM Roles vs Managed Identities vs Service Accounts).</p>
<p>The page also includes tabbed configuration examples showing how to set up <a class="" href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/cli/configuration/auth">authentication</a> and <a class="" href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/cli/configuration/stores">stores</a> for each provider.</p>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="multi-cloud-configuration-design-pattern">Multi-Cloud Configuration Design Pattern<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/multi-cloud-docs#multi-cloud-configuration-design-pattern" class="hash-link" aria-label="Direct link to Multi-Cloud Configuration Design Pattern" title="Direct link to Multi-Cloud Configuration Design Pattern" translate="no">​</a></h3>
<p>A new <a class="" href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/design-patterns/stack-organization/multi-cloud-configuration">Multi-Cloud Configuration</a> design pattern shows how to organize your stacks so the directory layout mirrors how your cloud provider organizes its resources. The guiding principle: what you see on disk should match how resources are deployed.</p>
<p>Each cloud gets its own example with native terminology in folder names:</p>
<ul>
<li class=""><strong>AWS</strong>: <code>accounts/dev/us-east-1.yaml</code></li>
<li class=""><strong>Azure</strong>: <code>subscriptions/dev/eastus.yaml</code></li>
<li class=""><strong>GCP</strong>: <code>projects/dev/us-central1.yaml</code></li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="application-sdlc-environments-design-pattern">Application SDLC Environments Design Pattern<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/multi-cloud-docs#application-sdlc-environments-design-pattern" class="hash-link" aria-label="Direct link to Application SDLC Environments Design Pattern" title="Direct link to Application SDLC Environments Design Pattern" translate="no">​</a></h3>
<p>Not every repository needs deep organizational hierarchy. A new <a class="" href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/design-patterns/stack-organization/application-sdlc">Application SDLC Environments</a> design pattern shows how application repositories can co-locate infrastructure alongside application code with a minimal flat structure: <code>dev.yaml</code>, <code>staging.yaml</code>, <code>prod.yaml</code>, and optionally <code>preview.yaml</code> for ephemeral PR environments.</p>
<p>This pattern makes it easy for developers to get up and running with Atmos in their application repositories without being overwhelmed by organizational taxonomy. The directory structure exposes only what the team needs to care about — the SDLC environment — while keeping everything else as inherited defaults. The result is a clean architecture where infrastructure ships with the application in the same repo and the same pull request.</p>
<p>For a working example of this pattern, see the <a href="https://github.com/cloudposse-examples/app-on-ecs" target="_blank" rel="noopener noreferrer" class="">app-on-ecs</a> reference architecture on GitHub.</p>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="azure-and-gcp-auth-documentation">Azure and GCP Auth Documentation<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/multi-cloud-docs#azure-and-gcp-auth-documentation" class="hash-link" aria-label="Direct link to Azure and GCP Auth Documentation" title="Direct link to Azure and GCP Auth Documentation" translate="no">​</a></h3>
<p>The <a class="" href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/cli/commands/auth/usage">auth usage page</a>, <a class="" href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/cli/configuration/auth/providers">providers reference</a>, and <a class="" href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/cli/configuration/auth/identities">identities reference</a> now include Azure and GCP alongside AWS, with tabbed examples for each cloud.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="why-this-matters">Why This Matters<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/multi-cloud-docs#why-this-matters" class="hash-link" aria-label="Direct link to Why This Matters" title="Direct link to Why This Matters" translate="no">​</a></h2>
<p>Teams deploying to Azure or GCP can now find documentation that speaks their cloud's language instead of translating from AWS-centric examples. The concept mapping table helps engineers working across multiple clouds quickly find equivalent services.</p>
<p>For application developers, the SDLC pattern provides a low-friction on-ramp to Atmos — co-locate your Terraform next to your app code, define one file per environment, and let Atmos handle the rest.</p>]]></content:encoded>
            <category>Documentation</category>
        </item>
        <item>
            <title><![CDATA[Source Cache TTL for JIT-Vendored Components]]></title>
            <link>https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/source-cache-ttl</link>
            <guid>https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/source-cache-ttl</guid>
            <pubDate>Tue, 03 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Atmos now supports a ttl field on component source configuration to control how long cached JIT-vendored sources are reused before automatically re-pulling from the remote. This is especially useful when working with floating refs like branch names during active development.]]></description>
            <content:encoded><![CDATA[<p>Atmos now supports a <code>ttl</code> field on component source configuration to control how long cached JIT-vendored sources are reused before automatically re-pulling from the remote. This is especially useful when working with floating refs like branch names during active development.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="what-changed">What Changed<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/source-cache-ttl#what-changed" class="hash-link" aria-label="Direct link to What Changed" title="Direct link to What Changed" translate="no">​</a></h2>
<p>The <code>source</code> specification now accepts an optional <code>ttl</code> (time-to-live) field that controls cache expiration for JIT-vendored components. When the TTL expires, the source is automatically re-pulled on the next command invocation.</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token key atrule">components</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">terraform</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">my-module</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">source</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">uri</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"git::https://github.com/org/repo.git"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">version</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"main"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">ttl</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"0s"</span><span class="token plain">   </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Always re-pull from upstream</span><br></span></code></pre></div></div>
<p>A global default TTL can be set in <code>atmos.yaml</code> and overridden per-component:</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># atmos.yaml</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">components</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">terraform</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">source</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">ttl</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"1h"</span><span class="token plain">   </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Re-pull sources older than 1 hour</span><br></span></code></pre></div></div>
<p>If no TTL is set, behavior is unchanged: cached sources are reused indefinitely and only re-pulled when the version or URI changes.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="why-this-matters">Why This Matters<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/source-cache-ttl#why-this-matters" class="hash-link" aria-label="Direct link to Why This Matters" title="Direct link to Why This Matters" translate="no">​</a></h2>
<p>When using floating refs like branch names (<code>version: "main"</code>), the version string never changes even though the upstream content does. Previously, Atmos would silently reuse stale cached code, forcing developers to manually delete <code>.workdir/</code> or run <code>source pull --force</code> before every plan.</p>
<p>This created a painful inner loop during active development and a behavioral gap between local environments (cached) and CI (ephemeral, always fresh).</p>
<p>With <code>ttl</code>, you describe how stale is acceptable and Atmos enforces it automatically.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="how-to-use-it">How to Use It<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/source-cache-ttl#how-to-use-it" class="hash-link" aria-label="Direct link to How to Use It" title="Direct link to How to Use It" translate="no">​</a></h2>
<p><strong>Active development</strong> (always get latest):</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token key atrule">source</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">uri</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"git::https://github.com/org/repo.git"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">version</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"develop"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">ttl</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"0s"</span><br></span></code></pre></div></div>
<p><strong>Team collaboration</strong> (hourly refresh):</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token key atrule">source</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">uri</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"git::https://github.com/org/repo.git"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">version</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"main"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">ttl</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"1h"</span><br></span></code></pre></div></div>
<p><strong>Stable releases</strong> (no TTL needed):</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token key atrule">source</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">uri</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"github.com/cloudposse/terraform-aws-components//modules/vpc"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">version</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"1.450.0"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># No ttl - cache indefinitely, only re-pull on version change</span><br></span></code></pre></div></div>
<p>Supported duration formats: <code>"0s"</code>, <code>"30m"</code>, <code>"1h"</code>, <code>"7d"</code>, <code>"daily"</code>, <code>"weekly"</code>.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="get-involved">Get Involved<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/source-cache-ttl#get-involved" class="hash-link" aria-label="Direct link to Get Involved" title="Direct link to Get Involved" translate="no">​</a></h2>
<p>We'd love to hear your feedback on this feature! Please <a href="https://github.com/cloudposse/atmos/issues" target="_blank" rel="noopener noreferrer" class="">open an issue</a> if you have questions or suggestions.</p>]]></content:encoded>
            <category>Feature</category>
        </item>
        <item>
            <title><![CDATA[AI Agent Skills for Atmos]]></title>
            <link>https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/ai-agent-skills</link>
            <guid>https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/ai-agent-skills</guid>
            <pubDate>Fri, 27 Feb 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Atmos now ships 21 agent skills that give AI coding assistants deep knowledge of Atmos conventions, stack configuration, Terraform orchestration, authentication, validation, and more. Skills build on two open standards -- AGENTS.md and Agent Skills -- and work across Claude Code, OpenAI Codex, Gemini CLI, Cursor, Windsurf, GitHub Copilot, and other AI tools.]]></description>
            <content:encoded><![CDATA[<p>Atmos now ships 21 agent skills that give AI coding assistants deep knowledge of Atmos conventions, stack configuration, Terraform orchestration, authentication, validation, and more. Skills build on two open standards -- <a href="https://agents.md/" target="_blank" rel="noopener noreferrer" class="">AGENTS.md</a> and <a href="https://agentskills.io/specification" target="_blank" rel="noopener noreferrer" class="">Agent Skills</a> -- and work across Claude Code, OpenAI Codex, Gemini CLI, Cursor, Windsurf, GitHub Copilot, and other AI tools.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="what-changed">What Changed<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/ai-agent-skills#what-changed" class="hash-link" aria-label="Direct link to What Changed" title="Direct link to What Changed" translate="no">​</a></h2>
<p>Atmos includes a new <code>agent-skills/</code> directory at the repository root containing 21 domain-specific skills packaged as a single Claude Code plugin:</p>
<p><code>atmos-terraform</code>, <code>atmos-helmfile</code>, <code>atmos-packer</code>, <code>atmos-ansible</code>, <code>atmos-workflows</code>, <code>atmos-custom-commands</code>, <code>atmos-config</code>, <code>atmos-introspection</code>, <code>atmos-auth</code>, <code>atmos-stores</code>, <code>atmos-toolchain</code>, <code>atmos-devcontainer</code>, <code>atmos-stacks</code>, <code>atmos-components</code>, <code>atmos-vendoring</code>, <code>atmos-validation</code>, <code>atmos-schemas</code>, <code>atmos-gitops</code>, <code>atmos-yaml-functions</code>, <code>atmos-templates</code>, <code>atmos-design-patterns</code></p>
<p>Each skill is a self-contained package with a primary <code>SKILL.md</code> instruction file (under 500 lines) and a <code>references/</code> directory with deeper reference material. An <code>AGENTS.md</code> router file maps user tasks to the right skill, so AI tools load only the context they need.</p>
<p>The skills are built on two open standards:</p>
<ul>
<li class=""><strong><a href="https://agents.md/" target="_blank" rel="noopener noreferrer" class="">AGENTS.md</a></strong> -- The cross-tool instruction file standard created by OpenAI with Google, Cursor, and others. Governed by the Linux Foundation's Agentic AI Foundation (AAIF). Adopted by 60,000+ GitHub repos.</li>
<li class=""><strong><a href="https://agentskills.io/specification" target="_blank" rel="noopener noreferrer" class="">Agent Skills</a></strong> -- The directory-based skill packaging format (<code>SKILL.md</code>) created by Anthropic. Adopted by Microsoft, OpenAI, Cursor, and GitHub.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="why-this-matters">Why This Matters<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/ai-agent-skills#why-this-matters" class="hash-link" aria-label="Direct link to Why This Matters" title="Direct link to Why This Matters" translate="no">​</a></h2>
<p>AI coding assistants are increasingly part of infrastructure workflows. Without domain-specific context, they rely on general training data that may be outdated, incomplete, or wrong. Common issues include:</p>
<ul>
<li class="">Generating invalid YAML that doesn't match the Atmos schema</li>
<li class="">Using incorrect CLI commands or flags</li>
<li class="">Missing Atmos-specific patterns like deep merging, abstract components, or YAML functions</li>
<li class="">Not knowing about features like <code>!store</code>, <code>!terraform.output</code>, or multi-provider authentication</li>
</ul>
<p>Agent skills solve this by providing structured, up-to-date knowledge directly in the repository. The AI loads the relevant skill before answering, ensuring accurate and current guidance.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="how-to-use-it">How to Use It<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/ai-agent-skills#how-to-use-it" class="hash-link" aria-label="Direct link to How to Use It" title="Direct link to How to Use It" translate="no">​</a></h2>
<p>Every major AI tool has its own configuration directory. The skills live in a tool-agnostic <code>agent-skills/</code> folder, and you symlink or reference them from each tool's expected location.</p>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="claude-code">Claude Code<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/ai-agent-skills#claude-code" class="hash-link" aria-label="Direct link to Claude Code" title="Direct link to Claude Code" translate="no">​</a></h3>
<p>Install from the Cloud Posse plugin marketplace:</p>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Add the Cloud Posse marketplace (one-time setup)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">/plugin marketplace </span><span class="token function" style="color:rgb(130, 170, 255)">add</span><span class="token plain"> cloudposse/atmos</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Install the Atmos skills plugin (all 21 skills)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">/plugin </span><span class="token function" style="color:rgb(130, 170, 255)">install</span><span class="token plain"> atmos@cloudposse</span><br></span></code></pre></div></div>
<p>One plugin, one install command, all 21 skills. The <code>cloudposse/atmos</code> GitHub repo serves as the marketplace -- Claude Code fetches the plugin manifest directly from the repo. No central registry or approval is involved. Once installed, the plugin is cached locally and skills activate automatically when you ask Atmos-related questions.</p>
<p>To uninstall:</p>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Remove the plugin</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">/plugin uninstall atmos@cloudposse</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Remove the marketplace (optional)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">/plugin marketplace remove cloudposse</span><br></span></code></pre></div></div>
<p>For Atmos contributors working directly in the repo, skills are also auto-discovered via <code>.claude/skills/</code> symlinks.</p>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="openai-codex">OpenAI Codex<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/ai-agent-skills#openai-codex" class="hash-link" aria-label="Direct link to OpenAI Codex" title="Direct link to OpenAI Codex" translate="no">​</a></h3>
<p>Codex natively reads <code>AGENTS.md</code> from the repository root (it co-created this standard). Copy the router to the repo root for automatic discovery:</p>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token function" style="color:rgb(130, 170, 255)">cp</span><span class="token plain"> agent-skills/AGENTS.md AGENTS.md</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="gemini-cli-cursor-windsurf-github-copilot">Gemini CLI, Cursor, Windsurf, GitHub Copilot<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/ai-agent-skills#gemini-cli-cursor-windsurf-github-copilot" class="hash-link" aria-label="Direct link to Gemini CLI, Cursor, Windsurf, GitHub Copilot" title="Direct link to Gemini CLI, Cursor, Windsurf, GitHub Copilot" translate="no">​</a></h3>
<p>Each tool has its own integration path:</p>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Gemini CLI -- symlink to .gemini/skills</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token function" style="color:rgb(130, 170, 255)">ln</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">-s</span><span class="token plain"> agent-skills .gemini/skills</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Cursor -- create .cursor/rules/atmos.mdc (frontmatter required for auto-loading)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token function" style="color:rgb(130, 170, 255)">mkdir</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">-p</span><span class="token plain"> .cursor/rules </span><span class="token operator" style="color:rgb(127, 219, 202)">&amp;&amp;</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">cat</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">&gt;</span><span class="token plain"> .cursor/rules/atmos.mdc </span><span class="token operator" style="color:rgb(127, 219, 202)">&lt;&lt;</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'RULE'</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token string" style="color:rgb(173, 219, 103)">---</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token string" style="color:rgb(173, 219, 103)">description: Atmos infrastructure orchestration guidance</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token string" style="color:rgb(173, 219, 103)">globs: "*.yaml, *.tf"</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token string" style="color:rgb(173, 219, 103)">alwaysApply: false</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token string" style="color:rgb(173, 219, 103)">---</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token string" style="color:rgb(173, 219, 103)">@agent-skills/AGENTS.md</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token string" style="color:rgb(173, 219, 103)">RULE</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Windsurf -- add reference in .windsurfrules (also auto-discovers AGENTS.md)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token builtin class-name" style="color:rgb(255, 203, 139)">echo</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'Always refer to agent-skills/AGENTS.md for Atmos commands and configuration patterns.'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">&gt;&gt;</span><span class="token plain"> .windsurfrules</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># GitHub Copilot -- reference in .github/copilot-instructions.md</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token function" style="color:rgb(130, 170, 255)">mkdir</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">-p</span><span class="token plain"> .github </span><span class="token operator" style="color:rgb(127, 219, 202)">&amp;&amp;</span><span class="token plain"> </span><span class="token builtin class-name" style="color:rgb(255, 203, 139)">echo</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'Always refer to agent-skills/AGENTS.md for Atmos commands and configuration patterns.'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">&gt;&gt;</span><span class="token plain"> .github/copilot-instructions.md</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="other-tools">Other Tools<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/ai-agent-skills#other-tools" class="hash-link" aria-label="Direct link to Other Tools" title="Direct link to Other Tools" translate="no">​</a></h3>
<p>Antigravity reads from <code>.agent/skills/</code>, JetBrains Junie reads <code>AGENTS.md</code> as a fallback alongside <code>.junie/guidelines.md</code>, and Amazon Q uses JSON configs in <code>.amazonq/cli-agents/</code>. The skills use standard Markdown with YAML frontmatter, which is universally compatible.</p>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="in-your-infrastructure-project">In Your Infrastructure Project<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/ai-agent-skills#in-your-infrastructure-project" class="hash-link" aria-label="Direct link to In Your Infrastructure Project" title="Direct link to In Your Infrastructure Project" translate="no">​</a></h3>
<p>You install the <code>atmos</code> binary -- you don't need to clone the Atmos repository. Skills are installed separately through your AI tool.</p>
<p>For Claude Code, install skills via the plugin marketplace (see above). For other AI tools that don't have Atmos marketplace support, use Atmos vendoring to pull the skills into your project:</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Add to vendor.yaml</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">apiVersion</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> atmos/v1</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">kind</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> AtmosVendorConfig</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">metadata</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> atmos</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">agent</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">skills</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">description</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> Vendor Atmos AI agent skills</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">spec</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">sources</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> </span><span class="token key atrule">component</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"agent-skills"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">source</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"github.com/cloudposse/atmos.git//agent-skills?ref={{.Version}}"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">version</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"main"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">targets</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"agent-skills"</span><br></span></code></pre></div></div>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos vendor pull </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--component</span><span class="token plain"> agent-skills</span><br></span></code></pre></div></div>
<p>This downloads the <code>agent-skills/</code> directory with the correct structure intact. To update skills later, run the same command again.</p>
<p>See the <a class="" href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/ai/agent-skills">AI Agent Skills documentation</a> for the full skill reference and <a class="" href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/projects/setup-editor/ai-assistants">Configure AI Assistants</a> for tool-specific setup instructions.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="how-skills-are-activated">How Skills Are Activated<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/ai-agent-skills#how-skills-are-activated" class="hash-link" aria-label="Direct link to How Skills Are Activated" title="Direct link to How Skills Are Activated" translate="no">​</a></h2>
<p>You don't invoke skills manually. When you ask your AI assistant a question about Atmos, it automatically activates the right skill based on your question. At session start, the AI loads lightweight metadata from each installed skill. When your question matches a skill's description, the full skill content loads on demand.</p>
<p>For example, asking <em>"How do I configure stack imports?"</em> automatically activates the <code>atmos-stacks</code> skill. No special syntax needed.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="get-involved">Get Involved<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/ai-agent-skills#get-involved" class="hash-link" aria-label="Direct link to Get Involved" title="Direct link to Get Involved" translate="no">​</a></h2>
<p>We welcome contributions to expand and improve the skills. Each skill follows a simple structure: one <code>SKILL.md</code> file with YAML frontmatter and a <code>references/</code> directory for detailed content.</p>
<p>Open an issue or pull request on <a href="https://github.com/cloudposse/atmos" target="_blank" rel="noopener noreferrer" class="">GitHub</a> to suggest improvements or add new skills.</p>]]></content:encoded>
            <category>Feature</category>
            <category>DX</category>
        </item>
        <item>
            <title><![CDATA[New !aws.organization_id YAML Function]]></title>
            <link>https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/aws-organization-id-yaml-function</link>
            <guid>https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/aws-organization-id-yaml-function</guid>
            <pubDate>Thu, 26 Feb 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Access the AWS Organization ID directly in stack configuration with the new !aws.organization_id YAML function.]]></description>
            <content:encoded><![CDATA[<p>Access the AWS Organization ID directly in stack configuration with the new <code>!aws.organization_id</code> YAML function.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="what-changed">What Changed<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/aws-organization-id-yaml-function#what-changed" class="hash-link" aria-label="Direct link to What Changed" title="Direct link to What Changed" translate="no">​</a></h2>
<p>Atmos now includes a new <code>!aws.organization_id</code> YAML function that retrieves the AWS Organization ID by calling
the AWS Organizations <code>DescribeOrganization</code> API. This complements the existing AWS context functions:
<code>!aws.account_id</code>, <code>!aws.caller_identity_arn</code>, <code>!aws.caller_identity_user_id</code>, and <code>!aws.region</code>.</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token key atrule">components</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">terraform</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">my-component</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">vars</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">organization_id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token tag" style="color:rgb(127, 219, 202)">!aws.organization_id</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="why-this-matters">Why This Matters<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/aws-organization-id-yaml-function#why-this-matters" class="hash-link" aria-label="Direct link to Why This Matters" title="Direct link to Why This Matters" translate="no">​</a></h2>
<p>The AWS Organization ID is commonly needed for:</p>
<ul>
<li class=""><strong>Service Control Policies (SCPs)</strong> - Scoping policies to the organization</li>
<li class=""><strong>Cross-account trust policies</strong> - Referencing the organization in IAM conditions</li>
<li class=""><strong>Resource tagging</strong> - Tagging resources with the organization ID for cost allocation</li>
<li class=""><strong>Multi-account governance</strong> - Configuring components that operate at the organization level</li>
</ul>
<p>Previously, users had to hardcode the organization ID or use workarounds. Now it's available dynamically,
just like other AWS context values.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="how-to-use-it">How to Use It<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/aws-organization-id-yaml-function#how-to-use-it" class="hash-link" aria-label="Direct link to How to Use It" title="Direct link to How to Use It" translate="no">​</a></h2>
<p>Use <code>!aws.organization_id</code> anywhere in your stack YAML files:</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token key atrule">components</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">terraform</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">governance</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">vars</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">org_id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token tag" style="color:rgb(127, 219, 202)">!aws.organization_id</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">tags</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">          </span><span class="token key atrule">OrganizationId</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token tag" style="color:rgb(127, 219, 202)">!aws.organization_id</span><br></span></code></pre></div></div>
<p>The function requires the <code>organizations:DescribeOrganization</code> IAM permission and the account must be
a member of an AWS Organization.</p>
<p>Results are cached for the duration of the CLI invocation, so multiple references only make one API call.</p>
<p>This is equivalent to Terragrunt's <code>get_aws_org_id()</code> function.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="get-involved">Get Involved<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/aws-organization-id-yaml-function#get-involved" class="hash-link" aria-label="Direct link to Get Involved" title="Direct link to Get Involved" translate="no">​</a></h2>
<ul>
<li class="">Read the <a class="" href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/functions/yaml/aws.organization-id">documentation</a> for full details</li>
<li class="">Report issues on <a href="https://github.com/cloudposse/atmos/issues" target="_blank" rel="noopener noreferrer" class="">GitHub</a></li>
</ul>]]></content:encoded>
            <category>Feature</category>
        </item>
        <item>
            <title><![CDATA[Identity-Based Authentication for Stores]]></title>
            <link>https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/store-identity-support</link>
            <guid>https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/store-identity-support</guid>
            <pubDate>Sun, 22 Feb 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Atmos stores now support identity-based authentication. You can configure stores to authenticate using the same named identities from atmos auth instead of relying on default credential chains.]]></description>
            <content:encoded><![CDATA[<p>Atmos stores now support identity-based authentication. You can configure stores to authenticate using the same named identities from <code>atmos auth</code> instead of relying on default credential chains.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="what-changed">What Changed<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/store-identity-support#what-changed" class="hash-link" aria-label="Direct link to What Changed" title="Direct link to What Changed" translate="no">​</a></h2>
<p>Stores (<code>!store</code> YAML function) can now reference an Atmos auth identity via a new <code>identity</code> field in the store configuration. When set, the store uses that identity's credentials instead of the default credential chain (environment variables, default AWS profiles, etc.).</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token key atrule">stores</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">prod/aws-ssm</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> aws</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">ssm</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">parameter</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">store</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">identity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> prod</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">admin</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">options</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">region</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> us</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">east</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token number" style="color:rgb(247, 140, 108)">1</span><br></span></code></pre></div></div>
<p>This works with all cloud-backed store types:</p>
<ul>
<li class=""><strong>AWS SSM Parameter Store</strong> - loads AWS config from realm-scoped credential and config files</li>
<li class=""><strong>Azure Key Vault</strong> - authenticates via <code>DefaultAzureCredential</code> with tenant hint from auth context</li>
<li class=""><strong>Google Secret Manager</strong> - uses realm-scoped application default credentials file</li>
</ul>
<p>Redis and Artifactory stores do not support identity-based authentication since they don't map to cloud provider identity types.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="realm-compatibility">Realm Compatibility<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/store-identity-support#realm-compatibility" class="hash-link" aria-label="Direct link to Realm Compatibility" title="Direct link to Realm Compatibility" translate="no">​</a></h2>
<p>Store identities are fully compatible with Atmos auth realms. When a realm is configured, the auth system embeds the realm into credential file paths (e.g., <code>~/.config/atmos/{realm}/aws/{provider}/credentials</code>). These realm-scoped paths flow through the resolver to stores automatically -- store code never needs to know about realms.</p>
<p>This means stores in different realms use isolated credentials, preventing cross-environment credential collisions.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="why-this-matters">Why This Matters<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/store-identity-support#why-this-matters" class="hash-link" aria-label="Direct link to Why This Matters" title="Direct link to Why This Matters" translate="no">​</a></h2>
<p>Previously, stores always used the default credential chain, which meant separate credential management for secrets access vs. Terraform execution. Now you can use the same identity system for both, simplifying credential management and enabling more granular access control.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="how-to-use-it">How to Use It<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/store-identity-support#how-to-use-it" class="hash-link" aria-label="Direct link to How to Use It" title="Direct link to How to Use It" translate="no">​</a></h2>
<ol>
<li class="">Configure an identity in your <code>atmos.yaml</code> auth section (as you normally would for <code>atmos auth</code>).</li>
<li class="">Add the <code>identity</code> field to your store configuration referencing that identity name.</li>
<li class="">The store will automatically authenticate using that identity on first access.</li>
</ol>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token key atrule">stores</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">prod/aws-ssm</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> aws</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">ssm</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">parameter</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">store</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">identity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> prod</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">admin</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">options</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">region</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> us</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">east</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token number" style="color:rgb(247, 140, 108)">1</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">staging/azure-kv</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> azure</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">key</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">vault</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">identity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> staging</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">azure</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">options</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">vault_url</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> https</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">//staging</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">vault.vault.azure.net</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">prod/gsm</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> google</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">secret</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">manager</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">identity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> gcp</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">prod</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">options</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">project_id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> my</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">gcp</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">project</span><br></span></code></pre></div></div>
<p>Stores without the <code>identity</code> field continue to work exactly as before -- this is a fully backward-compatible change.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="get-involved">Get Involved<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/store-identity-support#get-involved" class="hash-link" aria-label="Direct link to Get Involved" title="Direct link to Get Involved" translate="no">​</a></h2>
<p>Have questions or feedback? Open an issue on <a href="https://github.com/cloudposse/atmos/issues" target="_blank" rel="noopener noreferrer" class="">GitHub</a>.</p>]]></content:encoded>
            <category>Feature</category>
        </item>
        <item>
            <title><![CDATA[Test PR Features with --use-version]]></title>
            <link>https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/pr-artifact-installation</link>
            <guid>https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/pr-artifact-installation</guid>
            <pubDate>Tue, 17 Feb 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Test features from any Atmos pull request or commit SHA without compiling from source or manually downloading artifacts.]]></description>
            <content:encoded><![CDATA[<p>Test features from any Atmos pull request or commit SHA without compiling from source or manually downloading artifacts.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="whats-new">What's New<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/pr-artifact-installation#whats-new" class="hash-link" aria-label="Direct link to What's New" title="Direct link to What's New" translate="no">​</a></h2>
<p>The <code>--use-version</code> flag now accepts PR numbers and commit SHAs, making it trivial to test features from any open pull request or specific commit:</p>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Test a feature from PR #2040</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos --use-version pr:2040 terraform plan</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Numbers are auto-detected as PRs</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos --use-version </span><span class="token number" style="color:rgb(247, 140, 108)">2040</span><span class="token plain"> describe stacks</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Test a specific commit by SHA</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos --use-version sha:ceb7526 version</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># SHAs are auto-detected (7-40 hex chars)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos --use-version ceb7526be terraform plan</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="how-it-works">How It Works<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/pr-artifact-installation#how-it-works" class="hash-link" aria-label="Direct link to How It Works" title="Direct link to How It Works" translate="no">​</a></h2>
<p>When you specify a PR number or SHA, Atmos:</p>
<ol>
<li class=""><strong>Fetches the artifact</strong> - Downloads the correct platform binary (Linux, macOS, Windows) from GitHub Actions</li>
<li class=""><strong>Caches locally</strong> - Stores the binary in <code>~/.local/share/atmos/toolchain/bin/</code> with metadata for fast subsequent runs</li>
<li class=""><strong>Re-executes</strong> - Runs your command using the specified version of Atmos</li>
</ol>
<p>For PR versions, the cache uses a 1-minute TTL before checking for new commits, so repeated runs within that window are instant.</p>
<p>For SHA versions, the cache is permanent since commits are immutable - once installed, a SHA version is always ready to use.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="clear-error-messages">Clear Error Messages<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/pr-artifact-installation#clear-error-messages" class="hash-link" aria-label="Direct link to Clear Error Messages" title="Direct link to Clear Error Messages" translate="no">​</a></h2>
<p>When things go wrong, you get actionable guidance:</p>
<ul>
<li class=""><strong>Invalid version format</strong>: Clear message showing valid formats (PR number, pr<!-- -->:NNNN<!-- -->, sha<!-- -->:XXXXXXX<!-- -->, or semver)</li>
<li class=""><strong>Missing GitHub token</strong>: Instructions for authenticating via <code>gh</code> CLI or environment variable</li>
<li class=""><strong>PR/commit not found</strong>: Direct link to the PR or commit page</li>
<li class=""><strong>CI workflow failing</strong>: Explanation of why artifacts might be missing</li>
<li class=""><strong>Unsupported platform</strong>: Suggests alternatives</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="requirements">Requirements<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/pr-artifact-installation#requirements" class="hash-link" aria-label="Direct link to Requirements" title="Direct link to Requirements" translate="no">​</a></h2>
<p>PR artifact installation requires GitHub authentication. The feature checks for tokens in this order:</p>
<ol>
<li class=""><code>ATMOS_GITHUB_TOKEN</code> environment variable</li>
<li class=""><code>GITHUB_TOKEN</code> environment variable</li>
<li class="">GitHub CLI (<code>gh</code>) authentication</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="getting-started">Getting Started<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/pr-artifact-installation#getting-started" class="hash-link" aria-label="Direct link to Getting Started" title="Direct link to Getting Started" translate="no">​</a></h2>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Authenticate with GitHub CLI (if not already)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">gh auth login</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Test a PR</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos --use-version pr:2040 version</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Test a specific commit</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos --use-version sha:ceb7526 version</span><br></span></code></pre></div></div>
<p>This feature complements our existing PR feature releases infrastructure, making it even easier to validate changes before they merge.</p>]]></content:encoded>
            <category>Feature</category>
            <category>DX</category>
        </item>
        <item>
            <title><![CDATA[Terraform Cloud Backend Support for !terraform.output]]></title>
            <link>https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/terraform-cloud-output-function</link>
            <guid>https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/terraform-cloud-output-function</guid>
            <pubDate>Mon, 09 Feb 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[The !terraform.output YAML function now works seamlessly with Terraform Cloud and Terraform Enterprise backends, enabling cross-component dependencies without switching backend types.]]></description>
            <content:encoded><![CDATA[<p>The <code>!terraform.output</code> YAML function now works seamlessly with Terraform Cloud and Terraform Enterprise backends, enabling cross-component dependencies without switching backend types.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="what-changed">What Changed<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/terraform-cloud-output-function#what-changed" class="hash-link" aria-label="Direct link to What Changed" title="Direct link to What Changed" translate="no">​</a></h2>
<p>Atmos now correctly generates <code>backend.tf.json</code> configuration for Terraform Cloud and Terraform Enterprise backends when using the <code>!terraform.output</code> YAML function. This was previously broken because Terraform Cloud requires a different backend structure than other backend types.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="why-this-matters">Why This Matters<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/terraform-cloud-output-function#why-this-matters" class="hash-link" aria-label="Direct link to Why This Matters" title="Direct link to Why This Matters" translate="no">​</a></h2>
<p>The <code>!terraform.output</code> YAML function is powerful—it lets you reference outputs from one component in another component's configuration, creating declarative dependencies between infrastructure components. However, this feature was silently failing for teams using Terraform Cloud or Terraform Enterprise backends.</p>
<p>When Atmos needed to fetch outputs from a dependency component, it would generate an incorrect backend configuration that Terraform would reject:</p>
<div class="language-text codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-text codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token plain">Error: Unsupported backend type on backend.tf.json line 4, in terraform.backend: 4:</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">"cloud": { There is no explicit backend type named "cloud". To configure HCP</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">Terraform, declare a 'cloud' block instead.</span><br></span></code></pre></div></div>
<p>This forced teams to either:</p>
<ul>
<li class="">Avoid using <code>!terraform.output</code> with Terraform Cloud</li>
<li class="">Switch to S3/Azure/GCS backends just to use this feature</li>
<li class="">Manually work around the limitation with <code>terraform_remote_state</code> data sources</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="the-problem">The Problem<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/terraform-cloud-output-function#the-problem" class="hash-link" aria-label="Direct link to The Problem" title="Direct link to The Problem" translate="no">​</a></h2>
<p>Terraform Cloud has a unique backend configuration structure. Unlike other backends (S3, Azure, GCS) that nest under <code>terraform.backend.&lt;type&gt;</code>, Terraform Cloud's configuration must be placed directly under <code>terraform.cloud</code>:</p>
<p><strong>Incorrect (what Atmos was generating):</strong></p>
<div class="language-json codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-json codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token property" style="color:rgb(128, 203, 196)">"terraform"</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token property" style="color:rgb(128, 203, 196)">"backend"</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token property" style="color:rgb(128, 203, 196)">"cloud"</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token property" style="color:rgb(128, 203, 196)">"organization"</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"my-org"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token property" style="color:rgb(128, 203, 196)">"workspaces"</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">          </span><span class="token property" style="color:rgb(128, 203, 196)">"name"</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"my-workspace"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></span></code></pre></div></div>
<p><strong>Correct (what Terraform Cloud expects):</strong></p>
<div class="language-json codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-json codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token property" style="color:rgb(128, 203, 196)">"terraform"</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token property" style="color:rgb(128, 203, 196)">"cloud"</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token property" style="color:rgb(128, 203, 196)">"organization"</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"my-org"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token property" style="color:rgb(128, 203, 196)">"workspaces"</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token property" style="color:rgb(128, 203, 196)">"name"</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"my-workspace"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></span></code></pre></div></div>
<p>This subtle difference caused Terraform to fail during initialization, preventing the <code>!terraform.output</code> function from fetching outputs.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="how-it-works">How It Works<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/terraform-cloud-output-function#how-it-works" class="hash-link" aria-label="Direct link to How It Works" title="Direct link to How It Works" translate="no">​</a></h2>
<p>Atmos now detects when a component uses a Terraform Cloud backend and generates the correct JSON structure automatically. The fix is applied in the <code>generateBackendConfig</code> function within the <code>pkg/terraform/output</code> package.</p>
<p>When you use <code>!terraform.output</code> to reference another component's outputs, Atmos:</p>
<ol>
<li class="">Determines the backend type of the dependency component</li>
<li class="">Generates the appropriate <code>backend.tf.json</code> structure</li>
<li class="">For Terraform Cloud/Enterprise backends specifically, places the configuration under <code>terraform.cloud</code> instead of <code>terraform.backend.cloud</code></li>
<li class="">Runs <code>terraform init</code> and <code>terraform output</code> to fetch the values</li>
<li class="">Returns the output values for use in your stack configuration</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="example-usage">Example Usage<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/terraform-cloud-output-function#example-usage" class="hash-link" aria-label="Direct link to Example Usage" title="Direct link to Example Usage" translate="no">​</a></h2>
<p>Define your EKS cluster component with a Terraform Cloud backend:</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># stacks/eks-cluster.yaml</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">components</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">terraform</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">cluster</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">backend_type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> cloud</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">backend</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">cloud</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">          </span><span class="token key atrule">organization</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"my-org"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">          </span><span class="token key atrule">workspaces</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">            </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"eks-cluster-prod"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">vars</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">cluster_version</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"1.29"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># ... other cluster configuration</span><br></span></code></pre></div></div>
<p>Now reference the cluster outputs in your application component:</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># stacks/my-app.yaml</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">components</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">terraform</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">my-app</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">backend_type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> cloud</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">backend</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">cloud</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">          </span><span class="token key atrule">organization</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"my-org"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">          </span><span class="token key atrule">workspaces</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">            </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"my-app-prod"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">vars</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Reference cluster outputs using !terraform.output</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">cluster_endpoint</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token tag" style="color:rgb(127, 219, 202)">!terraform.output</span><span class="token plain"> cluster.cluster_endpoint</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">cluster_ca_cert</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token tag" style="color:rgb(127, 219, 202)">!terraform.output</span><span class="token plain"> cluster.cluster_certificate_authority_data</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">cluster_name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token tag" style="color:rgb(127, 219, 202)">!terraform.output</span><span class="token plain"> cluster.cluster_name</span><br></span></code></pre></div></div>
<p>When Atmos processes <code>my-app</code>, it will:</p>
<ul>
<li class="">Detect that <code>cluster</code> uses a Terraform Cloud backend</li>
<li class="">Generate the correct backend configuration</li>
<li class="">Fetch the outputs from the <code>eks-cluster-prod</code> workspace</li>
<li class="">Make them available to your <code>my-app</code> component</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="whats-next">What's Next<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/terraform-cloud-output-function#whats-next" class="hash-link" aria-label="Direct link to What's Next" title="Direct link to What's Next" translate="no">​</a></h2>
<p>This fix ensures feature parity across all backend types. Whether you're using S3, Azure Blob Storage, GCS, or Terraform Cloud, the <code>!terraform.output</code> function now works consistently.</p>
<p>For teams already using Terraform Cloud, this unlocks the full power of declarative component dependencies without manual workarounds.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="get-involved">Get Involved<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/terraform-cloud-output-function#get-involved" class="hash-link" aria-label="Direct link to Get Involved" title="Direct link to Get Involved" translate="no">​</a></h2>
<p>Try out the enhanced <code>!terraform.output</code> function with Terraform Cloud and let us know what you think! File issues or feature requests on <a href="https://github.com/cloudposse/atmos/issues" target="_blank" rel="noopener noreferrer" class="">GitHub</a>.</p>]]></content:encoded>
            <category>Enhancement</category>
        </item>
        <item>
            <title><![CDATA[Describe Affected Now Detects Deleted Components and Stacks]]></title>
            <link>https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/describe-affected-deleted-detection</link>
            <guid>https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/describe-affected-deleted-detection</guid>
            <pubDate>Sun, 08 Feb 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Atmos now automatically detects components and stacks that have been deleted in your current branch compared to the target branch.]]></description>
            <content:encoded><![CDATA[<p>Atmos now automatically detects components and stacks that have been deleted in your current branch compared to the target branch.
This enables CI/CD pipelines to trigger <code>terraform destroy</code> workflows for removed infrastructure.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="the-problem">The Problem<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/describe-affected-deleted-detection#the-problem" class="hash-link" aria-label="Direct link to The Problem" title="Direct link to The Problem" translate="no">​</a></h2>
<p>Previously, <code>atmos describe affected</code> only detected components that were <strong>modified</strong> between two Git commits.
It worked by iterating over stacks in HEAD (current branch) and comparing them to BASE (target branch).
This meant:</p>
<ul>
<li class="">Components removed from a stack were invisible to the affected detection</li>
<li class="">Entire stacks that were deleted went unnoticed</li>
<li class="">CI/CD pipelines had no automated way to know which resources needed <code>terraform destroy</code></li>
<li class="">Users had to manually identify and destroy removed components, risking resource leaks</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="the-solution">The Solution<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/describe-affected-deleted-detection#the-solution" class="hash-link" aria-label="Direct link to The Solution" title="Direct link to The Solution" translate="no">​</a></h2>
<p>The <code>describe affected</code> command now performs a second pass that iterates over BASE stacks to detect deletions:</p>
<ol>
<li class=""><strong>Deleted components</strong>: Components that exist in BASE but not in HEAD (within the same stack)</li>
<li class=""><strong>Deleted stacks</strong>: Entire stacks that exist in BASE but not in HEAD</li>
</ol>
<p>Deleted components are marked with new fields in the output:</p>
<div class="language-json codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-json codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token property" style="color:rgb(128, 203, 196)">"component"</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"monitoring"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token property" style="color:rgb(128, 203, 196)">"component_type"</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"terraform"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token property" style="color:rgb(128, 203, 196)">"stack"</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"prod-us-east-1"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token property" style="color:rgb(128, 203, 196)">"affected"</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"deleted"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token property" style="color:rgb(128, 203, 196)">"deleted"</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token boolean" style="color:rgb(255, 88, 116)">true</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token property" style="color:rgb(128, 203, 196)">"deletion_type"</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"component"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="new-output-fields">New Output Fields<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/describe-affected-deleted-detection#new-output-fields" class="hash-link" aria-label="Direct link to New Output Fields" title="Direct link to New Output Fields" translate="no">​</a></h2>
<table><thead><tr><th>Field</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td><code>deleted</code></td><td>boolean</td><td><code>true</code> if the component was deleted</td></tr><tr><td><code>deletion_type</code></td><td>string</td><td><code>component</code> (removed from stack) or <code>stack</code> (entire stack deleted)</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="new-affected-reasons">New Affected Reasons<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/describe-affected-deleted-detection#new-affected-reasons" class="hash-link" aria-label="Direct link to New Affected Reasons" title="Direct link to New Affected Reasons" translate="no">​</a></h2>
<table><thead><tr><th>Reason</th><th>Description</th></tr></thead><tbody><tr><td><code>deleted</code></td><td>Component was removed from a stack</td></tr><tr><td><code>deleted.stack</code></td><td>Entire stack was deleted</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="filtering-deleted-vs-modified-components">Filtering Deleted vs Modified Components<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/describe-affected-deleted-detection#filtering-deleted-vs-modified-components" class="hash-link" aria-label="Direct link to Filtering Deleted vs Modified Components" title="Direct link to Filtering Deleted vs Modified Components" translate="no">​</a></h2>
<p>Use the <code>--query</code> flag or <code>jq</code> to separate deleted components from modified ones:</p>
<div class="language-shell codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-shell codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Get only deleted components (for destruction)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos describe affected </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--query</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'[.[] | select(.deleted == true)]'</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Get only modified components (for apply)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos describe affected </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--query</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'[.[] | select(.deleted != true)]'</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="using-with-list-affected">Using with List Affected<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/describe-affected-deleted-detection#using-with-list-affected" class="hash-link" aria-label="Direct link to Using with List Affected" title="Direct link to Using with List Affected" translate="no">​</a></h2>
<p>The <a class="" href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/cli/commands/list/affected"><code>atmos list affected</code></a> command also supports deleted detection, providing a human-readable table view:</p>
<div class="language-shell codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-shell codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># List all affected components including deleted ones</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos list affected</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Filter deleted components in JSON format</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos list affected </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--format</span><span class="token plain"> json </span><span class="token operator" style="color:rgb(127, 219, 202)">|</span><span class="token plain"> jq </span><span class="token string" style="color:rgb(173, 219, 103)">'[.[] | select(.deleted == true)]'</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Custom columns showing deletion status</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos list affected </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--columns</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"Component={{ .component }},Stack={{ .stack }},Deleted={{ .deleted }}"</span><br></span></code></pre></div></div>
<p>The <code>deleted</code> and <code>deletion_type</code> fields are available for custom column templates.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="cicd-integration-example">CI/CD Integration Example<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/describe-affected-deleted-detection#cicd-integration-example" class="hash-link" aria-label="Direct link to CI/CD Integration Example" title="Direct link to CI/CD Integration Example" translate="no">​</a></h2>
<p>Here's how to separate apply and destroy workflows in GitHub Actions:</p>
<div class="theme-admonition theme-admonition-warning admonition_cbIa alert alert--warning"><div class="admonitionHeading_squj"><span class="admonitionIcon_bxkr"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>warning</div><div class="admonitionContent_HCPN"><p><strong>Review deletions carefully before destroying infrastructure.</strong> The destroy job below uses <code>--auto-approve</code> for automation purposes. In production environments, consider adding a manual approval gate or requiring PR review before executing destroy operations to prevent accidental resource deletion.</p></div></div>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token key atrule">jobs</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">detect-changes</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">runs-on</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> ubuntu</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">latest</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">outputs</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">modified</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> $</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> steps.affected.outputs.modified </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">deleted</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> $</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> steps.affected.outputs.deleted </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">steps</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> </span><span class="token key atrule">uses</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> actions/checkout@v4</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">with</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">          </span><span class="token key atrule">fetch-depth</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">0</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> </span><span class="token key atrule">uses</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> cloudposse/github</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">action</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">setup</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">atmos@v2</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> Detect affected</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> affected</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">run</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">|</span><span class="token scalar string" style="color:rgb(173, 219, 103)"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token scalar string" style="color:rgb(173, 219, 103)">          atmos describe affected --format json &gt; affected.json</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">          </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Separate modified and deleted components</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">          jq '</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">.</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">|</span><span class="token plain"> select(.deleted </span><span class="token tag" style="color:rgb(127, 219, 202)">!=</span><span class="token plain"> true)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain">' affected.json </span><span class="token punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"> modified.json</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">          jq '</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">.</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">|</span><span class="token plain"> select(.deleted == true)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain">' affected.json </span><span class="token punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"> deleted.json</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">          echo "modified=$(cat modified.json </span><span class="token punctuation" style="color:rgb(199, 146, 234)">|</span><span class="token plain"> jq </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">c)" </span><span class="token punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"> $GITHUB_OUTPUT</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">          echo "deleted=$(cat deleted.json </span><span class="token punctuation" style="color:rgb(199, 146, 234)">|</span><span class="token plain"> jq </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">c)" </span><span class="token punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"> $GITHUB_OUTPUT</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">apply</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">needs</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> detect</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">changes</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">if</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> needs.detect</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">changes.outputs.modified </span><span class="token tag" style="color:rgb(127, 219, 202)">!=</span><span class="token plain"> '</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain">'</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">strategy</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">matrix</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">include</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> $</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> fromJson(needs.detect</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">changes.outputs.modified) </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">steps</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> </span><span class="token key atrule">uses</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> actions/checkout@v4</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> </span><span class="token key atrule">uses</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> cloudposse/github</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">action</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">setup</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">atmos@v2</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> </span><span class="token key atrule">run</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> atmos terraform apply $</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> matrix.component </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">s $</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> matrix.stack </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">destroy</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">needs</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> detect</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">changes</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">if</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> needs.detect</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">changes.outputs.deleted </span><span class="token tag" style="color:rgb(127, 219, 202)">!=</span><span class="token plain"> '</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain">'</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">environment</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> production  </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Requires manual approval</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">strategy</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">matrix</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">include</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> $</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> fromJson(needs.detect</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">changes.outputs.deleted) </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">steps</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Check out BASE branch - deleted component config only exists there</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> </span><span class="token key atrule">uses</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> actions/checkout@v4</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">with</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">          </span><span class="token key atrule">ref</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> $</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> github.base_ref </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> </span><span class="token key atrule">uses</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> cloudposse/github</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">action</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">setup</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">atmos@v2</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> </span><span class="token key atrule">run</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> atmos terraform destroy $</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> matrix.component </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">s $</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> matrix.stack </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">auto</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">approve</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="edge-cases">Edge Cases<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/describe-affected-deleted-detection#edge-cases" class="hash-link" aria-label="Direct link to Edge Cases" title="Direct link to Edge Cases" translate="no">​</a></h2>
<ul>
<li class=""><strong>Abstract components</strong> (<code>metadata.type: abstract</code>) are not reported as deleted since they are blueprints and not provisioned</li>
<li class=""><strong>Component renames</strong> appear as both a deletion (old name) and a new component (new name)</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="related-documentation">Related Documentation<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/describe-affected-deleted-detection#related-documentation" class="hash-link" aria-label="Direct link to Related Documentation" title="Direct link to Related Documentation" translate="no">​</a></h2>
<ul>
<li class=""><a class="" href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/cli/commands/describe/affected">Describe Affected Command</a> - Full command reference</li>
<li class=""><a class="" href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/cli/commands/list/affected">List Affected Command</a> - Human-readable table view</li>
<li class=""><a class="" href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/integrations/github-actions/affected-stacks">Affected Stacks GitHub Action</a> - CI/CD integration</li>
<li class=""><a class="" href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/design-patterns/inheritance-patterns/abstract-component">Component Inheritance</a> - Abstract component patterns</li>
</ul>]]></content:encoded>
            <category>Feature</category>
        </item>
        <item>
            <title><![CDATA[SSE-C Encryption Support for Remote State Lookups]]></title>
            <link>https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/sse-c-support</link>
            <guid>https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/sse-c-support</guid>
            <pubDate>Sat, 07 Feb 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[The !terraform.state YAML function now supports reading from S3 buckets encrypted with customer-provided keys (SSE-C).]]></description>
            <content:encoded><![CDATA[<p>The <code>!terraform.state</code> YAML function now supports reading from S3 buckets encrypted with customer-provided keys (SSE-C).</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="what-changed">What Changed<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/sse-c-support#what-changed" class="hash-link" aria-label="Direct link to What Changed" title="Direct link to What Changed" translate="no">​</a></h2>
<p>When using <code>!terraform.state</code> to read Terraform or OpenTofu state directly from S3, Atmos now supports SSE-C (Server-Side Encryption with Customer-Provided Keys). Previously, state files stored in SSE-C encrypted buckets were inaccessible through <code>!terraform.state</code>, requiring workarounds to retrieve outputs.</p>
<p>You can provide the SSE-C key in two ways:</p>
<ol>
<li class="">
<p><strong>Backend attribute</strong> in your stack configuration:</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token key atrule">components</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">terraform</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">my-component</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">backend</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">s3</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">          </span><span class="token key atrule">sse_customer_key</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"your-base64-encoded-key"</span><br></span></code></pre></div></div>
</li>
<li class="">
<p><strong>Environment variable</strong>:</p>
<div class="language-shell codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-shell codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token builtin class-name" style="color:rgb(255, 203, 139)">export</span><span class="token plain"> </span><span class="token assign-left variable" style="color:rgb(214, 222, 235)">AWS_SSE_CUSTOMER_KEY</span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token string" style="color:rgb(173, 219, 103)">"your-base64-encoded-key"</span><br></span></code></pre></div></div>
</li>
</ol>
<p>The backend attribute takes precedence over the environment variable, following the same convention as OpenTofu and Terraform.</p>
<p>This also works with <code>remote_state_backend</code> overrides, so you can configure SSE-C keys per-component when referencing remote state.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="why-this-matters">Why This Matters<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/sse-c-support#why-this-matters" class="hash-link" aria-label="Direct link to Why This Matters" title="Direct link to Why This Matters" translate="no">​</a></h2>
<p>Organizations that use SSE-C for S3 state encryption previously couldn't use <code>!terraform.state</code> to reference outputs from those state files. This meant either switching encryption strategies or falling back to <code>!terraform.output</code> (which runs <code>terraform output</code> and requires the full Terraform/OpenTofu binary). With SSE-C support, <code>!terraform.state</code> reads the state file directly from S3 with the correct encryption headers, keeping lookups fast and dependency-free.</p>
<p>Note that this only affects <code>!terraform.state</code> (which reads state files directly from S3). The <code>!terraform.output</code> function is unaffected since it delegates to Terraform/OpenTofu, which already handles SSE-C natively.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="get-involved">Get Involved<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/sse-c-support#get-involved" class="hash-link" aria-label="Direct link to Get Involved" title="Direct link to Get Involved" translate="no">​</a></h2>
<p>Have questions or feedback? Join us on <a href="https://slack.cloudposse.com/" target="_blank" rel="noopener noreferrer" class="">Slack</a> or open an issue on <a href="https://github.com/cloudposse/atmos/issues" target="_blank" rel="noopener noreferrer" class="">GitHub</a>.</p>]]></content:encoded>
            <category>Enhancement</category>
        </item>
        <item>
            <title><![CDATA[GCP Authentication Support]]></title>
            <link>https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/gcp-authentication-support</link>
            <guid>https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/gcp-authentication-support</guid>
            <pubDate>Tue, 03 Feb 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Atmos now supports first-class Google Cloud authentication alongside AWS and Azure, with provider-scoped file isolation and a unified auth experience.]]></description>
            <content:encoded><![CDATA[<p>Atmos now supports first-class Google Cloud authentication alongside AWS and Azure, with provider-scoped file isolation and a unified auth experience.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="what-changed">What Changed<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/gcp-authentication-support#what-changed" class="hash-link" aria-label="Direct link to What Changed" title="Direct link to What Changed" translate="no">​</a></h2>
<ul>
<li class="">Added GCP providers: <code>gcp/adc</code> and <code>gcp/workload-identity-federation</code>.</li>
<li class="">Added GCP identities: <code>gcp/service-account</code> and <code>gcp/project</code>.</li>
<li class="">Implemented provider-scoped file isolation at <code>~/.config/atmos/gcp/&lt;provider-name&gt;/...</code>.</li>
<li class="">Integrated GCP auth with <code>atmos auth login</code>, <code>atmos auth whoami</code>, and Terraform execution.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="why-this-matters">Why This Matters<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/gcp-authentication-support#why-this-matters" class="hash-link" aria-label="Direct link to Why This Matters" title="Direct link to Why This Matters" translate="no">​</a></h2>
<ul>
<li class="">Use the same auth flow across AWS, Azure, and GCP.</li>
<li class="">Avoid long-lived keys in CI/CD with Workload Identity Federation.</li>
<li class="">Keep credentials isolated per provider and identity, without touching user <code>gcloud</code> config.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="how-to-use-it">How to Use It<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/gcp-authentication-support#how-to-use-it" class="hash-link" aria-label="Direct link to How to Use It" title="Direct link to How to Use It" translate="no">​</a></h2>
<p>For local development with ADC:</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token key atrule">auth</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">providers</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">gcp-adc</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">kind</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> gcp/adc</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">project_id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> my</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">project</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">identities</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">terraform</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">kind</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> gcp/service</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">account</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">default</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token boolean important" style="color:rgb(255, 88, 116)">true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">via</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">provider</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> gcp</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">adc</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">principal</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">service_account_email</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> terraform@my</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">project.iam.gserviceaccount.com</span><br></span></code></pre></div></div>
<p>For GitHub Actions with Workload Identity Federation — no <code>token_source</code> needed, everything is auto-detected:</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token key atrule">auth</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">providers</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">gcp-wif</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">kind</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> gcp/workload</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">identity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">federation</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">project_number</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"123456789012"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">workload_identity_pool_id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> github</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">pool</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">workload_identity_provider_id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> github</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">provider</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">service_account_email</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> ci</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">sa@my</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">project.iam.gserviceaccount.com</span><br></span></code></pre></div></div>
<p>In GitHub Actions, Atmos automatically detects <code>ACTIONS_ID_TOKEN_REQUEST_URL</code>, constructs the correct WIF audience, and fetches the OIDC token — no manual <code>token_source</code>, <code>url</code>, or <code>audience</code> configuration required. Just ensure your workflow has <code>id-token: write</code> permission.</p>
<p>Authenticate and verify:</p>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos auth login </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--identity</span><span class="token plain"> terraform</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos auth </span><span class="token function" style="color:rgb(130, 170, 255)">whoami</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="get-involved">Get Involved<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/gcp-authentication-support#get-involved" class="hash-link" aria-label="Direct link to Get Involved" title="Direct link to Get Involved" translate="no">​</a></h2>
<p>Feedback and testing reports are welcome. If you use GCP in CI/CD, try the WIF provider and share any edge cases you encounter.</p>]]></content:encoded>
            <category>Feature</category>
        </item>
        <item>
            <title><![CDATA[Auth Realm Isolation for Multi-Repository Workflows]]></title>
            <link>https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/auth-realm-isolation</link>
            <guid>https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/auth-realm-isolation</guid>
            <pubDate>Mon, 02 Feb 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Atmos now supports credential realm isolation, preventing collisions when engineers]]></description>
            <content:encoded><![CDATA[<p>Atmos now supports credential realm isolation, preventing collisions when engineers
work with multiple customer repositories using identical identity names.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="the-problem">The Problem<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/auth-realm-isolation#the-problem" class="hash-link" aria-label="Direct link to The Problem" title="Direct link to The Problem" translate="no">​</a></h2>
<p>When working with multiple repositories that use the same identity names (like <code>core-root/terraform</code>),
credentials from one repository could leak into another. This was especially problematic for
consultants and engineers managing infrastructure across multiple customer environments.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="what-changed">What Changed<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/auth-realm-isolation#what-changed" class="hash-link" aria-label="Direct link to What Changed" title="Direct link to What Changed" translate="no">​</a></h2>
<p>Credentials are now stored in realm-scoped paths and keyring keys:</p>
<div class="language-text codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-text codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token plain"># Before</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">~/.config/atmos/aws/{provider}/credentials</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">Keyring: {identity}</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"># After</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">~/.config/atmos/{realm}/aws/{provider}/credentials</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">Keyring: atmos:{realm}:{identity}</span><br></span></code></pre></div></div>
<p>The realm is computed automatically based on your project location, ensuring each
repository has isolated credentials.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="realm-computation">Realm Computation<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/auth-realm-isolation#realm-computation" class="hash-link" aria-label="Direct link to Realm Computation" title="Direct link to Realm Computation" translate="no">​</a></h2>
<p>Realms are determined by priority:</p>
<ol>
<li class=""><strong>Environment variable</strong>: <code>ATMOS_AUTH_REALM</code> - explicit override</li>
<li class=""><strong>Config file</strong>: <code>auth.realm</code> in atmos.yaml - per-project setting</li>
<li class=""><strong>Auto-generated</strong>: SHA256 hash of the atmos.yaml path (first 8 characters)</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="viewing-your-realm">Viewing Your Realm<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/auth-realm-isolation#viewing-your-realm" class="hash-link" aria-label="Direct link to Viewing Your Realm" title="Direct link to Viewing Your Realm" translate="no">​</a></h2>
<p>The <code>atmos auth whoami</code> and <code>atmos auth login</code> commands now display the active realm:</p>
<div class="language-text codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-text codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos auth login --identity my-identity</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">Realm     a1b2c3d4 (auto)</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">Provider  aws-sso</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">Identity  my-identity</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">Region    us-east-1</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="new-logout-options">New Logout Options<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/auth-realm-isolation#new-logout-options" class="hash-link" aria-label="Direct link to New Logout Options" title="Direct link to New Logout Options" translate="no">​</a></h2>
<p>A new <code>--all-realms</code> flag allows logging out from all realms across all repositories:</p>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Logout from current realm only</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos auth </span><span class="token builtin class-name" style="color:rgb(255, 203, 139)">logout</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--all</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Logout from ALL realms (all repositories)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos auth </span><span class="token builtin class-name" style="color:rgb(255, 203, 139)">logout</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--all</span><span class="token plain"> --all-realms</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="breaking-change">Breaking Change<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/auth-realm-isolation#breaking-change" class="hash-link" aria-label="Direct link to Breaking Change" title="Direct link to Breaking Change" translate="no">​</a></h2>
<p>This is a <strong>breaking change</strong>. Existing credentials will not be found after updating
because they were stored in the old path format.</p>
<p><strong>Action required</strong>: Run <code>atmos auth login</code> after updating to re-authenticate.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="get-involved">Get Involved<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/auth-realm-isolation#get-involved" class="hash-link" aria-label="Direct link to Get Involved" title="Direct link to Get Involved" translate="no">​</a></h2>
<p>Found an issue or have a feature request?
<a href="https://github.com/cloudposse/atmos/issues" target="_blank" rel="noopener noreferrer" class="">Open an issue on GitHub</a>.</p>]]></content:encoded>
            <category>Feature</category>
            <category>Breaking Change</category>
        </item>
        <item>
            <title><![CDATA[Workflow Environment Variables]]></title>
            <link>https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/workflow-environment-variables</link>
            <guid>https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/workflow-environment-variables</guid>
            <pubDate>Mon, 02 Feb 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Workflows now support environment variables at both workflow and step levels with hierarchical merging.]]></description>
            <content:encoded><![CDATA[<p>Workflows now support environment variables at both workflow and step levels with hierarchical merging.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="what-changed">What Changed<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/workflow-environment-variables#what-changed" class="hash-link" aria-label="Direct link to What Changed" title="Direct link to What Changed" translate="no">​</a></h2>
<p>You can now define environment variables in workflow YAML files at two levels:</p>
<ul>
<li class=""><strong>Workflow-level</strong>: Applied to all steps in the workflow</li>
<li class=""><strong>Step-level</strong>: Applied to a specific step, overriding workflow-level variables with the same key</li>
</ul>
<p>Environment variables are merged hierarchically, with step-level values taking precedence over workflow-level values for the same keys.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="example">Example<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/workflow-environment-variables#example" class="hash-link" aria-label="Direct link to Example" title="Direct link to Example" translate="no">​</a></h2>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token key atrule">workflows</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">deploy</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">description</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> Deploy with custom environment</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">env</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">FOO</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> bar</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">BAZ</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> workflow</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">value</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">steps</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> </span><span class="token key atrule">command</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> echo "$FOO </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> $BAZ"</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> shell</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">env</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">          </span><span class="token key atrule">BAZ</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> step</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">value</span><br></span></code></pre></div></div>
<p>Running this workflow outputs <code>bar - step-value</code> because:</p>
<ul>
<li class=""><code>FOO</code> is inherited from the workflow level (<code>bar</code>)</li>
<li class=""><code>BAZ</code> is overridden by the step level (<code>step-value</code>)</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="why-this-matters">Why This Matters<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/workflow-environment-variables#why-this-matters" class="hash-link" aria-label="Direct link to Why This Matters" title="Direct link to Why This Matters" translate="no">​</a></h2>
<p>This feature enables several use cases:</p>
<ul>
<li class=""><strong>Consistent environment setup</strong>: Define common variables once at the workflow level</li>
<li class=""><strong>Step-specific overrides</strong>: Override variables for specific steps without duplicating configuration</li>
<li class=""><strong>Integration with external tools</strong>: Pass environment variables to shell commands and Terraform</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="environment-variable-precedence">Environment Variable Precedence<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/workflow-environment-variables#environment-variable-precedence" class="hash-link" aria-label="Direct link to Environment Variable Precedence" title="Direct link to Environment Variable Precedence" translate="no">​</a></h2>
<p>The full precedence order (lowest to highest priority):</p>
<ol>
<li class="">System environment variables</li>
<li class="">Global env from <code>atmos.yaml</code></li>
<li class="">Workflow-level <code>env</code></li>
<li class="">Step-level <code>env</code></li>
<li class="">Auth identity env vars (if <code>identity</code> is specified)</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="get-involved">Get Involved<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/workflow-environment-variables#get-involved" class="hash-link" aria-label="Direct link to Get Involved" title="Direct link to Get Involved" translate="no">​</a></h2>
<p>Have questions or feedback? Join us on <a href="https://cloudposse.com/slack" target="_blank" rel="noopener noreferrer" class="">Slack</a> or open an issue on <a href="https://github.com/cloudposse/atmos/issues" target="_blank" rel="noopener noreferrer" class="">GitHub</a>.</p>]]></content:encoded>
            <category>Feature</category>
        </item>
        <item>
            <title><![CDATA[Ansible Component Support]]></title>
            <link>https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/ansible-component-support</link>
            <guid>https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/ansible-component-support</guid>
            <pubDate>Thu, 29 Jan 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Atmos now supports Ansible as a first-class component type, enabling unified orchestration of infrastructure provisioning (Terraform) and configuration management (Ansible) from the same stack manifests.]]></description>
            <content:encoded><![CDATA[<p>Atmos now supports Ansible as a first-class component type, enabling unified orchestration of infrastructure provisioning (Terraform) and configuration management (Ansible) from the same stack manifests.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="what-changed">What Changed<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/ansible-component-support#what-changed" class="hash-link" aria-label="Direct link to What Changed" title="Direct link to What Changed" translate="no">​</a></h2>
<p>Ansible joins Terraform, Helmfile, and Packer as a native component type in Atmos:</p>
<ul>
<li class=""><strong>New <code>atmos ansible playbook</code> command</strong> executes Ansible playbooks with stack-based configuration</li>
<li class=""><strong>New <code>atmos ansible version</code> command</strong> displays Ansible version information</li>
<li class=""><strong>Full-stack processor support</strong> including inheritance, vars, env, settings, and auth sections</li>
<li class=""><strong>Automatic variable file generation</strong> passed to Ansible via <code>--extra-vars @&lt;varfile&gt;</code></li>
<li class=""><strong>Native flag passthrough</strong> via <code>--</code> separator for any Ansible option</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="why-this-matters">Why This Matters<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/ansible-component-support#why-this-matters" class="hash-link" aria-label="Direct link to Why This Matters" title="Direct link to Why This Matters" translate="no">​</a></h2>
<p>Infrastructure automation typically involves two layers: provisioning (creating resources) and configuration (setting up software). Teams often use Terraform for the first and Ansible for the second, but manage them with separate tooling and workflows.</p>
<p>With Ansible component support, you can:</p>
<ul>
<li class=""><strong>Manage both layers from one tool</strong> with consistent patterns</li>
<li class=""><strong>Share variables between Terraform and Ansible</strong> components in the same stack</li>
<li class=""><strong>Apply the same inheritance model</strong> to Ansible playbooks</li>
<li class=""><strong>Use familiar Atmos workflows</strong> for configuration management</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="how-to-use-it">How to Use It<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/ansible-component-support#how-to-use-it" class="hash-link" aria-label="Direct link to How to Use It" title="Direct link to How to Use It" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="configuration">Configuration<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/ansible-component-support#configuration" class="hash-link" aria-label="Direct link to Configuration" title="Direct link to Configuration" translate="no">​</a></h3>
<p>Add Ansible configuration to <code>atmos.yaml</code>:</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token key atrule">components</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">ansible</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">base_path</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"components/ansible"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">command</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"ansible-playbook"</span><span class="token plain">      </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># optional</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="stack-manifest">Stack Manifest<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/ansible-component-support#stack-manifest" class="hash-link" aria-label="Direct link to Stack Manifest" title="Direct link to Stack Manifest" translate="no">​</a></h3>
<p>Define Ansible components alongside Terraform:</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token key atrule">components</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">terraform</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">vpc</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">vars</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">cidr_block</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"10.0.0.0/16"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">ansible</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">webserver</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">vars</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">app_name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> myapp</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">app_port</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">8080</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">settings</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">ansible</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">          </span><span class="token key atrule">playbook</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> site.yml</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">          </span><span class="token key atrule">inventory</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> inventory/production</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="commands">Commands<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/ansible-component-support#commands" class="hash-link" aria-label="Direct link to Commands" title="Direct link to Commands" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Show Ansible version</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos ansible version</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Run playbook with stack settings</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos ansible playbook webserver </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--stack</span><span class="token plain"> prod</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Override playbook and inventory</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos ansible playbook webserver </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">-s</span><span class="token plain"> prod </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">-p</span><span class="token plain"> deploy.yml </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">-i</span><span class="token plain"> hosts.ini</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Pass native Ansible flags</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos ansible playbook webserver </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">-s</span><span class="token plain"> prod -- </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--check</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--verbose</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Use aliases</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos an pb webserver </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">-s</span><span class="token plain"> prod</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="get-involved">Get Involved<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/ansible-component-support#get-involved" class="hash-link" aria-label="Direct link to Get Involved" title="Direct link to Get Involved" translate="no">​</a></h2>
<ul>
<li class="">Report issues or request features on <a href="https://github.com/cloudposse/atmos/issues" target="_blank" rel="noopener noreferrer" class="">GitHub</a></li>
<li class="">Join the discussion in <a href="https://slack.cloudposse.com/" target="_blank" rel="noopener noreferrer" class="">Slack</a></li>
</ul>]]></content:encoded>
            <category>Feature</category>
        </item>
        <item>
            <title><![CDATA[Artifactory Store Fix and Documentation Corrections]]></title>
            <link>https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/artifactory-store-fix</link>
            <guid>https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/artifactory-store-fix</guid>
            <pubDate>Thu, 29 Jan 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Fixed an issue where retrieving values from Artifactory stores would fail when using nested paths, and corrected store documentation to accurately reflect supported backends.]]></description>
            <content:encoded><![CDATA[<p>Fixed an issue where retrieving values from Artifactory stores would fail when using nested paths, and corrected store documentation to accurately reflect supported backends.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="what-changed">What Changed<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/artifactory-store-fix#what-changed" class="hash-link" aria-label="Direct link to What Changed" title="Direct link to What Changed" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="artifactory-store-fix">Artifactory Store Fix<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/artifactory-store-fix#artifactory-store-fix" class="hash-link" aria-label="Direct link to Artifactory Store Fix" title="Direct link to Artifactory Store Fix" translate="no">​</a></h3>
<p>When using Artifactory as a store backend with nested directory structures, retrieving values would fail with a "file not found" error even though the data existed. This happened because files were being downloaded to unexpected locations within temporary directories.</p>
<p>For example, storing a value at <code>dev/myapp/private_ip</code> and then trying to retrieve it would fail because Atmos was looking for the file in the wrong place.</p>
<p>This is now fixed. Retrieving values from Artifactory works correctly regardless of how deeply nested your paths are.</p>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="documentation-corrections">Documentation Corrections<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/artifactory-store-fix#documentation-corrections" class="hash-link" aria-label="Direct link to Documentation Corrections" title="Direct link to Documentation Corrections" translate="no">​</a></h3>
<p>The store documentation had several issues that could cause confusion:</p>
<ul>
<li class=""><strong>Wrong field names</strong>: Examples showed <code>backend</code> and <code>config</code> instead of the correct <code>type</code> and <code>options</code></li>
<li class=""><strong>Wrong store type names</strong>: Examples showed <code>aws/ssm</code> instead of the correct <code>aws-ssm-parameter-store</code></li>
<li class=""><strong>Non-existent backends</strong>: Vault and AWS Secrets Manager were documented but aren't actually implemented</li>
<li class=""><strong>Missing backends</strong>: Azure Key Vault and Google Secret Manager were implemented but not documented</li>
<li class=""><strong>Artifactory setup</strong>: Added guidance on using Generic repository type in JFrog Artifactory</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="why-this-matters">Why This Matters<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/artifactory-store-fix#why-this-matters" class="hash-link" aria-label="Direct link to Why This Matters" title="Direct link to Why This Matters" translate="no">​</a></h2>
<p>If you've been struggling to get Artifactory working as a store backend, especially with nested paths, this fix should resolve those issues. And if you've been confused by store configuration examples that didn't work, the documentation now reflects the actual supported backends and correct configuration format.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="get-involved">Get Involved<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/artifactory-store-fix#get-involved" class="hash-link" aria-label="Direct link to Get Involved" title="Direct link to Get Involved" translate="no">​</a></h2>
<p>Have questions or feedback? Join us on <a href="https://slack.cloudposse.com/" target="_blank" rel="noopener noreferrer" class="">Slack</a> or open an issue on <a href="https://github.com/cloudposse/atmos/issues" target="_blank" rel="noopener noreferrer" class="">GitHub</a>.</p>]]></content:encoded>
            <category>Bug Fix</category>
            <category>Documentation</category>
        </item>
        <item>
            <title><![CDATA[Remote Stack Imports]]></title>
            <link>https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/remote-stack-imports</link>
            <guid>https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/remote-stack-imports</guid>
            <pubDate>Thu, 29 Jan 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Atmos now supports importing stack configurations from remote URLs. Reference shared configurations from GitHub, S3, GCS, or any HTTP endpoint directly in your stack files.]]></description>
            <content:encoded><![CDATA[<p>Atmos now supports importing stack configurations from remote URLs. Reference shared configurations from GitHub, S3, GCS, or any HTTP endpoint directly in your stack files.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="what-changed">What Changed<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/remote-stack-imports#what-changed" class="hash-link" aria-label="Direct link to What Changed" title="Direct link to What Changed" translate="no">​</a></h2>
<p>Stack imports now support remote URLs alongside local file paths. The import syntax remains the same, but Atmos detects remote URLs and downloads them automatically using go-getter:</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token key atrule">import</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Local import - works as before</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> catalog/base</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Remote imports - NEW</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> https</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">//raw.githubusercontent.com/cloudposse/atmos/main/stacks/catalog/shared.yaml</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> github.com/myorg/shared</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">config//stacks/defaults.yaml</span><span class="token punctuation" style="color:rgb(199, 146, 234)">?</span><span class="token plain">ref=v1.0.0</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> s3</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">https</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">//s3.amazonaws.com/my</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">bucket/configs/base.yaml</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="why-this-matters">Why This Matters<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/remote-stack-imports#why-this-matters" class="hash-link" aria-label="Direct link to Why This Matters" title="Direct link to Why This Matters" translate="no">​</a></h2>
<p>Teams often need to share stack configurations across multiple repositories or organizations. Previously, this required vendoring shared configs or maintaining copies in each repository. Now you can reference shared configurations directly from their source:</p>
<ul>
<li class=""><strong>Central catalogs</strong>: Maintain organization-wide defaults in a single repository</li>
<li class=""><strong>Version pinning</strong>: Reference specific versions with Git refs (<code>?ref=v1.0.0</code>)</li>
<li class=""><strong>Cross-team sharing</strong>: Import configurations from other teams without duplication</li>
<li class=""><strong>External standards</strong>: Pull in compliance or security baselines from external sources</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="supported-url-formats">Supported URL Formats<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/remote-stack-imports#supported-url-formats" class="hash-link" aria-label="Direct link to Supported URL Formats" title="Direct link to Supported URL Formats" translate="no">​</a></h2>
<p>Remote imports leverage <a href="https://github.com/hashicorp/go-getter" target="_blank" rel="noopener noreferrer" class="">go-getter</a> for downloading. Here are some common formats:</p>
<table><thead><tr><th>Format</th><th>Example</th></tr></thead><tbody><tr><td>HTTP</td><td><code>http://example.com/config.yaml</code></td></tr><tr><td>HTTPS</td><td><code>https://example.com/config.yaml</code></td></tr><tr><td>GitHub</td><td><code>github.com/org/repo//path/to/file.yaml</code></td></tr><tr><td>Git with ref</td><td><code>github.com/org/repo//path?ref=v1.0.0</code></td></tr><tr><td>S3</td><td><code>s3::https://s3.amazonaws.com/bucket/key.yaml</code></td></tr><tr><td>GCS</td><td><code>gcs::gs://bucket/path/config.yaml</code></td></tr><tr><td>Git SSH</td><td><code>git@github.com:org/repo.git//path/to/file.yaml</code></td></tr></tbody></table>
<p>See the <a href="https://github.com/hashicorp/go-getter#url-format" target="_blank" rel="noopener noreferrer" class="">go-getter documentation</a> for additional supported formats.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="how-to-use-it">How to Use It<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/remote-stack-imports#how-to-use-it" class="hash-link" aria-label="Direct link to How to Use It" title="Direct link to How to Use It" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="basic-remote-import">Basic Remote Import<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/remote-stack-imports#basic-remote-import" class="hash-link" aria-label="Direct link to Basic Remote Import" title="Direct link to Basic Remote Import" translate="no">​</a></h3>
<p>Reference a remote configuration directly:</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># stacks/deploy/production.yaml</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">import</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> https</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">//raw.githubusercontent.com/myorg/shared</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">configs/main/base.yaml</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">vars</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">environment</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> production</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">components</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">terraform</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">vpc</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">vars</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">cidr_block</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"10.0.0.0/16"</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="version-pinned-imports">Version-Pinned Imports<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/remote-stack-imports#version-pinned-imports" class="hash-link" aria-label="Direct link to Version-Pinned Imports" title="Direct link to Version-Pinned Imports" translate="no">​</a></h3>
<p>Pin imports to specific Git refs for reproducibility:</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token key atrule">import</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Pin to a specific tag</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> github.com/myorg/shared</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">configs//catalog/defaults.yaml</span><span class="token punctuation" style="color:rgb(199, 146, 234)">?</span><span class="token plain">ref=v2.1.0</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Pin to a specific commit</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> github.com/myorg/shared</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">configs//catalog/security.yaml</span><span class="token punctuation" style="color:rgb(199, 146, 234)">?</span><span class="token plain">ref=abc123</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="skip-missing-remote-imports">Skip Missing Remote Imports<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/remote-stack-imports#skip-missing-remote-imports" class="hash-link" aria-label="Direct link to Skip Missing Remote Imports" title="Direct link to Skip Missing Remote Imports" translate="no">​</a></h3>
<p>Use <code>skip_if_missing</code> for optional remote configurations:</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token key atrule">import</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> </span><span class="token key atrule">path</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"https://internal.example.com/optional-overrides.yaml"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">skip_if_missing</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token boolean important" style="color:rgb(255, 88, 116)">true</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="example">Example<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/remote-stack-imports#example" class="hash-link" aria-label="Direct link to Example" title="Direct link to Example" translate="no">​</a></h2>
<p>We've added a complete example demonstrating remote stack imports:</p>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token builtin class-name" style="color:rgb(255, 203, 139)">cd</span><span class="token plain"> examples/remote-stack-imports</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos describe stacks</span><br></span></code></pre></div></div>
<p>The example shows both local and remote imports working together, with proper configuration merging and inheritance.</p>
<div class="theme-admonition theme-admonition-note admonition_cbIa alert alert--secondary"><div class="admonitionHeading_squj"><span class="admonitionIcon_bxkr"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_HCPN"><p>This feature was previously documented but not yet implemented. We apologize for this oversight. Remote stack imports now work as documented, exactly like <a class="" href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/cli/configuration/imports">remote imports for atmos.yaml</a>.</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="get-involved">Get Involved<a href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/remote-stack-imports#get-involved" class="hash-link" aria-label="Direct link to Get Involved" title="Direct link to Get Involved" translate="no">​</a></h2>
<p>We'd love to hear how you're using remote stack imports. Please <a href="https://github.com/cloudposse/atmos/issues" target="_blank" rel="noopener noreferrer" class="">open an issue</a> if you have questions or encounter edge cases.</p>
<p>For more details, see the <a class="" href="https://pr-2037.atmos-docs.ue2.dev.plat.cloudposse.org/stacks/imports">Stack Imports</a> documentation.</p>]]></content:encoded>
            <category>Feature</category>
        </item>
    </channel>
</rss>