skills/backstage/SKILL.md
Use when creating or updating catalog-info.yaml files for Backstage, onboarding repositories to the software catalog, or configuring service metadata for developer portal visibility
npx skillsauth add stevefeldman/agents-skills backstageInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Generate catalog-info.yaml files that register services, APIs, and resources in Backstage's software catalog. This skill provides organization-specific patterns and required annotations.
catalog-info.yaml to an existing repo| Component Type | spec.type | Use For |
|----------------|-------------|---------|
| Backend service | service | APIs, microservices |
| Frontend app | website | MFEs, SPAs, web apps |
| Shared code | library | npm packages, shared modules |
| Lifecycle | When to Use |
|-----------|-------------|
| experimental | In development, not production-ready |
| production | Live, actively maintained |
| deprecated | Being phased out |
apiVersion: backstage.io/v1alpha1
kind: Component
metadata:
name: your-service-name
description: Brief description of what this service does
tags:
- api # or: oc, mfe, library
annotations:
# Required annotations
backstage.io/kubernetes-id: your-service-name
backstage.io/kubernetes-namespace: your-namespace
sonarqube.org/project-key: your-service-name
jenkins.io/job-full-name: digital:org/your-service-name
backstage.io/techdocs-ref: dir:.
opsgenie.com/component-selector: 'tag:"app:your-service-name"'
opsgenie.com/team: 'Digital Developers'
github.com/project-slug: org/your-service-name
links:
- title: QA Logs
icon: ManageSearch
url: https://splunk.example.com/en-US/app/search/search?q=search%20index%3D%22gke_staging_logs%22%20cluster_name%3A%3Astaging-digital%20namespace%3D%22YOUR_NAMESPACE%22%20pod%3D%22develop-YOUR_SERVICE-*%22
- title: UAT Logs
icon: ManageSearch
url: https://splunk.example.com/en-US/app/search/search?q=search%20index%3D%22gke_staging_logs%22%20cluster_name%3A%3Astaging-digital%20namespace%3D%22YOUR_NAMESPACE%22%20pod%3D%22YOUR_SERVICE-*%22
- title: Production Logs
icon: ManageSearch
url: https://splunk.example.com/en-US/app/search/search?q=search%20index%3D%22gke_logs%22%20cluster_name%3A%3Aproduction-digital%20namespace%3D%22YOUR_NAMESPACE%22%20pod%3D%22YOUR_SERVICE-*%22
- title: Service Restart - QA
icon: RestartAlt
url: https://admin.staging.example.com/jenkins/job/org/job/job-deployment-restart/job/master/parambuild/?environment=Staging&namespace=YOUR_NAMESPACE&deploymentName=develop-YOUR_SERVICE&clusterType=mos
- title: Service Restart - UAT
icon: RestartAlt
url: https://admin.staging.example.com/jenkins/job/org/job/job-deployment-restart/job/master/parambuild/?environment=Staging&namespace=YOUR_NAMESPACE&deploymentName=YOUR_SERVICE&clusterType=mos
- title: Service Restart - Prod
icon: RestartAlt
url: https://admin.staging.example.com/jenkins/job/org/job/job-deployment-restart/job/master/parambuild/?environment=Production&namespace=YOUR_NAMESPACE&deploymentName=YOUR_SERVICE&clusterType=mos
spec:
type: service # or: website, library
lifecycle: production
owner: group:default/YOUR_TEAM
# For services that provide APIs
providesApis:
- your-api-name
# Dependencies on other components/resources
dependsOn:
- resource:default/your-database-resource
- component:default/another-service
For services that expose APIs, add a second document:
---
apiVersion: backstage.io/v1alpha1
kind: API
metadata:
name: your-api-name
spec:
type: openapi
lifecycle: production
owner: group:default/YOUR_TEAM
definition:
$text: https://api-internal.staging.example.com/YOUR_NAMESPACE/develop-YOUR_SERVICE/swagger-ui/swagger.json
Format: group:default/team-name
Common teams:
group:default/upfunnel - Product discovery, search, categories| Annotation | Purpose |
|------------|---------|
| backstage.io/kubernetes-id | Links to K8s deployment |
| backstage.io/kubernetes-namespace | K8s namespace |
| sonarqube.org/project-key | SonarQube code quality |
| jenkins.io/job-full-name | Jenkins pipeline path |
| backstage.io/techdocs-ref | TechDocs location (usually dir:.) |
| opsgenie.com/component-selector | OpsGenie alert routing |
| opsgenie.com/team | OpsGenie team |
| github.com/project-slug | GitHub repo reference |
| backstage.io/source-location | Source code URL (for non-K8s components) |
| Icon | Use For |
|------|---------|
| ManageSearch | Log viewers (Splunk) |
| RestartAlt | Service restart actions |
| DataThresholding | Grafana dashboards |
| OpenInBrowserIcon | External URLs, registries |
For OpenComponent libraries (not deployed to K8s):
metadata:
tags:
- oc
annotations:
# NO kubernetes-id or kubernetes-namespace
sonarqube.org/project-key: your-component
backstage.io/source-location: url:https://github.com/org/your-component
links:
- title: QA OpenComponent Registry
url: https://qa.example.com/registry/your-component/X.X.X/~info
icon: OpenInBrowserIcon
spec:
type: website
# NO providesApis for OC components
metadata:
annotations:
backstage.io/kubernetes-id: your-mfe
# Often NO kubernetes-namespace for MFEs
links:
- title: Production grafana mfe dashboard
url: https://grafana.example.com/d/iquxNcS4k/mfe-dashboard?var-app=your-mfe
icon: DataThresholding
spec:
type: website
dependsOn:
- component:backend-service-it-calls
| Mistake | Fix |
|---------|-----|
| Missing owner | Always specify group:default/team-name |
| Wrong spec.type | Use service for APIs, website for frontends |
| Hardcoded URLs | Use URL-encoded parameters in Splunk links |
| Missing namespace in links | QA uses develop-*, UAT/Prod use service name directly |
| Duplicate links | Review for accidental copy-paste duplication |
Place catalog-info.yaml in repository root. Backstage will auto-discover and validate on commit.
development
Use when reviewing Dependabot alerts, npm audit findings, govulncheck output, or CVE reports on a JavaScript/Node.js or Go project — especially when triaging multiple alerts across direct and transitive dependencies to assess real-world risk and produce a remediation plan.
development
Use when a code review finding needs proof — write a focused test in JavaScript or Go that either confirms the issue is real or exposes it as over-engineering hyperbole. Trigger after code-review or code-review-skill findings are presented and evidence is requested.
development
Produce data-driven software delivery estimates by analyzing historical JIRA tickets, git activity, and engineer track records, then matching the new work against the most similar past tickets. Use this skill whenever the user asks "how long will this take", wants to estimate a piece of work, scope an epic, plan a sprint, or estimate delivery for JIRA stories or a Figma design. Also use whenever the user wants developer-to-work assignment recommendations based on history, wants to optimize an estimate by adding or reallocating engineers, or asks "what's the fastest way to ship this" or "who should work on this". Especially trigger when the user provides JIRA ticket IDs, JIRA story links, or Figma designs together with any indication of a team that will execute the work.
tools
Use when auditing an existing test suite for quality and coverage gaps, evaluating Playwright migration readiness, scoring automation against a world-class e-commerce standard, or guiding the creation of new tests. Applicable to Selenium, WebdriverIO, and Playwright suites.