リンドくんリンドくん

たなべさん、最近エージェントの調子が悪い気がするんです。前は一発で通っていたのに、変なコマンドを実行して失敗することが増えて。

たなべたなべ

モデルを疑う前に、ひとつ確認していい?
AGENTS.md、最後に更新したのはいつ?

リンドくんリンドくん

……えっと、最初に書いたきりです。内容は間違ってないはずですけど。

たなべたなべ

書いた時点では正しかったんだよ。そのあとリポジトリのほうが動いた。

書き方の記事は足りている

AGENTS.md の書き方についての情報は、もう十分にあります。コマンドを書く、規約を書く、完了の定義を書く。どれも正しく、そのとおりに書けば、最初の一週間はうまく動きます。

問題はその後です。

文書は変わらない。リポジトリは変わる

リンドくんリンドくん

そういえば先月、npm から pnpm に変えました。AGENTS.md は……触ってないです。

たなべたなべ

それで CI は通ったし、ビルドも通ったよね。文書を直さなくても、誰も困らなかった
困っているのはエージェントだけで、しかも報告してこない。

AGENTS.md を書いた時点では、内容はリポジトリと一致しています。そして、次のことが起きます。

  • パッケージマネージャを npm から pnpm に変えた
  • テストランナーを入れた、あるいは外した
  • ディレクトリ構成を変えた
  • CI を追加した

コードは変わり、文書は変わりません。どれも文書を更新しないと壊れないわけではないからです。CIは通り、ビルドも通り、誰も困りません。

困るのはエージェントだけです。そして、エージェントは困っていることを報告しません。

これが厄介さの正体

文書とリポジトリが食い違っても、エラーは一切出ません。エージェントは書いてあるとおりに npm install を実行し、ロックファイルと矛盾した依存を入れ、なぜか動かないコードを書き始めます。原因は「指示書が古い」ことですが、そう見える形では現れません。

自分のリポジトリで実行したら、2件出ました

リンドくんリンドくん

FRKZ 自身は大丈夫だったんですか?

たなべたなべ

……2件見つかった。しかも1件は、CIを強制しろと書いた運用キットを売っているリポジトリに、CIもテストも無かったというやつ。

リンドくんリンドくん

それは……。

たなべたなべ

言い訳のしようがないよね。すぐ直した。

FRKZ には、リポジトリの実態と AGENTS.md を突き合わせるレビュー機能があります。作った後、自分のリポジトリに対して実行しました。

2件の本物の食い違いが見つかりました。 仮定の話ではなく、売り物のドキュメントを含むリポジトリで、です。

そのうち1件は、こういうものでした。FRKZ は「typecheck・lint・テストをCIで強制する」と書いた運用キットを販売していました。そして当のリポジトリには、テストもCIも存在しませんでした

これはレビュー機能が見つけるために作られた種類の食い違いそのものであり、しかも売っている製品の中で起きていました。修正して、Vitest と GitHub Actions を入れました。入れてすぐ、過去に出荷したバグを固定するテストが60件書けました。

人間のレビューでは見つからない理由

リンドくんリンドくん

でも、自分の書いた文書なんだから、読み返せば気づきませんか?

たなべたなべ

それが気づかないんだ。人は文書を読むとき、書いてあることが正しいかを見る。
「テストは pnpm test で実行する」は、文としては正しいよね。誤りになるのは、リポジトリに test スクリプトが無い場合だけ。それは読んでいる間には分からない。

「ちゃんと読めばいい」と思えますが、これは人間が苦手な作業です。

文書を読むとき、人は書いてあることの正しさを見ます。「テストは pnpm test で実行する」は、読めば正しい文です。これが誤りになるのは、リポジトリに test スクリプトが無い場合だけで、それは文書を読んでいる間には分かりません。

必要なのは、次の2つを同時に持って突き合わせることです。

  1. 文書が主張していること
  2. リポジトリが実際にそうなっているか

自分のプロジェクトほど、2を「知っているつもり」で読み飛ばします。

突き合わせに必要な材料

自動化する場合でも、手でやる場合でも、見る場所は同じです。

文書の記述突き合わせる先
パッケージマネージャコミットされているロックファイル
コマンドマニフェストのスクリプト定義
テストの有無テストファイルの実在
CI の有無ワークフローファイルの実在
ADR を書く運用docs/adr/ の実在
フレームワーク設定ファイルまたは依存

ロックファイルが pnpm-lock.yaml なのに文書が npm install と書いていれば、それは食い違いです。判定に推測は要りません。

検出結果に既定値を混ぜないこと

ここで重要な注意があります。突き合わせの材料に「たぶんこうだろう」という既定値を混ぜると、存在しないコマンドを根拠に矛盾を指摘するという、最悪の誤報が生まれます。検出は、ファイル名を挙げられるものだけを事実として扱ってください。

見つけた後、直るところまで持っていく

食い違いを見つけても、直らなければ意味がありません。そして、指摘を1件ずつ手で文書に反映する作業は、たいてい途中で止まります。

FRKZ のレビューは、結果をそのままエージェントに渡せる指示文として出力します。矛盾を先頭に、重大度順の指摘、提案する文面という順番の1ブロックです。Claude Code や Codex、Cursor に貼れば、修正はエージェントの仕事になります。

指示書の修正を、指示書を読むエージェントにやらせる、という形です。

いつ実行するか

リンドくんリンドくん

これ、どのくらいの頻度でやればいいですか?毎日は無理そうです。

たなべたなべ

毎日はやらなくていい。ツールチェーンを変えたときと、「最近エージェントの調子が悪い」と感じたとき
ちょうど今日の君みたいなときだね。

毎日やる必要はありません。効くのは次のタイミングです。

  • パッケージマネージャやツールチェーンを変えたとき
  • ディレクトリ構成を大きく変えたとき
  • 「エージェントの挙動が最近おかしい」と感じたとき

3つ目が実は一番多い入口です。モデルのせいに見えて、指示書が古いだけ、ということがあります。

まとめ

  • AGENTS.md の本当の問題は、書き方ではなく古くなること
  • 食い違いはエラーを出さない。だから気づくのが遅れる
  • 見つけるには、文書とリポジトリの実態を同時に持つ必要がある
  • 自分のリポジトリは「知っているつもり」で読み飛ばす

FRKZ のレビューは、ご自身の API キーで実行します。キーはサーバーに保存しません。まずリポジトリの実態だけを見たい場合は、解析ツールだけでも使えます。