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.
57,058 to 1,649 tokens
−97.1% on this fileyou what's in base-server.ts?
without pixel2 Read calls · 3,459 lines29,454
with pixelpixel list-signatures base-server.ts964
↳ Your agent picked this command. You typed nothing.
29,454 to 964 tokens
−96.7% on this fileyou what's in worker.rs?
without pixel1 Read call · 1,566 lines13,995
with pixelpixel list-signatures worker.rs1,064
↳ Your agent picked this command. You typed nothing.
13,995 to 1,064 tokens
−92.4% on this fileOne 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.
Search
It reads around what it needed.
Time
You wait while it explores.
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.
- 01
grep "force-with-lease|lease"149 - 02
grep "force-with-lease|force_with_lease|stale info|StaleLease|lease" crates82 - 03
grep "force_with_lease|lease|stale|rejected|non-fast-forward|retry" push.rs35 - 04
grep "force_with_lease"23 - 05
read push.rs345 - 06
$ sed -n 20,70p ship.rs …241 2 more calls (07–08) · show all 10
- 07
$ grep -rn "LeaseRejected\|LEASE_REJECTED" --include=*.rs --include=*.md . | grep -v target …44 - 08
$ grep -rn "LeaseRejected\|LEASE_REJECTED" crates docs *.md …25
- 07
- 09
$ sed -n 128,185p api.rs …69 - 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
- push.rscrates/pixel-ops/src/
- main.rscrates/pixel/src/
- decide_remote.rscrates/pixel/src/
- branch.rscrates/pixel-ops/src/
- journal.rscrates/pixel-ops/src/
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
Where is
rebuild_authused?pixel search-content -F rebuild_authsessions.py:273 self.rebuild_auth(…)sessions.py:309 def rebuild_auth(Where are redirects handled?
pixel find-code 'redirect handling'sessions.py:127 SessionRedirectMixinsessions.py:134 get_redirect_targetauth.py:268 handle_redirectWhat depends on
rebuild_auth?pixel impact rebuild_authexact resolve_redirects depth 1exact send depth 2probable 5 tests depth 2Who calls
resolve_redirects?pixel who-calls resolve_redirectscallers: 7/7exact send sessions.py:804exact send sessions.py:821probable 5 tests in test_requests.pyWhat did my edit change?
pixel what-changed1 file · 2 symbols modified SessionRedirectMixin resolve_redirectsWhere do I roll back to? (pixel-git plugin)
pixel plan-rollback '…'sessions.py 661970d Disable commonly ignored… cd90742 docs: indent continuation…→ recommended: cd90742
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.
- Your past sessions too
pixel recall, a plugin, searches the agent sessions already on your disk. Nothing is uploaded. - No MCP serverA command-line tool, hooks and a skill: the agent calls it from the shell it already has.
- No hosted indexThe index lives in
.pixel/, inside your repository. - No LLM between question and answerYour agent, or its prompt hook, runs the pixel command; the answer comes from the index, not a chat model. The one model-backed feature,
pixel classify, is off by default and can run a local model.
How it works.
One Rust binary and one folder in your repository. No hosted service.
Index
.pixel/holds a text index of the files Git does not ignore and a graph of their symbols, imports and calls.Stay warm
A local daemon keeps both open and follows your edits, so answers take milliseconds.
Reach the agent
pixel setuphooks 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
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.
Wired by pixel setup
The install writes the agent's own settings. Nothing else to do.
-
Claude Code
~/.claude/settings.json -
Codex
~/.codex/hooks.json+1 -
Pi
~/.local/share/pixel/pi-package/package.json+4 -
Devin
~/.config/devin/config.json+1 -
OpenCode
~/.config/opencode/plugins/pixel-brief.js -
Gemini CLI
~/.gemini/settings.json+1 -
Antigravity
~/.gemini/config/config.json+8 -
Cursor
~/.cursor/skills/pixel/SKILL.md -
Copilot CLI
~/.agents/skills/pixel/SKILL.md
Native tools only
Nothing to wire: pixel setup writes nothing for them, and the agent searches with its own tools.
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$ curl -fsSL -o install.sh https://github.com/Pixel-CLI/pixel/releases/latest/download/install.sh$ less install.sh$ sh install.sh# paste into Claude Code, Codex, Pi or any agent with a shell> Install Pixel (https://github.com/Pixel-CLI/pixel) for me: follow the Install section of its README, run `pixel doctor .`, then tell me what changed and whether it is green.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
Your agent runs steps 2 and 3 for you, then tells you what changed. All installation methods
Connect your agent
pixel setupPrompt hooks and the
pixelskill, for the agents you pick. Restart the agent: your first code prompt starts the indexing. Files changed & removalCheck it optional
pixel doctor .A read-only check of the install and the index. Setup help
See your number optional
pixel auditYour twenty largest files whole against their outlines. On Requests: −88%. How the count works