2026-05-08 · ~12 min read · ViewWork v0.1.1

Why I built ViewWork — and how to use it

One day I lost track of which file my AI agent was reading and in what order. The end result compiled fine — but the process was buried in a text log somewhere. I wanted to see it. ViewWork is what came out of that.

Why I built it

If you've ever seen an AI agent — Claude Code, Cursor, Codex — touch fifty files in an hour, you know. The result works. But the path it took to get there is hidden in line-by-line transcripts somewhere.

I wanted two things to be visible at all times:

So I built ViewWork — a desktop app that runs entirely on your PC and lays out your code directory + AI work + dev-server traffic on one screen, as nodes and living characters.

What ViewWork shows

3D node map with AI agent characters working on file nodes
3D scene — characters parked above the exact files they read/edit/write, with data-flow particles tracing the calls.

Folder tree → 3D nodes + edges, mapped 1:1. Folders cluster on the left, files in the middle, and an outer ring carries external services / MCP servers / DB tables / URLs the agent is browsing — as virtual nodes.

Characters are alive. Every time an AI agent calls a tool (Read · Edit · WebFetch · …) its avatar lerps to the target node. When several characters land on the same node, they auto-arrange in a small ring so they don't overlap.

5-minute install

Grab the installer from the downloads section — pick a folder. That's it. AI hooks aren't required; ViewWork picks up the session logs automatically.

# Or build from source
git clone https://github.com/gugu9999gu/ViewWork.git
cd ViewWork
npm install
npm run dev   # dev mode (hot reload)
# or
npm run dist:win   # build a Windows installer

The viewport — node map + characters

The viewport supports two modes:

Four layouts: horizontal · vertical · radial · volumetric tree. Each mode (2D / 3D) keeps its own settings — keep 2D readable with horizontal, keep 3D spacey with the volumetric tree, independently.

2D React Flow graph with MCP / cloud / external activity virtual nodes
2D mode — MCP servers, cloud DB tables, and external-activity nodes all on the same graph.

Auto AI agent tracking

The piece I'm proudest of. No hooks, no patches, no env vars. ViewWork watches these locations automatically:

ViewWork tails each line, parses tool-use calls, and maps them to a single action (read · edit · write · bash · task · …). The character then glides to the target file node.

"Other AI tools can join the same way — emit a single JSON line per tool call. The format + examples live inside the desktop app under Help → AI agent activity upload path."
Sidebar — AI tracking + live traffic
Left sidebar — AI tracking, live traffic, and display options merged into one panel.

Repeated identical events (same agent + path + action) collapse into a single row with a ×N badge. The sidebar never gets spammed by the same operation.

Off-project activity (URLs · thinking · answers)

I wanted to see what the AI does outside the repo too.

These virtual nodes self-clean after 30 minutes — the graph never becomes a wall of stale URLs.

MCP + DB schema

If your project has .mcp.json / .cursor/mcp.json / claude_desktop_config.json, ViewWork enumerates every MCP server as a virtual mcp:<name> node. When you have ≥2 nodes for the same vendor it auto-spawns a platform hub — file → hub → individual MCP — so the routing becomes obvious.

DB schema is even better. Prisma schema.prisma, Drizzle schema/, and SQL migrations are all parsed. Tables, columns, and foreign keys land as cloud nodes; supabase.from('users').select()-style calls in the code draw an edge to the matching table.

Dev-server visitor tracking

A built-in reverse proxy sits in front of your dev server (localhost:3000, etc.) and captures every page view, API call, and form submit. Visitors get stable IDs via cookie (viewwork-visitor-id) — same person across pages, so flows are accurate.

The fun part — flip the proxy to 0.0.0.0 LAN exposure and a phone or tablet on the same network can use the URL. Their traffic shows up as a character on the map. QA demos suddenly become visual.

Custom characters (image · GIF · GLB)

Default characters are pastel discs, but drop your own and they swap in. Settings → Characters → Open folder — drop PNG / SVG / GIF / WebP / AVIF / GLB / FBX. Naming convention:

Toggle "Show character image only" (Settings → Characters) to drop the circular badge / glow / border — your GIF avatar stays pure.

Local-first — no telemetry

All analysis runs on your PC.

What's next

The visualization core is solid. On top of it: live DB INSERT/UPDATE/DELETE visualization, direct local + cloud DB access, anomaly watch + alerts, time-scrub replay, team mode. Full list on the roadmap section.

Bug reports, ideas, questions — the desktop app's Help → Send feedback (F1) or the contact page. Thanks for reading. See you on the node map.


※ This article reflects v0.1.0. Latest changes: /en/release/.