JasonWarrenUK/goblin-mode/tree/main/marketplace/goblin-util
goblin-util
給你執行工作階段的機器使用的兩個 Claude Code mod:/pain 不開新回合就記錄工具本身造成的摩擦,/fleet 顯示機器上的每個工作階段,並讓你傳訊息給其中一個。
關於這個 mod
goblin-util 內含兩個會立即執行的 Claude Code 指令,執行時不會啟動新的回合。/pain 會把使用 Claude Code 本身時遇到的摩擦記錄到 ~/.claude/library/state/cc-pain-points.json,自動填入 repo、branch 與最後失敗的工具呼叫,重複項目不會再寫入。/fleet 讀取機器上每個 session 寫入的心跳資料(repo、branch、是否正在執行、最後呼叫的工具與時間),在面板列出,並可用 1–9 選取後按 Enter 傳訊息給該 session。選項有 enabled、heartbeat_seconds(預設 15)和 stale_minutes(預設 10)。安裝方式是 claude plugin marketplace add JasonWarrenUK/goblin-mode 與 claude plugin install goblin-util@goblin-mode,需要 Claude Code 2.1.287 以上。
安裝
請先查看作者 README,確認 marketplace 與外掛名稱;指令可能隨儲存庫結構而變動。
claude plugin marketplace add JasonWarrenUK/goblin-mode claude plugin install goblin-util
原文 / README
goblin-util
[!NOTE] Two Claude Code mods from goblin-mode for the machine you run sessions on. Both are immediate commands: they work while Claude is busy, and neither starts a turn.
1. Install
claude plugin marketplace add JasonWarrenUK/goblin-mode
claude plugin install goblin-util@goblin-mode
Needs Claude Code 2.1.287 or later. The panes draw in the terminal; the heartbeat and /pain <text> work everywhere.
2. /pain
Logs friction with Claude Code itself (the tool, never your project) into ~/.claude/library/state/cc-pain-points.json, the file hud-cc_releases reads to recognise a fix in the changelog later. The track-cc_pain skill does the same by inferring your mood mid-turn; this is the direct channel.
| Form | What happens |
|---|---|
| /pain the status line ate my prompt | Appends the entry at once and prints logged the-status-line-ate-my-prompt. |
| /pain | Opens a small pane with the context line and an input. Enter logs it and closes the pane. Esc closes it. |
The entry carries the schema library/state/README.md documents. sourceSession is pre-filled with the repo, the branch and the last failed tool call's first line, so the record says where it bit. An open entry with the same description is not duplicated; you are told its id instead. Marking an entry resolved stays with the skill.
3. /fleet
Every session on this machine writes a heartbeat row to the plugin's shared store: repo, branch, whether a turn is running, the last tool it called and when. /fleet opens a pane listing them, this session first.
| Key | Does |
|---|---|
| 1 to 9 | Picks a row. A picked session that is not this one gets an input under the table. |
| Enter in the input | Sends the line to that session as a message, the same delivery as the SendMessage tool. The toast says whether it landed. |
| Esc | Closes the pane. |
A row that has not written for a minute reads quiet. Opening /fleet never writes: a row past the stale limit is dropped by the next heartbeat any running session writes, within heartbeat_seconds (15 by default). A session that ends cleanly removes its own row.
4. Options
| Option | Default | What it does |
|---|---|---|
| enabled | true | The one switch for all of it. Off, the heartbeat stops and /pain and /fleet are not registered. |
| heartbeat_seconds | 15 | How often this session writes its row. |
| stale_minutes | 10 | A session silent for this long is forgotten. |
5. Files
| File | Holds |
|---|---|
| hooks/register.tsx | Both commands, the heartbeat, the two panes |
| hooks/util.test.tsx | Tests for the helpers, both forms of /pain, the fleet pane and the heartbeat |
| types/index.d.ts | The $.state contract: the picked session, the last failed tool, the branch |
Check it with claude plugin validate marketplace/goblin-util --strict and claude plugin test marketplace/goblin-util.
