ctx
A fast CLI tool that generates AI-ready context from your codebase, with built-in code intelligence for understanding symbol relationships.
Two Tools in One
Context Generation - Select files using glob patterns and get formatted output perfect for LLMs:
|
Code Intelligence - Build a searchable index of your codebase with call graphs and impact analysis:
Features
Context Generation
- Glob pattern support - Select files with patterns like
"src/**/*.rs"or"**/*.ts" - Smart ignore system - Respects
.gitignoreand.contextignore - Built-in filtering - Excludes binary files,
node_modules, build artifacts, and 170+ patterns - Multiple output formats - XML (default), Markdown, JSON, or plain text
- Project tree visualization - ASCII tree showing file structure
- Streaming output - Files output as processed, pipeable to clipboard
- Token counting - Count tokens for LLM context window management
Code Intelligence
- Multi-language parsing - Rust, TypeScript, JavaScript, JSX/TSX, Python, Go, Solidity, YAML
- Symbol extraction - Functions, classes, interfaces, structs, enums, traits
- Rich relationship tracking - Calls, extends, implements, and imports edges
- Call graph analysis - Track function calls and dependencies
- Impact analysis - See what would be affected by changing a symbol
- Keyword search - FTS5-powered search across symbols and documentation
- Semantic search - Embedding-based natural language search (local or OpenAI)
- Watch mode - Automatic reindexing on file changes
Advanced Features
- Smart context selection - AI-powered file selection based on task description
- Diff-aware context - Generate context focused on git changes
- PR review context - GitHub integration for pull request analysis
- Code quality audit - Automated quality analysis with CI integration
- Interactive shell - REPL for codebase exploration
- MCP server - Claude Desktop integration via Model Context Protocol
Feature Flags
duckdb(enabled by default) — Enables DuckDB-powered analytics (call graphs, impact analysis, complexity analysis). Disable with--no-default-featureson platforms where DuckDB cannot compile (e.g. Windows MSVC without C++ build tools).mcp— Enable Model Context Protocol server support for Claude Desktop integration.
Installation
From crates.io (the package is agentis-ctx; it installs the ctx binary):
# On Windows (MSVC without C++ build tools), skip the DuckDB feature:
From a local checkout:
Or build from source:
# Binary at ./target/release/ctx
With MCP Support (for Claude Desktop)
Quick Start
Generate Context for LLMs
# All files in current directory
# Specific patterns
# Copy to clipboard (macOS)
|
# Markdown format
# JSON format
# Count tokens only
# Limit output to token budget
Code Intelligence
# Build the index (creates .ctx/codebase.sqlite)
# Search for symbols (keyword matching)
# Generate embeddings for semantic search
# Semantic search (natural language)
# Find all callers of a function
# See what a function depends on
# Visualize call graph
# Impact analysis - what breaks if I change this?
# Watch for changes and auto-reindex
Output Formats
XML (default)
my-project/
├── src/
│ ├── main.rs
│ └── lib.rs
└── Cargo.toml
fn main() {
println!("Hello, world!");
}
Markdown
my-project/ ├── src/ │ └── main.rs └── Cargo.toml
## /src/main.rs
```rust
fn main() {
println!("Hello, world!");
}
### JSON
```json
{
"project_tree": "my-project/\n├── src/\n│ └── main.rs\n└── Cargo.toml",
"files": [
{
"name": "main.rs",
"path": "/src/main.rs",
"content": "fn main() {\n println!(\"Hello, world!\");\n}"
}
]
}
Code Intelligence Commands
ctx index
Build or update the code intelligence database.
ctx search <query>
Search for symbols using keyword matching (FTS5).
ctx semantic <query>
Search using embeddings for natural language queries.
ctx embed
Generate embeddings for semantic search.
ctx query
Query the code intelligence database.
# Find symbols by name pattern
# Show callers of a function
# Show dependencies of a symbol
# Visualize call graph (text, json, or dot format)
# Impact analysis
# Codebase statistics
# List all indexed files
ctx explain <symbol>
Get detailed information about a symbol including its relationships.
ctx source <symbol>
Retrieve the source code for a symbol.
Smart Context Selection
Intelligently select files relevant to a task using semantic search and call graph analysis:
Options:
--max-tokens <N>- Maximum tokens in output (default: 8000)--depth <N>- Call graph expansion depth (default: 2)--top <N>- Number of initial semantic matches (default: 10)--explain- Show selection reasoning for each file--dry-run- Preview selection without generating context--openai- Use OpenAI embeddings instead of local model
Diff-Aware Context
Get context for changed files with automatic dependency expansion:
PR Review Context
Generate context for GitHub pull request review:
Requirements: GitHub CLI (gh) must be installed and authenticated.
Code Quality Audit
Automated quality analysis with CI integration:
Categories:
complexity- Function complexity (fan-out/fan-in analysis)duplication- Potential code duplicationcoverage- Documentation coveragemodularity- Module coupling analysisnaming- Naming convention checks
Complexity Analysis
Analyze code complexity and identify high fan-out functions:
Duplicate Detection
Detect duplicate or similar code blocks:
Dependency Graph
Generate dependency graph visualizations:
Interactive Shell
REPL for codebase exploration:
Shell Commands:
find <pattern>- Find symbols by namesearch <query>- Hybrid search (text + semantic)source <symbol>- Show source codeexplain <symbol>- Explain symbol with relationshipscallers <fn>- Show function callerscallees <fn>- Show function calleesimpact <symbol>- Impact analysiscomplexity- Show high-complexity functionsstats- Codebase statisticsaudit- Run code quality auditcd <path>- Set file path contextpwd- Show current contextclear- Clear screenhelp- Show helpexit- Exit shell
MCP Server (Claude Desktop)
Expose ctx to AI assistants via Model Context Protocol:
# Build with MCP support
# Run MCP server
Configure Claude Desktop (claude_desktop_config.json):
Available MCP Tools:
search_symbols- Search for symbols by name patternget_definition- Get the source code for a symbolfind_references- Find all references to a symbolget_callers- Get functions that call a given functionget_callees- Get functions called by a given functionget_file- Read a file's contentsget_file_tree- List files in the projectsmart_context- Intelligently select files for a task
Ignore System
Three-tier ignore system:
.gitignore- Respected by default (disable with--no-gitignore).contextignore- Project-specific ignores, same syntax as.gitignore- Built-in patterns - Common non-source files (disable with
--no-default-ignores)
Example .contextignore
# Exclude test fixtures
fixtures/
__mocks__/
# Exclude generated code
*.generated.ts
*.pb.go
# Exclude vendored dependencies
vendor/
third_party/
Built-in Ignore Patterns
The tool automatically ignores:
- Version control (
.git/,.svn/,.hg/) - IDE directories (
.vscode/,.idea/) - Lock files (
package-lock.json,yarn.lock,Cargo.lock) - Dependencies (
node_modules/,vendor/,Pods/) - Build outputs (
dist/,build/,target/,.next/) - Cache directories (
.cache/,tmp/) - Binary files and media
Supported Languages
| Language | Extensions | Symbol Extraction | Edge Types |
|---|---|---|---|
| Rust | .rs |
Functions, structs, enums, traits, impls | Calls, Implements, Imports |
| TypeScript | .ts |
Functions, classes, interfaces, types, enums | Calls, Extends, Implements, Imports |
| TSX | .tsx |
Functions, components, interfaces | Calls, Extends, Implements, Imports |
| JavaScript | .js, .mjs, .cjs |
Functions, classes, arrow functions | Calls, Extends, Imports |
| JSX | .jsx |
Functions, components | Calls, Extends, Imports |
| Python | .py, .pyi |
Functions, classes, methods, constants | Calls, Extends, Imports |
| Go | .go |
Functions, structs, interfaces, methods | Calls, Implements, Imports |
| Solidity | .sol |
Contracts, functions, events, structs | Calls |
| YAML | .yaml, .yml |
File tracking (no symbols) | N/A |
Architecture
.ctx/
└── codebase.sqlite # SQLite database with FTS5 search and embeddings
- SQLite - Persistent storage for symbols, edges, embeddings, and compressed source
- DuckDB - In-memory analytical engine for recursive graph queries
- Tree-sitter - Fast, accurate parsing for all supported languages
- fastembed - Local embedding generation (all-MiniLM-L6-v2, 384 dimensions)
- OpenAI - Optional embedding generation (text-embedding-3-small, 1536 dimensions)
- sqlite-vec - Fast vector similarity search
CLI Reference
ctx - Generate AI-ready context from your codebase
USAGE:
ctx [OPTIONS] [PATTERNS]...
ctx <COMMAND>
COMMANDS:
index Build or update the code intelligence index
query Query the code intelligence database
search Search for symbols using keyword matching
semantic Search using embeddings (natural language)
embed Generate embeddings for semantic search
source Get the source code for a symbol
explain Explain a symbol with its relationships
smart Intelligently select files for a task
diff Generate context for changed files
review Generate context for PR review (GitHub)
audit Run code quality analysis
complexity Analyze code complexity
duplicates Detect duplicate code blocks
graph Generate dependency graph
shell Interactive codebase explorer
serve Start MCP server (with --mcp flag, requires mcp feature)
CONTEXT OPTIONS:
-f, --format <FORMAT> Output format [default: xml] [values: xml, markdown, md, plain, json]
--no-gitignore Disable .gitignore pattern matching
-i, --ignore <PATTERN> Additional ignore patterns
--no-default-ignores Disable built-in ignore patterns
--show-sizes Show file sizes in project tree
--no-tree Disable project tree in output
--no-stream Buffer output instead of streaming
--stats Print stats after completion
--count-only Only count tokens, don't output
--max-tokens <N> Limit output to N tokens
--encoding <ENC> Tokenizer encoding [default: cl100k_base]
INDEX OPTIONS:
-w, --watch Watch for changes and reindex automatically
-v, --verbose Show verbose output
--force Force full reindex (clears existing database)
-j, --parallel Use parallel parsing (faster on multi-core)
--no-gitignore Disable .gitignore pattern matching
--no-default-ignores Disable built-in ignore patterns
-i, --ignore <PATTERN> Additional ignore patterns
-p, --pattern <PATTERN> File patterns to include
Performance
- Indexes ~2000 files in under 10 seconds
- Parallel indexing with
--parallelflag (~1.7x speedup) - Incremental updates only reindex changed files
- Fast vector search with sqlite-vec
- Compressed source storage (~70% size reduction)
- In-memory DuckDB for fast analytical queries
- Local embeddings with fastembed (~90MB model, runs offline)
Environment Variables
| Variable | Description |
|---|---|
OPENAI_API_KEY |
Required for --openai flag with embed and semantic commands |
GITHUB_TOKEN |
Optional for review command (uses gh CLI auth by default) |
Examples
Generate context for a bug fix
# Find relevant code and generate context
|
Review a pull request
# Get context for PR review
Pre-commit quality check
# Add to .git/hooks/pre-commit
||
CI/CD integration
# In your CI pipeline
||
Explore codebase interactively
Contributing
We welcome contributions! Please see CONTRIBUTING.md for guidelines on development setup, coding style, and the pull request process.
Security
To report a security vulnerability, see SECURITY.md.
License
This project is licensed under either of:
at your option.