oMaN-Rod/claude-code-widgets/tree/main/plugins/quest-widget
quest-widget
把工作階段當成地城探險:每個回合是一個房間,工具呼叫是怪物,失敗會受傷,通過檢查就會掉落戰利品。你的英雄會在工作階段之間延續。
關於這個 mod
Claude Code Widgets
顯示在 Claude Code 提示列下方的小卡片,或在全螢幕時停駐在逐字稿旁邊。每個 widget 都是獨立的外掛,可用斜線指令切換。
它最初只有幾個實用 widget(context、usage、file tree),後來越做越多:現在共有 61 個,從 git 狀態和回合計時器,到像素螃蟹、地城探險與 Tetris,應有盡有。
安裝
加入 marketplace,接著安裝版面配置外掛,以及你想使用的 widget:
/plugin marketplace add oMaN-Rod/claude-code-widgets
/plugin install widgets@claude-code-widgets
/plugin install context-widget@claude-code-widgets
每個 widget 都需要 widgets,也就是負責放置卡片的版面配置外掛。
需要支援 mod(function hook)的 Claude Code 版本。mod API 目前是搶先體驗,版本更新時可能會變更。
Widgets
版面配置
所有 widget 都需要。
| 外掛 | 指令 | 顯示內容 |
| --- | --- | --- |
| widgets | /widgets [side\|above\|below\|close\|<columns>\|width <widget> <columns\|reset>] | 將卡片放在提示列下方、上方,或全螢幕時停駐在逐字稿旁邊 |
工作階段
Claude 正在做什麼,以及這些操作花費多少。
| 外掛 | 指令 | 顯示內容 |
| --- | --- | --- |
| context-widget | /context-widget [auto\|detailed\|grid\|top\|bar\|line] | 將 context window 顯示為堆疊列,每個 /context 類別使用一種顏色 |
| usage-widget | /usage-widget | 每個速率限制視窗一列、重設倒數時間,以及工作階段成本 |
| timer-widget | /timer-widget [on\|off\|clear] | 目前回合的經過時間,加上上一回合、平均和最長回合,以及迷你折線圖 |
| activity-widget | /activity-widget [on\|off\|clear] | 最近的工具呼叫、持續時間,以及是否失敗 |
| tasks-widget | /tasks-widget [on\|off\|clear] | Claude 正在處理的任務清單,以及進度列 |
| checks-widget | /checks-widget [on\|off\|clear] | 最近的測試、lint 與建置執行結果:通過或失敗、持續時間,以及距離現在多久 |
| timeline-widget | /timeline-widget [on\|off] | 將回合顯示為圖表:時間軸上每個工具呼叫一列,平行呼叫會堆疊顯示 |
| board-widget | /board-widget [on\|off\|clear] | Claude 透過 pin 工具自行寫入的狀態看板:目標、發現與待解問題 |
| forecast-widget | /forecast-widget [on\|off\|clear] | 每回合的 context 增長圖表,以及壓縮前剩餘的回合數 |
| guard-widget | /guard-widget [on\|off\|clear] | 此工作階段的權限檢查:允許、詢問與拒絕,以及系統持續詢問你的項目 |
| stream-widget | /stream-widget [on\|off] | Claude 書寫時即時顯示每秒 token 數量計、迷你折線圖(依文字長度估算) |
| sessions-widget | /sessions-widget [on\|off] | 這台機器上開啟的其他 Claude Code 工作階段:資料夾、分支、忙碌或閒置 |
專案與 git
工作樹的狀態。
| 外掛 | 指令 | 顯示內容 |
| --- | --- | --- |
| file-tree-widget | /file-tree-widget | 專案目錄;點擊即可展開資料夾 |
| git-widget | /git-widget | 分支、領先/落後、已暫存、已變更與未追蹤的數量,以及最後一次 commit |
| changes-widget | /changes-widget [on\|off\|clear] | 此工作階段編輯的檔案,最近編輯的在前,並顯示每個檔案的編輯次數 |
| commits-widget | /commits-widget | 工作階段開始後建立的 commit |
| todos-widget | /todos-widget | 追蹤檔案中的 TODO、FIXME、HACK 與 XXX 註解,並計數列出 |
| diff-widget | /diff-widget [on\|off\|clear] | 上一次編輯的語法高亮 diff |
| watch-widget | /watch-widget [on\|off\|run\|stop], /watch <command> | /watch bun test 會在每次編輯後重新執行指令:顯示通過或失敗指示燈,以及最後幾行失敗訊息 |
| map-widget | /map-widget [on\|off\|clear] | 追蹤檔案的像素地圖;Claude 讀過的位置亮藍色,編輯過的位置亮綠色 |
時間與專注
不依賴工作階段的時鐘、計時器與提醒。
| 外掛 | 指令 | 顯示內容 |
| --- | --- | --- |
| pomodoro-widget | /pomodoro-widget [on\|off\|start\|break\|stop\|<minutes>] | 專注計時器,包含倒數、進度列與完成的工作階段數 |
| countdown-widget | /countdown-widget [on\|off\|clear], /countdown <HH:MM\|<n>m\|<n>h> [label] | 距離你設定的期限還有多久,包含進度列,以及到點時的 toast |
| clocks-widget | /clocks-widget [on\|off\|add <zone>\|remove <zone>\|clear] | 在你新增的時區旁顯示當地時間,例如 Asia/Tokyo |
| notes-widget | /notes-widget [on\|off\|clear], /note <text\|done <n>> | 跨工作階段保留的釘選筆記;/note <text> 新增一則,/note done <n> 移除一則 |
| coffee-widget | /coffee-widget [on\|off\|refill\|<minutes>] | 一杯會在 90 分鐘內逐漸喝完的咖啡,提醒你休息 |
場景
會對回合、工具呼叫、檢查與 context 用量做出反應的像素畫。
| 外掛 | 指令 | 顯示內容 |
| --- | --- | --- |
| pet-widget | /pet-widget [on\|off\|<mood>] | Clawd,一隻像素螃蟹:回合中工作、工具呼叫失敗時暈眩、測試通過時開心。會賺取 XP 並跨工作階段升級;badges-widget 頒發徽章後會戴上帽子;同時開啟兩個工作階段時,會留在你最後輸入提示的那個工作階段 |
| aquarium-widget | /aquarium-widget [on\|off\|demo] | 每個執行中的工具呼叫與 agent 各有一條魚 |
| skyline-widget | /skyline-widget [on\|off\|demo\|clear] | 每回合一棟建築,每次工具呼叫一層樓 |
| train-widget | /train-widget [on\|off] | 一台火車頭拖著本回合每次工具呼叫各自對應的一節車廂,車廂依工具著色 |
| garden-widget | /garden-widget [on\|off\|reset] | 一株植物:每次工具呼叫長出一片葉子,檢查通過時開花,呼叫失敗時枯萎 |
| campfire-widget | /campfire-widget [on\|off\|stoke] | 工具呼叫越多,營火燒得越旺;閒置時逐漸只剩餘燼 |
| constellation-widget | /constellation-widget [on\|off\|clear] | 每回合一顆星星,連成星座;累積到第 9 顆後會取得名稱 |
| fireworks-widget | /fireworks-widget [on\|off\|demo] | 檢查通過時在夜空施放煙火,失敗時則放出啞炮 |
| invaders-widget | /invaders-widget [on\|off\|demo\|clear] | 每次檢查失敗就有一個入侵者抵達;檢查通過時會把它們擊落 |
| weather-widget | /weather-widget [on\|off\|live\|<percent>] | context 還有空間時是晴天,接近壓縮時變成暴風雨 |
| boss-widget | /boss-widget [on\|off] | 將 context 用量顯示為 boss 血條;壓縮會擊敗它並開始下一關 |
| sky-widget | /sky-widget [on\|off] | 依你當地時間顯示天空:白天是太陽、夜晚是月亮,工作階段持續越久星星越多 |
| world-widget | /world-widget [on\|off\|clear] | 一個囊括所有元素的場景:天空依時鐘變化、天氣依 context 變化、每回合一座塔、工具呼叫組成的火車,以及四處遊走的螃蟹 |
| quest-widget | /quest-widget [on\|off\|reset] | 將工作階段變成地城探險:每回合一個房間,每次工具呼叫一隻怪物,檢查通過時掉落戰利品;英雄會跨工作階段保留 |
| race-widget | /race-widget [on\|off\|clear] | 平行 subagent 是賽道上的車,每次工具呼叫前進一步,完成時登上頒獎台 |
視覺化工具
由工具活動驅動的抽象圖像。
| 外掛 | 指令 | 顯示內容 |
| --- | --- | --- |
| mosaic-widget | /mosaic-widget [on\|off\|clear] | 每次工具呼叫一塊磁磚,依工具著色;失敗顯示紅色 |
| sorting-widget | /sorting-widget [on\|off\|step] | 正在排序的長條圖,每次工具呼叫交換一次 |
| equalizer-widget | /equalizer-widget [on\|off] | 每次工具呼叫都跳動、接著回落到靜止狀態的音量電平 |
| rain-widget | /rain-widget [on\|off] | 落下的程式碼雨,回合越忙碌速度越快 |
| orbit-widget | /orbit-widget [on\|off] | 小型太陽系;工具呼叫執行時行星會加速 |
| life-widget | /life-widget [on\|off\|reset] | Conway 的 Game of Life;每次工具呼叫都會放下一架滑翔機 |
| donut-widget | /donut-widget [on\|off] | 旋轉的 3D donut;工具呼叫執行時轉得更快 |
| pipes-widget | /pipes-widget [on\|off] | 管線螢幕保護程式;工作階段閒置時持續長出,Claude 工作時暫停 |
| maze-widget | /maze-widget [on\|off\|new] | 由專案資料夾作為種子生成的迷宮第一人稱漫遊 |
| marquee-widget | /marquee-widget [on\|off\|clear\|<text>] | 捲動工作階段事件的 LED 跑馬燈;輸入其他文字就會發布你自己的標題 |
遊戲
Snake、2048 與 Tetris 會自行遊玩,直到你點擊棋盤並接手按鍵。
| 外掛 | 指令 | 顯示內容 |
| --- | --- | --- |
| snake-widget | /snake-widget [on\|off] | Snake;會自行遊玩,直到你接手按鍵 |
| 2048-widget | /2048-widget [on\|off] | 2048;會自行遊玩,直到你接手按鍵 |
| tetris-widget | /tetris-widget [on\|off] | Tetris;會自行遊玩,直到你接手按鍵 |
| minesweeper-widget | /minesweeper-widget [on\|off] | Minesweeper:點擊翻開,按右鍵或 f 標記,按 r 重新開始 |
| breakout-widget | /breakout-widget [on\|off\|reset] | 自動遊玩的打磚塊;每次工具呼叫增加一排磚塊 |
| typer-widget | /typer-widget [on\|off] | 打字遊戲:來自你自己檔名的文字會落下,你要在它們落地前打出來 |
純粹好玩
| 外掛 | 指令 | 顯示內容 |
| --- | --- | --- |
| fortune-widget | /fortune-widget [on\|off\|next] | 每回合都會改變的一行運勢 |
| 8ball-widget | /8ball-widget [on\|off], /8ball <question> | /8ball <question> 會給出可靠性存疑的答案 |
| badges-widget | /badges-widget [on\|off\|reset] | 跨工作階段取得的成就,解鎖時顯示 toast |
| sigil-widget | /sigil-widget [on\|off\|clear] | 依此工作階段的活動產生像素徽記,旁邊還有早期工作階段徽記的圖庫 |
| sound-widget | /sound-widget [on\|off\|mute\|test] | 每次工具呼叫一個音符,檢查通過時一個和弦,失敗時一聲嗡鳴,並附鋼琴卷軸(音訊只在 macOS 播放) |
每個工作階段都會儲存並還原放置位置、啟用的 widget 與檢視模式。
注意事項
/widgets width pet 60會設定單一 widget 卡片可延伸的寬度(預設為 40 欄);/widgets width pet reset會還原設定。/widgets side只有在全螢幕版面(/tui fullscreen)中才會將卡片停駐在逐字稿旁邊。在預設版面中,它會改放到提示列下方。- 像素畫使用終端機區塊字元繪製,只會顯示在終端機中。
sound-widget只在 macOS 播放音訊;其他平台保持靜音,只繪製鋼琴卷軸。board-widget會註冊 Claude 可以呼叫的pin工具,因此看板開啟時,它的描述會成為 context 的一部分。watch-widget透過sh -c執行你的指令,失敗時改用cmd /c。- 接手遊戲,以及進行任何 Minesweeper 操作,都需要點擊棋盤;全螢幕版面會回報這個點擊。
開發
plugins/ 下的每個外掛都是一個 mod:包含 manifest、hooks 模組與測試。
claude --plugin-dir plugins # load every plugin from this checkout
claude plugin validate plugins/<name> # check a manifest and hooks module
claude plugin test plugins/<name> # run its tests
外掛無法互相 import,因此 widgets 會以 $.widgets(plugins/widgets/hooks/kit.tsx)分享卡片堆疊與像素渲染器;每個 widget 都會呼叫它。
授權條款
MIT
安裝
請先查看作者 README,確認 marketplace 與外掛名稱;指令可能隨儲存庫結構而變動。
claude plugin marketplace add oMaN-Rod/claude-code-widgets claude plugin install quest-widget
原文 / README
Claude Code Widgets
Small cards that sit under the Claude Code prompt, or docked beside the transcript in fullscreen. Each widget is its own mod, toggled with a slash command.
It started with a few useful ones (context, usage, file tree) and then got carried away: there are now 61 widgets, from git status and a turn timer to a pixel crab, a dungeon crawl and Tetris.
Install
Add the marketplace, then install the layout plugin and whichever widgets you want:
/plugin marketplace add oMaN-Rod/claude-code-widgets
/plugin install widgets@claude-code-widgets
/plugin install context-widget@claude-code-widgets
Every widget needs widgets, the layout plugin that places the cards.
Requires a Claude Code version with mod (function hook) support. The mod API is early access and may change between releases.
Widgets
Layout
Required by every widget.
| Plugin | Command | What it shows |
| --- | --- | --- |
| widgets | /widgets [side\|above\|below\|close\|<columns>\|width <widget> <columns\|reset>] | Places the cards: below the prompt, above it, or docked beside the transcript in fullscreen |
Session
What Claude is doing and what it is costing.
| Plugin | Command | What it shows |
| --- | --- | --- |
| context-widget | /context-widget [auto\|detailed\|grid\|top\|bar\|line] | The context window as a stacked bar, one colour per /context category |
| usage-widget | /usage-widget | A bar per rate-limit window, time to reset, session cost |
| timer-widget | /timer-widget [on\|off\|clear] | The running turn's elapsed time, plus last, average and longest turn and a sparkline |
| activity-widget | /activity-widget [on\|off\|clear] | The latest tool calls with their duration and whether they failed |
| tasks-widget | /tasks-widget [on\|off\|clear] | The task list Claude is working through, with a progress bar |
| checks-widget | /checks-widget [on\|off\|clear] | The latest test, lint and build runs: pass or fail, duration and how long ago |
| timeline-widget | /timeline-widget [on\|off] | The turn as a chart: one bar per tool call on a time axis, parallel calls stacked |
| board-widget | /board-widget [on\|off\|clear] | A status board Claude writes itself through a pin tool: goal, findings and open questions |
| forecast-widget | /forecast-widget [on\|off\|clear] | Context growth per turn as a chart, with the turns left before compaction |
| guard-widget | /guard-widget [on\|off\|clear] | Permission checks this session: allowed, asked and denied, with what you keep being asked about |
| stream-widget | /stream-widget [on\|off] | A live tokens-per-second gauge and sparkline while Claude is writing (estimated from text length) |
| sessions-widget | /sessions-widget [on\|off] | The other Claude Code sessions open on this machine: folder, branch, busy or idle |
Project and git
The state of the working tree.
| Plugin | Command | What it shows |
| --- | --- | --- |
| file-tree-widget | /file-tree-widget | The project directory; folders expand on click |
| git-widget | /git-widget | Branch, ahead/behind, staged, changed and untracked counts, and the last commit |
| changes-widget | /changes-widget [on\|off\|clear] | Files edited this session, most recent first, with an edit count each |
| commits-widget | /commits-widget | The commits made since the session started |
| todos-widget | /todos-widget | TODO, FIXME, HACK and XXX comments in tracked files, counted and listed |
| diff-widget | /diff-widget [on\|off\|clear] | The last edit as a syntax-highlighted diff |
| watch-widget | /watch-widget [on\|off\|run\|stop], /watch <command> | /watch bun test reruns the command after every edit: a pass or fail light and the last failing lines |
| map-widget | /map-widget [on\|off\|clear] | A pixel map of the tracked files, lit blue where Claude has read and green where it has edited |
Time and focus
Clocks, timers and reminders that do not depend on the session.
| Plugin | Command | What it shows |
| --- | --- | --- |
| pomodoro-widget | /pomodoro-widget [on\|off\|start\|break\|stop\|<minutes>] | A focus timer with a countdown, a progress bar and a count of finished sessions |
| countdown-widget | /countdown-widget [on\|off\|clear], /countdown <HH:MM\|<n>m\|<n>h> [label] | Time left to a deadline you set, with a progress bar and a toast when it arrives |
| clocks-widget | /clocks-widget [on\|off\|add <zone>\|remove <zone>\|clear] | Your local time beside the time zones you add, such as Asia/Tokyo |
| notes-widget | /notes-widget [on\|off\|clear], /note <text\|done <n>> | Pinned notes kept across sessions; /note <text> adds one, /note done <n> removes it |
| coffee-widget | /coffee-widget [on\|off\|refill\|<minutes>] | A cup that empties over 90 minutes and nudges you to take a break |
Scenes
Pixel art that reacts to turns, tool calls, checks and context usage.
| Plugin | Command | What it shows |
| --- | --- | --- |
| pet-widget | /pet-widget [on\|off\|<mood>] | Clawd, a pixel crab: works during a turn, dizzy when a tool call fails, happy when tests pass. Earns XP and levels up across sessions, wears a hat once badges-widget has awarded a badge, and with two sessions open stays in the one you last prompted |
| aquarium-widget | /aquarium-widget [on\|off\|demo] | A fish for every running tool call and agent |
| skyline-widget | /skyline-widget [on\|off\|demo\|clear] | One building per turn, one floor per tool call |
| train-widget | /train-widget [on\|off] | A locomotive pulling one wagon per tool call this turn, coloured by tool |
| garden-widget | /garden-widget [on\|off\|reset] | A plant: a leaf per tool call, a flower when checks pass, wilting when a call fails |
| campfire-widget | /campfire-widget [on\|off\|stoke] | A campfire that burns higher with tool calls and dies down to embers when idle |
| constellation-widget | /constellation-widget [on\|off\|clear] | A star per turn, joined into a constellation that gets a name after nine |
| fireworks-widget | /fireworks-widget [on\|off\|demo] | A night sky that sets off fireworks when checks pass, and a dud when they fail |
| invaders-widget | /invaders-widget [on\|off\|demo\|clear] | An invader arrives for every failing check; passing checks shoot them down |
| weather-widget | /weather-widget [on\|off\|live\|<percent>] | Clear sky when context has room, a storm near compaction |
| boss-widget | /boss-widget [on\|off] | Context usage as a boss health bar; compaction defeats it and starts the next level |
| sky-widget | /sky-widget [on\|off] | The sky at your local time: sun by day, moon by night, more stars the longer the session runs |
| world-widget | /world-widget [on\|off\|clear] | One scene for everything: sky by the clock, weather by context, a tower per turn, a train of tool calls and a wandering crab |
| quest-widget | /quest-widget [on\|off\|reset] | The session as a dungeon crawl: a room per turn, a monster per tool call, loot when checks pass; the hero is kept across sessions |
| race-widget | /race-widget [on\|off\|clear] | Parallel subagents as cars on a track, one stride per tool call, with a podium as they finish |
Visualizers
Abstract pictures driven by tool activity.
| Plugin | Command | What it shows |
| --- | --- | --- |
| mosaic-widget | /mosaic-widget [on\|off\|clear] | One tile per tool call, coloured by tool; failures are red |
| sorting-widget | /sorting-widget [on\|off\|step] | A bar chart being sorted, one swap per tool call |
| equalizer-widget | /equalizer-widget [on\|off] | Level meters that jump with each tool call and fall back to rest |
| rain-widget | /rain-widget [on\|off] | Falling code rain that speeds up the busier the turn gets |
| orbit-widget | /orbit-widget [on\|off] | A small solar system; the planets speed up while tool calls run |
| life-widget | /life-widget [on\|off\|reset] | Conway's Game of Life; every tool call drops a glider |
| donut-widget | /donut-widget [on\|off] | The spinning 3D donut; it spins faster while tool calls run |
| pipes-widget | /pipes-widget [on\|off] | The pipes screensaver; it grows while the session is idle and pauses while Claude works |
| maze-widget | /maze-widget [on\|off\|new] | A first-person walk through a maze seeded by the project folder |
| marquee-widget | /marquee-widget [on\|off\|clear\|<text>] | An LED ticker scrolling session events; any other text posts your own headline |
Games
Snake, 2048 and Tetris play themselves until you click the board and take the keys.
| Plugin | Command | What it shows |
| --- | --- | --- |
| snake-widget | /snake-widget [on\|off] | Snake; it plays itself until you take the keys |
| 2048-widget | /2048-widget [on\|off] | 2048; it plays itself until you take the keys |
| tetris-widget | /tetris-widget [on\|off] | Tetris; it plays itself until you take the keys |
| minesweeper-widget | /minesweeper-widget [on\|off] | Minesweeper: click to reveal, right-click or f to flag, r to restart |
| breakout-widget | /breakout-widget [on\|off\|reset] | A self-playing brick breaker; every tool call adds a row of bricks |
| typer-widget | /typer-widget [on\|off] | A typing game: words from your own file names fall, and you type them before they land |
Just for fun
| Plugin | Command | What it shows |
| --- | --- | --- |
| fortune-widget | /fortune-widget [on\|off\|next] | A one-line fortune that changes with every turn |
| 8ball-widget | /8ball-widget [on\|off], /8ball <question> | /8ball <question> gives an answer of doubtful reliability |
| badges-widget | /badges-widget [on\|off\|reset] | Achievements earned across sessions, with a toast when one unlocks |
| sigil-widget | /sigil-widget [on\|off\|clear] | A pixel emblem generated from this session's activity, beside a gallery of the ones from earlier sessions |
| sound-widget | /sound-widget [on\|off\|mute\|test] | A note per tool call, a chord when checks pass, a buzz on failure, with a piano roll (audio plays on macOS only) |
Placement, which widgets are on, and view modes are saved and restored in every session.
Notes
/widgets width pet 60sets how wide one widget's card may grow (the default is 40 columns);/widgets width pet resetputs it back./widgets sidedocks the cards beside the transcript only in the fullscreen layout (/tui fullscreen). In the default layout it falls back to below the prompt.- The pixel art is drawn with terminal block characters and shows in the terminal only.
sound-widgetplays audio on macOS only; elsewhere it stays silent and just draws the piano roll.board-widgetregisters apintool that Claude can call, so its description is part of the context while the board is on.watch-widgetruns your command throughsh -c, falling back tocmd /c.- Taking over a game, and playing Minesweeper at all, needs a mouse click on the board, which the fullscreen layout reports.
Develop
Each plugin under plugins/ is a mod: a manifest, a hooks module and its tests.
claude --plugin-dir plugins # load every plugin from this checkout
claude plugin validate plugins/<name> # check a manifest and hooks module
claude plugin test plugins/<name> # run its tests
Plugins cannot import from one another, so widgets shares card stacking and the pixel renderer as $.widgets (plugins/widgets/hooks/kit.tsx), which every widget calls.
License
MIT

