https://github.com/parcadei/llm-tldr
95% token savings. 155x faster queries. 16 languages. LLMs can't read your entire codebase. TLDR extracts structure, traces dependencies, and gives them exactly what they need.
https://github.com/parcadei/llm-tldr
Last synced: 22 days ago
JSON representation
95% token savings. 155x faster queries. 16 languages. LLMs can't read your entire codebase. TLDR extracts structure, traces dependencies, and gives them exactly what they need.
- Host: GitHub
- URL: https://github.com/parcadei/llm-tldr
- Owner: parcadei
- License: apache-2.0
- Created: 2026-01-09T08:55:54.000Z (6 months ago)
- Default Branch: main
- Last Pushed: 2026-01-10T16:54:16.000Z (6 months ago)
- Last Synced: 2026-01-11T00:11:24.460Z (6 months ago)
- Language: Python
- Homepage:
- Size: 363 KB
- Stars: 96
- Watchers: 2
- Forks: 17
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Notice: NOTICE
Awesome Lists containing this project
- awesome - parcadei/llm-tldr
README
# TLDR: Code Analysis for AI Agents
[](https://pypi.org/project/llm-tldr/)
[](https://pypi.org/project/llm-tldr/)
[](LICENSE)
**Give LLMs exactly the code they need. Nothing more.**
```bash
# One-liner: Install, index, search
pip install llm-tldr && tldr warm . && tldr semantic "what you're looking for" .
```
Your codebase is 100K lines. Claude's context window is 200K tokens. Raw code won't fit—and even if it did, the LLM would drown in irrelevant details.
TLDR extracts *structure* instead of dumping *text*. The result: **95% fewer tokens** while preserving everything needed to understand and edit code correctly.
```bash
pip install llm-tldr
tldr warm . # Index your project
tldr context main --project . # Get LLM-ready summary
```
---
## How It Works
TLDR builds 5 analysis layers, each answering different questions:
```
┌─────────────────────────────────────────────────────────────┐
│ Layer 5: Program Dependence → "What affects line 42?" │
│ Layer 4: Data Flow → "Where does this value go?" │
│ Layer 3: Control Flow → "How complex is this?" │
│ Layer 2: Call Graph → "Who calls this function?" │
│ Layer 1: AST → "What functions exist?" │
└─────────────────────────────────────────────────────────────┘
```
**Why layers?** Different tasks need different depth:
- Browsing code? Layer 1 (structure) is enough
- Refactoring? Layer 2 (call graph) shows what breaks
- Debugging null? Layer 5 (slice) shows only relevant lines
The daemon keeps indexes in memory for **100ms queries** instead of 30-second CLI spawns.
### Architecture
```
┌──────────────────────────────────────────────────────────────────┐
│ YOUR CODE │
│ src/*.py, lib/*.ts, pkg/*.go │
└───────────────────────────┬──────────────────────────────────────┘
│ tree-sitter
▼
┌──────────────────────────────────────────────────────────────────┐
│ 5-LAYER ANALYSIS │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ AST │→│ Calls │→│ CFG │→│ DFG │→│ PDG │ │
│ │ L1 │ │ L2 │ │ L3 │ │ L4 │ │ L5 │ │
│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │
└───────────────────────────┬──────────────────────────────────────┘
│ bge-large-en-v1.5
▼
┌──────────────────────────────────────────────────────────────────┐
│ SEMANTIC INDEX │
│ 1024-dim embeddings in FAISS → "find JWT validation" │
└───────────────────────────┬──────────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────────────┐
│ DAEMON │
│ In-memory indexes • 100ms queries • Auto-lifecycle │
└──────────────────────────────────────────────────────────────────┘
```
### The Semantic Layer: Search by Behavior
The real power comes from combining all 5 layers into **searchable embeddings**.
Every function gets indexed with:
- Signature + docstring (L1)
- What it calls + who calls it (L2)
- Complexity metrics (L3)
- Data flow patterns (L4)
- Dependencies (L5)
- First ~10 lines of actual code
This gets encoded into **1024-dimensional vectors** using `bge-large-en-v1.5`. The result: search by *what code does*, not just what it says.
```bash
# "validate JWT" finds verify_access_token() even without that exact text
tldr semantic "validate JWT tokens and check expiration" .
```
**Why this works:** Traditional search finds `authentication` in variable names and comments. Semantic search understands that `verify_access_token()` *performs* JWT validation because the call graph and data flow reveal its purpose.
### Setting Up Semantic Search
```bash
# Build the semantic index (one-time, ~2 min for typical project)
tldr warm /path/to/project
# Search by behavior
tldr semantic "database connection pooling" .
```
Embedding dependencies (`sentence-transformers`, `faiss-cpu`) are included with `pip install llm-tldr`. The index is cached in `.tldr/cache/semantic.faiss`.
### Keeping the Index Fresh
The daemon tracks dirty files and auto-rebuilds after 20 changes, but you need to notify it when files change:
```bash
# Notify daemon of a changed file
tldr daemon notify src/auth.py --project .
```
**Integration options:**
1. **Git hook** (post-commit):
```bash
git diff --name-only HEAD~1 | xargs -I{} tldr daemon notify {} --project .
```
2. **Editor hook** (on save):
```bash
tldr daemon notify "$FILE" --project .
```
3. **Manual rebuild** (when needed):
```bash
tldr warm . # Full rebuild
```
The daemon auto-rebuilds semantic embeddings in the background once the dirty threshold (default: 20 files) is reached.
---
## The Workflow
### Before Reading Code
```bash
tldr tree src/ # See file structure
tldr structure src/ --lang python # See functions/classes
```
### Before Editing
```bash
tldr extract src/auth.py # Full file analysis
tldr context login --project . # LLM-ready summary (95% savings)
```
### Before Refactoring
```bash
tldr impact login . # Who calls this? (reverse call graph)
tldr change-impact # Which tests need to run?
```
### Debugging
```bash
tldr slice src/auth.py login 42 # What affects line 42?
tldr dfg src/auth.py login # Trace data flow
```
### Finding Code by Behavior
```bash
tldr semantic "validate JWT tokens" . # Natural language search
```
---
## Quick Setup
### 1. Install
```bash
pip install llm-tldr
```
### 2. Index Your Project
```bash
tldr warm /path/to/project
```
This builds all analysis layers and starts the daemon. Takes 30-60 seconds for a typical project, then queries are instant.
### 3. Start Using
```bash
tldr context main --project . # Get context for a function
tldr impact helper_func . # See who calls it
tldr semantic "error handling" # Find by behavior
```
---
## Real Example: Why This Matters
**Scenario:** Debug why `user` is null on line 42.
**Without TLDR:**
1. Read the 150-line function
2. Trace every variable manually
3. Miss the bug because it's hidden in control flow
**With TLDR:**
```bash
tldr slice src/auth.py login 42
```
**Output:** Only 6 lines that affect line 42:
```python
3: user = db.get_user(username)
7: if user is None:
12: raise NotFound
28: token = create_token(user) # ← BUG: skipped null check
35: session.token = token
42: return session
```
The bug is obvious. Line 28 uses `user` without going through the null check path.
---
## Command Reference
### Exploration
| Command | What It Does |
|---------|--------------|
| `tldr tree [path]` | File tree |
| `tldr structure [path] --lang ` | Functions, classes, methods |
| `tldr search [path]` | Text pattern search |
| `tldr extract ` | Full file analysis |
### Analysis
| Command | What It Does |
|---------|--------------|
| `tldr context --project ` | LLM-ready summary (95% savings) |
| `tldr cfg ` | Control flow graph |
| `tldr dfg ` | Data flow graph |
| `tldr slice ` | Program slice |
### Cross-File
| Command | What It Does |
|---------|--------------|
| `tldr calls [path]` | Build call graph |
| `tldr impact [path]` | Find all callers (reverse call graph) |
| `tldr dead [path]` | Find unreachable code |
| `tldr arch [path]` | Detect architecture layers |
| `tldr imports ` | Parse imports |
| `tldr importers [path]` | Find files that import a module |
### Semantic
| Command | What It Does |
|---------|--------------|
| `tldr warm ` | Build all indexes (including embeddings) |
| `tldr semantic [path]` | Natural language code search |
### Diagnostics
| Command | What It Does |
|---------|--------------|
| `tldr diagnostics ` | Type check + lint |
| `tldr change-impact [files]` | Find tests affected by changes |
| `tldr doctor` | Check/install diagnostic tools |
### Daemon
| Command | What It Does |
|---------|--------------|
| `tldr daemon start` | Start background daemon |
| `tldr daemon stop` | Stop daemon |
| `tldr daemon status` | Check status |
---
## Supported Languages
Python, TypeScript, JavaScript, Go, Rust, Java, C, C++, Ruby, PHP, C#, Kotlin, Scala, Swift, Lua, Elixir
Language is auto-detected or specify with `--lang`.
---
## MCP Integration
For AI tools (Claude Desktop, Claude Code):
**Claude Desktop** - Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:
```json
{
"mcpServers": {
"tldr": {
"command": "tldr-mcp",
"args": ["--project", "/path/to/your/project"]
}
}
}
```
**Claude Code** - Add to `.claude/settings.json`:
```json
{
"mcpServers": {
"tldr": {
"command": "tldr-mcp",
"args": ["--project", "."]
}
}
}
```
---
## Configuration
### `.tldrignore` - Exclude Files
TLDR respects `.tldrignore` (gitignore syntax) for all commands including `tree`, `structure`, `search`, `calls`, and semantic indexing:
```bash
# Auto-create with sensible defaults
tldr warm . # Creates .tldrignore if missing
```
**Default exclusions:**
- `node_modules/`, `.venv/`, `__pycache__/`
- `dist/`, `build/`, `*.egg-info/`
- Binary files (`*.so`, `*.dll`, `*.whl`)
- Security files (`.env`, `*.pem`, `*.key`)
**Customize** by editing `.tldrignore`:
```gitignore
# Add your patterns
large_test_fixtures/
vendor/
data/*.csv
```
**CLI Flags:**
```bash
# Add patterns from command line (can be repeated)
tldr --ignore "packages/old/" --ignore "*.generated.ts" tree .
# Bypass all ignore patterns
tldr --no-ignore tree .
```
### Settings - Daemon Behavior
Create `.tldr/config.json` for daemon settings:
```json
{
"semantic": {
"enabled": true,
"auto_reindex_threshold": 20
}
}
```
| Setting | Default | Description |
|---------|---------|-------------|
| `enabled` | `true` | Enable semantic search |
| `auto_reindex_threshold` | `20` | Files changed before auto-rebuild |
### Monorepo Support
For monorepos, create `.claude/workspace.json` to scope indexing:
```json
{
"active_packages": ["packages/core", "packages/api"],
"exclude_patterns": ["**/fixtures/**"]
}
```
---
## Performance
| Metric | Raw Code | TLDR | Improvement |
|--------|----------|------|-------------|
| Tokens for function context | 21,000 | 175 | **99% savings** |
| Tokens for codebase overview | 104,000 | 12,000 | **89% savings** |
| Query latency (daemon) | 30s | 100ms | **300x faster** |
---
## Deep Dive
For the full architecture explanation, benchmarks, and advanced workflows:
**[Full Documentation](./docs/TLDR.md)**
---
## License
AGPL-3.0 - See LICENSE file.