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.