
あなたのコミット前のチェック、何も止めていない ─ Claude Code 2.1.286
Claude Code 2.1.286 から、あなたがリポジトリに置いた verify という名前のスキルを、コミットの直前に走らせるよう指示が渡ります。
ただし、それはコミットを止める仕組みではありません。出荷されたファイルを開いて数えたら、渡っているのは81文字の案内文が1つだけでした。
3つの版の実物を並べて、何が変わったのかと、あなたの verify が本当に数えられる置き場所を書きます。読み終わったら、まず自分のリポジトリを1か所だけ見てください。
先に結論
長くなるので、最初に3つだけ。
入るのは81文字の1文。コミットを止める力はありません。止めたいなら git 側のフックに回すしかない
数えられるのは自分で置いた verify だけ。Claude Code に同梱されている /verify は条件を満たしません
名前は1つではなく3つ。verify のほかに simplify と code-review が同じ仕組みに乗っています
きっかけは、変更履歴の1行だった
公式の変更履歴に、こう書かれていました。
Improved commit guidance: when your project or user skills include one named `verify`, Claude is now told to run it right before committing, except for docs-only and tests-only commits訳すと「コミット時の案内を改善した。プロジェクトかユーザーのスキルに verify という名前のものがあると、コミットの直前にそれを走らせるよう指示されるようになった。文書だけ・テストだけのコミットは除く」。
「改善した」と書いてあります。でも、何から何へ改善したのかは書いてありません。 毎日コミットしているものの挙動が名前ひとつで変わる話なので、実物を見にいきました。

確かめた方法
Claude Code の npm パッケージは28キロバイトしかありません。中身は起動用の小さなファイルだけで、本体は OS ごとに分かれた別パッケージで配られています。だから本体を読むには、そのプラットフォーム版を取ってきます。
手元は Apple シリコンの Mac なので darwin-arm64 を使いました。グローバルに入っている Claude Code には触らず、作業用のフォルダに展開するだけです。
cd /tmp && mkdir -p probe && cd probe
npm pack @anthropic-ai/claude-code-darwin-arm64@2.1.286
npm pack @anthropic-ai/claude-code-darwin-arm64@2.1.285
npm pack @anthropic-ai/claude-code-darwin-arm64@2.1.268
for v in 286 285 268; do mkdir -p x$v; tar xzf anthropic-ai-claude-code-darwin-arm64-2.1.$v.tgz -C x$v; done
for v in 286 285 268; do strings -n 10 x$v/package/claude | grep -i commit | sort -u > c$v.txt; done
comm -23 c286.txt c285.txt最後の行が「2.1.286 にあって 2.1.285 に無い、コミットという語を含む文字列」を出します。ここに目的の1文が落ちてきました。
取り出したバイナリは実際に動くもので、それぞれ 2.1.286 と 2.1.285 とバージョンを答えます。読んだのが本物の出荷物であることは、そこで確かめました。
比較に使った3版の実測値はこうです。

2.1.268 は私が普段使っている版です。目的の1文は 2.1.286 にだけ1件あり、2.1.285 と 2.1.268 には1件もありません。
2.1.286 で実際に入る1文
出荷物から取り出した文言は、これだけです。
Always run `/verify` right before the `commit` command (never for docs or tests).「コミットのコマンドの直前に、必ず /verify を走らせること(文書とテストには絶対にやらない)」。81文字、13語。 これで全部です。
組み立て方も読めました。該当するスキルが複数あると、名前がそこに並びます。
verify と simplify の両方があれば「/verify and /simplify」。3つ揃えば「/verify, /simplify, and /code-review medium」です。文の前後は変わりません。
前の版には、同じ指示が20倍の長さで入っていた
ここが一番おどろいたところです。前の2つの版では、同じ場所にはるかに長くて厳しい文が入っていました。verify だけが該当する場合で 1,655文字、278語。81文字はその 4.9% です。
長いので、特徴的なところだけ引きます。
Immediately before `git commit` on a completed change, state in one visible sentence, for `/verify` by literal name, whether it RAN or NOT RUN this session — your own tests, typecheck, e2e, or any "equivalent" do not count as a check having run; only invoking the skill does.「完成した変更をコミットする直前に、/verify について、この作業の中で走ったのか走っていないのかを、名前をそのまま書いた1文で明示すること。自分のテストや型チェックや e2e、あるいは『同等のもの』は、チェックが走ったことには数えない。スキルを呼んだことだけが数えられる」。

消えたのは、主に次の7つです。
走ったか走っていないかを、スキル名を書いた1文で毎回宣言する義務
自分のテスト・型チェック・e2e は「走った」に数えない、という線引き
再実行を省略してよい条件の定義(コメント以外のソース行が1行も変わっていないこと)
トークン予算・バックグラウンド実行・自律度の高さは、省略の理由にならないという明記
「出してくれ」「PRを開いて」と頼まれても免除にならない。省略できるのは明示的に走らせるなと言われたときだけで、その言葉を引用して書く義務
免除される「ささいなコミット」の列挙(個人設定の同期、ロックファイルと整形だけ、コメントと文書だけ、バージョン上げ)とその判定基準
プロジェクトに verify スキルが無いこと自体は省略の理由にならない、という一節
このほかに、verify にだけかかる免除の条項がもう1つありました。差分がテストだけ、あるいは動かす面を持たないコードだけのときは verify を飛ばしてよい、ただし飛ばした理由と、そう判断させたファイルの名前を書くこと、というものです。
残ったのは「文書とテストには絶対にやらない」の括弧だけです。6番の「ささいなコミット」の列挙がなくなったので、どこまでが文書やテストなのかを決めるのは、その場の判断に戻りました。
ただし、長い版を受け取っていた人はいない
ここは正直に書きます。「20倍の指示が削られた」と読むと、以前は厳しく運用されていたように聞こえますが、そうではありません。
この文を組み立てる関数には、呼び出し口がついています。前の2つの版には口が2つあって、/commit スキルと /pr スキルの中にありました。そしてどちらの口も、入口の判定が常に偽を返す形で閉じていました。 文は書かれていたけれど、出ていく道がなかったわけです。
そこへ3つ目の口が増えたのが 2.1.286 です。シェルを動かすツールに付く git の説明文のところです。こちらは遠隔の切り替えスイッチ1つで開くようになっていて、そのスイッチの既定値は「開いている」側です。

つまり 2.1.286 は、この指示が初めて届きうるようになった版です。そして届くようになったその版で、中身が4.9%に縮んでいました。変更履歴の「改善した」の中身は、短くしたことだったと読めます。
留保を2つ書いておきます。
ここまでは出荷物の中身を読んだ結果で、画面に実際にその1文が出るところまでは確かめていません。遠隔のスイッチの状態は手元からは見えないので、この1文が常に必ず出ると断定はできません
1,655文字は、出荷物に入っているひな形を verify だけが該当する形に組み上げて数えた値です。ここへさらに追記が入る余地があるので、実物はこれより短くはなりません。縮んだ割合は、この記事の数字より大きくなることはあっても小さくはならない向きです
呼ばれる条件は、置き場所で決まる
ここが実務でいちばん効きます。新しい版は、verify という名前を見つけるだけでは数えません。そのスキルがどこから読み込まれたかを見ています。
数えられるのは、スキルとして読み込まれたものだけです。具体的には、リポジトリの .claude/skills/verify/SKILL.md か、ホームの ~/.claude/skills/verify/SKILL.md です。変更履歴が「プロジェクトかユーザーのスキル」と書いているのは、ここを指しています。
Claude Code に最初から入っている /verify は、この条件を満たしません。 同梱のものは別の区分で読み込まれるので、名前が一致しても数えられません。

2.1.285 までは、verify は名前が一致するだけで通っていました。同梱のものでも通ったので、スキルを1つも書いていない人にも該当していたわけです。そこを締めて、自分で置いたものだけに絞ったのが今回の変更です。
名前が3つあることも、変更履歴には書かれていません。simplify は verify と同じ扱いです。code-review だけは少し違って、置き場所の条件がないかわりに、設定で明示的に有効にしていないと出てきません。
コミットを止める力はない
「コミット直前に走らせる指示」と聞くと、走らなければコミットできない仕組みを想像します。違います。これは文章を1つ渡しているだけで、処理を止める部品ではありません。
おもしろいことに、同じバイナリの別の場所に、この話がはっきり書かれています。設定ファイルでフックを仕掛けたい人に向けた説明の中です。
"before committing" (literal git-commit gate) → **not a hooks.json hook.** Matchers can't filter Bash by command content, so there's no way to target only `git commit`. Route this to a git pre-commit hook (`.git/hooks/pre-commit`, husky, pre-commit framework) instead「コミット前という条件は、設定ファイルのフックでは作れない。コマンドの中身で絞り込めないので、git commit だけを狙う方法がない。git の pre-commit フックに回すこと」。
本当に止めたいなら、答えは最初から git 側にあります。 .git/hooks/pre-commit か husky か pre-commit フレームワークです。今回の1文は、その代わりにはなりません。
よくある疑問
Q. 自分の環境でも同じことを確かめられますか
できます。上の手順のコマンドをそのまま実行すれば、同じ文字列が出てきます。Mac 以外なら darwin-arm64 の部分を自分の環境のものに変えてください。linux-x64、win32-x64 などが同じバージョン番号で並んでいます。グローバルに入っている Claude Code を更新する必要はありません。
Q. この指示を出したくないときは
git の説明文ごと止める方法があります。環境変数 CLAUDE_CODE_DISABLE_GIT_INSTRUCTIONS を立てるか、設定の includeGitInstructions を偽にします。
ただしこれは git に関する案内を丸ごと落とします。コミットメッセージの書き方の案内なども一緒に消えます。この1文だけを外す設定は見つかりませんでした。
Q. verify という名前にしないと駄目ですか
今回の仕組みに乗るのは verify、simplify、code-review の3つだけです。check や test という名前のスキルを置いても、この1文には出てきません。名前を変えずに中身を自分の手順にするのが早いです。
Q. 置いたのに出てこないときは
置き場所を確認してください。.claude/skills/verify/SKILL.md か ~/.claude/skills/verify/SKILL.md である必要があります。プラグインとして入れたものや、同梱のものは区分が違うので数えられません。
最後に
今日わかったことを1つだけ書くなら、「公式が改善と書いた1行の中身は、短くしたことだった」です。そして短くなった結果、どこまでが免除なのかを決めるのは、その場の判断に戻りました。
明日やることは3つです。上から順に、1分ずつで終わります。
自分のリポジトリに .claude/skills/verify/SKILL.md があるかを見る。無ければ、この1文はあなたのところには出てきません
無かったら置く。中身は「このリポジトリでどう動作確認するか」を自分の言葉で書くだけでいい
止まらないと困るチェックは、git の pre-commit フックに移す

あると思っていたチェックが実はかかっていない、という状態はいちばん高くつきます。
この記事を書いたのは、変更履歴の「改善した」という言葉に引っかかったからです。改善と書いてあるものが短縮だったとき、困るのは短縮されたことではなく、短縮されたと気づかないまま前の厳しさを前提に動くことだと思っています。28キロバイトのパッケージの裏に本体があるとわかってからは、同じ手順で何度でも確かめられます。
先週は、AIに渡す指示書の「無効な行」の警告がどこまで当たっているかを数えました(「あなたがAIに渡した指示書、『40件が無効』の87%は誤検知 ─ CLAUDE.md」)。今朝は同じ 2.1.286 の、伏せたはずの認証情報がログに出ていた修正のほうを見ています。