Author and maintain Compass catalog-info.yaml manifests for agent plugins (skills, plugins, Locations, MCP inverse relations). Use when: - Adding or updating a skill and its Compass manifest - Registering an existing plugin in Compass (manifests only; not creating a new agent plugin) - MCP usage or orchestration changed in SKILL.md - Auditing bidirectional dependsOn/dependencyOf drift against repo Compass conventions File-based only: Read/Glob/Grep/Bash. For `.catalog/` marketplace metadata use create-collection. NOT for: `.catalog/` metadata (use create-collection) or automated Compass registration.
88%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Passed
No findings from the security scan
Audience: Maintainers updating catalog-info.yaml manifests for Red Hat Compass (Backstage) registration.
Goal: Keep Compass manifests aligned with golden sources (SKILL.md, mcps.json, AGENTS.md)
Required MCP Servers: None — file-based skill. Do not use Compass MCP tools (validate-entity, register-entity, get-catalog-entity, query-entity-graph).
Verification:
test -f CLAUDE.md && echo "✓ repo root" || echo "✗ wrong directory"Human Notification Protocol: If drift audit finds violations, report file path and fix per workflow §1.
Security: Never display or expose credentials or token values.
Use when:
skills/<name>/catalog-info.yaml and Location / inverse updates.allowed-tools or orchestration changed → MCP or skill dependsOn must change.system.yaml manifests).dependencyOf, or dangling entity refs.agentic-contribution-skill creates a skill (run before opening PR).Do not use when: .catalog/collection.yaml (use create-collection instead), generic Compass platform tasks, or automated Compass registration.
MCP Tool: None — file-based; uses Read, Glob, Grep, Bash only (see allowed-tools in frontmatter).
Parameters: N/A — no MCP tools; inputs are <plugin>, <skill-name>, and on-disk manifest paths.
Resolve <plugin> and <skill-name> — confirm <plugin>/skills/<skill-name>/SKILL.md exists.
Read golden sources (precedence):
<plugin>/<plugin>-plugin.yaml — spec.lifecycle (default for new skill manifest; see relationship-rules.md Lifecycle)SKILL.md frontmatter: name, description, allowed-toolsSKILL.md body: Required MCP Servers, /skill-name invocations, Dependencies, validator prerequisites<plugin>/mcps.json — server keys (map via mcp-mapping.md)<plugin>/AGENTS.md — tags/disciplines hints only (not orchestration inference)Derive dependsOn for the skill manifest:
airesource:ai5-marketplace/<plugin>/other-skill invocations in SKILL.mdmcpserver: entriesSet spec.lifecycle (do not hardcode beta):
spec.lifecycle from <plugin>/<plugin>-plugin.yaml — use as the default for the skill.beta → skill development is OK; plugin development → skill beta is not allowed).Write <plugin>/skills/<skill-name>/catalog-info.yaml from assets/skill-catalog-info.yaml:
namespace: ai5-marketplacelabels.distribution: externalagents: []lifecycle: value from step 4 (typically matches the plugin)owner: group:redhat/ai5-marketplacebackstage.io/source-location → GitHub main branch SKILL.md URLdependencyOf: list orchestrators that dependsOn this skill (scan plugin or update when editing orchestrator)Update inverse manifests (relationship-rules.md):
<plugin>/catalog-info.yaml — ./skills/<skill-name>/catalog-info.yaml in spec.targets<plugin>/<plugin>-plugin.yaml — dependencyOf: airesource:ai5-marketplace/<skill-name>mcpserver: in skill dependsOn → matching mcps/*.yaml dependencyOfdependsOn → that skill's dependencyOf includes orchestratorReconcile plugin MCP deps — plugin dependsOn = union of all mcpserver: refs across plugin skill manifests.
Verify skill documentation layout (agent-plugins.org / agentskills.io):
skills/<skill-name>/references/, not docs/.<plugin>/references/ or skill-level skills/<name>/references/. No references/references/ nesting inside a skill.skills/<skill-name>/ for a docs/ directory.docs/ exists:
references/ (merge file-by-file when both exist).docs/references/ existed, flatten into skills/<name>/references/ (not references/references/).SKILL.md and all files under the skill directory: docs/... → references/... (also ./docs/... and relative ../docs/... segments).docs/ directory after migration — do not leave an empty or stale docs/ folder.references/ that still target docs/ paths to references/.common-issues.md, live-doc-lookup.md) symlinked into multiple skills must use link targets that resolve when opened through the symlink (same-directory or references/... paths from the symlink location).uv run python scripts/validate_compass_manifests.py to confirm (includes manifest roster, bidirectional refs, and references layout).<plugin>/<plugin>-plugin.yaml from assets/plugin-catalog-info.yaml with spec.lifecycle: development (default for new plugins; confirm with user before raising maturity).<plugin>/catalog-info.yaml from assets/plugin-location.yaml../<plugin>/catalog-info.yaml to root catalog-info.yaml.airesource:ai5-marketplace/<plugin> to system.yaml spec.dependencyOf.<plugin>/.catalog/ separately.Run uv run python scripts/validate_compass_manifests.py (or make validate-compass-manifests). It enforces manifest roster, bidirectional refs, and skill references layout:
| Check | Rule |
|---|---|
| Roster parity | Every skills/*/SKILL.md has catalog-info.yaml and plugin Location target |
| Inverse parity | Plugin dependencyOf = full skill set; each skill dependsOn includes plugin |
| MCP inverse | Each skill mcpserver: in dependsOn → MCP dependencyOf includes skill |
| Skill inverse | Each skill→skill dependsOn → target dependencyOf includes source |
| Dangling refs | Every ref resolves to on-disk manifest or documented canonical MCP |
| Forbidden | No partOf/hasPart on AiResource/MCPServer; no redundant dependsOn: system:default/agentic-plugins on plugins |
| Namespace | Refs use ai5-marketplace except mcpserver:redhat/* and default/agentic-plugins |
| Skill docs layout | No skills/<name>/docs/ (delete after migrate); no references/references/ nesting; links use references/... or ./references/..., not docs/... |
Report violations with file path and fix per workflow §1. Do not weaken checks.
uv run python scripts/validate_compass_manifests.py (included in make validate and make validate-structure).uv run python scripts/validate_skills_tier1.py .claude/skills/compass-manifest-maintenance/SKILL.md.Error Handling:
assets/skill-catalog-info.yaml and add Location target.dependencyOf missing on plugin or MCP → update per relationship-rules.md.mcpserver: refs.skills/<name>/docs/ exists or markdown links use docs/... → rename/merge to references/, flatten any references/references/, update link paths, delete docs/, fix symlinks; re-run validate_compass_manifests.py.spec.lifecycle matches plugin default or a less mature value (never above the plugin).agents: [], labels.distribution: external, namespace: ai5-marketplace, owner: group:redhat/ai5-marketplace.SKILL.md usage, not copied from sibling skills.dependsOn has matching dependencyOf on the target entity.dependencyOf lists every skill in the plugin.partOf/hasPart on custom kinds.references/ only — no leftover docs/ directory, no references/references/ nesting; links use references/... or ./references/....None — file-based manifest maintenance only.
None — uses Read, Glob, Grep, Bash.
.catalog/ marketplace metadata (not Compass manifests)scripts/validate_compass_manifests.py — CI roster and bidirectional ref checksdependsOn but forgot plugin or MCP dependencyOf.mcps.json instead of per-skill allowed-tools usage.remediation-style skills missing skill→skill edges or inverse dependencyOf on depended skills.mcpserver:redhat/...; do not register duplicates in mcps/.rh-developer, rh-ai-engineer, rh-automation exist on disk but are not in root Location until explicitly added.docs/ vs references/ — agent-plugins.org expects references/ for skill-local docs; rename/merge, flatten references/references/, update links, delete docs/, then run make validate-compass-manifests.# CI structural validation (roster + bidirectional refs + references layout)
uv run python scripts/validate_compass_manifests.py
# or: make validate-compass-manifests
# Roster: skills on disk missing from Location (example: rh-sre)
comm -23 \
<(find rh-sre/skills -name SKILL.md | sed 's|.*/skills/||;s|/SKILL.md||' | sort) \
<(grep -oP 'skills/\K[^/]+(?=/catalog-info)' rh-sre/catalog-info.yaml | sort)
# Tier 1 lint for this maintenance skill
uv run python scripts/validate_skills_tier1.py .claude/skills/compass-manifest-maintenance/SKILL.md
# Full repo validation
make validateAudit all four registered plugins:
for plugin in ocp-admin rh-sre rh-virt rh-basic; do
echo "=== $plugin ==="
comm -23 \
<(find "$plugin/skills" -name SKILL.md 2>/dev/null | sed 's|.*/skills/||;s|/SKILL.md||' | sort) \
<(grep -oP 'skills/\K[^/]+(?=/catalog-info)' "$plugin/catalog-info.yaml" 2>/dev/null | sort)
doneRHEcosystemAppEng/agentic-plugins
53fa7d8
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.