cloudposse / cloudposse/atmos

Claude Code plugin `atmos@cloudposse` can never be updated: `plugin.json` version is permanently `1.0.0`

Open
#2,895 1 comment 0 reactions 0 assignees View on GitHub
Dominant language
Go
Stars
1.4k
Forks
175
Avg merge
2d 3h
Merged PRs (30d)
134

Description

### Describe the Bug

The Claude Code plugin `atmos@cloudposse` can never be updated, because `agent-skills/.claude-plugin/plugin.json` has declared `"version": "1.0.0"` at every commit that has ever touched it. `claude plugin update` compares declared versions, so an install pinned to an old commit reports "already at the latest version (1.0.0)" indefinitely, even when the bundled skill set has changed substantially.

In my case the plugin was installed on 2026-03-16 at commit `6d1f475` and has been serving **21 skills** ever since, while `agent-skills/skills/` at HEAD (`3ce4349`) contains **52 skills**. Refreshing the marketplace does not help — it updates the marketplace clone but leaves the plugin cache pinned, and `claude plugin update` still declines to act.

The 31 skills that never arrived include several for current features: `atmos-ci`, `atmos-pro`, `atmos-modernization`, `atmos-hooks`, `atmos-secrets`, `atmos-migration`, `atmos-lint`, `atmos-steps`, `atmos-terraform-state-migrations`, `atmos-version`, `atmos-sbom`, and `atmos-scaffold`.

The stale install also still ships `atmos-gitops`, which was split into `atmos-ci` / `atmos-git` / `atmos-pro` in #2493 (2026-07-09). So plugin users are being served a skill that no longer exists upstream, and are missing its three replacements.

`version` has been constant across every commit that modified the manifest:

| Commit | Date | PR | `plugin.json` version | Skills |
|---|---|---|---|---|
| `8e95b5b` | 2026-03-03 | #2121 | `1.0.0` | 21 |
| `b132ba7` | 2026-03-09 | #2030 | `1.0.0` | 21 |
| `c1fd583` | 2026-07-08 | #2672 | `1.0.0` | 25 |
| `c839ac3` | 2026-07-09 | #2493 | `1.0.0` | 47 |
| `b0929ee` | 2026-08-04 | #2756 | `1.0.0` | 51 |

Skills kept landing after the last `plugin.json` edit without any manifest change at all — `b1124da` (#2534) added `atmos-terraform-state-migrations`, bringing `agent-skills/skills/` to its current 52 at HEAD (`3ce4349`).

Notably, `git diff 6d1f475 HEAD -- agent-skills/.claude-plugin/plugin.json` shows `description` and `keywords` were both revised to advertise the newer skills, while `version` was left untouched — so the manifest is being maintained, just not versioned.

There also appear to be no plugin release tags: `git ls-remote --tags` lists only CLI releases (`v1.95.0` … `v1.99.0`), nothing in the `atmos--vX.Y.Z` form that `claude plugin tag` produces.

This only affects the Claude Code plugin distribution path. The embedded-binary path is unaffected — `atmos ai skill install` correctly installed all 52 skills from atmos 1.225.0, and I verified those files are byte-identical to `agent-skills/skills/` at HEAD.

### Expected Behavior

`claude plugin update atmos@cloudposse` should pick up new and changed skills.

Concretely, `agent-skills/.claude-plugin/plugin.json` should get a `version` bump whenever the bundled skills change — ideally wired into the release process, since the CLI itself is already versioned per release. Bumping `version` in `.claude-plugin/marketplace.json`'s plugin entry may be needed too, so the two agree (`claude plugin tag` appears to validate exactly that).

If plugin releases are intended to be pinned to a commit rather than versioned, then documenting uninstall + reinstall as the supported refresh path in [`agent-skills.mdx`](https://atmos.tools/ai/agent-skills) would at least make the behavior discoverable. That page currently documents install and uninstall but has no update section, and says "Skills are updated with each Atmos release" — which holds for the embedded binary, but not for the plugin cache.

### Steps to Reproduce

1. Install the plugin, then let time pass so upstream `agent-skills/skills/` gains skills (or install from an older commit to simulate it).
2. Refresh the marketplace and attempt an update:

```console
$ claude plugin marketplace update cloudposse
✔ Successfully updated marketplace: cloudposse

$ git -C ~/.claude/plugins/marketplaces/cloudposse log -1 --format='%h %cs'
3ce43492 2026-08-05

$ claude plugin update atmos@cloudposse --scope project
Checking for updates for plugin "atmos@cloudposse" at project scope…
✔ atmos is already at the latest version (1.0.0).
```

3. Observe the install is still pinned to the old commit, with the old skill set:

```console
$ python3 -c "import json;print(json.load(open('$HOME/.claude/plugins/installed_plugins.json'))['plugins']['atmos@cloudposse'][0]['gitCommitSha'])"
6d1f475f3500dae60665d304a38a7ba3a8c6bff1

$ ls ~/.claude/plugins/cache/cloudposse/atmos/1.0.0/skills | wc -l
21

$ ls ~/.claude/plugins/marketplaces/cloudposse/agent-skills/skills | wc -l
52
```

The marketplace clone is current and the cache is five months stale, with no supported command to reconcile them.

### Screenshots

Size drift on a skill present in both sets, showing the cached copy is not merely missing files but also serving outdated content:

```console
$ wc -c ~/.claude/plugins/cache/cloudposse/atmos/1.0.0/skills/atmos-terraform/SKILL.md
14786
$ wc -c ~/.claude/plugins/marketplaces/cloudposse/agent-skills/skills/atmos-terraform/SKILL.md
18544
```

### Environment

- OS: macOS 26.6 (darwin/arm64)
- Atmos: 1.225.0
- Claude Code: 2.1.223
- Plugin: `atmos@cloudposse`, scope `project`, declared version `1.0.0`, `gitCommitSha` `6d1f475f3500dae60665d304a38a7ba3a8c6bff1`, installed 2026-03-16
- Marketplace clone: `3ce43492` (2026-08-05)

### Additional Context

Because the cache path is version-scoped (`cache/cloudposse/atmos/1.0.0/`), a `version` bump should also cause a clean re-materialization into a new directory rather than an in-place overwrite.

Related: #2628 (`atmos ai skill install` not distributing to `.github/skills/` for VS Code) touched the same distribution area, but concerned the embedded-binary path rather than plugin versioning.

I could not find an existing issue for this — searched issues and PRs for `plugin version`, `claude-plugin`, `marketplace`, `agent-skills`, `plugin.json`, and `skill install`. Happy to open a PR bumping the manifest version(s) if that is the direction you'd prefer.

Contributor guide

Open the contributing guide

Research direction

Start with agent-skills/.claude-plugin/plugin.json and the plugin entry in .claude-plugin/marketplace.json, then inspect the release process and the version behavior shown in the reproduction commands. Check agent-skills.mdx for the current install guidance. Done means plugin updates can retrieve changed skills, manifest versions agree if required, and the supported refresh path is documented if releases remain commit-pinned.

Written by the indexing model from the issue text.

Assessment

Tech stack
git, json
Domain
cli, release, tooling
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
55/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.