Goyangi: Watch what Claude Code is doing, live Developer netil released Goyangi, a Claude Code plugin that adds a live panel beside the conversation showing each turn's model requests, tool calls, subagents, tokens, cost and time share. Goyangi installs via `claude plugin marketplace add netil/goyangi` and `claude plugin install goyangi@goyangi --scope user`, and adds gauges for context, cache hit rate and the 5h and 7d usage limits with a forecast, all computed locally with no tokens spent. The plugin also numbers open Claude Code sessions and browser tabs so prompts like "send this to session 2" or "Work in tab B3" route work, and includes a "walk view" pixel cat or dog whose mood reflects context, cost and usage limits. Goyangi is a panel beside your Claude Code https://claude.com/claude-code conversation that shows, turn by turn, where the time and money went. Goyangi 고양이 is the Korean word for a cat: a cat that sits next to the conversation and watches every turn. claude plugin marketplace add netil/goyangi claude plugin install goyangi@goyangi --scope user Run /reload-plugins , then open the panel with /goyangi . It also opens by itself when a session starts. New versions install automatically turn this off in the settings screen, = in the header . Sessions and browser tabs have numbers, so a short prompt is enough: send this to session 2 pull from 1 Summarize the docs tab Work in tab B3 - send this to session 2 passes this session's handoff note to the other session. pull from 1 asks session 1 for its handoff - Summarize the docs tab and Work in tab B3 work in that very browser tab, with your sign-ins. The numbers come from the Open sessions and Browser tabs boxes - When context passes the alert threshold, click Continue in a fresh session and the work carries on in a new session from a handoff note - Turn flow : every model request, tool call, and subagent of the turn in order, with tokens, cost, and a time share bar - Gauges and advice : context, cache hit rate, and the 5h and 7d usage limits with a forecast. Rule-based advice flags repeated failures, cache drops, and files read again. All computed locally, no tokens spent - Session map and log : one row per turn to compare, and a replay of any recent turn. The log switches between key events and everything - Walk view : press v and a pixel cat or dog walks through the turn. Its mood shows context, cost, and usage limits at a glance - Open sessions : send this session's handoff to another Claude Code session or a coding agent Codex, OpenCode, ... , or pull theirs here - Browser tabs : your open tabs, numbered. Say "B3" or "the GitHub PR tab" and the model works in that tab - Terminal and desktop app : the same panel in both The walk view's cat and dog: running, thinking, working, failing, and sleeping. See the manual https://github.com/netil/goyangi/blob/main/docs/MANUAL.md for the layout, shortcuts, advice rules, and settings https://github.com/netil/goyangi/blob/main/docs/MANUAL.md settings . - Claude Code with mod function hooks support - The walk view's pixel art uses octant characters Unicode 16 in Ghostty, kitty, and WezTerm. Other terminals Obsidian's terminal, iTerm2, Terminal.app, VS Code get a coarser version drawn with quadrant blocks, so the layout holds claude plugin validate . claude plugin test . Without claude plugin test , run the event-order regression test with Node.js 24 or later. It uses an in-memory adapter and doesn't replace the engine and UI integration tests. node --test tests/lifecycle.test.mjs To try local changes, load the folder directly with claude --plugin-dir . and run /reload-plugins after edits. The test kit doesn't paint the panel, so layout breaks at narrow widths are checked separately. tools/layout-check renders the terminal panel with Ink an approximation of the engine's renderer at widths from 26 to 120 columns and reports rows wider than the panel and Box props the engine refuses. It exits 1 when it finds any. cd tools/layout-check && npm install node check.mjs default view; or pass widths: node check.mjs 26 40 60 VIEW=avatar node check.mjs walk view also SETTINGS=1, MODE=band for the minimized view FRAMES=1 node check.mjs 30 print the frames, to spot titles wrapping into columns 1. Run claude plugin validate . and claude plugin test . 2. Raise version in package.json and .claude-plugin/plugin.json installed copies update only when it changes 3. Move the changelog entries under a new vX.Y.Z date heading 4. Commit, then git tag vX.Y.Z , git push --follow-tags , and gh release create vX.Y.Z --notes-file