ClaudeMods
☰
ZH-TW
● 0 人在線上 · 瀏覽 0 次
贊助提交作品
GitHub 儲存庫 · 發布者 cskwork

mod-template

Claude Code 外掛入門範本,包含斜線指令、狀態列項目、提示列上方的列,以及附測試的 $.state 契約,透過 cskwork/claude-code-mods marketplace 安裝。

已翻譯

關於這個 mod

claude-code-mods

Claude Code 的外掛(2.1.287+):透過 function hooks 觀察、重寫或回應 Claude Code 的行為,並繪製自己的介面。根據 Getting started with Claude Code mods。

首頁:https://cskwork.github.io/claude-code-mods/

| 外掛 | 功能 | | --- | --- | | token-weather | 在提示列上方顯示上下文視窗的一行預報:☀ Clear → ↯ Compact soon、已用 token、最近 12 個工作階段的火花線,以及上一輪增加了多少。 | | blast-radius | 高風險 Bash 指令執行前(遞迴 rm、git reset --hard、git clean -f、強制推送、git branch -D、git stash drop/clear、kubectl delete、SQL DROP/TRUNCATE、移轉)先試跑會影響什麼,並詢問 Proceed 或 Cancel。取消或關閉都會拒絕呼叫。 | | template | 入門外掛,未安裝:包含斜線指令、狀態列項目、一列,以及附測試的 $.state 契約。 |

安裝

在 Claude Code 中:

/plugin marketplace add cskwork/claude-code-mods
/plugin install token-weather@claude-code-mods
/plugin install blast-radius@claude-code-mods
/reload-plugins

建立新的外掛

scripts/new-mod.sh my-mod "One line about what it does"
claude --plugin-dir "$PWD/my-mod"     # hot-reloads on every save

此腳本會複製 template/、重新命名、加入 .claude-plugin/marketplace.json,然後執行 claude plugin validate 和 claude plugin test。

一個外掛由 3 個檔案和一個選用的狀態契約組成:

my-mod/
├── .claude-plugin/plugin.json   name, version, description, "types"
├── hooks/hooks.json             { "modules": ["./register.tsx"] }
├── hooks/register.tsx           export const register: Register = on => { ... }
├── types/index.d.ts             PluginState contract for $.state values
└── tests/my-mod.test.ts         claude plugin test my-mod

容易踩到的規則:

  • 每個 hook 都是 ($, e, next)。呼叫 next(e) 繼續傳遞,呼叫 next({ ...e, x }) 重寫,不呼叫它直接返回則回應。
  • 將值保存在 $.state(atom / read / update)中;每次熱重載時模組變數都會重設。
  • 沒有 Node,也沒有 DOM:檔案、處理程序、時鐘和 UI 都透過 $ 使用。UI 元素來自 $.ui.resolve(e)。
  • 測試 mock 也是 hook:on('process.run', ($, e) => ({ value: ... }))。
  • 引擎載入外掛後,會在外掛旁寫入 .claude-plugin/types/,因此 tsc -p <mod> 可以對它進行型別檢查(該目錄被 gitignore)。

檢查

for m in token-weather blast-radius template; do claude plugin validate $m && claude plugin test $m; done

安裝

請先查看作者 README,確認 marketplace 與外掛名稱;指令可能隨儲存庫結構而變動。

claude plugin marketplace add cskwork/claude-code-mods
claude plugin install mod-template
原文 / README

claude-code-mods

Mods for Claude Code (2.1.287+): plugins of function hooks that observe, rewrite or answer what Claude Code does and draw their own UI. Based on Getting started with Claude Code mods.

Landing page: https://cskwork.github.io/claude-code-mods/

| Mod | What it does | | --- | --- | | token-weather | A one-line forecast of the context window above the prompt: ☀ Clear → ↯ Compact soon, tokens used, a sparkline of the last 12 turns, and how much the last turn added. | | blast-radius | Before a risky Bash command runs (recursive rm, git reset --hard, git clean -f, force push, git branch -D, git stash drop/clear, kubectl delete, SQL DROP/TRUNCATE, migrations), dry-runs what it would touch and asks Proceed or Cancel. Cancel or dismiss denies the call. | | template | Starter mod, not installed: a slash command, a status line entry, a band, and a $.state contract with a test. |

Install

Inside Claude Code:

/plugin marketplace add cskwork/claude-code-mods
/plugin install token-weather@claude-code-mods
/plugin install blast-radius@claude-code-mods
/reload-plugins

Make a new mod

scripts/new-mod.sh my-mod "One line about what it does"
claude --plugin-dir "$PWD/my-mod"     # hot-reloads on every save

The script copies template/, renames it, adds it to .claude-plugin/marketplace.json, then runs claude plugin validate and claude plugin test on it.

A mod is three files plus an optional state contract:

my-mod/
├── .claude-plugin/plugin.json   name, version, description, "types"
├── hooks/hooks.json             { "modules": ["./register.tsx"] }
├── hooks/register.tsx           export const register: Register = on => { ... }
├── types/index.d.ts             PluginState contract for $.state values
└── tests/my-mod.test.ts         claude plugin test my-mod

Rules that bite:

  • Every hook is ($, e, next). Call next(e) to pass on, next({ ...e, x }) to rewrite, return without it to answer.
  • Keep values in $.state (atom / read / update); module variables reset on every hot reload.
  • No Node, no DOM: files, processes, clock and UI go through $. UI elements come from $.ui.resolve(e).
  • Test mocks are hooks too: on('process.run', ($, e) => ({ value: ... })).
  • After the engine loads a mod it writes .claude-plugin/types/ beside it, so tsc -p <mod> type-checks it (gitignored).

Check

for m in token-weather blast-radius template; do claude plugin validate $m && claude plugin test $m; done

更多類似作品