Claude Modsunofficial directory

Games·terminal·MIT

kaneed-dungeon

Kaneed the crab explores a dungeon above the prompt while Claude works. Tests heal it.

kaneed-dungeon band above the Claude Code prompt: Kaneed the pixel crab levels up beside the dungeon minimap
Screenshots and demo from the kaneed-dungeon repository by otani, MIT license

kaneed-dungeon puts Kaneed, a small pixel-art crab, in a side-scrolling dungeon above the Claude Code prompt. It walks, fights and loots on its own while a model turn is running, and rests while Claude waits for you. You cannot steer it: your only choices are which view to show and a few display settings. The game runs entirely in the plugin’s TypeScript and costs no tokens. The README and the toasts are in Japanese; the band’s tabs are labelled in English.

Healing is scarce by design. Kaneed recovers half its max HP on a level up, 35% when a test run that Claude executes passes, and otherwise only by buying a remedy in a shop it happens to find. Resting does not restore HP. When it dies it starts again at level 1 on the first floor with no gear, and the run is recorded in a hall of past adventures.

Install

Needs Claude Code 2.1.287 or later, an interactive terminal and a font with box-drawing and block characters. The author’s own floor is Claude Code 2.1.269.

claude plugin marketplace add aieo-product/kaneed-dungeon-claudemod
claude plugin install kaneed-dungeon@kaneed-dungeon

Start claude: the band appears above the prompt and Kaneed sets off as soon as Claude starts working. The README also documents a ~/.claude/settings.json block that registers the marketplace with autoUpdate on. Installed with the two commands above, updates are manual: claude plugin update kaneed-dungeon@kaneed-dungeon.

The game

  • Exploring. Each floor is a 90 by 46 grid of rooms and corridors. Kaneed heads for unexplored edges, clears the floor and takes the stairs, whose room holds a boss. One tick every half second: a step, or one exchange of blows.
  • Fighting. Starts on contact, and everyone adjacent hits back. Enemies are generated at Kaneed’s level, give or take one, and gain a level every two floors. Crits come from eyewear, evasion from boots.
  • Gear. Five slots (hat, eyewear, shield, sword, boots), five tiers, five rarities. Kaneed always swaps to whatever it picks up, even when the new piece is worse.
  • Shops. About half the floors have one. Kaneed detours in, buys one item it can afford from a shelf of three, and the shop closes for that floor.
  • Death. Four seconds later a new run starts at level 1. The author’s simulations put a median run at about 16 minutes without test passes, and about 27 with a test passing every 45 seconds.

Kaneed mid-fight in kaneed-dungeon: the crab faces an enemy on the side-scrolling stage above the prompt

The band’s tabs or /kaneed switch views: /kaneed shows the game, /kaneed dash a token dashboard for the session, /kaneed status stats and gear, /kaneed log the recent action log and past runs, /kaneed links the links tab, and /kaneed settings the display settings. /kaneed hide closes the band and pauses the exploration. The command runs immediately, even mid-turn.

Settings cycle with each press or take a value from the keyboard: /kaneed set rows 16 (band height, auto or 12 to 22 rows), /kaneed set size 0.5 (sprite scale, auto, as drawn, 0.75 or 0.5; sprites are never enlarged past the pixel art), /kaneed set map off (minimap), /kaneed set hero ai (one of five colour variants of Kaneed or the fallback figure) and /kaneed set reset. They are saved across sessions.

The dashboard shows where this session’s tokens went: the output, input and cache split, cost in USD, the five heaviest turns, the context window breakdown, the 5-hour and 7-day rate limit windows, and a count of every event the plugin saw. It lives in memory and resets with each session.

The links tab, added in 0.5.0, lists every URL and every owner/repo#12 or #12 reference that appeared in the conversation, newest first, and opens one in the browser when you press its row. GitHub issues and pull requests show their number, title and state; other pages show their title, or the link label or host name when none is fetched.

The hero is built to be replaced: a 24 by 16 pixel PNG plus an anchors file, and the 25 equipment layers fit the new character. If you would rather have a runner that plays itself with no progress to lose, cc-dino is the lighter option.

How it works

Kaneed moves on the turn. turn.start marks Claude as working and turn.complete from the main agent marks it idle, so the crab only walks during a turn. session.compact reseeds and rebuilds the current floor. ui.render draws the band as a Client element in the AbovePrompt slot, and ui.message carries the board’s state back to be saved.

Test detection reads the command of every tool.call. If the tool is Bash and the command matches a test runner (npm, bun, pnpm or yarn test, jest, vitest, mocha, pytest, rspec, phpunit, go test, cargo test, make test, mvn, gradle or sbt with test), a successful result counts as a pass and heals Kaneed; a failed one is tallied. Nothing else in the command is used, and other tools are only counted.

prompt.submit and skill.prompt are counted for the dashboard and passed through unchanged; nothing is added to the context. turn.start keeps the opening of each prompt in memory so the dashboard can label its heaviest turns. Usage figures come from turn.complete and from $.session.usage() without arguments, which the author states issues no API request; the context breakdown uses the local summary estimate. The plugin never calls the model or starts a subagent, and a test in the repo, tests/no-tokens.test.ts, checks that.

Saved in the plugin store under ~/.claude: Kaneed’s sheet, run number, floor, the last 300 log lines, the last 30 past runs and your settings. They carry across sessions but not across machines.

Network, two kinds. Once a day the plugin fetches plugin.json from the repo’s main branch on GitHub and shows a toast if a newer version exists; it installs nothing, and the updateCheck option in /config turns it off. The links tab, only while it is open, runs gh api for each GitHub issue or pull request it lists (so gh must be logged in) and fetches the page <title> of other links with $.http.fetch, never for local or private addresses; linkTitles in /config turns the title fetch off, leaving only the GitHub lookups. Each summary is kept per URL and not fetched again. Links are read from the session transcript with $.session.messages(), and pressing a row runs open on macOS or xdg-open elsewhere. With both options off, nothing leaves the machine.

Limitations

  • Nothing draws in claude -p, the desktop app or mobile.
  • Toasts, settings labels and README are in Japanese; only the tab names are English.
  • Kaneed cannot be controlled, and hiding the band stops the exploration.
  • The links tab needs gh logged in for GitHub references; without it those rows carry no title.
  • Version 0.5.1, first published in September 2026. The author calls the function hooks API early access and subject to change.

Similar Claude Mods

The whole directory →