tcsenpai

R2 Holo — Development skill for Claude Code

Development community

A holographic R2-D2 that reacts, live, to what a Claude Code session is doing.

How to install R2 Holo

This entry records only its repository, not the path inside it, so there is no exact command to give. Open tcsenpai/r2-holo and copy the folder into ~/.claude/skills/, or the file into ~/.claude/agents/.

What R2 Holo does

A holographic R2-D2 that reacts, live, to what a Claude Code session is doing.

Alternatives in Development

  • Zoetrope — Watch a Claude Code session as a live flow graph, in your terminal or your browser 584 ★
  • BioSkills — a set of SKILLS.md for doing bioinformatics with agents like claude code 523 ★
  • Dario — A local OpenAI- and Anthropic-compatible proxy that brings your Claude Pro/Max subscription to Cursor, Cline 485 ★

README

R2 Holotable

A holographic R2-D2 that reacts, live, to what a Claude Code session is doing.

Claude Code writes a transcript of every session to disk. This reads those files as they grow and turns them into a room: the droid rolls to a workbench when a file is read, its dome lights flare when a tool fails, a smaller droid spawns for every subagent and fades out when it finishes, and when Claude asks you something the droid stops, turns, and holds the question up on a cone of light.

None of it is a metaphor for the work — it *is* the work, one event at a time. The point is a display you can leave running and understand at a glance from across the room: whether it is working, waiting on you, or stuck.

Needs [Bun](https://bun.sh), built against 1.3.14. Nothing to install: Three.js is vendored and there are no dependencies.

bun run server.ts          # http://127.0.0.1:4242
PORT=8080 bun run server.ts
bun test                   # 71 tests

Watch it run

https://github.com/user-attachments/assets/e0df7448-a8a4-49da-b3ca-47c7202372d8

A live session: the droid working a station, subagents spawning and fading, the ring at the rim tracking the pace of it.

What it reads

The server tails the selected `.jsonl` (`fs.watch` plus a 1.2 s safety poll, because `fs.watch` occasionally falls asleep on macOS) and normalises every line into a minimal event:

{ t, kind: "tool"|"result"|"text"|"user"|"system"|"mode"|"title",
  tool?, error?, sidechain?, agent?, atype?, model?, tokens? }

That is all the page receives. **Session content never leaves the disk**: no prompts, no tool output, no diffs. Only the shape of what happens.

`/api/stream` rejects any path outside `~/.claude/projects` with a 403.

Watching from another device

bun run lan                # or: bun run server.ts --lan

The server prints the address other devices should use, picking the private LAN interface over any VPN or tunnel that also reports one:

  listening on   ht