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?

ハーネスを盛りすぎるとAIが迷うのはなぜか:削るのは指示、強制は残す

0
Posted at

「ハーネスをやりすぎるとモデルが本来の力を出せなくなるので、ハーネスはやめた」という話を見かけて、少し不安になりました。自分もCLAUDE.mdやルールやスキルをかなり足してきたからです。

調べてみると、盛りすぎると逆効果だという報告はいくつもありました。ただ、ハーネスを全部やめればいいという話でもなさそうです。

盛っても良くならず、減らしたら良くなった

少し前の話ですが、Vercelは2025年12月に、データ分析のエージェントに渡すツールを17個から2個(bashとSQLの実行)に減らした話を書いています。代表的な5問で比べると、成功は4問から5問に増え、かかった時間は274.8秒から77.4秒に縮み、トークンは約37%減りました。

We were building tools to summarize what was already legible.
(すでに読めるものを要約するためのツールを作っていた)

※測ったのは5問だけです。(出典: We removed 80% of our agent's tools)

ETH Zurichの研究では、AGENTS.mdのようなコンテキストファイルを渡しても、タスクの成功率はおおむね上がらず、コストは平均で20%以上増えました。人間が書いたファイルでも、LLMに生成させたファイルでも同じ傾向です。

providing context files does not generally improve task success rates, while increasing inference cost by over 20% on average.
(コンテキストファイルを渡しても、タスクの成功率は全体としては上がらず、推論のコストは平均で20%以上増える)

(出典: Evaluating AGENTS.md)

日本語の資料では、Gotaさんの「ハーネスエンジニアリングをやりすぎた話 ~そのハーネスは解体された~」(Harness Engineering Meetup Tokyo #1、2026年4月)があります。設定ファイルが300行を超え、タスクのテンプレートを1つ変えるだけで10箇所を直す必要が出てきたそうです。全体のテストにも1時間かかるので、どの修正が効いたのか分からなくなった、という話です。(出典: Speaker Deck)

AIは渡されたものを全部読んで、全部守ろうとする

AIは、渡されたルールや情報を全部読んだうえで動きます。そのため、量が増えると次のようなことが起きます。

  • 今の作業に関係ないルールまで気にするようになり、本当に大事なルールの重みが薄まります
  • ツールが多いと、どれを使うかで迷います。似たツールがあると選び間違えます
  • ルール同士が少しずつ矛盾していると、どちらを守るかで止まったり、回り道をしたりします
  • 古いモデルのために書いた細かい手順が、新しいモデルには余計な縛りになります

いちばん分かりやすいのは矛盾です。ルールは1つずつ足していくので、1つずつ読むとどれも正しく見えます。

<!-- CLAUDE.md -->
- コードを変更したら、必ずテストを実行してから完了とすること

<!-- .claude/rules/safety.md(あとから足した) -->
- DBに接続するコマンドは絶対に実行しないこと

テストがDBにつながるリポジトリでは、この2つがぶつかります。AIは「必ず」と「絶対に」の両方を守ろうとして、テストを飛ばして完了と言ったり、DBにつながないようにテストを書き換えたり、何度も確認を求めて止まったりします。書いた本人は、2つが同時に効く場面を想定していませんでした。

ルールが数行のうちはすぐ気づけます。何十行にもなると、どこでぶつかっているのかを人間が探すのも大変になります。

削るのは指示、残すのはドメイン知識と強制の仕組み

ハーネスと一言で言っても、中身は2種類あると思っています。

  • 指示: CLAUDE.mdやルールに「こうして」「これはしないで」と書くもの。AIが読んで守ろうとしますが、守るかどうかはAI次第です
  • 強制: hook、権限の設定、テスト、lintのように、AIの判断と関係なく必ず止めたり確かめたりする仕組み

盛りすぎで困るのは、ほとんどが指示のほうです。増えるほど迷い、矛盾し、古くなります。強制の仕組みは、増えてもAIを迷わせません。止めるか通すかを決めるのは仕組みの側だからです。この2つを同じ「ハーネス」と呼んでいると、削るときに強制の仕組みまで削る対象に見えてしまいます。「ハーネスをやめた」という話も、この2つが混ざっているように見えます。分けておけば、どこを消せばいいかも分かりやすくなります。

さっきの矛盾の例も、両方が指示だったから起きました。「DBに接続しない」をhookにしておけば、AIはテストを実行しようとした時点で止められます。迷って回り道をすることはなく、止められたことを人に伝えて終わります。

そのうえで、削るものと残すものは次のように分けています。

中身 例 理由
削る 手順の指示 「こう書いて」「この順でやって」 モデルが賢くなると要らなくなりやすい
削る コードを読めば分かること ディレクトリ構成の説明、使っているライブラリの一覧 AIが自分で読める
残す コードを読んでも分からないドメイン知識 業務の用語、なぜこの作りになっているかという経緯、取引先や他チームとの約束 書いていなければ、モデルがどれだけ賢くても知りようがない
残す コードから推測できない動かし方 テスト前にDBの起動が要る、必要な環境変数、普段回すテストの範囲 知らないとテストが落ちて、原因探しで回り道をする
残す 強制の仕組み hook、テスト 必ず守らせたいことは、指示に書くのをやめてこちらに移す

Vercelの「すでに読めるものを要約するツールを作っていた」という一文は、表の「コードを読めば分かること」と同じ話だと思います。コードから分かることを書き直しても効果はなく、コードの外にしかない知識を書いたときに効きます。

このブログのリポジトリでも、102行あったCLAUDE.mdを50行にしました。いつでも要る情報だけをCLAUDE.mdに残し、ルールは.claude/rules/に、媒体ごとの情報はフォルダのCLAUDE.mdとスキルに分けています。分けたあとどう変わったかは、しばらく使ってからまた書こうと思います。

CLAUDE.mdの中身を「いつでも要るか、作業やフォルダごとか」と「ルールか、情報か」で仕分けて、置き場所を提案させるスキルも作りました。hookやlintに移せそうなものも拾います。よければ使ってみてください。

Claude Codeの/doctor prompt-auditもおすすめです。古いモデル向けに書いた指示や、もう存在しないファイルへの参照、指示同士の矛盾を探してくれます。tidy-contextが置き場所を見るのに対して、こちらは書いた内容が今も正しいかを見ます。使ってみた話は別の記事に書きました。


この記事はZennにも投稿しています。

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?