Author and maintain Compass catalog-info.yaml manifests for agentic packs (skills, plugins, Locations, MCP inverse relations). Use when: - Adding or updating a skill and its Compass manifest - Registering an existing pack in Compass (manifests only; not creating a new agentic pack) - 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.
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 <pack>, <skill-name>, and on-disk manifest paths.
Resolve <pack> and <skill-name> — confirm <pack>/skills/<skill-name>/SKILL.md exists.
Read golden sources (precedence):
<pack>/<pack>-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<pack>/mcps.json — server keys (map via mcp-mapping.md)<pack>/AGENTS.md — tags/disciplines hints only (not orchestration inference)Derive dependsOn for the skill manifest:
airesource:ai5-marketplace/<pack>/other-skill invocations in SKILL.mdmcpserver: entriesSet spec.lifecycle (do not hardcode beta):
spec.lifecycle from <pack>/<pack>-plugin.yaml — use as the default for the skill.beta → skill development is OK; plugin development → skill beta is not allowed).Write <pack>/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 pack or update when editing orchestrator)Update inverse manifests (relationship-rules.md):
<pack>/catalog-info.yaml — ./skills/<skill-name>/catalog-info.yaml in spec.targets<pack>/<pack>-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 pack skill manifests.
Verify skill documentation layout (agent-plugins.org / agentskills.io):
skills/<skill-name>/references/, not docs/.<pack>/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).<pack>/<pack>-plugin.yaml from assets/plugin-catalog-info.yaml with spec.lifecycle: development (default for new packs; confirm with user before raising maturity).<pack>/catalog-info.yaml from assets/pack-location.yaml../<pack>/catalog-info.yaml to root catalog-info.yaml.airesource:ai5-marketplace/<pack> to system.yaml spec.dependencyOf.<pack>/.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 pack 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 pack.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 packs:
for pack in ocp-admin rh-sre rh-virt rh-basic; do
echo "=== $pack ==="
comm -23 \
<(find "$pack/skills" -name SKILL.md 2>/dev/null | sed 's|.*/skills/||;s|/SKILL.md||' | sort) \
<(grep -oP 'skills/\K[^/]+(?=/catalog-info)' "$pack/catalog-info.yaml" 2>/dev/null | sort)
donee46c4fa
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.