Open-source CLI · runs on your machine

Agents grep your code blind. Pixel hands them the map.

A local index of signatures and callers. Your code questions reach the agent with a source-cited brief from it. One install, a handful of commands: you keep prompting as usual.

Works with

  • Claude Code
  • Codex
  • Pi
  • Devin
  • OpenCode
  • Gemini CLI
  • Antigravity
  • Cursor
  • Copilot CLI

No account. No API key. No telemetry beyond an optional release check.
Your code stays on your machine.

13 languages MIT macOS Apple Silicon Linux

−94.5% median
on 8 large files

you what's in trainer.py?

without pixel3 Read calls · 4,639 lines57,058

with pixelpixel list-signatures trainer.py1,649

↳ Your agent picked this command. You typed nothing.

L 261 class Trainer:L 1437 def train(L 2077 def compute_loss(L 2702 def evaluate( … 86 more signatures

57,058 to 1,649 tokens

−97.1% on this file

One square is 25 estimated tokens (UTF-8 bytes ÷ 4) · · How we measure

First, it has to find its way.

Before any edit, your agent maps your codebase. It greps, opens a match, reads around it.

Prompt · agent without PixelTask: retry a leased push when the remote branch moved. Before anyone edits anything, find the files that would need to change and list them, most important first, with one line each on why. Do not edit any file.

  1. 01grep "force-with-lease|lease"149
  2. 02grep "force-with-lease|force_with_lease|stale info|StaleLease|lease" crates82
  3. 03grep "force_with_lease|lease|stale|rejected|non-fast-forward|retry" push.rs35
  4. 04grep "force_with_lease"23
  5. 05read push.rs345
  6. 06$ sed -n 20,70p ship.rs …241
  7. 2 more calls (07–08) · show all 10
    1. 07$ grep -rn "LeaseRejected\|LEASE_REJECTED" --include=*.rs --include=*.md . | grep -v target …44
    2. 08$ grep -rn "LeaseRejected\|LEASE_REJECTED" crates docs *.md …25
  8. 09$ sed -n 128,185p api.rs …69
  9. 10$ sed -n 1150,1290p reconcile.rs …193

10 calls · 6 searches · 4 reads1,206 lines

Median of 11 runs: 10 calls.

Recorded 30 Sep 2026 · Opus 5.5 medium · run 3 of 11 Numbers are lines of tool output; reads include sed slices · Raw runs

Same prompt. A map first.

Pixel reads the task before your agent makes a single call. Out of 650 indexed files, it names 5 to start with.

YouRetry a leased push when the remote branch moved. Find the files that would need to change…

Pixel5 files to start with, 3 likely needed · before call 01

  1. push.rscrates/pixel-ops/src/
  2. main.rscrates/pixel/src/
  3. decide_remote.rscrates/pixel/src/
  4. branch.rscrates/pixel-ops/src/
  5. journal.rscrates/pixel-ops/src/
5 files to start with 3 likely needed 650 files in the index

The list Pixel handed over in the recording above, 30 Sep 2026. Starting points, not a full change map: all 11 agents with Pixel also named api.rs, crash_matrix.rs, rewrite.rs and ship.rs, which it left out. You typed nothing: the prompt-submit hook Pixel 0.6.1's pixel setup wrote delivered it. Current releases add a different packet on that hook, the [PIXEL:BRIEF]; this recording predates it. Raw runs

What your agent gets.

Before and after an edit, your agent has questions about your code. Pixel answers them from the index on your machine. The agent picks the command; you keep prompting as usual.

Real answers, shortened, on Requests, the Python HTTP library. psf/requests at 611c616

exact traced through the file or its imports probable matched by a name only one connected file defines depth 1 calls it directly, depth 2 calls a caller

Every answer says whether it is complete. Zero callers means none were found, not that none exist: a call made through a callback or a dynamic lookup can escape a static index.

All commands

How it works.

One Rust binary and one folder in your repository. No hosted service.

  1. Index

    .pixel/ holds a text index of the files Git does not ignore and a graph of their symbols, imports and calls.

  2. Stay warm

    A local daemon keeps both open and follows your edits, so answers take milliseconds.

  3. Reach the agent

    pixel setup hooks each agent's prompt submit to add a brief, and installs a skill for the rest; the agent runs the commands from its shell.

Code graph TypeScript, JavaScript, Rust, Go, Java, Python, C#, Ruby Coarser graph PHP, C, Swift, Elixir, Lua Text search every other file Git does not ignore

12 s
Cold start 18,782 files of a private Rails app, from scratch: text index in 2 s, code graph in about 10 s, median of three runs. Method

See the workflow and Git examples · Optional classification

Plugs into the agent you already use.

Two ways in: the agents `pixel setup` wires, and those that keep only their native tools. Each one names what Pixel writes, or what it leaves alone.

What Pixel writes for each agent, and how to check it

Fair questions.

From developers

Will my agent actually use it?

Not always: agents fall back to grep. pixel setup adds a prompt-submit hook, so a code question arrives with a source-cited brief, plus a skill for follow-ups; neither blocks a search or read. One Opus 5.5 trial of the earlier install hooks (not this brief): slower +11%, tokens read +12%, reported cost +31%, one task. Method and limits

Check it pixel brief "<your question>" . the evidence your agent receives with that prompt

Why not just grep?

Grep finds the line; the agent then opens the file around it. On Hugging Face's 4,639-line trainer.py, the whole file is 57,058 estimated tokens against 1,649 for its signatures (UTF-8 bytes ÷ 4), a volume, not a session cost. pixel search-content keeps grep's regex syntax.

Check it pixel audit the same comparison on your twenty largest files

Why not a language server or my editor's index?

A language server resolves types, so its callers are more exact than a syntax graph's, but it needs one running server per language; an editor's index lives inside that editor. Pixel is one binary every agent on this page shares, covers 13 languages and your Git history, and says when an answer may be incomplete.

Check it pixel impact <symbol> each caller marked exact or probable

From whoever approves it

Does anything leave my machine?

Nothing you did not ask for: no telemetry, and the index stays in .pixel/. The network carries the embedding model's first download, Git remotes and plugins you install, the opt-in pixel classify and pixel web-search (a plugin), which can send your question to a provider, and a daily release check in a terminal (PIXEL_NO_UPDATE_CHECK=1 turns it off). Security model

Check it pixel config every setting and the file it comes from

How do I remove it?

pixel setup --remove removes every hook, skill and file pixel setup wrote, then the binary (a Homebrew or mise copy stays: use the manager). The index is the .pixel/ folder: delete it.

Check it pixel setup --remove --dry-run the list, before anything is removed

Pixel or semble?

Both, if you search in plain English a lot. On 45 natural-language queries, semble has the right file in its top 10 for 100%, Pixel for 96%; Pixel puts it first more often, 87% against 64%, and adds the call graph, blast radius, Git history and guarded Git writes.

Check it Where a specialist wins the queries and both tools' results

Full comparisons · For your team · Optional classification · Workflow and Git examples

Install it on your repo. Two commands.

Open a terminal in the repository you want to map.

One repository at a time. Pixel indexes the repository you run it in, keeps its files in .pixel/ and adds that folder to .gitignore.

Get the binary

Apple Silicon Macs · Linux x86_64 and arm64 · no Windows build yet

$ curl -fsSL https://github.com/Pixel-CLI/pixel/releases/latest/download/install.sh | sh

SHA‑256 checked, into ~/.local/bin/pixel (PIXEL_INSTALL_DIR changes it). Linux x86_64, Linux arm64 and Apple Silicon. Read the script · Verify the signature · All installation methods

  1. Connect your agent

    pixel setup

    Prompt hooks and the pixel skill, for the agents you pick. Restart the agent: your first code prompt starts the indexing. Files changed & removal

  2. Check it optional

    pixel doctor .

    A read-only check of the install and the index. Setup help

  3. See your number optional

    pixel audit

    Your twenty largest files whole against their outlines. On Requests: −88%. How the count works