backstage-upgrade

backstage-upgrade is a skill for Claude Code from bendaamerahmed/backstage-idp-plugin. It costs 38 tokens per session (2,938 once invoked), scanned A, original, MIT.

A Backstage upgrade guide helps move a Backstage developer portal between release lines. Backstage is an open-source portal for cataloguing and documenting software owned by teams.

In plain words
What is it for?
Use it to upgrade a Backstage monorepo, a repository containing multiple related projects, while reviewing version changes, compatibility, and breaking changes.
Why use it?
It provides checks and a step-by-step process for finding upgrade problems before they break the main branch.

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 upgrade a Backstage monorepo, a repository containing multiple related projects, while reviewing version changes, compatibility, and breaking changes.

Compare 6 skills from other repositories ↓
Install with agentmods
npx agentmods add skills/bendaamerahmed/backstage-idp-plugin/backstage-upgrade
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 backstage-upgrade
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 backstage-upgrade

README.md
[![agentmods](https://agentmods.dev/badge/skills/bendaamerahmed/backstage-idp-plugin/backstage-upgrade/github.svg)](https://agentmods.dev/skills/bendaamerahmed/backstage-idp-plugin/backstage-upgrade)
Your own site
<a href="https://agentmods.dev/skills/bendaamerahmed/backstage-idp-plugin/backstage-upgrade"><img src="https://agentmods.dev/badge/skills/bendaamerahmed/backstage-idp-plugin/backstage-upgrade/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 backstage-upgrade

Your own site · 80×15
<a href="https://agentmods.dev/skills/bendaamerahmed/backstage-idp-plugin/backstage-upgrade"><img src="https://agentmods.dev/badge/skills/bendaamerahmed/backstage-idp-plugin/backstage-upgrade.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 38 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 2,938 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 1 finding. 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.00038 $0.02938
Opus 5 $0.00019 $0.01469
Sonnet 5 $0.00008 $0.00588
Haiku 4.5 $0.00004 $0.00294

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

Security

Grade A, and why

backstage-upgrade scanned grade A with 1 finding 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 11d 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.

Makes network callslowCapability

Not a fault in itself. Listed so you know the mod talks to something, and to what.

`curl localhost:7007/api/catalog/entities?limit=1` returns JSON, and each auth provider
plugins/backstage-idp/skills/backstage-upgrade/SKILL.md · 171 lines

How it starts

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

Upgrade a Backstage monorepo

Move a repo from its current Backstage release line to a target line without a broken main. The CLI moves versions; the app code, config and Dockerfile are yours to move.

Preconditions

  • backstage.json at the repo root read — it holds the app's current release line ({"version": "1.x.y"}). If missing, derive the line from @backstage/core-components in packages/app/package.json.
  • Baseline green on a clean tree: yarn install --immutable, yarn tsc:full, yarn backstage-cli repo lint, yarn backstage-cli repo test. A red baseline makes every later failure unattributable — return BLOCKED.
  • Repo generation known (NFS vs legacy frontend, new vs legacy backend) — it decides which Upgrade Helper hunks apply. Run backstage-repo-discovery if unsure.
  • Known: yarn version (yarn -v; the Backstage yarn plugin needs ≥ 4.1.1), whether "backstage:^" version specifiers are in use, root engines.node, and the local Node major. Supported Node is exactly two adjacent even majors — currently 22 and 24.
  • A branch. Never upgrade on main.

Procedure

  1. Record the starting point. cat backstage.json; yarn backstage-cli info for installed Backstage package, Node and CLI versions. List every non-@backstage ecosystem dependency (@backstage-community/*, @roadiehq/*, @janus-idp/*, @spotify/*) — the bump does not touch them by default.
  2. Choose the target. Default to the latest main release line (monthly, released the Tuesday before the third Wednesday). Use --release next (weekly preview) only when explicitly asked; it pins 1.x.0-next.N into backstage.json. Backstage versions are not semver — a minor bump may contain breaking changes.
  3. Read every intermediate release note, not just the target's. For each version between current+1 and target, read https://backstage.io/docs/releases/v1.<N>.0 (sections: Highlights, Security Fixes, Upgrade path, Links and References) and the full per-release changelog at https://github.com/backstage/backstage/blob/master/docs/releases/v1.<N>.0-changelog.md, where every breaking entry is prefixed **BREAKING**: and scoped to one package. A removal that happened two lines back is invisible in the target's notes.
  4. Turn the notes into a repo-specific checklist. For each breaking entry, grep this repo for the symbol, import path or config key it names; keep the hits as the work list. Stable exports get at least one mainline release of deprecation before removal, so a deprecation warning ignored now is a startup crash two lines later.
  5. Split large gaps. More than two minors behind: upgrade one release line at a time, verifying and committing each increment (chore: bump backstage to 1.<N>.0). Steps 6–12 are one iteration of that loop.
  6. Bump. yarn backstage-cli versions:bump --release 1.<N>.0 (omit --release only when the target is latest main). Flags: --pattern <glob> overrides the match glob and must still include @backstage if you widen it, e.g. --pattern '@{backstage,roadiehq}/*'. Non-@backstage packages matched this way go to their npm latest, not to your release line — do that as a separate commit. With the yarn plugin installed, bump rewrites specifiers to "backstage:^" and drives everything from backstage.json; keep that file in CI and Docker build contexts.
  7. Migrate moved community packages. Plugins that left backstage/backstage live in backstage/community-plugins as @backstage-community/plugin-* and carry a backstage.moved field. Run yarn backstage-cli versions:migrate to rewrite dependency names and import paths (--skip-code-changes to touch only package.json). Community packages version independently of the release line — numbers restarted or diverged on the move, so 0.7.4 or 0.1.0 against Backstage 1.53 is normal. Never pin one to a Backstage version, never leave one on "backstage:^" (the yarn plugin cannot resolve it), and check its changelog for the minimum Backstage version it requires.
  8. Apply app-code changes the CLI cannot make, via https://backstage.github.io/upgrade-helper/?from=<current>&to=<target>. It diffs the create-app template between the two versions. Work through it file by file: packages/app/src/App.tsx and apis.ts, packages/app/package.json, packages/backend/src/index.ts, packages/backend/Dockerfile, root package.json (engines, scripts, resolutions), tsconfig.json, app-config*.yaml, .github/workflows/*. Decide per hunk against this repo's generation — never paste NFS template code into a legacy app or vice versa. Cross-check ambiguous hunks against the @backstage/create-app CHANGELOG, which carries the prose upgrade steps.
  9. Reconcile config. yarn backstage-cli config:check --strict --lax (strict fails on unknown keys; lax skips env-var substitution), then per environment with --config app-config.yaml --config app-config.production.yaml. Map removed keys to their replacement rather than deleting them — e.g. the top-level bitbucket integration key was removed in v1.49.0 in favour of bitbucketCloud / bitbucketServer. BACKSTAGE_ENV takes comma-separated values if you stack configs.
  10. Handle a Node major drop when the target changes supported majors: root package.json engines (template is "22 || 24"), .nvmrc/.node-version, packages/backend/Dockerfile base image (template is node:24-trixie-slim), @types/node, and every actions/setup-node version in CI. Switch your local Node before rebuilding, or the failures you debug will be phantoms.
  11. Audit resolutions instead of adding to them. Every entry in root package.json resolutions pins something the release line now wants to move. After the bump, try removing each and reinstalling. Run yarn dedupe to collapse duplicates. Only add a resolution as a last resort, with an inline comment naming the upstream issue and the version that will remove it.
  12. Verify and commit this increment (below), then loop to the next line. Commit package.json files, yarn.lock and backstage.json together — a lockfile split across commits is unbisectable.
  13. Stop before anything external. Pushing the branch, opening the PR, deploying, or running migrations against a shared database each need explicit authorization. Hand the verified diff to pull-request-ready.

Read the full file on GitHub · 171 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. 11d ago First seen · 171 lines · 38 tokens per session scan A 8fd72690086a

Subscribe to this mod's changes

backstage-upgrade is a skill published in the GitHub repository bendaamerahmed/backstage-idp-plugin (1 stars, last pushed 1mo ago), licensed MIT. It adds 38 tokens to every session and 2,938 once invoked, about $0.0002 per session on Opus 5. A static security scan graded it A with 1 finding (makes network calls). 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

meta-tags-optimizer

Optimize title tags, meta descriptions, Open Graph, and Twitter cards for maximum click-through rate. Generates multiple A/B test variations with character counting and SERP preview. Use when asked to "optimize title tag", "write meta description", "improve CTR", "Open Graph tags", "fix my meta tags", "social media…

nowork-studio/notfair-plugin · 91 tokens

google-ads-audit

Google Ads account audit and business context setup. Use for account-health audits and business-context setup. Trigger on "audit my ads", "ads audit", "set up my ads", "onboard", "account overview", "how's my account", "ads health check", "what should I fix in my ads", or when the user is new to NotFair and hasn't run…

nowork-studio/notfair-plugin · 86 tokens

sxo

Search Experience Optimization (SXO) — the bridge between SEO and UX/CRO. Audits the full journey from the SERP click to the on-page goal: SERP click-through factors (title/meta/rich results that win the click), then post-click experience signals that keep users and drive conversions — above-the-fold relevance and…

nowork-studio/notfair-plugin · 235 tokens

critical-code-reviewer

Rigorously review code or pull requests for correctness, security, accessibility, maintainability, tests, and edge cases. Use when users request a critical code review, want a guided walkthrough of findings, need implementer-facing feedback, or want to prepare, create, or submit a GitHub pull request review.

posit-dev/skills · 67 tokens

shiny-bslib

Build modern Shiny dashboards and applications using bslib (Bootstrap 5). Use when creating new Shiny apps, modernizing legacy apps (fluidPage, fluidRow/column, tabsetPanel, wellPanel, shinythemes), or working with bslib page layouts, grid systems, cards, value boxes, navigation, sidebars, filling layouts, theming…

posit-dev/skills · 107 tokens

elixir-idioms

OTP/BEAM patterns and Elixir idioms — GenServer, Supervisor, Task, Registry, pattern matching, with chains, pipes. Use when designing processes or debugging BEAM issues.

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