skills/dag-skill-registry/SKILL.md
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).
npx skillsauth add curiositech/windags-skills dag-skill-registryInstall 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.
You are a DAG Skill Registry, the central catalog of all available skills. You maintain metadata, provide discovery services, and track performance history.
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%
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
1. Stale Metadata Syndrome
skill.lastUpdated < file.lastModified OR performance stats frozen for >30 days2. Inconsistent Statistics Drift
successRate > 1.0 OR averageTokens < 0 OR totalExecutions decreasing between updates3. Missing Dependency Cascade
pairsWith or dependencies that don't exist in registry4. Index Fragmentation Bloat
5. Circular Dependency Web
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');
// existing.version = '1.2.0', incoming.version = '2.0.0'
if (hasDependents(registry, 'code-reviewer')) {
const dependents = findSkillsDependingOn(registry, 'code-reviewer');
// Returns: ['pull-request-analyzer', 'security-scanner']
for (const dependent of dependents) {
if (!isCompatibleVersion(dependent.dependencies['code-reviewer'], '2.0.0')) {
// pull-request-analyzer requires code-reviewer ^1.0.0 - INCOMPATIBLE
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
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');
// newSkill.pairsWith = [{ skillId: 'database-modeler', strength: 'recommended' }]
const cycles = detectCycles(registry.relationshipGraph, newSkill);
if (cycles.length > 0) {
// Found cycle: api-designer → database-modeler → api-designer
// Resolution strategy: Break at weakest link
const weakestPairing = findWeakestPairing(cycles[0]);
// database-modeler → api-designer has strength 'optional'
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
Registry operations are complete when:
pairsWith or dependencies arraysThis skill should NOT be used for:
dag-semantic-matcher insteaddag-capability-ranker insteaddag-executor insteaddag-skill-validator insteaddag-performance-profiler insteadDelegate these responsibilities:
dag-semantic-matcher handles natural languagedag-capability-ranker has ranking algorithmsdag-performance-profiler tracks live metricsdag-registry-federation manages multiple registriesdata-ai
license: Apache-2.0 NOT for unrelated tasks outside this domain.
development
Use when designing caching strategies (cache-aside, write-through, write-behind), implementing distributed locks, building rate limiters, leaderboards, real-time streams (XADD/consumer groups), pub/sub, or tuning eviction policies. Triggers: thundering-herd on cache miss, dogpile on key expiry, Redlock vs SET-NX-PX choice, sliding-window rate limiter, hot-key on a single cluster slot, big-key blowup, MULTI/EXEC across slots, KEYS in production. NOT for Redis Cluster operations/admin (different domain), embedded KV (SQLite, leveldb), in-process LRU caches, or Memcached.
tools
Drawing the `'use client'` boundary correctly in React Server Components apps (Next.js App Router, RSC frameworks) — leaf-pushing, slot composition, serialization rules, and environment poisoning prevention. Grounded in react.dev and Next.js 16 docs.
development
Use when designing rate limiting for an API, choosing between token bucket / sliding window / leaky bucket / fixed window, implementing it in Redis, deciding edge (Cloudflare/Upstash) vs origin enforcement, sizing per-user vs per-IP vs per-endpoint quotas, returning the right 429 response with Retry-After, or fixing the boundary-burst bug in fixed-window limiters. Triggers: 429 too many requests, INCR + EXPIRE, ZADD + ZREMRANGEBYSCORE + ZCARD, X-RateLimit-Remaining header, Cloudflare WAF rate limiting rules, Upstash @upstash/ratelimit, leaky bucket shaping vs policing, distributed rate limiter consistency. NOT for DDoS mitigation specifically (different scale), CAPTCHA / bot management, full WAF design, or per-user quota billing.