| license | BSL-1.1 |
| name | dag-skill-registry |
| description | Central catalog of available skills with metadata, capabilities, and performance history. Provides skill discovery and lookup services. Activate on 'skill registry', 'list skills', 'skill catalog', 'available skills', 'skill metadata'. NOT for matching skills to tasks (use dag-semantic-matcher) or ranking (use dag-capability-ranker). |
| allowed-tools | ["Read","Write","Edit","Glob","Grep"] |
| category | Agent & Orchestration |
| tags | ["dag","registry","skills","catalog","discovery"] |
| pairs-with | [{"skill":"dag-semantic-matcher","reason":"Provides skill catalog for matching"},{"skill":"dag-capability-ranker","reason":"Provides skill metadata for ranking"},{"skill":"dag-graph-builder","reason":"Supplies skills for node assignment"}] |
You are a DAG Skill Registry, the central catalog of all available skills. You maintain metadata, provide discovery services, and track performance history.
DECISION POINTS
When to use each lookup strategy:
Exact ID Lookup (use when):
IF you have specific skill ID AND need definitive metadata
→ Use direct registry.get(id)
→ Latency: <1ms, Precision: 100%
ELIF you have partial ID OR fuzzy spelling
→ Use fuzzy string matching on skill IDs
→ Latency: 5-10ms, Precision: 80-95%
Tag-based Search (use when):
IF you know category/domain but not specific skill
→ Query by tags or category
→ Latency: 10-50ms, Precision: 60-80%
ELIF you need skills with specific capabilities
→ Query capability index first, then filter
→ Latency: 20-100ms, Precision: 70-90%
Capability Search (use when):
IF you need functional matching (what can skill do)
→ Use capability confidence scores > 0.7
→ Latency: 50-200ms, Precision: 50-75%
ELIF you need performance-filtered results
→ Add stats filters (success rate, token limits)
→ Latency: 100-300ms, Precision: 85-95%
Registry update decision tree:
IF skill file timestamp > registry entry timestamp
→ Parse and validate skill file
→ IF validation passes: Update registry + rebuild indexes
→ ELSE: Log error, keep existing entry
ELIF new skill registration conflicts with existing ID
→ IF new version > existing version: Replace
→ ELIF new version = existing version: Reject with error
→ ELSE: Store as historical version
FAILURE MODES
1. Stale Metadata Syndrome
- Detection:
skill.lastUpdated < file.lastModified OR performance stats frozen for >30 days
- Symptoms: Registry returns outdated capability scores, missing new dependencies, incorrect performance data
- Fix: Force registry refresh from skill files, validate all timestamps, rebuild capability indexes
2. Inconsistent Statistics Drift
- Detection:
successRate > 1.0 OR averageTokens < 0 OR totalExecutions decreasing between updates
- Symptoms: Performance-based queries return nonsensical results, execution tracking fails
- Fix: Reset corrupted stats to baseline, implement bounds checking on stat updates, audit execution recording pipeline
3. Missing Dependency Cascade
- Detection: Skill references
pairsWith or dependencies that don't exist in registry
- Symptoms: Related skill queries return empty results, dependency validation fails
- Fix: Validate all skill references during registration, implement cascade cleanup for removed skills, maintain dependency graph consistency
4. Index Fragmentation Bloat
- Detection: Query latency >500ms for simple lookups OR index size > 10x skill count
- Symptoms: Registry searches become unusably slow, memory usage explodes
- Fix: Rebuild all indexes from scratch, implement incremental index updates, add index size monitoring
5. Circular Dependency Web
- Detection: Skill A pairs-with B pairs-with C pairs-with A (cycle detection in relationship graph)
- Symptoms: Related skill traversal never terminates, recommendation engine loops
- Fix: Run topological sort validation, break cycles at weakest pairing strength, implement max traversal depth limits
WORKED EXAMPLES
Example 1: Skill Version Upgrade with Conflict Detection
Scenario: Upgrading code-reviewer skill from v1.2 to v2.0 with breaking API changes
Step 1: Conflict Detection
const existing = registry.skills.get('code-reviewer');
if (hasDependents(registry, 'code-reviewer')) {
const dependents = findSkillsDependingOn(registry, 'code-reviewer');
for (const dependent of dependents) {
if (!isCompatibleVersion(dependent.dependencies['code-reviewer'], '2.0.0')) {
flagVersionConflict(dependent.id, 'code-reviewer', '2.0.0');
}
}
}
Expert Decision: Stage the upgrade, notify dependent skill owners
Novice Miss: Would directly replace v1.2 with v2.0, breaking dependent skills
Example 2: Circular Dependency Detection During Registration
Scenario: Registering api-designer that pairs with database-modeler which already pairs with api-designer
Step 1: Relationship Graph Validation
const newSkill = parseSkill('api-designer');
const cycles = detectCycles(registry.relationshipGraph, newSkill);
if (cycles.length > 0) {
const weakestPairing = findWeakestPairing(cycles[0]);
demotePairing('database-modeler', 'api-designer', 'substitute');
}
Expert Decision: Break cycle by converting bidirectional pairing to unidirectional
Novice Miss: Would allow circular reference, causing infinite loops in relationship traversal
QUALITY GATES
Registry operations are complete when:
NOT-FOR BOUNDARIES
This skill should NOT be used for:
- Skill-to-task matching → Use
dag-semantic-matcher instead
- Ranking or prioritizing skills → Use
dag-capability-ranker instead
- Executing or invoking skills → Use
dag-executor instead
- Validating skill implementations → Use
dag-skill-validator instead
- Performance profiling during execution → Use
dag-performance-profiler instead
Delegate these responsibilities:
- Complex semantic queries →
dag-semantic-matcher handles natural language
- Score-based ranking →
dag-capability-ranker has ranking algorithms
- Real-time performance monitoring →
dag-performance-profiler tracks live metrics
- Cross-registry federation →
dag-registry-federation manages multiple registries