Agent skill

Pull Request

by cloudposse in 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.

Apache-2.0Auto-check passedDevelopment

Install Pull Request

skills CLI
$ npx skills add cloudposse/atmos --skill pull-request -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install cloudposse/atmos pull-request --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ 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-src

Use ~/.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/

Facts

Skill name
pull-request
GitHub stars
1.4k
Token cost
~3.5k tokens
SKILL.md length
1,723 words
Files
1
Skills in repo
70
Repo updated
First seen
Licence
Apache-2.0

At a glance

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.

  • Works in 3 steps: Every PR needs exactly one semver label.… → minor and major PRs require a blog post… → featured[] in the roadmap is curated.…
  • Tasks that involve Blog and article writing
  • SKILL.md covers The label decision tree, Blog post (changelog) — when,…, Roadmap — when required, who… and Signed commits (MANDATORY —…, plus 6 more sections
  • Calls gh, git and npm

What it does

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.

When your agent uses it

  • Tasks that involve Blog and article writing
  • Tasks that involve Pull requests
  • Tasks that involve Technical writing

Example prompts

  • “/pull-request”

Workflow steps

3 steps, taken from the first numbered list in SKILL.md.

  1. Every PR needs exactly one semver label. Unlabeled PRs fail the PR Semver Labels CI check.
  2. minor and major PRs require a blog post AND a roadmap update. The Check for changelog and roadmap updates workflow gates merging on both.
  3. featured[] in the roadmap is curated. Never auto-promote a shipped milestone into featured[] — only the user decides.

What it can do on your machine

Read from SKILL.md and the folder at commit bbe58a6. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Shell commands in SKILL.md call:

    • gh
    • git
    • npm

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    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.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

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.

Always · name and description, kept in context so the agent knows when to use it
~67
When it runs · the whole SKILL.md, loaded when a task matches
~3.5k

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.

Safety

Auto-check passed

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.

SKILL.md

The full file from cloudposse/atmos at commit bbe58a6, republished under its Apache-2.0 licence (© cloudposse). 1,723 words, ~3,472 tokens.

Download SKILL.mdSave it as .claude/skills/pull-request/SKILL.md (or your agent's skills folder).
name
pull-request
description
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.
metadata.copyright
Copyright Cloud Posse, LLC 2026
metadata.version
1.0.0

Pull Request Preparation (Atmos)

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:

  1. Every PR needs exactly one semver label. Unlabeled PRs fail the PR Semver Labels CI check.
  2. minor and major PRs require a blog post AND a roadmap update. The Check for changelog and roadmap updates workflow gates merging on both.
  3. 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 label decision tree

The Atmos repo has four mutually exclusive release labels (plus other category labels that don't affect release docs):

LabelWhenCI requires blog + roadmap?
no-releaseInternal refactor, new internal helper, dependency bump with zero user-visible behavior, docs fixesNo
patchBug fix, performance fix, error-message improvement, small UX polish — user-visible but not a featureNo
minorNew user-visible feature, new flag, new command, new config option, default flip that users seeYES
majorBreaking change: removed/renamed flag, schema migration, CLI behavior reversalYES
How to choose

Ask, in order:

  1. Would a user upgrading Atmos see ANY visible change? Behavior, output, errors, performance, new flags, new commands, removed flags, changed defaults? If no, use no-release. This is the most common case for foundation/plumbing PRs.
  2. Is this a breaking change? Removed flags, renamed flags, changed semantics, schema bumps that require user action? Use major. Document the migration in the blog post.
  3. Is this net-new functionality? New command, new flag, new config option that users will adopt? Use minor. Write a blog post.
  4. Anything else user-visible (bug fix, UX polish, error-message rewrite, output formatting): use 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).

Apply the label as the first action

After opening the PR, immediately:

bash
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:

bash
for pr in 2417 2418 2419; do gh pr edit "$pr" --add-label no-release; done

Changing 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:

bash
# 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 minor

gh pr edit accepts --remove-label and --add-label in the same invocation, so the relabel is atomic.

Blog post (changelog) — when, where, and who owns it

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.

Roadmap — when required, who owns 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.

Signed commits (MANDATORY — branch protection blocks merge)

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:

  1. Verify your local git is configured to sign automatically before your first commit:

    bash
    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:

    bash
    git config commit.gpgsign true
  2. After your first commit, verify it's signed:

    bash
    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.

  3. 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:

bash
# 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-lease

Always use --force-with-lease (not --force) to avoid clobbering work from other sessions on the same branch.

Pre-push checklist

Run through these in order before git push. Every item has burned someone before.

  1. Identify the smallest accurate label. Use the decision tree above. Default to no-release for plumbing.
  2. Confirm commit signing is on (see above). One unsigned commit blocks the entire PR from merging.
  3. If minor or major:
    • Create a blog post at website/blog/YYYY-MM-DD-<slug>.mdx.
    • Read website/blog/tags.yml and pick a defined tag.
    • Check website/blog/authors.yml for your handle; add yourself if missing.
    • Embed the feature's cast (CastEmbed) if one exists or was recorded for this PR.
    • Delegate the roadmap update to the roadmap skill (do not touch featured[]).
  4. Build the website to verify MDX renders: cd website && npm run build.
  5. Commit and push.
Show full SKILL.md (707 more words)Show less

Post-push / PR checklist

Once the branch is on GitHub, finish the workflow:

  1. Open the PR with title (under 70 chars) + body using the project's PR template (what / why / references). See the gotcha below about gh pr create body formatting.
  2. Apply the label immediately after opening: gh pr edit <num> --add-label <label>.
  3. If the PR fixes a tracked issue: include Closes #<issue> in the PR body so it auto-closes on merge.
  4. Check CI status after the first push: gh pr checks <num>. If PR Semver Labels, Check for changelog and roadmap updates, or signed-commit verification fails, fix it before requesting review.
  5. Address CodeRabbit comments as they arrive. For substantial review threads (5+ comments, or any comment spanning multiple files), delegate to the 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.

Gotcha: gh pr create --body and backtick escaping

Do 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):

bash
gh pr create --body "$(cat <<'EOF'
This file is named \`atmos.yaml\`.
EOF
)"

Right — write a .md file and pass it with --body-file:

bash
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.)

Updating an existing PR

If a PR has already been opened without a label, or with the wrong one:

  1. 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.

  2. Apply the decision tree to pick the correct label.

  3. If the PR has no semver label yet: add it.

    bash
    gh pr edit <num> --add-label <label>
  4. 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):

    bash
    gh pr edit <num> --remove-label <old-label> --add-label <new-label>
  5. 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.

  6. 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):

Reference

  • CI workflow: .github/workflows/changelog-check.yml (release docs gate)
  • CI workflow: .github/workflows/feature-release.yml (semver label gate)
  • Blog post authoring: changelog skill (.claude/skills/changelog/SKILL.md)
  • Roadmap data and editing rules: roadmap skill (.claude/skills/roadmap/SKILL.md)
  • Project rules: 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

Files

Just SKILL.md in .claude/skills/pull-request of cloudposse/atmos.

Open the folder on GitHubat commit bbe58a6

Compare with similar skills

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.

Pull Request compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Pull Request this skillcloudposse/atmos1.4k—~3.5kAutomated safety check: PassApache-2.0
Change Documentation Writerjsmastery-pro/skills1.4k—~2.4kAutomated safety check: NotesMIT
Technical Writingfrappe/skills146—~1.1kAutomated safety check: PassNone
Avoid AI Writingwshobson/agents40k—~1.9kAutomated safety check: PassMIT
Plain EnglishFallout-build/Fallout164—~2kAutomated safety check: PassCustom licence
Writingagentic-community/mcp-gateway-registry962—~3.5kAutomated safety check: PassApache-2.0

Similar skills

  • 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.

    1.4k GitHub stars~2.4k tokensUpdated 1 mo ago
    DevelopmentAuto-check: notes
  • Technical Writing

    frappe/skills

    Write prose in "Simplified Technical English". An agent skill from frappe/skills.

    146 GitHub stars~1.1k tokensUpdated 7 days ago
    DevelopmentAuto-check passed
  • Avoid AI Writing

    wshobson/agents

    Audit and rewrite prose so it stops reading as machine-generated.

    40k GitHub stars~1.9k tokensUpdated 2 days ago
    DevelopmentAuto-check passed
  • Plain English

    Fallout-build/Fallout

    Write clear, plain English for developer-facing prose aimed at an international audience.

    164 GitHub stars~2k tokensUpdated 4 days ago
    DevelopmentAuto-check passed
  • Writing

    agentic-community/mcp-gateway-registry

    Write prose people will actually read. An agent skill from agentic-community/mcp-gateway-registry.

    962 GitHub stars~3.5k tokensUpdated yesterday
    DevelopmentAuto-check passed
  • Technical writing specialist for Dynamo product documentation, blog posts, tutorials, and educational content.

    2k GitHub stars~1.6k tokensUpdated today
    Writing & ContentAuto-check passed

More from cloudposse/atmos

All 70 skills in this repo
  • Fix Log

    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…

    1.4k GitHub stars~685 tokensUpdated today
    Auto-check passed
  • Atmos Lint

    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.

    1.4k GitHub stars~1.1k tokensUpdated today
    Auto-check passed
  • Changelog

    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.

    1.4k GitHub stars~2.7k tokensUpdated today
    Auto-check passed
  • Editions

    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…

    1.4k GitHub stars~2.1k tokensUpdated today
    Auto-check passed
  • Atmos Migration

    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…

    1.4k GitHub stars~5.1k tokensUpdated today
    Auto-check: warnings
  • PR Maintenance Loop

    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…

    1.4k GitHub stars~1.4k tokensUpdated today
    Auto-check passed

Questions about Pull Request

What does Pull Request do?

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.

When should I use Pull Request?

Pull Request fits situations like: tasks that involve Blog and article writing; tasks that involve Pull requests; tasks that involve Technical writing.

How do I install Pull Request in Claude Code?

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.

How do I install Pull Request in Codex?

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.

Can I use Pull Request in Cursor, Gemini CLI or GitHub Copilot?

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.

What does Pull Request need to run?

Going by SKILL.md and its folder, Pull Request needs the command-line tools its instructions call (gh, git and npm).

Does Pull Request access the network?

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.

Is Pull Request safe to install?

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.

What licence does Pull Request use?

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.

How many tokens does Pull Request use?

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.

What are the alternatives to Pull Request?

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.

Who maintains Pull Request?

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.