テクノロジー 注目度 65

Claudeのツール呼び出し漏れを監査する仕組みを開発、自動登録の副作用でデーモンが74個立ちまくる事態に

※本記事の要約および解説はAIが自動生成しており、誤りが含まれる可能性があります。事実確認は元ニュースをご参照ください。

本記事は、AIモデルClaudeが持つ「ツール呼び出しの漏れ」という構造的な問題を解決するために開発されたツール「claude-spotter」に関する開発体験記である。筆者は、Claudeが「分からないと自覚できない」という特性から、ユーザーのプロンプトに「ツールを使ってね」と指示しても、ツール利用を忘れるケースが頻発することに気づいた。そこで、メインのClaudeとは別に、ツールカタログを完全に把握した「監査役のClaude (Haiku 4.5)」をセッションごとに常駐させる仕組みを考案した。この監査役は、ユーザーの入力時(要請に対して使うべきツールを列挙)と、メインClaudeが応答を返した直後(事実の断定に検証ツールを差し込めるか)の2段階で、ツール利用の漏れを指摘する。この仕組みを「claude-spotter」と命名した。

当初、筆者は「npm install -g claude-spotter」だけで全プロジェクトに自動有効化できる便利な設計だと考え、公開した。しかし、実際に自身で使い始めたところ、わずか64分でシステム上に74個ものデーモンが立ち上がっているという深刻なバグに遭遇した。ログを調査した結果、74個のうち51個が筆者自身の別ツール「Throughline」由来であり、これが内部で「claude -p」を呼び出し、その際に「SessionStart hook」が走ることで、Spotterのデーモンが立ち上がるという「再帰的増殖」を引き起こしていたことが判明した。これは、`postinstall`でシステム上のあらゆるClaude CodeセッションがSpotterのフックを読み込む構造になっていた「全プロジェクト自動有効化」の代償であった。

このバグを受け、筆者はまず`postinstall`による自動登録を撤回し、ユーザーに各プロジェクトで`spotter install`を明示的に実行してもらう形に修正した。さらに、過去のプロジェクトのツール定義がグローバルDBに残る「幽霊ツール」の問題や、Windows環境でのMCP配布のパス解決に関するバグも発見し、順次修正した。最終的に、本ツールは「メインのClaude本体に頼らない仕組み」という哲学を共有するThroughlineやCaveatといった関連プロダクト群の一部として位置づけられ、AIの信頼性を高めるための「監査役」としての役割を担うことが示されている。開発過程を通じて、自動化の利便性と、それに伴う予期せぬ副作用の危険性を深く学んだ事例である。


背景

大規模言語モデル(LLM)の進化に伴い、単なるテキスト生成だけでなく、外部ツール(APIなど)を呼び出して情報を補完する「ツール利用」の重要性が増している。しかし、LLMは「分からないと自覚できない」という構造的な欠陥を持つため、必要なツールを呼び忘れる(ツール呼び忘れ)という問題が頻発し、実用上の課題となっていた。

重要用語解説

  • ツール呼び忘れ: LLMが、利用可能な外部ツール(API)が存在するにもかかわらず、応答生成の過程でそのツールを呼び出すことを忘れてしまう現象。AIの信頼性を低下させる構造的な問題。
  • デーモン: OS上でバックグラウンドで継続的に動作するプロセス。本記事では、監査役の機能を提供するプロセスが過剰に立ち上がってしまう現象を指す。
  • hook: ソフトウェアの特定の処理段階(例:セッション開始時、応答生成直前)に、外部のコードや機能(この場合は監査役のチェック機能)を差し込む仕組み。本ツールでは、このフック機構を利用して監視を行う。

今後の影響

本ツールは、LLMの信頼性を飛躍的に向上させる可能性を秘めており、AIが実務で利用される際の「ハルシネーション」や「機能不全」のリスクを低減する。今後のAI開発では、モデル本体の改善だけでなく、このように外部から監視・補完する「監査レイヤー」の設計が重要になると予想される。開発過程の教訓は、自動化の利便性よりも、副作用や再帰的なバグの制御がより重要であることを示している。