pull-request-ready

pull-request-ready is a skill for Claude Code from bendaamerahmed/backstage-idp-plugin. It costs 41 tokens per session (3,363 once invoked), scanned A, original, MIT.

A review workflow that prepares a completed Backstage code change for a pull request, a request for teammates to review changes before merging.

In plain words
What is it for?
Use it to audit a finished Backstage change, check for leaked secrets or unnecessary edits, confirm required reports and configuration, and draft the pull-request title and description.
Why use it?
It checks that the diff contains only the intended work, validation evidence is present, and common publishing details such as changesets, API reports, and schemas are covered.

Skill for Claude Code

Written for Claude Code: when-to-use in frontmatter.

Part of the backstage-idp plugin — 15 skills, 1 agent shipped together

Good fit Use it to audit a finished Backstage change, check for leaked secrets or unnecessary edits, confirm required reports and configuration, and draft the pull-request title and description.

Compare 6 skills from other repositories ↓
Install with agentmods
npx agentmods add skills/bendaamerahmed/backstage-idp-plugin/pull-request-ready
Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

Any agent
npx skills add bendaamerahmed/backstage-idp-plugin --skill pull-request-ready
Clone the repo
git clone --depth 1 https://github.com/bendaamerahmed/backstage-idp-plugin

Made for: Claude Code.

Or install backstage-idp, the plugin that ships this one along with the rest of its 15 skills, 1 agent.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for pull-request-ready

README.md
[![agentmods](https://agentmods.dev/badge/skills/bendaamerahmed/backstage-idp-plugin/pull-request-ready/github.svg)](https://agentmods.dev/skills/bendaamerahmed/backstage-idp-plugin/pull-request-ready)
Your own site
<a href="https://agentmods.dev/skills/bendaamerahmed/backstage-idp-plugin/pull-request-ready"><img src="https://agentmods.dev/badge/skills/bendaamerahmed/backstage-idp-plugin/pull-request-ready/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for pull-request-ready

Your own site · 80×15
<a href="https://agentmods.dev/skills/bendaamerahmed/backstage-idp-plugin/pull-request-ready"><img src="https://agentmods.dev/badge/skills/bendaamerahmed/backstage-idp-plugin/pull-request-ready.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 41 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 3,363 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00041 $0.03363
Opus 5 $0.00020 $0.01682
Sonnet 5 $0.00008 $0.00673
Haiku 4.5 $0.00004 $0.00336

Measured 8d ago against content hash f02efdb5d413, method: parsed. Prices are Anthropic first-party input rates as of 2026-09-08, from the pricing page.

Security

Grade A, and why

pull-request-ready scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 8d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

plugins/backstage-idp/skills/pull-request-ready/SKILL.md · 93 lines

How it starts

The opening of the file, as written. The whole thing — 93 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Pull request ready

Turn a finished Backstage change into something a reviewer can approve: a diff that contains only the change, evidence the validation actually ran, and a PR body that answers the questions a reviewer would otherwise ask.

Preconditions

  • The change is functionally complete. This skill does not write features.
  • A base branch exists and is fetched. git fetch origin first — everything below compares against origin/<base>, and Backstage's --since tooling silently checks nothing when the ref is missing.
  • Repository generation known (NFS vs legacy frontend, new vs legacy backend) so you can judge whether an import or wiring change is in-house style or an accidental regression.
  • Repository contribution surface detected, not assumed — see step 2. A create-app app repo has none of the publishing machinery that backstage/backstage and backstage/community-plugins have.
  • You will not push, open, or merge anything. Those require explicit authorization; this skill ends by handing back commands.

Procedure

  1. Fix the base and read the real diff. BASE=$(git merge-base origin/<base> HEAD); review git diff $BASE..HEAD in full, plus git status --porcelain for anything uncommitted or untracked. Never self-review with git diff HEAD~1 — it hides everything earlier on the branch.
  2. Detect what this repo requires. Presence of .changeset/config.json; any api-report*.md at package roots or a build:api-reports script; root package.json scripts; CONTRIBUTING.md; .github/pull_request_template.md (or PULL_REQUEST_TEMPLATE.md); CODEOWNERS. A default create-app repo has exactly start, build:backend, build:all, build-image, tsc, tsc:full, clean, test, test:all, test:e2e, fix, lint (repo lint --since origin/<default>), lint:all, prettier:check, new — no changesets, no API reports. Do not manufacture requirements the repo does not have.
  3. Classify every hunk as intended, incidental, or generated. Anything you cannot justify in one sentence to a reviewer gets reverted, not explained.
  4. Sweep for the Backstage-specific accidental churn, in diff order:
    • yarn.lock — legitimate only if dependencies changed. A large unexplained diff means a different Yarn major; compare packageManager in root package.json and .yarnrc.yml, then regenerate with the repo's version.
    • backstage.json — only ever changes via yarn backstage-cli versions:bump. Its presence in a feature PR means an upgrade got mixed in; split it out (backstage-upgrade).
    • package.json metadata rewritten by yarn fix (backstage-cli repo fix): typesVersions, sideEffects, exports, and under --publish also repository, backstage.pluginId, backstage.pluginPackages. Keep it for packages you touched; git checkout it for every package you did not.
    • Local-linking residue: resolutions entries, link:/portal:/file: dependencies left behind after backstage-cli package start --link.
    • Stray @backstage/* version bumps across unrelated packages.
    • app-config.yaml example catalog.locations and examples/*.yaml entities edited during local experimentation.
    • Build output that must never be staged: dist/, dist-types/, *.tsbuildinfo, coverage/, .yarn/, node_modules/.
  5. Sweep for credentials across the whole branch, not just the tip. Grep git diff $BASE..HEAD for high-entropy strings, ghp_/github_pat_, -----BEGIN, client_secret, token:, password:, apiKey. Confirm app-config.local.yaml and any *.local.yaml are absent from the diff and covered by .gitignore — that file is the intended home for local secrets. Every credential in committed config must be ${ENV_VAR} or a $env/$file/$include reference, never a literal. If a secret ever appeared in a commit on this branch, a later deletion does not remove it from history: stop, return a BLOCKED report naming the credential to rotate, and do not rewrite history silently.
  6. Match new config keys to schema entries. Every key read through config.get* needs a declaration in the owning package's config.d.ts (a single exported Config interface), referenced by "configSchema" in package.json and listed in files. Set visibility deliberately: default is @visibility backend; @visibility frontend for anything the app reads; @visibility secret for credentials; @deepVisibility to apply recursively through a nested credential object. Then confirm the key is documented — app-config.yaml example (placeholder value only), plugin README, and any TechDocs page that lists configuration.
  7. Write the changeset if the repo has .changeset/. yarn changeset from the repo root; in backstage/community-plugins run it from the workspace root (workspaces/<name>). One entry per published package in the diff. Bump rules: for 0.x packages, minor for breaking and patch otherwise; for >=1.0.0, major for breaking, minor for backwards-compatible API additions, patch otherwise. No changeset is needed for "private": true packages, test-only changes, or comments. Write it for an adopter: describe behaviour, not internals or symbol names, prefix breaking changes with BREAKING, and include the migration diff the adopter must apply.
  8. Regenerate API reports if the repo uses api-extractor. Any change to a package's public exports invalidates its api-report*.md. yarn build:api-reports, or scoped: yarn build:api-reports plugins/<package>. Commit the regenerated files. If the run also rewrites reports for packages you did not touch, those were already stale — leave them out of your PR rather than absorbing them.
  9. Check the package boundaries the diff crosses. -common packages are isomorphic (no node:, no React, no backend service imports), -node is backend-shared, -react is frontend-shared, and the plugin packages consume them. A new import that pulls backend code into a frontend package or Node built-ins into -common will break consumers' bundles even when tsc passes. Run yarn backstage-cli repo fix --check to confirm no package metadata fixes are pending and that any new package got its backstage.role and plugin-id fields.
  10. Validate changed portal artifacts rather than eyeballing them. A changed catalog-info.yaml goes through POST /api/catalog/validate-entity (backstage-catalog), not through reading. A changed mkdocs.yml or docs/ tree needs a local TechDocs build. A new catalog.rules or provider config entry needs the backend started once.
  11. Actually run the validation sweep and capture the output. yarn tsc, yarn lint --since origin/<base>, yarn test --since origin/<base>, yarn prettier:check, yarn backstage-cli config:check --strict (add --deprecated), and yarn build:all if build or packaging config changed. See backstage-quality-gate for the full gate. Record the real command lines and their real result lines. A command you did not run is reported as not run.
  12. Confirm commit hygiene. If the repository requires DCO (backstage/backstage and community-plugins do), every commit needs a Signed-off-by trailer: git commit -s, or retroactively on your own unpushed branch git rebase --signoff $(git merge-base -a origin/<base> HEAD).
  13. Write the title. No conventional-commit prefix is enforced in backstage/backstage; read git log --oneline -30 origin/<base> and match what the repo actually does. The prevailing upstream shape is <plugin-or-package-id>: <imperative summary>. Name the surface, not the file.
  14. Write the body to a file (e.g. /tmp/pr-body.md) with these sections, filling the repo's PR template checklist in place rather than replacing it:
    • What and why — the user-visible problem and the change, in adopter terms.
    • Design decision — the one choice a reviewer would otherwise question, and the alternative you rejected (provider vs processor, new module vs extending an existing one, config key vs extension point).
    • Validation — the exact commands from step 11 with their results. Include what was not covered.
    • Risk and rollback — whether a revert is sufficient, or whether config, an env var, a DB migration, or a redeploy must be undone too, and in what order.
    • Screenshots / UI notes — required by the upstream template for UI changes. You cannot produce screenshots; say so explicitly and name the exact route, entity, and state a human must capture.
    • Reviewer must check manually — everything CI cannot reach: real IdP login, SCM webhooks, a live Kubernetes cluster, permission decisions against a real policy, TechDocs publishing to a real bucket.
  15. Stop. Report the branch, base, title, body path, and the exact commands — then return for authorization without running them:

Read the full file on GitHub · 93 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 8d ago First seen · 93 lines · 41 tokens per session scan A f02efdb5d413

Subscribe to this mod's changes

pull-request-ready is a skill published in the GitHub repository bendaamerahmed/backstage-idp-plugin (1 stars, last pushed 28d ago), licensed MIT. It adds 41 tokens to every session and 3,363 once invoked, about $0.0002 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.

Related

Other skills, from other repositories

pr-review

Address feedback left on a GitHub pull request: fetch unresolved review threads, make agreed Elixir/Phoenix code fixes, reply, and resolve. Use for a PR URL/number or reviewer comments. NOT for pre-PR review, findings triage, or CI monitoring.

oliver-kriska/claude-elixir-phoenix · 59 tokens

phx-pr-review

Address feedback left on a GitHub pull request: fetch unresolved review threads, make agreed Elixir/Phoenix code fixes, reply, and resolve. Use for a PR URL/number or reviewer comments. NOT for pre-PR review, findings triage, or CI monitoring.

oliver-kriska/claude-elixir-phoenix · 61 tokens

pr-threads-address

Address PR review feedback by systematically working through every unresolved PR review thread on the current branch's PR - analyze each comment, make the requested code changes (with tests where useful), commit, and optionally reply and resolve.

posit-dev/skills · 48 tokens

han-release

Cut a Han release: update CHANGELOG.md with the changes since the last release, bump and tag every plugin that changed as {plugin-name}--v{version} so a version-constrained dependency can resolve, and publish a GitHub release crediting every merged pull request and closed issue to the people behind it. Use when…

testdouble/han · 172 tokens

han-update-documentation

Update Han plugin documentation so every skill, agent, guidance doc, index, and cross-reference is current and accurate. On a non-default branch, scopes the pass to entities the branch actually touched. On the default branch, performs a full documentation sweep across the whole plugin. Use when updating, refreshing…

testdouble/han · 167 tokens

timeline

Group the current branch's commit history into semantic phases along a timeline, and generate two review documents: architecture evolution + code review.

tykisgod/quick-question · 26 tokens