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.
npx skills add bendaamerahmed/backstage-idp-plugin --skill backstage-upgradegit clone --depth 1 https://github.com/bendaamerahmed/backstage-idp-pluginWrote 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.
[](https://agentmods.dev/skills/bendaamerahmed/backstage-idp-plugin/backstage-upgrade)<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.
<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>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.
| Model | Per session | Once 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 |
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 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.jsonat the repo root read — it holds the app's current release line ({"version": "1.x.y"}). If missing, derive the line from@backstage/core-componentsinpackages/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-discoveryif unsure. - Known: yarn version (
yarn -v; the Backstage yarn plugin needs ≥ 4.1.1), whether"backstage:^"version specifiers are in use, rootengines.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
- Record the starting point.
cat backstage.json;yarn backstage-cli infofor installed Backstage package, Node and CLI versions. List every non-@backstageecosystem dependency (@backstage-community/*,@roadiehq/*,@janus-idp/*,@spotify/*) — the bump does not touch them by default. - Choose the target. Default to the latest
mainrelease line (monthly, released the Tuesday before the third Wednesday). Use--release next(weekly preview) only when explicitly asked; it pins1.x.0-next.Nintobackstage.json. Backstage versions are not semver — a minor bump may contain breaking changes. - 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 athttps://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. - 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.
- 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. - Bump.
yarn backstage-cli versions:bump --release 1.<N>.0(omit--releaseonly when the target is latest main). Flags:--pattern <glob>overrides the match glob and must still include@backstageif you widen it, e.g.--pattern '@{backstage,roadiehq}/*'. Non-@backstagepackages 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 frombackstage.json; keep that file in CI and Docker build contexts. - Migrate moved community packages. Plugins that left
backstage/backstagelive inbackstage/community-pluginsas@backstage-community/plugin-*and carry abackstage.movedfield. Runyarn backstage-cli versions:migrateto rewrite dependency names and import paths (--skip-code-changesto touch onlypackage.json). Community packages version independently of the release line — numbers restarted or diverged on the move, so0.7.4or0.1.0against 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. - Apply app-code changes the CLI cannot make, via
https://backstage.github.io/upgrade-helper/?from=<current>&to=<target>. It diffs thecreate-apptemplate between the two versions. Work through it file by file:packages/app/src/App.tsxandapis.ts,packages/app/package.json,packages/backend/src/index.ts,packages/backend/Dockerfile, rootpackage.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-appCHANGELOG, which carries the prose upgrade steps. - 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-levelbitbucketintegration key was removed in v1.49.0 in favour ofbitbucketCloud/bitbucketServer.BACKSTAGE_ENVtakes comma-separated values if you stack configs. - Handle a Node major drop when the target changes supported majors: root
package.jsonengines(template is"22 || 24"),.nvmrc/.node-version,packages/backend/Dockerfilebase image (template isnode:24-trixie-slim),@types/node, and everyactions/setup-nodeversion in CI. Switch your local Node before rebuilding, or the failures you debug will be phantoms. - Audit
resolutionsinstead of adding to them. Every entry in rootpackage.jsonresolutionspins something the release line now wants to move. After the bump, try removing each and reinstalling. Runyarn dedupeto 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. - Verify and commit this increment (below), then loop to the next line. Commit
package.jsonfiles,yarn.lockandbackstage.jsontogether — a lockfile split across commits is unbisectable. - 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.
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.
- 11d ago First seen · 171 lines · 38 tokens per session scan A 8fd72690086a
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.
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…
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…
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…
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.
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…
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.