Your codebase was probably AI-generated. Get a better handle on it. Noodles creates interactive diagrams that visualize how your code actually works, so you can
Your codebase was probably AI-generated. Get a better handle on it. Noodles creates interactive diagrams that visualize how your code actually works, so you can
Your codebase was probably AI-generated. Get a better handle on it.
Noodles creates interactive diagrams that visualize how your code actually works, so you can understand what the AI built without reading every line.
Hosted version available at https://unslop.xyz.
pip install git+https://github.com/unslop-xyz/noodles.gitOr for development:
git clone https://github.com/unslop-xyz/noodles.git
cd noodles
pip install -e .Set your LLM API key as an environment variable:
export ANTHROPIC_API_KEY=your-key-hereSupported providers: anthropic (default), openai, gemini, groq, huggingface. To use a different provider:
export LLM_PROVIDER=openai
export OPENAI_API_KEY=your-key-hereAlternatively, create a .env file in your working directory (see .env.example if you cloned the repo).
An API key enables AI-powered enrichment of node descriptions and edge labels. Without it, the call graph will still be generated but nodes and edges won't have human-readable descriptions.
Noodles uses gh to fetch your repo/PR. To set it up, run:
brew install gh
gh auth loginnoodles repo noodles pr noodles viewer --output-dir - Custom output directory for results--no-view - Don't open the viewer after analysisNoodles can run as an MCP server, allowing Claude Code to analyze PRs and repositories directly.
Install with MCP dependencies:
pip install "noodles[mcp]"Add to your Claude Code settings (~/.claude/settings.json):
{
"mcpServers": {
"noodles": {
"command": "noodles-mcp"
}
}
}Restart Claude Code
Verify with /mcp - you should see the noodles server listed
Once configured, Claude Code can use these tools:
analyze_pr - Analyze a GitHub PRanalyze_repo - Analyze an entire repositoryanalyze_local_repo - Analyze a local repository (no cloning)analyze_changes - Analyze uncommitted local changesget_diagram - Get Mermaid diagram from analysisget_call_graph - Get full call graph JSONfind_path - Find call path between two functionsget_callers - Get functions that call a given functionget_callees - Get functions called by a given functionfilter_graph - Filter nodes by type (entry_points, endpoints, new, updated, orphans)get_summary - Get plain English summary of analysis impactget_changes - Get detailed change info for modified functions[+] nodesThe call graph builder uses tree-sitter for AST parsing. Currently supported:
| Extension | Language |
|---|---|
.py |
Python |
.js |
JavaScript |
.jsx |
JavaScript |
.ts |
TypeScript |
.tsx |
TSX |
React/Next.js JSX component usage (``) is detected as function calls, so component hierarchies appear correctly in the call graph.
The call graph is built by detecting function calls in the AST. This works well for:
foo(), obj.method(), This does not detect:
getattr(obj, 'method')(), obj[key]()The PR analyzer prunes the call graph to functions affected by a PR. This works best when:
It produces limited results when:
No open issues yet, or sync has not completed.