Skip to content
Agent Memory
Skill

/lattice

Analyze large files (>500 lines) using handle-based Nucleus queries for 97% token savings. Use when you need to search, filter, aggregate, or explore documents too large for direct context.

From plugin
matryoshka
1491 skill

Claude Code

$ npx -y skills add yogthos/Matryoshka --skill lattice --agent claude-code

SKILL.md

lattice.SKILL.md
name: lattice
description: Analyze large files (>500 lines) using handle-based Nucleus queries for 97% token savings. Use when you need to search, filter, aggregate, or explore documents too large for direct context.

Lattice - Large File Analysis

Use the Lattice MCP tools to analyze files that are too large to read directly. Lattice stores query results server-side and returns compact handle stubs, achieving 97%+ token savings.

When to Use

  • File is **larger than 500 lines** (for smaller files, use Read directly)
  • You need **multiple searches** on the same file
  • You're **extracting or aggregating** structured data (counts, sums, patterns)
  • You're doing **exploratory analysis** and don't know what you're looking for
  • You want to **avoid hallucination** on factual queries about file contents

Core Workflow

The standard workflow is: **load → query → expand → close**

1. `lattice_load` — Open the file (starts a session) 2. `lattice_query` — Run Nucleus S-expression commands (returns handle stubs like `$res1`) 3. `lattice_expand` — Inspect actual data from a handle when you need to see contents 4. `lattice_close` — End the session when done

Efficiency Tips

  • **Chain operations in sequence** rather than making many independent queries. Use `RESULTS` to refer to the previous result and build a pipeline in a single query session.
  • **Start broad, then narrow**: `grep` first, then `filter`, then `count`/`sum`.
  • **Only expand when needed**: Handle stubs give you counts and previews — expand only when you need to see actual data for decision-making.
  • Prefer `(count RESULTS)` or `(sum RESULTS)` over expanding and counting client-side.

Nucleus Command Reference

Search

(grep "pattern")              ; Regex search — returns handle to matching lines
(fuzzy_search "query" 10)     ; Fuzzy match — top N results by relevance
(lines 10 20)                 ; Get specific line range (start end)

Transform

(filter RESULTS (lambda x (match x "pattern" 0)))   ; Keep matching items
(map RESULTS (lambda x (match x "(\\d+)" 1)))       ; Extract regex group from each item

Aggregate

(count RESULTS)               ; Count items (returns scalar directly)
(sum RESULTS)                 ; Sum numeric values (auto-extracts numbers)

Extract

(match str "pattern" 1)       ; Extract regex capture group from a string

Code & Document Symbols (for .ts, .js, .py, .go, .rs, .md, etc.)

(list_symbols)                ; List all functions, classes, methods, headings, etc.
(list_symbols "function")     ; Filter by kind: "function", "class", "method", "interface", "type"
(get_symbol_body "funcName")  ; Get full source code of a symbol
(find_references "identifier"); Find all usages of an identifier

Variable Bindings

  • **`RESULTS`** — Always points to the last array result. Use this in queries to chain operations.
  • **`_1`, `_2`, `_3`, ...** — Results from turn N. Use to reference older results in queries.
  • **`$res1`, `$res2`, ...** — Handle stubs. Use these ONLY with `lattice_expand`, NOT in queries.

Complete Workflow Example

**Task: Find and count timeout errors in a log file**

1. Load the document:

   lattice_load("/path/to/server.log")

→ `Loaded: 15,234 lines, 2.1 MB`

2. Search for errors:

   lattice_query('(grep "ERROR")')

→ `$res1: Array(342) [2024-01-15 ERROR: Connection timeout...]`

3. Filter for timeouts:

   lattice_query('(filter RESULTS (lambda x (match x "timeout" 0)))')

→ `$res2: Array(47) [2024-01-15 ERROR: Connection timeout...]`

4. Count them:

   lattice_query('(count RESULTS)')

→ `Result: 47`

5. Inspect a sample if needed:

   lattice_expand("$res2", limit=5)

→ Shows first 5 actual timeout error lines

6. Close when done:

   lattice_close()

Code Analysis Workflow

**Task: Understand a large TypeScript file**

1. Load and list symbols:

   lattice_load("/path/to/large-module.ts")
   lattice_query('(list_symbols)')

→ `$res1: Array(45) [function handleRequest, class Router, ...]`

2. Get a specific function:

   lattice_query('(get_symbol_body "handleRequest")')

→ Returns full source code of the function

3. Find all references:

   lattice_query('(find_references "handleRequest")')

→ `$res2: Array(8) [line 45: handleRequest(req), ...]`

Read more
Stats
149
Stars
19
Forks
Maintained
Maintenance
TypeScript
Language
Apache-2.0
License
Last commit
Created
Added

Repo: yogthos/Matryoshka

@yogthos
Ships withmatryoshka

Process documents 100x larger than your LLM's context window—without vector databases or chunking heuristics.

Stars on GitHub

Momentum

stars in total
149
Star history of yogthos/Matryoshka on GitHub, a chart by star-history.com

More skills from other plugins.

Questions about lattice.

Which coding agents can use lattice?
lattice installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.