Watch your AI coding agents work — a live pixel-art floor, local-first.
Note: this is an independent weekend project, unaffiliated with pixel-agents — a more full-featured product in the same spirit (VS Code extension, office editor, asset packs) that predates this one. If you want the polished experience, use pixel-agents; this repo stays up as a small, zero-dependency, local-first alternative that was built almost entirely by the agents it visualizes.
npx github:YehudaLevi/pixelagents install-hooks
npx github:YehudaLevi/pixelagentsOpen http://localhost:4242, start a Claude Code session, and watch yourself appear.
Each live Claude Code session gets a desk on the floor. The character's animation tracks what the agent is actually doing, in real time:
| State | Trigger |
|---|---|
| Reading | Read / Grep / Glob |
| Bash | running a shell command |
| Editing | Edit / Write |
| Web | WebSearch / WebFetch |
| Minions | a subagent forks (SubagentStart) |
| Waiting-on-you glow | idle or permission prompt (optional 🔔 notification + 🔊 chime) |
| Sleeping | no events for 5 minutes |
| Confetti | a turn finishes |
npx github:YehudaLevi/pixelagents --demoSpins up the server with a synthetic event generator so you can see the floor in action before wiring up real hooks.
Claude Code hooks → ~/.pixelagents/events.jsonl → local server (SSE) → canvas floor
Hooks append one JSON line per event to a local file. A tiny local server tails that file and streams it to the browser over Server-Sent Events. The browser draws the floor. That's the whole pipeline: local-first, zero cloud, zero runtime dependencies.
Tested with Claude Code as of July 2026. The design degrades gracefully:
unknown hook types become generic events, unknown tools render as a generic
"working" animation, and the emitter always exits 0 — new Claude Code
versions may add events we don't know yet, but they can't break your setup.
The floor isn't Claude-specific — every event carries a source field, and
the emitter is a generic API: any tool that can run a shell command on events
can join the floor today:
echo '{"hook_event_name":"PreToolUse","session_id":"my-session","cwd":"/path/to/repo","tool_name":"Edit","tool_input":{"file_path":"src/app.ts"}}' \
| node "$(npm root -g)/pixelagents/bin/emit.js"First-class adapters for other IDEs/agents are on the roadmap — open an issue for the one you want; demand decides the order.
- Events carry tool names, file paths, and truncated commands only — never file contents, prompts, or environment values.
- Everything stays in
~/.pixelagentson your machine. Nothing leaves it. - A broken visualizer can never break Claude Code: the emitter always exits
0and runs in ~25ms.
npx github:YehudaLevi/pixelagents uninstall-hooksRestores your ~/.claude/settings.json from the backup pixelagents made on
install, removing only the entries it added.
- S / M / L — floor size
- Pan and zoom the canvas
- ⛶ — fullscreen
- / — search sessions
- 🔔 / 🔊 — toggle notifications and chime
Local is phase one. Next: Arena (one shared floor for your team, or a TV on the wall), waiting-time stats, replay, and an OBS overlay. See docs/roadmap.md.
npm test # vitest, 87 tests
npm run typecheckSee docs/architecture.md for how the pieces fit together.
MIT — see LICENSE.