local-brain

IsmaelMartinez's avatarfrom IsmaelMartinez

Chat with local Ollama models that can explore your codebase using tools.

⭐0stars🔀0forks📁View on GitHub🕐Updated Dec 12, 2025

When & Why to Use This Skill

Local Brain is a privacy-focused Claude skill that enables multi-step codebase exploration using local Ollama models. It solves the challenge of understanding complex, multi-file projects by delegating deep reasoning tasks—such as architectural analysis, code reviews, and logic tracing—to a local AI agent, ensuring your source code never leaves your machine while providing expert-level insights.

Use Cases

  • Code Review & Analysis: Automatically review recent git changes to identify potential bugs, security vulnerabilities, or logic inconsistencies before merging.
  • Unfamiliar Code Onboarding: Quickly understand how complex systems work, such as tracing authentication flows or data validation layers across multiple directories.
  • Architectural Auditing: Identify design patterns, structural gaps, and technical debt within a large-scale codebase through multi-step reasoning.
  • Impact Analysis: Trace the flow of specific user inputs or data structures to predict the side effects of proposed code changes.
namelocal-brain
descriptionDelegate complex, multi-step codebase exploration to local Ollama models. Best for analysis, review, and understanding tasks that require reasoning across multiple files.
version0.9.0

Local Brain

Delegate complex codebase exploration to local Ollama models. Local Brain excels at multi-step tasks requiring reasoning, not simple commands.

When to Use Local Brain

Local Brain adds 10-70 seconds of LLM inference overhead per query. Use it for tasks where AI reasoning provides value, not for simple commands.

Use Local Brain for:

  • Multi-step exploration ("Find all error handlers and explain how they work")
  • Code review and analysis ("Review recent changes for potential issues")
  • Understanding unfamiliar code ("Explain how authentication flows through the system")
  • Tasks requiring judgment ("What patterns does this codebase use?")
  • When you don't know which files or commands to look at

Do NOT use Local Brain for:

  • Simple file listing (use ls or find directly — 1000x faster)
  • Git status/log (use git log directly — 1000x faster)
  • Reading a specific known file (use cat or your editor)
  • Any single-command operation where you know what to run

Performance reality: A simple "list files" query takes 12-70 seconds via Local Brain vs 5ms via ls. The value is in the reasoning, not the tool execution.

Installation

Install local-brain:

uv pip install local-brain

Or with pipx:

pipx install local-brain

Requirements:

  • Ollama running locally (https://ollama.ai)
  • A model pulled (e.g., ollama pull qwen3)

Usage

local-brain "prompt"                    # Ask anything (auto-selects best model)
local-brain -v "prompt"                 # Show tool calls
local-brain -d "prompt"                 # Show step-by-step debug output
local-brain -m qwen3-coder:30b "prompt" # Specific model
local-brain --trace "prompt"            # Enable OTEL tracing
local-brain --list-models               # Show available models
local-brain --root /path/to/project "prompt"  # Set project root
local-brain doctor                      # Check system health

Health Check

Verify your setup is working correctly:

local-brain doctor

This checks:

  • Ollama is installed and running
  • Recommended models are available
  • Tools execute correctly
  • Optional tracing dependencies

Example output:

🔍 Local Brain Health Check

Checking Ollama...
  ✅ Ollama is installed (ollama version is 0.13.1)

Checking Ollama server...
  ✅ Ollama server is running (9 models)

Checking recommended models...
  ✅ Recommended models installed: qwen3:latest

Checking tools...
  ✅ Tools working (9 tools available)

Checking optional features...
  ✅ OTEL tracing available (--trace flag)

========================================
✅ All checks passed! Local Brain is ready.

Examples

Focus on tasks where AI reasoning adds value:

# Code review and analysis (good use case)
local-brain "Review the recent git changes and identify potential issues"
local-brain "Analyze the error handling patterns in this codebase"

# Understanding unfamiliar code (good use case)
local-brain "Explain how the authentication system works end-to-end"
local-brain "What design patterns does this codebase use?"

# Multi-step exploration (good use case)
local-brain "Find all TODO comments and categorize them by urgency"
local-brain "Trace how user input flows through the validation layer"

# Generate content requiring context (good use case)
local-brain "Generate a commit message based on the staged changes"
local-brain "Summarize what changed in the last 5 commits"

Model Selection Guide

Choose the right model for your task:

Use qwen3-coder:30b for faster exploration tasks:

local-brain -m qwen3-coder:30b "Find all error handlers and explain how they work"
local-brain -m qwen3-coder:30b "What validation patterns are used in this codebase?"
local-brain -m qwen3-coder:30b "Trace the data flow from API endpoint to database"

Why: 2.5x faster than qwen3:30b (12-20s vs 35-70s per query), direct tool usage.

For Complex Reasoning

Use qwen3:30b for tasks requiring deeper analysis:

local-brain -m qwen3:30b "Analyze the architecture and suggest improvements"
local-brain -m qwen3:30b "Review recent changes for security vulnerabilities"
local-brain -m qwen3:30b "Explain how authentication works end-to-end"

Why: More thorough reasoning, better at synthesis and review tasks.

Tips for Better Results

Use --debug to see what the model is doing step-by-step:

local-brain -d -m qwen3-coder:30b "Analyze the test coverage gaps"

Avoid these models (broken or unreliable tool calling):

  • qwen2.5-coder:* - Outputs JSON instead of executing tools
  • llama3.2:1b - Too small, hallucinates paths
  • deepseek-r1:* - No tool support at architecture level

If no model is specified, Local Brain auto-selects the best installed model.

Observability

Debug Mode (--debug or -d)

See step-by-step progress with the --debug flag:

local-brain --debug "Analyze error handling in the auth module"

This shows:

  • Step number and duration
  • Tool calls with arguments
  • Result preview (truncated)
  • Token usage per step

Example output:

[debug] Model: qwen3-coder:30b
[debug] Project root: /path/to/project

[Step 1] (4.2s)
  Tool: list_directory(path='.', pattern='**/*')
  Result:
    src/main.py
    src/utils.py
    ... (15 lines total)
  Tokens: 2634 in / 42 out

OTEL Tracing (--trace)

Enable OpenTelemetry tracing to visualize agent execution with detailed timing and metrics:

local-brain --trace "Review recent changes and identify potential issues"

This captures:

  • Agent execution timeline (total duration)
  • Individual steps (planning, execution, final answer)
  • LLM calls with token counts
  • Tool invocations with inputs/outputs
  • Timing for each operation

Visualizing Traces with Jaeger (Recommended)

For real-time visualization of agent execution, use Jaeger:

1. Start Jaeger (one-time setup):

docker run -d \
  --name jaeger \
  -p 16686:16686 \
  -p 4318:4318 \
  jaegertracing/all-in-one

2. Run local-brain with tracing:

local-brain --trace -m qwen3-coder:30b "Analyze the test patterns in this codebase"

3. View in Jaeger UI: Open http://localhost:16686 and select:

  • Service: local-brain
  • Operation: CodeAgent.run

You'll see a waterfall timeline showing:

CodeAgent.run (5.1s total)
├── Step 1 (2.04s)
│   ├── LiteLLMModel.generate (2.03s) ← LLM latency
│   └── list_directory (1.5ms) ← Tool execution
└── Step 2 (3.09s)
    ├── LiteLLMModel.generate (3.09s)
    └── FinalAnswerTool (0.1ms)

Click any span to see details: tokens used, arguments, outputs, errors.

Install Tracing Dependencies

For JSON console output only (no Jaeger):

pip install local-brain[tracing]

For Jaeger visualization, also install:

pip install opentelemetry-exporter-otlp

Combining Flags for Maximum Insight

Use all three flags together for complete visibility:

local-brain --trace --debug -m qwen3-coder:30b "Review recent changes for security issues"

This gives:

  • --trace → OTEL spans in Jaeger (timing, tokens, architecture)
  • --debug → Real-time step progress to stderr (what's happening now)
  • --verbose → Tool calls in main output (what was called)

Note: --debug and --trace can be combined.

Security

All file operations are restricted to the project root (path jailing):

  • Files outside the project directory cannot be read
  • Shell commands execute within the project root
  • Sensitive files (.env, .pem, SSH keys) are blocked
  • Only read-only shell commands are allowed
  • All tool outputs are truncated (200 lines / 20K chars max)
  • Tool calls have timeouts (30 seconds default)

Available Tools

The model assumes these tools are available and uses them directly:

File Tools

  • read_file(path) - Read file contents at a given path. Large files are truncated (200 lines / 20K chars). Has 30s timeout. Restricted to project root.
  • list_directory(path, pattern) - List files in path matching a glob pattern. Supports recursive patterns:
    • * - files in directory only
    • **/* - ALL files recursively (use this to discover nested structures)
    • **/*.py - all Python files recursively
    • src/**/*.js - all JS files under src/ Excludes hidden files and common ignored directories. Returns up to 100 files. Has 30s timeout.
  • file_info(path) - Get file metadata (size, type, modified time) for a given path. Has 30s timeout.

Code Navigation Tools (New in v0.6.0)

  • search_code(pattern, file_path, ignore_case) - AST-aware code search. Unlike simple grep, shows intelligent context around matches (function/class boundaries). Supports Python, JavaScript, TypeScript, Go, Rust, Ruby, Java, C/C++.
  • list_definitions(file_path) - Extract class/function definitions from a source file. Shows signatures and docstrings without full implementation code. Great for understanding file structure quickly.

Git Tools

  • git_diff(staged, file_path) - Show code changes. Use staged=True for staged changes. Optionally provide a file_path. Output is truncated.
  • git_status() - Check repo status. Output is truncated.
  • git_changed_files(staged, include_untracked) - List changed files. Use staged=True for staged files, include_untracked=True to include untracked files. Output is truncated.
  • git_log(count) - View commit history. count specifies number of commits (max 50). Output is truncated.

All tools return human-readable output or error messages on failure.