{"slug": "goyangi-watch-what-claude-code-is-doing-live", "title": "Goyangi: Watch what Claude Code is doing, live", "summary": "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.", "body_md": "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.\n\nGoyangi (고양이) is the Korean word for a cat: a cat that sits next to the conversation and watches every turn.\n\n```\nclaude plugin marketplace add netil/goyangi\nclaude plugin install goyangi@goyangi --scope user\n```\n\nRun `/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).\n\nSessions and browser tabs have numbers, so a short prompt is enough:\n\n```\nsend this to session 2\npull from 1\nSummarize the docs tab\nWork in tab B3\n```\n\n- `send this to session 2` passes this session's handoff note to the other session.`pull from 1` asks session 1 for its handoff\n- `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\n- 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\n\n- **Turn flow** : every model request, tool call, and subagent of the turn in order, with tokens, cost, and a time share bar\n- **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\n- **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\n- **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\n- **Open sessions** : send this session's handoff to another Claude Code session or a coding agent (Codex, OpenCode, ...), or pull theirs here\n- **Browser tabs** : your open tabs, numbered. Say \"B3\" or \"the GitHub PR tab\" and the model works in that tab\n- **Terminal and desktop app** : the same panel in both\n\nThe walk view's cat and dog: running, thinking, working, failing, and sleeping.\n\nSee 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).\n\n- Claude Code with mod (function hooks) support\n- 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\n\n```\nclaude plugin validate .\nclaude plugin test .\n```\n\nWithout `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.\n\n```\nnode --test tests/lifecycle.test.mjs\n```\n\nTo try local changes, load the folder directly with `claude --plugin-dir .` and run `/reload-plugins` after edits.\n\nThe 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.\n\n```\ncd tools/layout-check && npm install\nnode check.mjs              # default view; or pass widths: node check.mjs 26 40 60\nVIEW=avatar node check.mjs  # walk view (also SETTINGS=1, MODE=band for the minimized view)\nFRAMES=1 node check.mjs 30  # print the frames, to spot titles wrapping into columns\n```\n\n1. Run `claude plugin validate .` and`claude plugin test .`\n2. Raise `version` in`package.json` and`.claude-plugin/plugin.json` (installed copies update only when it changes)\n3. Move the changelog entries under a new `## vX.Y.Z (date)` heading\n4. Commit, then `git tag vX.Y.Z` ,`git push --follow-tags` , and`gh release create vX.Y.Z --notes-file <notes>`", "url": "https://wpnews.pro/news/goyangi-watch-what-claude-code-is-doing-live", "canonical_source": "https://github.com/netil/goyangi", "published_at": "2026-11-05 12:52:21+00:00", "updated_at": "2026-11-05 12:55:31.431674+00:00", "lang": "en", "topics": ["ai-tools", "ai-agents", "developer-tools", "ai-products"], "entities": ["Goyangi", "Claude Code", "netil", "Anthropic", "Codex", "OpenCode", "Ink", "Node.js"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/goyangi-watch-what-claude-code-is-doing-live", "markdown": "https://wpnews.pro/news/goyangi-watch-what-claude-code-is-doing-live.md", "text": "https://wpnews.pro/news/goyangi-watch-what-claude-code-is-doing-live.txt", "jsonld": "https://wpnews.pro/news/goyangi-watch-what-claude-code-is-doing-live.jsonld"}}