skills/dag-skills-matcher/SKILL.md
Matches natural language task descriptions to appropriate skills using semantic similarity, ranks candidates by fit and performance history, and maintains the skill catalog. Use when assigning skills to DAG nodes, searching for the right skill for a task, ranking competing skills, or browsing the skill catalog. Activate on "find skill", "match skill", "which skill", "skill for this task", "skill catalog", "rank skills", "best skill". NOT for executing DAGs (use dag-runtime), creating skills (use skill-architect), or grading skills (use skill-grader).
npx skillsauth add curiositech/windags-skills dag-skills-matcherInstall 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.
Matches tasks to skills, ranks candidates, and maintains the skill catalog.
task_description → extract_intent()
├─ fit_score ≥ 0.5 for top candidate?
│ ├─ YES → check NOT clauses
│ │ ├─ passes → assign skill
│ │ └─ fails → try next candidate
│ └─ NO → retry with broader search terms
│ └─ still no fit_score ≥ 0.5?
│ └─ escalate to skill-architect (new skill needed)
task_complexity = count(technical_terms, domain_words, constraints)
├─ complexity ≤ 3 → keyword_search_only
├─ 4-8 → keyword + semantic_similarity
└─ >8 → full_pipeline (keyword + semantic + domain_tags + thompson)
candidate_count → ranking_strategy
├─ 1-2 candidates → simple fit_score ranking
├─ 3-5 candidates → weighted: fit(0.5) + elo(0.3) + cost(0.2)
└─ >5 candidates → full scoring with thompson sampling
task_priority + budget_constraints → selection_criteria
├─ high_priority + unlimited_budget → maximize fit_score + elo
├─ medium_priority → balanced scoring (default weights)
└─ low_priority + cost_sensitive → weight cost(0.5) + fit(0.3) + elo(0.2)
Symptoms: fit_scores consistently < 0.3, many "skill not found" escalations Detection: If >20% of searches in 24h escalate to skill-architect Fix: Update skill descriptions with recent task language patterns
Symptoms: Same 2-3 skills always selected, no skill performance comparison data Detection: If top skill selection rate > 80% for any domain over 100 tasks Fix: Increase Thompson sampling beta parameter by 10%, force exploration
Symptoms: Skills assigned to incompatible tasks, high downstream failure rates Detection: If downstream acceptance_rate < 0.7 for any skill Fix: Strengthen NOT-clause checking, add regex patterns for exclusion terms
Symptoms: Skills matched on superficial word similarity, not actual capability Detection: If fit_score > 0.7 but downstream acceptance_rate < 0.5 Fix: Add domain-specific negative embeddings, weight keyword matching higher
Symptoms: Always selecting cheapest skills, degrading output quality Detection: If avg_cost_per_use drops >30% while acceptance_rate drops >15% Fix: Set minimum fit_score threshold (0.5), reject candidates below threshold regardless of cost
Task: "Build a scikit-learn classifier for customer churn prediction with hyperparameter tuning"
Process:
sklearn-tuner (fit=0.85, elo=1750), automl-skill (fit=0.72, elo=1820), python-ml-basic (fit=0.65, elo=1680)Novice miss: Would pick automl-skill due to higher Elo, missing that sklearn-tuner is more specifically matched Expert catch: Recognizes hyperparameter tuning keyword strongly favors sklearn-tuner despite slightly lower Elo
Task: "Review this code for issues"
Process:
code-review-general (fit=0.55)Expert insight: Recognizes that vague tasks need either clarification or new specialized skills
This skill should NOT be used for:
skill-architect insteadskill-grader insteaddag-runtime insteadskill-configurator insteadskill-lifecycle-manager insteadDomain boundaries:
skill-marketplace insteadskill-analytics insteadskill-federation insteaddata-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.