Change Documentation Writer
jsmastery-pro/skills
Writes PR descriptions, changelog entries, release notes and postmortems from the actual commits and diff, and saves each one in the right place.
PR workflow: pick the right semver label (no-release / patch / minor / major), decide when to add a changelog blog post, when to update the roadmap, and how to do each correctly.
$ npx skills add cloudposse/atmos --skill pull-request -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install cloudposse/atmos pull-request --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/cloudposse/atmos.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/pull-request .claude/skills/pull-request && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "pull-request" agent skill from https://github.com/cloudposse/atmos/tree/main/.claude/skills/pull-request into .claude/skills/pull-request/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pull-request", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/cloudposse/atmos/tree/main/.claude/skills/pull-requestType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add cloudposse/atmos --skill pull-request -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install cloudposse/atmos pull-request --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/cloudposse/atmos.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/pull-request .agents/skills/pull-request && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "pull-request" agent skill from https://github.com/cloudposse/atmos/tree/main/.claude/skills/pull-request into .agents/skills/pull-request/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pull-request", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add cloudposse/atmos --skill pull-request -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install cloudposse/atmos pull-request --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/cloudposse/atmos.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/pull-request .cursor/skills/pull-request && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "pull-request" agent skill from https://github.com/cloudposse/atmos/tree/main/.claude/skills/pull-request into .cursor/skills/pull-request/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pull-request", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/cloudposse/atmos.git --path .claude/skills/pull-request--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add cloudposse/atmos --skill pull-request -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install cloudposse/atmos pull-request --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/cloudposse/atmos.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/pull-request .gemini/skills/pull-request && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "pull-request" agent skill from https://github.com/cloudposse/atmos/tree/main/.claude/skills/pull-request into .gemini/skills/pull-request/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pull-request", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install cloudposse/atmos pull-requestInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add cloudposse/atmos --skill pull-request -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/cloudposse/atmos.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/pull-request .github/skills/pull-request && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "pull-request" agent skill from https://github.com/cloudposse/atmos/tree/main/.claude/skills/pull-request into .github/skills/pull-request/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pull-request", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add cloudposse/atmos --skill pull-request -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install cloudposse/atmos pull-request --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/cloudposse/atmos.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/pull-request .opencode/skills/pull-request && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "pull-request" agent skill from https://github.com/cloudposse/atmos/tree/main/.claude/skills/pull-request into .opencode/skills/pull-request/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pull-request", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
pull-requestPR workflow: pick the right semver label (no-release / patch / minor / major), decide when to add a changelog blog post, when to update the roadmap, and how to do each correctly.
Pull Request is an agent skill from cloudposse/atmos. PR workflow: pick the right semver label (no-release / patch / minor / major), decide when to add a changelog blog post, when to update the roadmap, and how to do each correctly. Invoke before opening a PR or when touching an existing PR's release docs.
Its SKILL.md is about 3.5k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Development, covering Blog and article writing, Pull requests and Technical writing. The repository describes itself as: Atmos is the open-source runtime for infrastructure — it builds, authenticates, and ships Terraform, OpenTofu, Packer, Ansible, Kubernetes, Helm, and containers the same way on… The licence is Apache-2.0.
3 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit bbe58a6. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
ghgitnpmFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use gh, git and npm, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Pull Request loads about 3.5k tokens when it runs. Until then it costs about 67 tokens; SKILL.md has 1,723 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from cloudposse/atmos at commit bbe58a6, republished under its Apache-2.0 licence (© cloudposse). 1,723 words, ~3,472 tokens.
.claude/skills/pull-request/SKILL.md (or your agent's skills folder).Use this skill every time you open or update a PR. It encodes three policies that the Atmos repo enforces via CI and that the team has been burned by repeatedly:
PR Semver Labels CI check.minor and major PRs require a blog post AND a roadmap update. The Check for changelog and roadmap updates workflow gates merging on both.featured[] in the roadmap is curated. Never auto-promote a shipped milestone into featured[] — only the user decides.If you violate any of these, CI fails and the PR can't merge. Follow this skill across both phases: complete the pre-push checklist before git push, then immediately work through the post-push / PR checklist (open the PR, apply the label, monitor CI).
The Atmos repo has four mutually exclusive release labels (plus other category labels that don't affect release docs):
| Label | When | CI requires blog + roadmap? |
|---|---|---|
no-release | Internal refactor, new internal helper, dependency bump with zero user-visible behavior, docs fixes | No |
patch | Bug fix, performance fix, error-message improvement, small UX polish — user-visible but not a feature | No |
minor | New user-visible feature, new flag, new command, new config option, default flip that users see | YES |
major | Breaking change: removed/renamed flag, schema migration, CLI behavior reversal | YES |
Ask, in order:
no-release. This is the most common case for foundation/plumbing PRs.major. Document the migration in the blog post.minor. Write a blog post.patch. No blog post required.Common mistake: labeling a plumbing PR as minor because it's part of a larger feature. The label is per-PR, not per-feature. If a five-PR stack adds one user-visible feature, only the final PR that wires it up gets minor — the four foundation PRs are no-release.
Another common mistake: flipping a default value and labeling patch because "it's just a default." If users see different behavior on upgrade, that's minor (or major if it could break their workflow).
After opening the PR, immediately:
gh pr edit <pr-number> --add-label <label>Don't wait for CI to complain — you already know the label.
If you're opening multiple related PRs that are foundation work, label them all no-release up front:
for pr in 2417 2418 2419; do gh pr edit "$pr" --add-label no-release; doneChanging a label later requires removing the old one first. --add-label doesn't replace — running --add-label minor on a PR already labeled patch leaves both attached, which violates the "exactly one semver label" invariant and fails the PR Semver Labels CI gate:
# Wrong — leaves both labels:
gh pr edit <pr-number> --add-label minor
# Right — remove the old semver label first, then add the new one:
gh pr edit <pr-number> --remove-label patch --add-label minorgh pr edit accepts --remove-label and --add-label in the same invocation, so the relabel is atomic.
Required only when the PR is labeled minor or major. CI checks for a new .mdx file under website/blog/. If you have the wrong label, fix the label rather than writing a blog post you don't need.
For the template, tags, authors, and style rules, use the changelog skill — don't re-derive them here.
For what does NOT get a post (internal-only, zero-user-impact refactors), the roadmap skill owns that
invariant. Default to "no blog post" when in doubt and let the label decision tree above settle it.
Required only when the PR is labeled minor or major. CI checks for changes to website/src/data/roadmap.js.
Always delegate the edit to the roadmap skill (.claude/skills/roadmap/SKILL.md) — invoke via Skill with skill: "roadmap". It owns the milestone schema, the featured[]-is-curated rule, the no-changelog-for-internal-refactors invariant, and progress-percentage math. Do not edit roadmap.js directly from this skill; invoke the roadmap skill and let it do the work.
If your PR is no-release or patch, don't touch the roadmap at all — CI doesn't require it for those labels, and adding noise milestones dilutes the roadmap's signal value.
Every commit on the PR must be GPG- or SSH-signed. Branch protection on main rejects merges of any PR containing unsigned commits — there is no override. If you push unsigned commits, you will rewrite history later to re-sign them, which is painful for reviewers (force-push invalidates their in-progress reviews).
Get this right the first time:
Verify your local git is configured to sign automatically before your first commit:
git config --get commit.gpgsign # should print: true
git config --get gpg.format # "openpgp" or "ssh"
git config --get user.signingkey # your signing key If commit.gpgsign is not true, set it for the repo:
git config commit.gpgsign trueAfter your first commit, verify it's signed:
git log --show-signature -1 Look for gpg: Good signature from ... or Good "git" signature for .... If you see "no signature found", stop and fix your git config before pushing.
Never bypass signing with --no-gpg-sign or -c commit.gpgsign=false even temporarily. The CLAUDE.md rules forbid this, and the resulting commit cannot be merged.
If you discover unsigned commits already on the branch:
# For the last N commits (interactive rebase, sign each):
git rebase --exec 'git commit --amend --no-edit -S' -i HEAD~N
git push --force-with-leaseAlways use --force-with-lease (not --force) to avoid clobbering work from other sessions on the same branch.
Run through these in order before git push. Every item has burned someone before.
no-release for plumbing.minor or major:website/blog/YYYY-MM-DD-<slug>.mdx.website/blog/tags.yml and pick a defined tag.website/blog/authors.yml for your handle; add yourself if missing.CastEmbed) if one exists or was recorded for this PR.roadmap skill (do not touch featured[]).cd website && npm run build.Once the branch is on GitHub, finish the workflow:
gh pr create body formatting.gh pr edit <num> --add-label <label>.Closes #<issue> in the PR body so it auto-closes on merge.gh pr checks <num>. If PR Semver Labels, Check for changelog and roadmap updates, or signed-commit verification fails, fix it before requesting review.coderabbit-review agent via Agent with subagent_type: "coderabbit-review" — it knows how to parse CR threads, verify each finding against current code, and skip stale or wrong ones with explanation instead of silently ignoring them.gh pr create --body and backtick escapingDo NOT escape backticks (\`) inside a single-quoted heredoc passed to gh pr create --body. The single-quoted form preserves the backslashes literally, so GitHub renders them as escaped characters instead of rendering the code spans. The result is a PR body full of \atmos.yaml`instead ofatmos.yaml`.
Wrong (produces visible ``` in the PR body):
gh pr create --body "$(cat <<'EOF'
This file is named \`atmos.yaml\`.
EOF
)"Right — write a .md file and pass it with --body-file:
cat > /tmp/pr-body.md <<'EOF'
This file is named `atmos.yaml`.
EOF
gh pr create --body-file /tmp/pr-body.md(Alternatively, the single-quoted heredoc already disables shell expansion, so plain unescaped backticks work — but --body-file is more robust because file content survives shell quoting unchanged.)
If a PR has already been opened without a label, or with the wrong one:
Run gh pr view <num> --json labels to see what's already attached. Look for any of no-release / patch / minor / major — at most one should remain.
Apply the decision tree to pick the correct label.
If the PR has no semver label yet: add it.
gh pr edit <num> --add-label <label>If the PR has a different semver label already: remove the old one and add the new one in a single invocation, so you never have two semver labels at once (which fails CI):
gh pr edit <num> --remove-label <old-label> --add-label <new-label>If you changed from no-release/patch to minor/major, you now owe a blog post and roadmap update — add them in a new commit on the same branch.
If you changed from minor/major to a lower label, you can (optionally) remove the blog post and roadmap update in a new commit, but it's also fine to leave them.
This skill orchestrates the PR workflow but delegates the deep domain work to dedicated skills and agents. Use them — don't re-derive their rules here.
changelog skill — invoke when writing or editing a website/blog/*.mdx post. Owns the template, tags, authors, and style rules. Invoke via Skill with skill: "changelog".roadmap skill — invoke when you need to edit website/src/data/roadmap.js. Owns the milestone schema, featured[] curation rule, no-changelog-for-internal-refactors invariant, and progress-percentage math. Invoke via Skill with skill: "roadmap".editions skill — invoke when a PR changes what a config key defaults to, or changes what an existing stored value effectively means (even via a brand-new key). Decides whether pkg/edition/journal.go needs a KindValue entry, whether a new automatic-behavior default should preserve prior behavior instead, and when to add a KindBehavior Roadmap candidate note in docs/prd/editions.md for a reinterpretation the journal can't gate yet. Invoke via Skill with skill: "editions".coderabbit-review agent — invoke when a CodeRabbit review lands with substantial feedback. Knows how to parse CR threads, verify findings against current code, apply valid suggestions, and skip stale/wrong ones with explanation. Invoke via Agent with subagent_type: "coderabbit-review".If your PR also touches a specific Atmos subsystem, the matching domain agent is the right collaborator for the implementation work (separate from this PR-workflow skill):
agent-developer — creating or updating agentsatmos-errors — error handling codeflag-handler — CLI flag wiringtui-expert — terminal UI / theme systemtui-list — list commandsexample-creator — examples under examples/gist-creator — gist documentation.github/workflows/changelog-check.yml (release docs gate).github/workflows/feature-release.yml (semver label gate)changelog skill (.claude/skills/changelog/SKILL.md)roadmap skill (.claude/skills/roadmap/SKILL.md)CLAUDE.md (search for "Pull Requests", "Blog Posts", "Roadmap Updates")© cloudposse, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/pull-request of cloudposse/atmos.
Open the folder on GitHubat commit bbe58a6
Pull Request next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Pull Request this skillcloudposse/atmos | 1.4k | — | ~3.5k | Automated safety check: Pass | Apache-2.0 | |
| Change Documentation Writerjsmastery-pro/skills | 1.4k | — | ~2.4k | Automated safety check: Notes | MIT | |
| Technical Writingfrappe/skills | 146 | — | ~1.1k | Automated safety check: Pass | None | |
| Avoid AI Writingwshobson/agents | 40k | — | ~1.9k | Automated safety check: Pass | MIT | |
| Plain EnglishFallout-build/Fallout | 164 | — | ~2k | Automated safety check: Pass | Custom licence | |
| Writingagentic-community/mcp-gateway-registry | 962 | — | ~3.5k | Automated safety check: Pass | Apache-2.0 |
jsmastery-pro/skills
Writes PR descriptions, changelog entries, release notes and postmortems from the actual commits and diff, and saves each one in the right place.
frappe/skills
Write prose in "Simplified Technical English". An agent skill from frappe/skills.
wshobson/agents
Audit and rewrite prose so it stops reading as machine-generated.
Fallout-build/Fallout
Write clear, plain English for developer-facing prose aimed at an international audience.
agentic-community/mcp-gateway-registry
Write prose people will actually read. An agent skill from agentic-community/mcp-gateway-registry.
DynamoDS/Dynamo
Technical writing specialist for Dynamo product documentation, blog posts, tutorials, and educational content.
cloudposse/atmos
A skill your agent uses when implementing, finishing, documenting, or reviewing a fix, repair, remediation, bug fix, debug-and-fix task, workflow fix, infrastructure fix, or any change that should…
cloudposse/atmos
Atmos Terraform linting with TFLint: standalone atmos terraform lint, component-aware config discovery and toolchain versions, TFLint rule configuration, and lifecycle hooks/CI findings.
cloudposse/atmos
Blog post authoring for Atmos: MDX template, frontmatter, website/blog/tags.yml and authors.yml rules, problem-first framing, backtick-opening ban, optional cast embeds, and no-Go-internals leakage.
cloudposse/atmos
Decide whether a PR's new or changed default needs edition-journal handling (pkg/edition, docs/prd/editions.md), and do the mechanical work if so: journal entries, the four-layer default check…
cloudposse/atmos
Migrate to Atmos from native Terraform, Terraform Workspaces, Terramate, Terragrunt, Make, Just, or Task; migrate tool versions from mise or Aqua CLI; migrate AWS/GCP/Azure CLI configs, Leapp…
cloudposse/atmos
Start an hourly background loop that keeps the current branch's PR rebased, its addressed CodeRabbit threads resolved, its CI checks passing, its lint clean, its tests passing with adequate patch…
Categories
PR workflow: pick the right semver label (no-release / patch / minor / major), decide when to add a changelog blog post, when to update the roadmap, and how to do each correctly. Pull Request is an agent skill from cloudposse/atmos. PR workflow: pick the right semver label (no-release / patch / minor / major), decide when to add a changelog blog post, when to update the roadmap, and how to do each correctly.
Pull Request fits situations like: tasks that involve Blog and article writing; tasks that involve Pull requests; tasks that involve Technical writing.
Run `npx skills add cloudposse/atmos --skill pull-request -a claude-code`. Or copy the skill folder (.claude/skills/pull-request in cloudposse/atmos) into .claude/skills/pull-request in your project. Claude Code loads it when a task matches its description.
Run `npx skills add cloudposse/atmos --skill pull-request -a codex`. Or copy the skill folder (.claude/skills/pull-request in cloudposse/atmos) into .agents/skills/pull-request in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add cloudposse/atmos --skill pull-request -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/pull-request, .gemini/skills/pull-request, .github/skills/pull-request and .opencode/skills/pull-request in your project.
Going by SKILL.md and its folder, Pull Request needs the command-line tools its instructions call (gh, git and npm).
SKILL.md contains no URLs. Its commands use gh, git and npm, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Pull Request is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.5k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Pull Request: Change Documentation Writer (jsmastery-pro/skills, 1.4k stars), Technical Writing (frappe/skills, 146 stars), Avoid AI Writing (wshobson/agents, 40k stars) and Plain English (Fallout-build/Fallout, 164 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
cloudposse (a GitHub organization) maintains it in cloudposse/atmos, which has 1,395 GitHub stars. The repository holds 70 skills in this directory. The repository was last updated on October 7, 2026.
Source: cloudposse/atmos on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.