Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Choose the right search tool for each query type
.claude/skills/search-router/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 187% | 0% |
| case-04 | ✗→✓ | ▲ Improved | -13% | 0% |
| case-05 | ✗→✓ | ▲ Improved | -25% | 0% |
| case-12 | ✗→✓ | ▲ Improved | -21% | 0% |
| case-14 | ✗→✓ | ▲ Improved | -18% | 0% |
Use the most token-efficient search tool for each query type.
Query Type?
├── CODE EXPLORATION (symbols, call chains, data flow)
│ → TLDR Search - 95% token savings
│ DEFAULT FOR ALL CODE SEARCH - use instead of Grep
│ Examples: "spawn_agent", "DataPoller", "redis usage"
│ Command: tldr search "query" .
│
├── STRUCTURAL (AST patterns)
│ → AST-grep (/ast-grep-find) - ~50 tokens output
│ Examples: "def foo", "class Bar", "import X", "@decorator"
│
├── SEMANTIC (conceptual questions)
│ → TLDR Semantic - 5-layer embeddings (P6)
│ Examples: "how does auth work", "find error handling patterns"
│ Command: tldr semantic search "query"
│
├── LITERAL (exact text, regex)
│ → Grep tool - LAST RESORT
│ Only when TLDR/AST-grep don't apply
│ Examples: error messages, config values, non-code text
│
└── FULL CONTEXT (need complete understanding)
→ Read tool - 1500+ tokens
Last resort after finding the right file| Tool | Output Size | Best For | |------|-------------|----------| | TLDR | ~50-500 | DEFAULT: Code symbols, call graphs, data flow | | TLDR Semantic | ~100-300 | Conceptual queries (P6, embedding-based) | | AST-grep | ~50 tokens | Function/class definitions, imports, decorators | | Grep | ~200-2000 | LAST RESORT: Non-code text, regex | | Read | ~1500+ | Full understanding after finding the file |
bash# CODE EXPLORATION → TLDR (DEFAULT) tldr search "spawn_agent" . tldr search "redis" . --layer call_graph # STRUCTURAL → AST-grep /ast-grep-find "async def $FUNC($$$):" --lang python # SEMANTIC → TLDR Semantic tldr semantic search "how does authentication work" # LITERAL → Grep (LAST RESORT - prefer TLDR) Grep pattern="check_evocation" path=opc/scripts # FULL CONTEXT → Read (after finding file) Read file_path=opc/scripts/z3_erotetic.py
1. AST-grep: "Find async functions" → 3 file:line matches
2. Read: Top match only → Full understanding
3. Skip: 4 irrelevant files → 6000 tokens saved/tldr-search - DEFAULT - Code exploration with 95% token savings/ast-grep-find - Structural code search/morph-search - Fast text search| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 2,751 | 2,653 | -4% | 1 | 1 | 0% | 366 | 1,050 | +187% | 0 | 0 | — |
case-02 | pass→pass | 8,255 | 5,187 | -37% | 1 | 1 | 0% | 1,451 | 1,581 | +9% | 0 | 0 | — |
case-03 | fail→fail | 3,497 | 5,741 | +64% | 1 | 1 | 0% | 480 | 983 | +105% | 0 | 0 | — |
case-04 | fail→pass | 8,930 | 2,733 | -69% | 1 | 1 | 0% | 1,279 | 1,119 | -13% | 0 | 0 | — |
case-05 | fail→pass | 10,062 | 2,950 | -71% | 1 | 1 | 0% | 1,631 | 1,229 | -25% | 0 | 0 | — |
case-06 | pass→pass | 7,262 | 3,299 | -55% | 1 | 1 | 0% | 1,168 | 1,329 | +14% | 0 | 0 | — |
case-07 | pass→pass | 7,338 | 4,658 | -37% | 1 | 1 | 0% | 1,338 | 1,608 | +20% | 0 | 0 | — |
case-08 | pass→pass | 8,352 | 2,919 | -65% | 1 | 1 | 0% | 1,343 | 1,246 | -7% | 0 | 0 | — |
case-09 | pass→pass | 4,870 | 3,212 | -34% | 1 | 1 | 0% | 892 | 1,222 | +37% | 0 | 0 | — |
case-10 | pass→pass | 5,082 | 2,419 | -52% | 1 | 1 | 0% | 846 | 1,170 | +38% | 0 | 0 | — |
case-11 | pass→pass | 3,722 | 2,651 | -29% | 1 | 1 | 0% | 687 | 1,207 | +76% | 0 | 0 | — |
case-12 | fail→pass | 13,285 | 5,774 | -57% | 1 | 1 | 0% | 2,291 | 1,809 | -21% | 0 | 0 | — |
case-13 | pass→pass | 10,879 | 2,939 | -73% | 1 | 1 | 0% | 1,967 | 1,260 | -36% | 0 | 0 | — |
case-14 | fail→pass | 11,806 | 5,518 | -53% | 1 | 1 | 0% | 2,051 | 1,691 | -18% | 0 | 0 | — |
case-15 | pass→pass | 3,274 | 2,767 | -15% | 1 | 1 | 0% | 457 | 1,219 | +167% | 0 | 0 | — |
case-16 | pass→pass | 16,804 | 7,870 | -53% | 1 | 1 | 0% | 2,547 | 2,155 | -15% | 0 | 0 | — |
case-17 | fail→pass | 7,005 | 3,153 | -55% | 1 | 1 | 0% | 1,152 | 1,201 | +4% | 0 | 0 | — |
case-18 | pass→pass | 14,555 | 1,618 | -89% | 1 | 1 | 0% | 2,145 | 972 | -55% | 0 | 0 | — |
case-19 | fail→pass | 12,548 | 6,577 | -48% | 1 | 1 | 0% | 2,147 | 1,886 | -12% | 0 | 0 | — |
case-20 | pass→pass | 8,399 | 6,088 | -28% | 1 | 1 | 0% | 1,606 | 1,831 | +14% | 0 | 0 | — |
case-21 | pass→pass | 2,408 | 2,568 | +7% | 1 | 1 | 0% | 399 | 1,132 | +184% | 0 | 0 | — |
case-22 | pass→pass | 4,737 | 2,607 | -45% | 1 | 1 | 0% | 845 | 1,177 | +39% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 21 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +32 percentage points is the difference between those two pass rates over the 21 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
| Model | Method | Date | Lift |
|---|---|---|---|
| gemini-3.6-flash | verified | 7/29/2026 | +45% |
Other measured skills in the registry, with their headline benchmark lift.