backstage-kubernetes

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

A guide for showing Kubernetes workloads inside Backstage. Kubernetes is a system for running and managing containerised applications, while custom resources are application-specific objects added to a Kubernetes cluster.

In plain words
What is it for?
Use it to connect clusters, configure authentication, annotate Backstage entities, and display custom Kubernetes resources on service pages.
Why use it?
It explains the several connections that must work together, so an empty Backstage tab can be traced to cluster access, permissions, annotations, or object selection.

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 connect clusters, configure authentication, annotate Backstage entities, and display custom Kubernetes resources on service pages.

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

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

Your own site · 80×15
<a href="https://agentmods.dev/skills/bendaamerahmed/backstage-idp-plugin/backstage-kubernetes"><img src="https://agentmods.dev/badge/skills/bendaamerahmed/backstage-idp-plugin/backstage-kubernetes.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 37 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 2,220 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.00037 $0.02220
Opus 5 $0.00018 $0.01110
Sonnet 5 $0.00007 $0.00444
Haiku 4.5 $0.00004 $0.00222

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

Security

Grade A, and why

backstage-kubernetes 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 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.

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/backstage-kubernetes/SKILL.md · 147 lines

How it starts

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

Backstage Kubernetes

Make a service's real cluster workloads — including your own custom resources — appear on its entity page. Four things must line up: the cluster is reachable, Backstage is authorised on it, the entity is annotated, and the object type is requested. A miss on any one shows as an empty tab.

Preconditions

  • Backend generation known. New backend system: backend.add(import('@backstage/plugin-kubernetes-backend')) in packages/backend/src/index.ts. Legacy: a createRouter under packages/backend/src/plugins/, which must be migrated before adding modules (backstage-plugin-migrate). Frontend: NFS consumes the plugin's /alpha export; legacy imports EntityKubernetesContent into the entity page.
  • Cluster reachability from the backend, not from your laptop. A cluster behind a VPN the backend pod cannot reach fails identically to a wrong URL.
  • Exact config shapes read from the installed @backstage/plugin-kubernetes-backend config.schema.json, and exact annotation constants from @backstage/plugin-kubernetes-common. Both move.
  • Read access to the cluster's RBAC, because surfacing a CRD needs an explicit grant and that grant is usually the missing piece.
  • Any change to a real cluster's RBAC or service accounts is external mutation: stop and return a BLOCKED report with the exact Role and ClusterRole rules needed, rather than applying them.

Procedure

  1. Establish which of the four layers is missing before editing config. Query the backend directly: POST /api/kubernetes/services/<entity-name> with a user token. A 200 with an empty array is an annotation or selector problem; a 500 naming a cluster is reachability or auth; a 404 means the plugin is not wired at all.
  2. Choose a cluster locator method. config lists clusters inline and is right for a handful. catalog reads them from Resource entities of type kubernetes-cluster, which scales and keeps cluster inventory in the catalog. gke discovers GKE clusters in a project. localKubectlProxy is development only — it assumes kubectl proxy on the developer's machine and must never reach a deployed config.
  3. Declare clusters under kubernetes.clusterLocatorMethods. Per cluster the fields are url, name, and one of the auth arrangements: a serviceAccountToken, or an authProvider with authMetadata. Optional: title, skipTLSVerify, skipMetricsLookup, caData, caFile, oidcTokenProvider, and a per-cluster customResources. Every credential is ${ENV_VAR} or a $env/$file reference — never a literal.
  4. Pick serviceLocatorMethod deliberately. multiTenant queries every cluster for every entity and is the usual default. singleTenant and catalogRelation narrow that. On a large fleet multiTenant is a latency and rate-limit problem before it is a correctness one.
  5. Annotate the entities. backstage.io/kubernetes-id matches objects carrying the backstage.io/kubernetes-id label with the same value — the label goes on your workloads, in your manifests or Helm chart, and is the half people forget. backstage.io/kubernetes-label-selector replaces that with an arbitrary selector and wins when both are present. Namespace can be narrowed with the namespace annotation. Validate with backstage-catalog.
  6. Request the object types you want. kubernetes.objectTypes accepts pods, services, configmaps, deployments, limitranges, resourcequotas, replicasets, horizontalpodautoscalers, jobs, cronjobs, ingresses, statefulsets, daemonsets and customresources. Setting it at all replaces the default set — a list that omits pods hides pods, which reads as a broken plugin.
  7. Declare each CRD you want surfaced in kubernetes.customResources as { group, apiVersion, plural }. All three are required, apiVersion is the version alone (not group/version), and plural is the CRD's spec.names.plural — not the Kind. Declare them per cluster instead when only some clusters have the operator installed. See kubernetes-crd-author when the CRD is one you own.
  8. Grant RBAC for the custom resources. The default guidance grants the core workload types only; a CRD needs its own apiGroups/resources rule with get, list and watch. This is the most common reason a correctly declared CRD stays invisible. Prepare the ClusterRole and stop for authorization before anything is applied to a real cluster.
  9. Restrict what reaches the frontend. The plugin returns whole objects, so a Secret-adjacent CRD or one with credentials in spec exposes them to every user who can see the entity. Decide per CRD whether it should be surfaced at all, and treat that as a data-exposure review, not a config change.
  10. Wire the frontend for the repo's generation and confirm the tab renders for an entity you know has workloads, not for an arbitrary one.

Read the full file on GitHub · 147 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 · 147 lines · 37 tokens per session scan A 7c3fd600b31a

Subscribe to this mod's changes

backstage-kubernetes is a skill published in the GitHub repository bendaamerahmed/backstage-idp-plugin (1 stars, last pushed 1mo ago), licensed MIT. It adds 37 tokens to every session and 2,220 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

deploy

Elixir/Phoenix deployment patterns — Dockerfile, fly.toml, runtime.exs, mix release, rel/ overlays. Use when configuring Fly.io, Docker, CI/CD, health checks, or production migrations.

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

companion-clis

Companion CLIs for Runpod workflows — HuggingFace, GitHub, Docker, and AWS.

gaelic-ghost/socket · 26 tokens

gen-devcontainer

Generate a .devcontainer/devcontainer.json keyed to the project's primary language so gh codespace create (or VS Code's "Reopen in Container") gives anyone on the team a ready-to-go env with the right runtime, GH CLI, git-lfs, and language-tier VS Code extensions pre-installed. Preview-by-default; idempotent on apply…

thettwe/nyann · 246 tokens

strut

Operate and manage Docker Compose stacks on VPS infrastructure with the strut CLI. Use for any strut task — deploying and releasing services, database backup and restore, debugging production issues, detecting config drift, rotating secrets and keys, setting up monitoring, configuring domains and SSL, validating…

gfargo/skills · 67 tokens

dockerized-service-release-deployment-workflow

Create a Dockerized-service release contract with clean GitHub Actions builds, main-anchored tags, immutable digest manifests, published-release deployments, production approval, health checks, and exact-digest rollback.

gaelic-ghost/socket · 49 tokens

linux-development-vm-workflow

Prepare and reset persistent Linux development guests on macOS. Use when comparing container machine, Lima or Colima, and full VMs for distros, init systems, services, custom boot, disks, Rosetta, or nested virtualization.

gaelic-ghost/socket · 54 tokens