AGENTS.md/CLAUDE.md のルールは「〜する」と言い切る。「〜の場合は」で始めると守られにくい(NAIST などの実験)
同じ内容のルールを4つの書き方で入れて比べた研究では、条件つき(「〜する場合は〜する」)が一貫して守られにくかった。言い切りと理由つきのどちらが良いかはモデルとハーネスで変わる。
実験の中身
- 実在のリポジトリの AGENTS.md/CLAUDE.md(86タスク、10リポジトリ)の最後の行に、機械的に判定できるルールを1つ足した: 「追加・変更した Python 関数の
defの直下に# @trackedを付ける」 - 書き方は4種類
- 言い切り(Prescriptive): 「〜に
# @trackedを付ける」 - 理由つき(Explanatory): 上に「監査システムがこの印で…を見分けるため」を足す
- 条件つき(Conditional): 「Python 関数を追加・変更する場合は〜を付ける」
- 禁止(Prohibitive): 「
# @trackedなしで関数を追加・変更してはいけない」
- 言い切り(Prescriptive): 「〜に
- Claude Code 2.1.227 上の Opus 5/Sonnet 5、qwen-code 上の gpt-oss-120b/Qwen3-Coder-Next で各3回
結果(遵守率)
| ハーネス/モデル | 言い切り | 理由つき | 条件つき | 禁止 |
|---|---|---|---|---|
| Claude Code/Opus 5 | 78.0% | 77.2% | 64.2% | 70.7% |
| Claude Code/Sonnet 5 | 71.6% | 49.4% | 35.6% | 17.3% |
| qwen-code/gpt-oss-120b | 6.7% | 20.4% | 0.8% | 0.4% |
- 条件つきは、差が出た3つの組み合わせすべてで言い切り・理由つきより低い
- 言い切りと理由つきの優劣は逆転する(Sonnet 5 は言い切り、gpt-oss は理由つきが上)。Opus 5 では差なし
- 性能の低いモデルほど書き方の影響が大きい
書き換えの例
markdown
<!-- 守られにくい -->
- API のハンドラを追加する場合は、OpenAPI の定義も更新すること
- テストなしでマージしてはいけない
<!-- 言い切りに -->
- API のハンドラを追加・変更したら、同じコミットで openapi.yaml を更新する
- PR には、変更した関数のテストを含める- 自分のファイルを
場合は|ときは|if |when |してはいけない|never|don'tで検索する - 条件を主語に溶かして「〜したら〜する」「〜には〜を含める」と、やることを先頭に出す
- 複数のツールで1つの AGENTS.md を共有しているなら、主に使うモデルで守られるかを小さく試す(研究も「一つの環境で良かった書き方が他でも効くとは限らない」と結論している)
注意点
- ルールは1種類(印のコメント)だけ、書き方ごとに文も1つだけ。どんなルールにも当てはまるとは限らない
- 書き方以前に、ファイルが長すぎると守られにくくなる。AIコーディング: 肥大化した AGENTS.md を「サブエージェント3案」で整理させるプロンプト、AIコーディング: 「指示を書く」は最終手段。lint・ビルドエラー・hook・skillで機械的に縛る と合わせて使う
出典
- @ai_database · 2026-11-05
- 論文: Tsuchida ほか "Do Coding Agents Follow AGENTS.md? The Effect of Policy Wording on Instruction Compliance"(arXiv:2611.04367): arxiv.org/abs/2611.04367