Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Token-efficient code analysis via 5-layer stack (AST, Call Graph, CFG, DFG, PDG). 95% token savings.
| Model | Eval pass | Runs |
|---|---|---|
| gemini-3.6-flash | 50% | 4 |
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 171% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 73% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 88% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 81% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 163% | 0% |
Token-efficient code analysis. 95% savings vs raw file reads.
| Task | Command | |------|---------| | File tree | tldr tree src/ | | Code structure | tldr structure . --lang python | | Search code | tldr search "pattern" . | | Call graph | tldr calls src/ | | Who calls X? | tldr impact func_name . | | Control flow | tldr cfg file.py func | | Data flow | tldr dfg file.py func | | Program slice | tldr slice file.py func 42 | | Dead code | tldr dead src/ | | Architecture | tldr arch src/ | | Imports | tldr imports file.py | | Who imports X? | tldr importers module_name . | | Affected tests | tldr change-impact --git | | Type check | tldr diagnostics file.py | | Semantic search | tldr semantic search "auth flow" |
Layer 1: AST ~500 tokens Function signatures, imports
Layer 2: Call Graph +440 tokens What calls what (cross-file)
Layer 3: CFG +110 tokens Complexity, branches, loops
Layer 4: DFG +130 tokens Variable definitions/uses
Layer 5: PDG +150 tokens Dependencies, slicing
───────────────────────────────────────────────────────────────
Total: ~1,200 tokens vs 23,000 raw = 95% savingsbash# File tree tldr tree [path] tldr tree src/ --ext .py .ts # Filter extensions tldr tree . --show-hidden # Include hidden files # Code structure (codemaps) tldr structure [path] --lang python tldr structure src/ --max 100 # Max files to analyze
bash# Text search tldr search <pattern> [path] tldr search "def process" src/ tldr search "class.*Error" . --ext .py tldr search "TODO" . -C 3 # 3 lines context tldr search "func" . --max 50 # Limit results # Semantic search (natural language) tldr semantic search "authentication flow" tldr semantic search "error handling" --k 10 tldr semantic search "database queries" --expand # Include call graph
bash# Full file info tldr extract <file> tldr extract src/api.py tldr extract src/api.py --class UserService # Filter to class tldr extract src/api.py --function process # Filter to function tldr extract src/api.py --method UserService.get # Filter to method # Relevant context (follows call graph) tldr context <entry> --project <path> tldr context main --project src/ --depth 3 tldr context UserService.create --project . --lang typescript
bash# Control flow graph (complexity) tldr cfg <file> <function> tldr cfg src/processor.py process_data # Returns: cyclomatic complexity, blocks, branches, loops # Data flow graph (variable tracking) tldr dfg <file> <function> tldr dfg src/processor.py process_data # Returns: where variables are defined, read, modified # Program slice (what affects line X) tldr slice <file> <function> <line> tldr slice src/processor.py process_data 42 tldr slice src/processor.py process_data 42 --direction forward tldr slice src/processor.py process_data 42 --var result
bash# Build cross-file call graph tldr calls [path] tldr calls src/ --lang python # Reverse call graph (who calls this function?) tldr impact <func> [path] tldr impact process_data src/ --depth 5 tldr impact authenticate . --file auth # Filter by file # Find dead/unreachable code tldr dead [path] tldr dead src/ --entry main cli test_ # Specify entry points tldr dead . --lang typescript # Detect architectural layers tldr arch [path] tldr arch src/ --lang python # Returns: entry layer, middle layer, leaf layer, circular deps
bash# Parse imports from file tldr imports <file> tldr imports src/api.py tldr imports src/api.ts --lang typescript # Reverse import lookup (who imports this module?) tldr importers <module> [path] tldr importers datetime src/ tldr importers UserService . --lang typescript
bash# Type check + lint tldr diagnostics <file|path> tldr diagnostics src/api.py tldr diagnostics . --project # Whole project tldr diagnostics src/ --no-lint # Type check only tldr diagnostics src/ --format text # Human-readable # Find affected tests tldr change-impact [files...] tldr change-impact # Auto-detect (session/git) tldr change-impact src/api.py # Explicit files tldr change-impact --session # Session-modified files tldr change-impact --git # Git diff files tldr change-impact --git --git-base main # Diff against branch tldr change-impact --run # Actually run affected tests
bash# Pre-build call graph cache tldr warm <path> tldr warm src/ --lang python tldr warm . --background # Build in background # Build semantic index (one-time) tldr semantic index [path] tldr semantic index . --lang python tldr semantic index . --model all-MiniLM-L6-v2 # Smaller model (80MB)
The daemon holds indexes in memory for instant repeated queries.
bash# Start daemon (backgrounds automatically) tldr daemon start tldr daemon start --project /path/to/project # Check status tldr daemon status # Stop daemon tldr daemon stop # Send raw command tldr daemon query ping tldr daemon query status # Notify file change (for hooks) tldr daemon notify <file> tldr daemon notify src/api.py
| Feature | Description | |---------|-------------| | Auto-shutdown | 30 minutes idle | | Query caching | SalsaDB memoization | | Content hashing | Skip unchanged files | | Dirty tracking | Incremental re-indexing | | Cross-platform | Unix sockets / Windows TCP |
Send JSON to socket, receive JSON response:
json// Request {"cmd": "search", "pattern": "process", "max_results": 10} // Response {"status": "ok", "results": [...]}
All 22 daemon commands:
ping, status, shutdown, search, extract, impact, dead, arch,
cfg, dfg, slice, calls, warm, semantic, tree, structure,
context, imports, importers, notify, diagnostics, change_impactNatural language code search using embeddings.
bash# Build index (downloads model on first run) tldr semantic index . # Default model: bge-large-en-v1.5 (1.3GB, best quality) # Smaller model: all-MiniLM-L6-v2 (80MB, faster) tldr semantic index . --model all-MiniLM-L6-v2
bashtldr semantic search "authentication flow" tldr semantic search "error handling patterns" --k 10 tldr semantic search "database connection" --expand # Follow call graph
In .claude/settings.json:
json{ "semantic_search": { "enabled": true, "auto_reindex_threshold": 20, "model": "bge-large-en-v1.5" } }
| Language | AST | Call Graph | CFG | DFG | PDG | |----------|-----|------------|-----|-----|-----| | Python | Yes | Yes | Yes | Yes | Yes | | TypeScript | Yes | Yes | Yes | Yes | Yes | | JavaScript | Yes | Yes | Yes | Yes | Yes | | Go | Yes | Yes | Yes | Yes | Yes | | Rust | Yes | Yes | Yes | Yes | Yes | | Java | Yes | Yes | - | - | - | | C/C++ | Yes | Yes | - | - | - | | Ruby | Yes | - | - | - | - | | PHP | Yes | - | - | - | - | | Kotlin | Yes | - | - | - | - | | Swift | Yes | - | - | - | - | | C# | Yes | - | - | - | - | | Scala | Yes | - | - | - | - | | Lua | Yes | - | - | - | - | | Elixir | Yes | - | - | - | - |
TLDR respects .tldrignore (gitignore syntax):
gitignore# .tldrignore .venv/ __pycache__/ node_modules/ *.min.js dist/
First run creates .tldrignore with sensible defaults. Use --no-ignore to bypass.
| Task | Use TLDR | Use Grep | |------|----------|----------| | Find function definition | tldr extract file --function X | - | | Search code patterns | tldr search "pattern" | - | | String literal search | - | grep "literal" | | Config values | - | grep "KEY=" | | Cross-file calls | tldr calls | - | | Reverse deps | tldr impact func | - | | Complexity analysis | tldr cfg file func | - | | Variable tracking | tldr dfg file func | - | | Natural language query | tldr semantic search | - |
pythonfrom tldr.api import ( # L1: AST extract_file, extract_functions, get_imports, # L2: Call Graph build_project_call_graph, get_intra_file_calls, # L3: CFG get_cfg_context, # L4: DFG get_dfg_context, # L5: PDG get_slice, get_pdg_context, # Unified get_relevant_context, # Analysis analyze_dead_code, analyze_architecture, analyze_impact, ) # Example: Get context for LLM ctx = get_relevant_context("src/", "main", depth=2, language="python") print(ctx.to_llm_string())
Key insight: TLDR navigates, then you read. Don't try to fix bugs from summaries alone.
bash# 1. NAVIGATE: Find which files matter tldr imports file.py # What does buggy file depend on? tldr impact func_name . # Who calls the buggy function? tldr calls . # Cross-file edges (follow 2-hop for models) # 2. READ: Get actual code for critical files (2-4 files, not all 50) # Use Read tool or tldr search -C for code with context tldr search "def buggy_func" . -C 20
For cross-file bugs (e.g., wrong field name, type mismatch), you need to see:
task.user_id)owner_id)TLDR finds which files matter. Then you read them.
If TLDR output isn't enough:
tldr search "pattern" . -C 20 - Get actual code with 20 lines contexttldr imports file.py - See what a file depends onRaw file read: 23,314 tokens
TLDR all layers: 1,189 tokens
─────────────────────────────────
Savings: 95%The insight: Call graph navigates to relevant code, then layers give structured summaries. You don't read irrelevant code.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 7,031 | 3,272 | -53% | 1 | 1 | 0% | 1,289 | 3,498 | +171% | 0 | 0 | — |
case-02 | fail→pass | 12,234 | 2,593 | -79% | 1 | 1 | 0% | 2,038 | 3,532 | +73% | 0 | 0 | — |
case-11 | fail→pass | 9,642 | 1,920 | -80% | 1 | 1 | 0% | 1,783 | 3,356 | +88% | 0 | 0 | — |
case-03 | fail→pass | 10,668 | 2,303 | -78% | 1 | 1 | 0% | 1,870 | 3,386 | +81% | 0 | 0 | — |
case-04 | fail→pass | 8,049 | 4,235 | -47% | 1 | 1 | 0% | 1,436 | 3,771 | +163% | 0 | 0 | — |
case-05 | pass→pass | 9,872 | 3,605 | -63% | 1 | 1 | 0% | 1,670 | 3,725 | +123% | 0 | 0 | — |
case-06 | pass→pass | 8,825 | 3,030 | -66% | 1 | 1 | 0% | 1,492 | 3,604 | +142% | 0 | 0 | — |
case-07 | fail→pass | 8,507 | 1,564 | -82% | 1 | 1 | 0% | 1,283 | 3,307 | +158% | 0 | 0 | — |
case-08 | fail→pass | 10,037 | 1,527 | -85% | 1 | 1 | 0% | 1,744 | 3,310 | +90% | 0 | 0 | — |
case-09 | fail→pass | 7,985 | 1,555 | -81% | 1 | 1 | 0% | 1,474 | 3,268 | +122% | 0 | 0 | — |
case-10 | fail→pass | 18,034 | 1,356 | -92% | 1 | 1 | 0% | 3,262 | 3,261 | -0% | 0 | 0 | — |
case-17 | fail→pass | 9,113 | 1,522 | -83% | 1 | 1 | 0% | 1,573 | 3,279 | +108% | 0 | 0 | — |
case-12 | pass→pass | 7,676 | 2,157 | -72% | 1 | 1 | 0% | 1,431 | 3,428 | +140% | 0 | 0 | — |
case-13 | fail→pass | 4,780 | 1,329 | -72% | 1 | 1 | 0% | 814 | 3,222 | +296% | 0 | 0 | — |
case-14 | fail→pass | 7,752 | 1,080 | -86% | 1 | 1 | 0% | 1,346 | 3,166 | +135% | 0 | 0 | — |
case-15 | fail→pass | 3,763 | 1,814 | -52% | 1 | 1 | 0% | 667 | 3,292 | +394% | 0 | 0 | — |
case-16 | fail→pass | 14,433 | 2,375 | -84% | 1 | 1 | 0% | 2,355 | 3,460 | +47% | 0 | 0 | — |
case-18 | fail→pass | 9,376 | 1,722 | -82% | 1 | 1 | 0% | 1,641 | 3,311 | +102% | 0 | 0 | — |
case-19 | fail→pass | 13,773 | 1,423 | -90% | 1 | 1 | 0% | 2,268 | 3,277 | +44% | 0 | 0 | — |
case-20 | fail→pass | 8,244 | 2,111 | -74% | 1 | 1 | 0% | 1,509 | 3,450 | +129% | 0 | 0 | — |
case-21 | fail→pass | 10,111 | 2,683 | -73% | 1 | 1 | 0% | 1,618 | 3,555 | +120% | 0 | 0 | — |
case-22 | pass→pass | 5,961 | 1,668 | -72% | 1 | 1 | 0% | 1,059 | 3,281 | +210% | 0 | 0 | — |
case-23 | fail→pass | 7,878 | 2,192 | -72% | 1 | 1 | 0% | 1,405 | 3,459 | +146% | 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. 23 cases were attempted. The headline lift of +83 percentage points is the difference between those two pass rates over the 23 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/30/2026 | +43% |
Other measured skills in the registry, with their headline benchmark lift.