PluginBench
Skill
Pass
Audit score 90

smart-explore

thedotmack/claude-mem

Token-optimized structural code search using tree-sitter AST parsing for efficient codebase exploration.

What is smart-explore?

Smart Explore is a code navigation skill that replaces traditional file reading with AST-based structural search. Use it to discover functions, classes, and symbols across codebases without loading full files, saving 4-8x tokens on file understanding and 11-18x on codebase exploration.

  • Search across entire codebases to find and rank symbols by relevance with one call (smart_search)
  • View complete file structure including all functions, classes, methods, and properties without reading full source (smart_outline)
  • Fetch only the specific function or class implementation you need, guaranteed complete by AST boundaries (smart_unfold)
  • Support 13+ languages via tree-sitter parsing (JavaScript, TypeScript, Python, Go, Rust, Java, C/C++, Ruby, and more)
  • Extend language support with custom tree-sitter grammars via .claude-mem.json configuration

How to install smart-explore

npx skills add https://github.com/thedotmack/claude-mem --skill smart-explore
Prerequisites
  • Node.js environment with npx
  • Project with code files in supported languages (JavaScript, TypeScript, Python, Go, Rust, Java, C/C++, Ruby, or others)
  • Optional: .claude-mem.json for custom language grammar support
Claude Code
Cursor
Windsurf
Cline

How to use smart-explore

  1. 1.Call smart_search(query="topic", path="./src") to discover relevant files and symbols across a directory
  2. 2.Review the ranked symbols and folded file views returned by the search
  3. 3.Call smart_outline(file_path="path/to/file") to see the complete structure of a specific file if needed
  4. 4.Call smart_unfold(file_path="path/to/file", symbol_name="name") to view the full implementation of a specific function, class, or method
  5. 5.Use standard tools (Grep, Read, Glob) only for exact string searches, small non-code files, or file path patterns

Use cases

Good for
  • Discover how a feature works across multiple files by searching for a concept, then unfolding key implementations
  • Navigate large files by outlining structure first, then viewing only the specific methods or functions needed
  • Write documentation about code by combining search results with targeted unfolds of important symbols
  • Understand unfamiliar codebases by mapping file structure before diving into implementation details
  • Locate exact function definitions and their signatures across a project in a single search call
Who it's for
  • Developers exploring unfamiliar codebases
  • Code reviewers needing to understand changes across multiple files
  • Documentation writers analyzing code structure
  • Agents performing code analysis with token constraints
  • Teams working with large monorepos or complex architectures

smart-explore FAQ

When should I use smart_search instead of Grep or Glob?

Use smart_search to discover files AND symbols in one call across a codebase. Use Grep for exact string/regex matching (like finding TODO comments) and Glob for file path patterns. smart_search replaces the Glob → Grep → Read discovery cycle.

How much do these tools save compared to reading full files?

smart_outline + smart_unfold saves 4-8x tokens vs reading full files. smart_search saves 11-18x tokens vs using the Explore agent for codebase synthesis. A 27-line function costs 55x less via unfold than via Explore agent.

What languages does smart-explore support?

Bundled support for JavaScript, TypeScript, TSX/JSX, Python, Go, Rust, Ruby, Java, C, and C++. Other file types fall back to text-based search. Add custom languages by installing tree-sitter grammars and configuring .claude-mem.json.

Can I use smart_outline and smart_unfold on files not found by smart_search?

Yes. smart_outline works on any file path to show its structure. smart_unfold requires the exact symbol name. You can use these independently or combine them with smart_search results.

What's the difference between smart_unfold and Read?

smart_unfold returns only the specified symbol (function, class, method) with guaranteed completeness via AST boundaries, typically 400-2,100 tokens. Read returns the entire file, which wastes tokens on unneeded code. Prefer smart_unfold for code files over ~100 lines.

Full instructions (SKILL.md)

Source of truth, from thedotmack/claude-mem.


name: smart-explore description: Token-optimized structural code search using tree-sitter AST parsing. Use instead of reading full files when you need to understand code structure, find functions, or explore a codebase efficiently.

Smart Explore

Structural code exploration using AST parsing. This skill overrides your default exploration behavior. While this skill is active, use smart_search/smart_outline/smart_unfold as your primary tools instead of Read, Grep, and Glob.

Core principle: Index first, fetch on demand. Give yourself a map of the code before loading implementation details. The question before every file read should be: "do I need to see all of this, or can I get a structural overview first?" The answer is almost always: get the map.

Your Next Tool Call

This skill only loads instructions. You must call the MCP tools yourself. Your next action should be one of:

smart_search(query="<topic>", path="./src")    -- discover files + symbols across a directory
smart_outline(file_path="<file>")              -- structural skeleton of one file
smart_unfold(file_path="<file>", symbol_name="<name>")  -- full source of one symbol

Do NOT run Grep, Glob, Read, or find to discover files first. smart_search walks directories, parses all code files, and returns ranked symbols in one call. It replaces the Glob → Grep → Read discovery cycle.

3-Layer Workflow

Step 1: Search -- Discover Files and Symbols

smart_search(query="shutdown", path="./src", max_results=15)

Returns: Ranked symbols with signatures, line numbers, match reasons, plus folded file views (~2-6k tokens)

-- Matching Symbols --
  function performGracefulShutdown (services/infrastructure/GracefulShutdown.ts:56)
  function httpShutdown (services/infrastructure/HealthMonitor.ts:92)
  method WorkerService.shutdown (services/worker-service.ts:846)

-- Folded File Views --
  services/infrastructure/GracefulShutdown.ts (7 symbols)
  services/worker-service.ts (12 symbols)

This is your discovery tool. It finds relevant files AND shows their structure. No Glob/find pre-scan needed.

Parameters:

  • query (string, required) -- What to search for (function name, concept, class name)
  • path (string) -- Root directory to search (defaults to cwd)
  • max_results (number) -- Max matching symbols, default 20, max 50
  • file_pattern (string, optional) -- Filter to specific files/paths

Step 2: Outline -- Get File Structure

smart_outline(file_path="services/worker-service.ts")

Returns: Complete structural skeleton -- all functions, classes, methods, properties, imports (~1-2k tokens per file)

Skip this step when Step 1's folded file views already provide enough structure. Most useful for files not covered by the search results.

Parameters:

  • file_path (string, required) -- Path to the file

Step 3: Unfold -- See Implementation

Review symbols from Steps 1-2. Pick the ones you need. Unfold only those:

smart_unfold(file_path="services/worker-service.ts", symbol_name="shutdown")

Returns: Full source code of the specified symbol including JSDoc, decorators, and complete implementation (~400-2,100 tokens depending on symbol size). AST node boundaries guarantee completeness regardless of symbol size — unlike Read + agent summarization, which may truncate long methods.

Parameters:

  • file_path (string, required) -- Path to the file (as returned by search/outline)
  • symbol_name (string, required) -- Name of the function/class/method to expand

When to Use Standard Tools Instead

Use these only when smart_* tools are the wrong fit:

  • Grep: Exact string/regex search ("find all TODO comments", "where is ensureWorkerStarted defined?")
  • Read: Small files under ~100 lines, non-code files (JSON, markdown, config)
  • Glob: File path patterns ("find all test files")
  • Explore agent: When you need synthesized understanding across 6+ files, architecture narratives, or answers to open-ended questions like "how does this entire system work end-to-end?" Smart-explore is a scalpel — it answers "where is this?" and "show me that." It doesn't synthesize cross-file data flows, design decisions, or edge cases across an entire feature.

For code files over ~100 lines, prefer smart_outline + smart_unfold over Read.

Workflow Examples

Discover how a feature works (cross-cutting):

1. smart_search(query="shutdown", path="./src")
   -> 14 symbols across 7 files, full picture in one call
2. smart_unfold(file_path="services/infrastructure/GracefulShutdown.ts", symbol_name="performGracefulShutdown")
   -> See the core implementation

Navigate a large file:

1. smart_outline(file_path="services/worker-service.ts")
   -> 1,466 tokens: 12 functions, WorkerService class with 24 members
2. smart_unfold(file_path="services/worker-service.ts", symbol_name="startSessionProcessor")
   -> 1,610 tokens: the specific method you need
Total: ~3,076 tokens vs ~12,000 to Read the full file

Write documentation about code (hybrid workflow):

1. smart_search(query="feature name", path="./src")    -- discover all relevant files and symbols
2. smart_outline on key files                           -- understand structure
3. smart_unfold on important functions                  -- get implementation details
4. Read on small config/markdown/plan files             -- get non-code context

Use smart_* tools for code exploration, Read for non-code files. Mix freely.

Exploration then precision:

1. smart_search(query="session", path="./src", max_results=10)
   -> 10 ranked symbols: SessionMetadata, SessionQueueProcessor, SessionSummary...
2. Pick the relevant one, unfold it

Token Economics

ApproachTokensUse Case
smart_outline~1,000-2,000"What's in this file?"
smart_unfold~400-2,100"Show me this function"
smart_search~2,000-6,000"Find all X across the codebase"
search + unfold~3,000-8,000End-to-end: find and read (the primary workflow)
Read (full file)~12,000+When you truly need everything
Explore agent~39,000-59,000Cross-file synthesis with narrative

4-8x savings on file understanding (outline + unfold vs Read). 11-18x savings on codebase exploration vs Explore agent. The narrower the query, the wider the gap — a 27-line function costs 55x less to read via unfold than via an Explore agent, because the agent still reads the entire file.

Language Support

Smart-explore uses tree-sitter AST parsing for structural analysis. Unsupported file types fall back to text-based search.

Bundled Languages

LanguageExtensions
JavaScript.js, .mjs, .cjs
TypeScript.ts
TSX / JSX.tsx, .jsx
Python.py, .pyw
Go.go
Rust.rs
Ruby.rb
Java.java
C.c, .h
C++.cpp, .cc, .cxx, .hpp, .hh

Files with unrecognized extensions are parsed as plain text — smart_search still works (grep-style), but smart_outline and smart_unfold will not extract structured symbols.

Custom Grammars (.claude-mem.json)

You can register additional tree-sitter grammars for file types not in the bundled list. Create or update .claude-mem.json in your project root:

{
  "grammars": {
    "solidity": {
      "package": "tree-sitter-solidity",
      "extensions": [".sol"],
      "query": "solidity-query.scm"
    }
  }
}

Each key is a language name. package is the npm package of the tree-sitter grammar and extensions lists the file extensions it covers; the package must be installed in the project's node_modules (npm install tree-sitter-solidity). query (optional) is a path, relative to the config file, to a tree-sitter query whose captures (@func, @cls, @method, @iface, @enm, @struct_def, @imp) extract symbols. Without query, a minimal generic pattern is used — it only matches grammars that define function_declaration/class_declaration node types, and query compilation fails silently (0 symbols) for grammars that lack them, so a custom query is effectively required for most languages. Once registered, smart_outline and smart_unfold parse those extensions structurally instead of falling back to plain text.

Markdown Special Support

Markdown files (.md, .mdx) receive special handling beyond the generic plain-text fallback:

  • smart_outline — extracts headings (#, ##, ###) as the symbol tree. Use it to navigate long documents without reading the full file.
  • smart_search — searches within code fences as well as prose, so queries for function names inside ```ts ``` blocks work as expected.
  • smart_unfold — expands heading sections rather than function bodies; each section up to the next same-level heading is returned as a chunk.
  • Frontmatter — YAML frontmatter (lines between leading --- delimiters) is included in smart_outline output under a synthetic frontmatter symbol so metadata like title: and description: is visible without reading the whole file.