0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Windowsで、あなたの安全フックは静かに空振りしているかもしれない

0
Posted at

いちばん伝えたいこと

Claude Code の安全フックを、プロジェクトの場所を表す環境の値 CLAUDE_PROJECT_DIR を使って登録していると、Windows(Claude Desktop 経由)ではそのフックが静かに空振りすることがある。エラーは出ない。止めているつもりの危険な操作が、実は素通りしている。これがいちばん怖い。

きっかけは起票 anthropics/claude-code #71924 だ。CLAUDE_PROJECT_DIR という値が、Windows と Claude Desktop のすべての子プロセスの環境に存在しない、ということが丁寧な追跡で突き止められている。説明書には「起動したサーバの環境にこの値を設定する」と書いてあるのに、実際には道具のプロセスにも、外部連携のサーバにも渡っていない。

なぜ「静かに空振り」が怖いのか

フックを登録するとき、コマンドの中でこの値を使って、フックのスクリプトの置き場所を指し示すことがよくある。ところがこの値が空っぽだと、置き場所の指し示しが壊れ、スクリプトのファイルが見つからない。そして書き方によっては、エラーがほとんど目立たないか、何も起きずに終わる。

問題は、それが安全のための歯止め——たとえば、危険な削除を止める、読み取り専用を強制する、本番のデータベースの削除を止める——だったときだ。守ってくれているはずの歯止めが、何の警告も出さずに動いていない。これは外部連携のサーバが大きな声で失敗するより、ずっと危ない。気づく手がかりが無いからだ。

これは、AIエージェントの運用でくり返し現れる型——「確認が走らなかったこと」を「確認の結果」と取り違える——の、安全の歯止めでの現れだ。あなたは「歯止めが効いている」と思っている。実際には、歯止めは一度も呼ばれていない。

自分が踏んでいないか、確かめる

まず、自分の設定ファイル(~/.claude/settings.json)のフックの登録を見て、コマンドが CLAUDE_PROJECT_DIR に頼っていないかを確かめる。頼っていて、かつ Windows や Claude Desktop で使っているなら、空振りしている可能性が高い。

次に、道具の中で実際にこの値が渡っているかを確かめる。値の中身を表示してみて、空っぽと出たら、この値を前提にした歯止めは当たっていない。

直し方

幸い、報告によれば、道具の作業ディレクトリ(今いる場所)は、プロジェクトのルートに正しく設定されている。だから、空っぽかもしれない環境の値ではなく、作業ディレクトリからルートを求めればよい。

考え方は三つ。

一つ目。歯止め自身が、環境の値に頼らず、今いる場所からルートを決める。具体的には、git rev-parse --show-toplevel でリポジトリのトップを求め、それが取れなければ今いる場所を使う、という保険を最初に書いておく。よくできた歯止めの集まり(たとえば cc-safe-setup の中身)は、最初からこの保険を書いているので、この値が無くても正しく動く。自作の歯止めも同じにすればよい。

二つ目。解決できないときは「止める側」に倒す。これがいちばん大事な原則だ。安全の歯止めが自分のスクリプトを見つけられないなら、黙って素通りせず、終了の合図を「異常あり」にして止まるべきだ。環境の値が一つ欠けただけで、安全の歯止めが静かに無効になる——それを避けるために、前提が崩れたら止める側に倒す。

三つ目。外部連携のサーバの場合は事情が違う。報告では、そのプロセスの今いる場所が Windows のシステムのフォルダになってしまい、プロジェクトを見つけられない。だから作業ディレクトリの保険も効かない。設定ファイルの側で、ルートを指す引数や明示的な環境の値で、プロジェクトのルートを直接渡すのが確実だ。

一般化

この値に限らず、「設定されているはずの何か」が設定されていないと、静かに、しかも危険な向きに倒れる設計は、AIエージェントの運用にあふれている。たとえば /clear を使うとセッションの番号が変わり、それに対応づけた歯止めが黙って効かなくなる事例もある。これも別の「静かに無効になる」型だ。

身を守る原則は一つ。安全の歯止めは、前提が崩れたら「止まる側」に倒す。前提が欠けたときに素通りする歯止めは、無いより質が悪い。「効いているつもり」を作るからだ。

もっと体系的に防ぎたい人へ

Windows 固有のデータ消失、/clear の後に歯止めが黙って効かなくなる事故、決まりごとがサイズの予算を超えて黙って落ちる事故——「静かに、警告なく、危険な向きに」倒れる事故を、実際に起きたものから逆算して、設定で先回りする手順を、Claude Code 事故防止ガイド(¥800・全58章)にまとめている。Windows のデータ消失は第37章、/clear での歯止めの無効化は第51章だ。第3章まで無料で試し読みできる。無料で試すなら、設定の穴を診断する cc-safe-setup もある。

要するに、Windows ではこの値を当てにしない。今いる場所からルートを求め、見つからなければ止める。安全の歯止めは、静かに空振りするくらいなら、うるさく止まれ。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?