はじめに
Claude Code v2.1.287 で Claude Mods が追加されました。
Claude Code の画面や動きそのものを JavaScript で書き換えられる仕組みです。
あわせて、Mod で作られた組み込み機能 「You should know」 も入りました。Claude の作業中に別のエージェントが会話を見張り、見落としそうなことを教えてくれます。
この記事では、Claude に Mod を作ってもらうところと、You should know がどんなものかを紹介します(v2.1.289 で確認)。
Claude Mods とは
Mod は、Claude Code の中で動く関数を入れたプラグインです。
「ツールを呼ぶ直前」「スピナーを描くとき」「コマンドが打たれたとき」などのタイミングで関数が呼ばれ、見るだけ・書き換える・代わりに答えるのどれかができます。
ほかの拡張手段との違いは、画面に描けることと、その場で人に判断を求められることです。
役割分担はこう整理できそうです。
| やりたいこと | 向いているもの |
|---|---|
| 手順や知識を Claude に渡す | スキル |
| 外部システムを道具として渡す | MCP サーバー |
| ルールで機械的に許可・拒否する | 権限ルール・hooks |
| 状況を人に見せて、その場で判断してもらう・画面を足す | Mod |
Mod を作ってみる
Mod は JavaScript で書くものですが、Claude Code に「こんな Mod を作って」と頼むだけで作れます。
組み込みスキル plugin-authoring を Claude が読みながら書いてくれます(Ask Claude for a mod)。
今回は 「ツール呼び出し回数をスピナーの横に出し、/tally で答える Mod」 を頼みました。
できあがったものの全体像です。
手順 1:頼む
claude を起動して、次をそのまま貼り付けます。
Claude のツール呼び出し回数をスピナーの横に表示して、/tally で回数を答える mod を作って
Claude が plugin-authoring スキルを読み込み、~/.claude/dev-mods/ に Mod を書きます。
今回は tool-tally という名前で、テストまで書いて自分で通してから報告してくれました。
手順 2:読み込みを許可する
書き始めると次の確認が出るので、2. Enable for this session を選びます(カーソルは最初 1 にあるので注意)。
/plugin を開いて、タブの下に 1 mod active · tool-tally と出ていれば OK です。
手順 3:試す
ツールを使う依頼(例:「このフォルダのファイルを一覧して README を読んで」)をすると、作業中のスピナーの末尾に [tools: N] が付きます。終わったら /tally を打ちます。
Claude を介さず即答しています。
中身が Claude への指示になるスキルと違い、自作のコマンドを Claude のターンを使わずに動かせるのが Mod ならではの点です。
(参考)Claude が書いた hooks/register.tsx(クリックで展開)
import { atom, read, update } from 'claude-code'
import type { Register } from 'claude-code'
const count = atom({ plugin: 'tool-tally', key: 'count' } as const, 0)
export const register: Register = on => {
on('session.start', async ($, e, next) => {
await $.command.register({
name: 'tally',
description: 'Report how many tool calls Claude has made this session',
})
return next(e)
})
on('tool.call', async ($, e, next) => {
await update($, count, n => n + 1)
return next(e)
})
on('command.run', { command: 'tally' }, async $ => {
const n = await read($, count)
return { text: `ツール呼び出し回数: ${n} 回` }
})
on('ui.render', { component: 'Spinner' }, async ($, e, next) => {
const n = await read($, count)
return next({
...e,
props: { ...e.props, suffix: `${e.props.suffix} [tools: ${n}]` },
})
})
}
手順 4:毎回使えるようにする
Claude が書いた Mod は、作ったセッションでしか読み込まれません(dev-mods は試作用の置き場で、30 日ほどで自動削除されます)。
気に入ったら、公式ドキュメントにあるとおり ~/.claude/skills/ に移すと、以降はすべてのセッションで読み込まれます。
mkdir -p ~/.claude/skills
mv "$(ls -dt ~/.claude/dev-mods/*/* | head -1)" ~/.claude/skills/ # 直近に作った Mod を移す
移したあとは、どのフォルダで claude を起動しても /tally が使えます。
claude plugin list で次のように出ていれば成功です。
1 回移せば済むので、普段使いはこれで十分そうです。
ユースケース
回数を数えるだけでは良さが伝わりにくいので、公式のサンプルや組み込み Mod から使いどころを挙げます。
| ユースケース | 内容 | 例 |
|---|---|---|
| 危険なコマンドの前に人の判断を挟む |
rm -rf や git push --force を止め、消えるファイルを見せて Proceed / Cancel を選ばせる |
サンプル blast-radius |
| コンテキストの残りを見えるようにする | コンテキストの使用量を天気予報のようにプロンプトの上に表示する | サンプル token-weather |
| Claude の変更を振り返る |
/replay で、直前のターンで Claude が編集したファイルを順に見返す |
サンプル replay-theater |
| 別のエージェントに見張らせる | 作業中の会話を読ませ、見落としを知らせる | 組み込みの You should know(後述) |
なお こうした Mod は安全網であって権限の仕組みではありません。
絶対に止めたいものは権限ルールで拒否し、Mod は人の目を挟む層として重ねるのが良さそうです。
組み込み Mod
Claude Code 自身の機能にも Mod があり、/plugin の Installed タブの Built-in 欄で確認できます(一覧)。
/diff のペインや AGENTS.md の読み込み、手順 1 で使った plugin-authoring スキルも Mod です。
You should know Mod
Claude が長めの作業をしている横で、もう 1 人のエージェント(side agent)が会話を読み、見落としそうなことがあればプロンプトの上にメモを出す機能です。
既定ではオフなので、次のコマンドで有効にします。
claude plugin enable cc-plugin-you-should-know@builtin
たとえば README に「本番の請求バッチは税率 8% 前提」と書いたリポジトリで、テストを通すついでに README も直してもらうと、こんな流れになります。
Claude が「完了しました」としか言わなかった注意書きの削除を、side agent が拾ってくれるわけです。
メモは筆者が実際に表示させたもので、「元の README にあった請求バッチの注意書きが、更新で消えている」という内容です。
ただし、出るのはまれです。
同じ状況を何度か作っても、メモが出ない回のほうが多くありました。
毎回の安全網というより、長い作業を任せているときにたまに袖を引いてくれる存在と考えるのが良さそうです。







