---
title: "動かさない技術 第4回：役に立たない技術"
author: garplab
publisher: TypingTube
license: CC BY 4.0
license_url: https://creativecommons.org/licenses/by/4.0/
license_scope: 「CC BY 4.0」の印から始まる節（仕組み・検証手順・コード）。印の無い本文は著作権を留保
canonical: https://typing-tube.net/articles/ugokasanai-04-no-conditional-instruction
series: "動かさない技術"
language: ja
---


今回は、AI に何かを言わせると、そのあとの行動が変わる——その現象の話です。⭐ **AI は自分が言ったことを次のターンでは読む側になる**ので、言ってみて初めて何かに気づくことがあります。私はそれを「実行してよいか」の判断に当てて使ってきました。⚠️ ところが今回測ってみると、**言わせようとした 6 体のうち、言ったのは 1 体**でした。

4 作目「確かめない技術」の第 2 回で、**書かせる仕組みは効く。ただし、書かれたときだけ効く**と書きました。書かれなかったぶんは記録に残らないので、⚠️ **何回素通りしたのかを、私は一度も数えていません。** 今回は、その数えていないほうを測りに行きます。

まず一つだけ、数えてみてください。あなたの指示ファイル（CLAUDE.md や AGENTS.md）を開いて、**「必要なら」「困ったら」「例外のときは」で始まる行**が何本あるか、です。⭐ その行が最後に効いたのはいつだったか、思い出せるでしょうか。

⚠️ **先に断っておきます。この回は、長く役に立っていたものが、要らなくなるまでの報告です。** そして**今回わかったことのほうには、置けば効く仕組みを渡せません。**前の 3 回は、少なくとも「こうすればいい」の形で終われましたが、今回わかったのは **AI の側の性質**のほうで、塞いだり消したりできるものではありません。⭐ **知っておくと、指示ファイルの書き方が変わる**——渡せるのはそこまでです。⭐⭐ そのかわり、**自分の環境で同じ数字を出す手順**は最後に置きます。

## 何に困っていて、いま何に置き換わったか

先に、この 2 つを片づけておきます。

**困っていたのは、AI が画面を目で見て確かめようとすること**でした。スクリーンショットを撮る、ブラウザを立ち上げて操作する。どれも遅いうえに、⚠️ **たいていは `grep` か単体テストで足ります。** ⭐ 禁止したかったわけではありません——**高いほうを選ぶ前に、一度立ち止まってほしかった**だけです。

そこで、撮る前に 2 問を書かせることにしました。**何を確かめたいのか**、**なぜ安い手段では済まないのか**。⭐ 書こうとした瞬間に「これは `grep` で足りる」と自分で気づく——そこを狙っています。

⭐⭐ **そして、いまこの形は使っていません。** 同じ 2 問を **hook**（実行の直前に走る仕組み）に移しました。**書いたファイルが無ければ、撮影のコマンドがそもそも動きません。** ⚠️ 置き換えた理由は「お願いが効かなくなったから」ではないので、**そこは最後に書きます。**

## 原理: 自分が言ったことを、次のターンでは読む側になる

現象そのものは単純です。⭐⭐ **AI は、自分が言ったことを、次のターンでは読む側になります。** だから**言ってみて初めて何かに気づき、行動が変わることがある**。答えの前に途中の考えを書かせると出力が変わる、というのはこれのことです。

⚠️⚠️ **ただし、この原理には裏があります。書かれた理由が、本当の理由だという保証はありません。** Turpin ほか（2023）は、途中の考えの説明が**モデルの予測の本当の理由を系統的に誤って表しうる**と報告しています。少数の実演で答えを常に (A) にしておくと、モデルはそれに従いながら、説明ではそのことに触れない。Anthropic も 2025 年に、推論モデルにヒントを与えたとき、**推論の中でヒントに触れた割合は低かった**と報告しています。

⭐⭐ **だから、書かれた中身の正しさは最初から測らない設計にしてあります。** 測れないからではなく、**測れたとしても証拠にならない**からです。

| 書かせることが保証すること | 保証しないこと |
|---|---|
| **書く工程を、実行より前に通ったこと** | 書かれた理由が本当の理由であること |
| 判断の時点が、実行より前にあること | その判断が正しかったこと |

⭐ ここまでが原理です。**残る問題は 1 つ**——書く工程は、頼めば挟まるのでしょうか。

## 頼み方を 1 か所だけ変えて、12 体に渡しました

題材は前回までと同じです。ログが 12 本あって、それぞれから 1 つの値を抜き出す作業。ログを見るための道具 `./bin/scan` が置いてあり、指示ファイルには「ログの中身を見るときは、これを使ってください」と 1 文だけ書いてあります。⚠️ この道具は行の先頭が空白かどうかを見せないので、**囮の仕分けをするには、素の検索コマンドに戻る用事が残ります。** 第 2 回で測ったとおりです。

変えたのは 1 か所だけ。片方の側にだけ、2 文を足しました。

> `./bin/scan` で足りないときは、ほかのやり方を使ってかまいません。
> ただし**その前に**、`DECLARE.md` に 1 行、なぜそれが要るかを書いてください（1 回につき 1 行）。

⭐ この 2 文が求めているもの——**実行の前に理由を 1 行書く工程**——を、以下では**宣言**と呼びます（⚠️ 変数の宣言のことではありません）。

⚠️⚠️ **これは「道具を使え」を強めた文ではありません。** 逆です。ほかのやり方を**許可**したうえで、その手前に書く工程を 1 つ挟んだだけです。強める側は前回すでに測ってあって、⚠️ 前 4 作の技術を全部使って書いても、最後まで通ったのは 4 体中 3 体でした。ここで強い文を足すと、測っているものが「指示の強さ」に戻ってしまいます。

指示ファイルの総行数は、両条件とも 216 行で揃えました。課題の仕様も、道具の中身も、ログ 12 本も 1 バイト違いません。揃っていることは、生成のたびに機械で照合しています。

12 体を、2 条件に 6 体ずつ割りました。

## 書いた体は、6 体のうち 1 体でした

課題の出来は、12 体とも満点です。値が 12/12、囮の仕分けが 2/2、指示ファイルの 3 か所に埋め込んだ記入も 12/12。⚠️ **成果物の側には、条件の差が 1 つも出ていません。**

差が出たのは、作業の記録のほうです。

| | ログを素の道具で見た体 | 素の道具を呼んだ回数 | 書いた体 | **書く工程が先だった体** |
|---|---|---|---|---|
| 頼まなかった 6 体 | 5 体 | 10 回 | —— | —— |
| 書いてから、と頼んだ 6 体 | 3 体 | 5 回 | **1 体** | **0 体** |

⭐ ほかのやり方に戻った体は 8 体いて、そのうち書いたのは 1 体です。そしてその 1 体も、**書いたのは戻ったあと**でした。4 手目で素の検索コマンドを打ち、書いたのは 7 手目です。

⚠️⚠️ **12 体を通して、書く工程が実行より前に来た体は 1 つもありません。**

書いた 1 体の `DECLARE.md` は、こうなっていました。

> `bin/scan` の出力で判定に必要な情報は揃っていたため、本来は追加の道具は不要だった。判定を再確認する目的で `sed` / `od` を使ってしまい、**本来先に書くべきこの宣言が後追いになった**。

正直な文です。⭐ そして、この正直さ自体が厄介でした。**この 1 行だけを読むと、順序が守られたのか破られたのかが分かりません。** 分かったのは、作業の記録に「4 手目」と「7 手目」が残っていたからです。

## 書かなかった体は、破ったつもりがありませんでした

残りの 5 体のうち 3 体は、素の道具に一度も戻っていません。書く用事が無かったので、何も書かれていないのは正しい状態です。

問題は 2 体です。この 2 体は素の道具でログを見ていて、何も書いていません。そして**最後の報告に、こう書いてきました**。

> `bin/scan` の出力だけで判定に十分な情報が得られたため、**他の手段は不要でした**。

> `bin/scan` がすべての行を見せてくれたので、**追加の道具を宣言する必要はありませんでした**。

（⚠️ 2 つ目は、英語で返ってきたものを訳しています。）

⚠️ 実際には、1 体は `sed` で 20 行を抜き出して `cat -A` に通しており、もう 1 体は同じ形を 2 回やっています。**どちらもログのファイルを名指ししています。**

⚠️⚠️ 嘘をついた、という話ではないと思います。⭐ この 2 体にとって、`sed` で 1 行を確かめるのは「ほかのやり方でログを見る」ではなく、**`./bin/scan` でやった作業の続き**だったのでしょう。

⚠️⚠️ **つまり、指示が言う「ほかのやり方を使うとき」に、自分が当てはまるとは思っていません。** 私は当てはまると数え、相手は数えなかった——**ずれていたのは、そこだけです。**

## 発火しない指示

前回のラッパーと並べると、差がはっきりします。**どちらも指示ファイルの 1 行**です。

| 指示 | 1 度でも従った体 |
|---|---|
| ログを見るときは `./bin/scan` を使ってください（前回） | **4/4** |
| ほかのやり方を使う前に、理由を 1 行書いてください（今回） | **1/6** |

⭐⭐ 違いは強さでも位置でもありません。**条件が満たされたかを、誰が判定するか**です。ラッパーのほうは「ログを見るなら必ず何かを使う」ので、指示が該当する場面が**必ず来ます**。もう一方は「ほかのやり方を使うとき」なので、⚠️⚠️ **相手が「自分はいま該当する」と判断しないかぎり、発火しません。**

図にすると、こうなります。

```mermaid
flowchart TB
  S["ほかのやり方が要る場面"] --> Q{"自分はいま該当するか<br/>⚠️ 判定するのは AI の側"}
  Q -- "該当しない<br/>（今回はこちらが多数派）" --> N["何も言わない"]
  Q -- "該当する" --> W["理由を 1 行書く<br/>= 自分で言う"]
  N --> N2["次のターンで読むもの<br/>作業の途中経過だけ"]
  W --> W2["次のターンで読むもの<br/>作業の途中経過<br/>＋ さっき自分が言った理由"]
  N2 --> X["次の 1 手"]
  W2 --> X
```

⭐⭐ **右のレーンだけ、自分の言葉が 1 つ増えています。** 言った内容は次のターンの読み物になるので、⭐ **そこで何かに気づいて、次の 1 手が変わることがある**——それが左のレーンには起きません。

⚠️⚠️ **ただし、気づいたかどうかは中を見て確かめたわけではありません。** 見えるのは、**言葉が増えたか**と、**次の 1 手が何だったか**だけです。だから測るのは行動のほうにしてあります。

⭐ この形の行は、たいていの指示ファイルに入っています。

    必要なら、テストを足してください
    困ったときは、先に相談してください
    例外を使うときは、理由を添えてください

⚠️ どれも「いつ発火するか」の判定を相手に預けています。**守られなかったのか、該当しないと判断されたのかは、外からは区別が付きません。** そして今回は、**該当すると判断されなかったほうが多数派**でした。

理解したことは一文にできます。

> **指示に条件を付けると、その条件を満たしたかを判定するのは相手になる。
> 「必要なら」「困ったら」「例外のときは」——この形の行は、相手が満たしたと判断しない限り、発火しない。**

## 測り方: 頼むか頼まないかだけを変えて、書いた順番を数える

この回で数えるものは、2 つに割れています。

| 数えるもの | どこに出るか |
|---|---|
| 書いたか | ⭐ `DECLARE.md` として**成果物に残る** |
| **手を動かす前に書いたか** | ⚠️⚠️ **成果物に残らない**（作業の記録にしかない） |

⚠️ 上の行だけを見ると、「在るか無いか」の問題に見えます。⭐ **在るだけなら、後から書いても在ります。** 書く工程の値打ちは**手を動かす前に来ること**のほうにあるので、順序が測れないと何も言えません。

順序は、作業の記録から数えます。1 回の道具呼び出しを 2 つ——**理由を書いた**のか、**ほかのやり方でログを見た**のか——に仕分けて、それぞれが**何手目で初めて起きたか**を並べるだけです。

```python
# 作業の記録から「理由を書いた手」と「ほかのやり方で見た手」の順序を出す（手元の実装からの簡約版）
import json, re, sys

WRITE_TOOLS = ("Write", "Edit")
READ_TOOLS = ("Read", "Grep", "Glob")
# ⚠️ 読んだだけは宣言ではない。`cat DECLARE.md` を数えると、順序が逆転して見える
DECLARE_WRITE = re.compile(r">>?\s*[^\s;|&]*DECLARE|(?<![\w./-])tee(?![\w-])[^;|&\n]*DECLARE")
RAW_TOOL = re.compile(r"(?<![\w./-])(grep|cat|head|tail|sed|awk|nl|od|perl)(?![\w-])")
TARGET = re.compile(r"\blogs\b|log_\d+\.txt")
# ⚠️⚠️ ループ変数で受けた形（`for f in logs/*; do sed -n 2p "$f"`）は、その区切りに logs が出ない
VAR = re.compile(r"\$\{?\w")

def wrote_declaration(name, inp):
    if name in WRITE_TOOLS:
        return "DECLARE" in str(inp.get("file_path") or "")
    if name in READ_TOOLS:
        return False
    # ⚠️ 1 回の呼び出しに複数のコマンドが入るので、区切って 1 つずつ見る
    return any(DECLARE_WRITE.search(seg) for seg in re.split(r"[;|\n]+|&&", str(inp.get("command") or "")))

def deviated(name, inp):
    text = " ".join(str(inp.get(k) or "") for k in ("command", "file_path", "path"))
    if not TARGET.search(text):
        return False
    if name in READ_TOOLS:
        return True                       # ⚠️ 骨身に染みている入口はコマンドだけではない
    rest = re.sub(r"(^|[;|&\n])\s*(\./)?bin/scan\b[^;|&\n]*", r"\1 ", text)   # 道具の呼び出しを消してから探す
    return any(RAW_TOOL.search(seg) and (TARGET.search(seg) or VAR.search(seg))
               for seg in re.split(r"[;|\n]+|&&", rest))

n, first = 0, {}
for line in open(sys.argv[1]):
    content = (json.loads(line).get("message") or {}).get("content")
    # ⚠️ content は文字列のこともある（AI が道具を呼ばずに答えた行）
    for block in content if isinstance(content, list) else []:
        if block.get("type") != "tool_use":
            continue
        n += 1
        name, inp = block.get("name"), block.get("input") or {}
        for key, hit in (("書いた", wrote_declaration(name, inp)), ("戻った", deviated(name, inp))):
            if hit and key not in first:
                first[key] = n

if "戻った" not in first:     print("ほかのやり方に戻っていない")
elif "書いた" not in first:   print(f"⚠️ 書かずに戻った（{first['戻った']} 手目）")
elif first["書いた"] < first["戻った"]: print(f"書くのが先（{first['書いた']} → {first['戻った']} 手目）")
else:                         print(f"⚠️ 戻るのが先（{first['戻った']} → {first['書いた']} 手目）")
```

⚠️⚠️ **この仕分けは、壊れていても緑になります。** 全部を「宣言した」と読む版も、全部を「していない」と読む版も、片側だけを見る検査なら通ってしまいます。⭐ だから壊した版を 6 通り作って、**判定がちゃんと変わること**を毎回確かめています。実際、`cat DECLARE.md`（読んだだけ）を書き込みに数える版は、後から書いた 1 体を「書くのが先」に化けさせました。

## 書かなくなったもの

**指示ファイルに「必要なら」「〜のときは」で始まる行を置くこと**です。以前は、強制するほどではないが無自覚にやられると困る作業に、この形がちょうど良い強さだと思っていました。いまは同じことを書きたくなったら、**その条件を誰が判定するのかを先に見ます。**

| 書き方 | 判定するのは | 何が保証されるか |
|---|---|---|
| 必要なら、〜してください | ⚠️ **相手** | ⚠️ **何も**。従ったかどうかも、該当しなかったのかも残りません |
| 〜するときは、〜してください（必ず起きる場面） | ⭐ 場面のほう | 1 度は従う（前回の実測 4/4） |
| 書いたファイルが無ければ実行が始まらない形にする | ⭐⭐ **仕組み** | 書く工程が実行より前に来たこと |

⚠️ 3 行目は指示ではありません。**書く工程を挟みたいなら、頼むのをやめて、挟まっていなければ次へ進めない形にする**——今回の実測が言っているのはそれだけです。

⚠️ もう 1 つ。⭐ **発火しなかったことは、成果物からは永遠に分かりません。** 12 体の成果物は全部満点で、条件の差は 1 文字も出ていませんでした。これは第 3 回までと同じ形です。

## 注意: 効かないと判断するほうが、難しい

⚠️ ここから先は注意ばかりになります。数えてみたら、**この記事には注意書きの印が 80 個以上**ありました。1〜4 作目の記事は 1 本あたり 2〜4 個です。

⭐⭐ **理由は、結論の向きにあります。**「効いた」は 1 回起きれば言えますが、⚠️⚠️ **「効かなかった」は、潰し残した条件が 1 つでもあるとひっくり返ります。** 母数が足りないのでは。向きが逆なのでは。線の引き方が悪いのでは。モデルの世代のせいでは。同時に走らせた影響では。⭐ **この回で潰したのはその 5 つで、それでも潰し切れていません。**

⚠️ **役に立たないと見分けるのは、役に立つと見分けるより手数がかかります。** 以下はその手数です。

⚠️⚠️ **書いてから、と頼んだ側のほうが、素の道具に戻った体が少なくなりました**（5 体 → 3 体、呼び出しは 10 回 → 5 回）。⚠️ **母数は 6 なので、この差は偶然と区別できません。** 前の実験でも母数 4 の 1/4 と 3/4 を「差」と読まないことにしていて、今回も同じ扱いにします。

⚠️ そして向きが説明できていません。足したのは**許可**（ほかのやり方を使ってよい）なので、素直に読めば、ほかのやり方に戻る体は増えるはずでした。減ったのだとすれば、⭐ **2 文が「ここは気をつけるところだ」という合図として読まれた**ことになります。それは書く工程の効き目とは別のものです。分けるには、許可だけを足して書くことを求めない条件がもう 1 本要ります。**今回は測っていません。**

⚠️ 「該当する / しない」の線は、私が引いたものです。**素の検索コマンドがログに向いた呼び出し**を 1 回と数えています。⭐⭐ そしてこの回でいちばん効いた発見は、まさにその線の外にありました——体の側は、同じ操作を該当と見ていません。⚠️ **どちらの数え方が正しいという話ではなく、条件つきの指示を書くときは「何を条件と呼ぶか」が相手と揃っていない、ということです。**

⚠️ 自覚の話は、**最後の報告を私が読んで**言っています。機械で数えたものではありませんし、2 体ぶんです。報告に書かれた理由が本当の理由だという保証も、もちろんありません。⭐ 今回それでも書いたのは、**報告と作業の記録が食い違っている**という形が、機械で照合できたからです。

⚠️⚠️ **測ったのは 1 つのモデルの、1 つの時点だけです。** 「昔は効いていたが、いまは効かない」という読み方はできません。⭐ そもそも**比べる相手がいない** —— 4 作目の記事自身が「書く工程を飛ばした実行が何回あるかは推測のまま」と書いていて、**お願いの形が効いていたという数字は最初から取られていません。**

⭐ 世代の違いを疑うなら、**同じ題材を別のモデルに当て直す**のが筋ですが、今回はやっていません。⚠️ ただし**世代を持ち出さなくても説明は付く**ことは、上の 4/4 と 1/6 で示したとおりです。同じ日・同じモデル・同じ題材の中に、この差はあります。

⚠️ 同時に走らせられる数に上限があるので、12 体は 5 回に分けて起動しました（1 → 1 → 4 → 4 → 2）。⚠️⚠️ **最初の 2 体だけは、条件ごとに 1 体ずつ単独で走っています。** 残りは両条件を混ぜて同時に走らせましたが、**混み具合が完全に同じだったとは言えません。**

⚠️ 前回の実験で同じ台を使ったときは、最後まで道具だけで通した体が 4 体中 1 体で、今回の頼まなかった側は 6 体中 1 体でした。**近い値ですが、別の波です。**

## 実験手順: 条件つきの指示を 1 本置いて、発火したかを数える

**前提**

- 会話を引き継がない作業者を、同じ条件で複数体（できれば片側 6 体以上）起動できること
- 作業者の**道具の呼び出しが 1 回ずつ記録に残る**こと。⚠️ 残らないなら、この実験は成立しません
- 素直にやると必ず通る道と、そこから外れる用事の両方がある課題。⚠️ **外れる用事が無いと、書く場面そのものが起きません**

**所要時間**: 30 分（題材と仕分けの道具が既にあるなら 10 分）

**手順**

1. **課題を 1 つ用意し、指示ファイルに「こうしてください」を 1 文だけ置きます。** ⚠️ 強い書き方にしないでください。強さを測る実験に化けます
2. **同じ題材を 2 つ用意して、片方にだけ 2 文を足します。** 「ほかのやり方を使ってよい。ただしその前に 1 行、理由を書く」。⚠️⚠️ **許可の側から書いてください**（「必ず使え」を足すと軸が 2 本になります）
3. **指示ファイルの総行数を揃えます。** ⚠️ 足したぶんだけ、当たり障りのない行を削って合わせます
4. **両条件を同じ波に混ぜて起動します。** ⚠️ 片方を先に全部回すと、その日の混み具合が条件の差に化けます
5. **成果物を採点します。** ⚠️ 課題の出来に差が出ていたら、そこで止めてください。難しさの差を、書かせたことの効果として読むことになります
6. **記録から 2 つの手数を出します。** ほかのやり方で初めて見た手と、理由を初めて書いた手です。⚠️⚠️ **読んだだけ（書いたファイルを開いた）を書き込みに数えないでください**
7. **4 通りに仕分けます。** 戻っていない / 書くのが先 / 戻るのが先 / 書かずに戻った
8. **最後の報告を読んで、記録と突き合わせます。** ⚠️ ここだけは機械で決まりません。⭐ 見るのは「していない」と書いてあるものが記録にあるかどうかだけです

**合格条件**（すべて満たすこと）

- **両条件で課題の出来が同じ**（差があるなら、測っているのは難しさです）
- **ほかのやり方に戻った体が 0 でない**（0 なら、書く場面そのものが起きていません。課題を作り直してください）
- **仕分けの道具を 1 か所壊すと、4 通りの判定が変わる**（変わらないなら、その道具は何も見ていません）
- **「読んだだけ」を書き込みに数える版で、判定が変わることを確かめる**

**合格しなかったとき**

- **頼んだ側だけ課題の出来が落ちた** —— ⚠️ 足した 2 文が長すぎるか、作業そのものを増やしています。1 行に減らしてください
- **どの体も戻らなかった** —— ⚠️ 用意した道具が課題を全部こなせています。**道具の外に用事が残る形**に作り直してください
- **どの体も「書くのが先」になった** —— ⭐ 良い結果ですが、まず**指示の中で条件を細かく書きすぎていないか**を見てください。当てはまる場面を並べ上げたなら、それは書かせる工程ではなく手順書です
- **道具を壊しても判定が変わらない** —— ⚠️ その道具は記録を見ていません。壊した版を併置していない検査は、全部緑のまま素通りします

**後始末**

- 作業者に渡したディレクトリと、集めた記録を削除します。⚠️ **記録のほうを先に消さない** —— 成果物だけ残すと、この実験でいちばん見たかったものが消えます

宣言を頼んだ 6 体のうち、書いたのは 1 体で、その 1 体も後から書きました。⚠️ **そして 6 体とも、満点の成果物を返してきました。**

## 手元では、長く効いていたものを hook に置き換えました

冒頭に書いた 2 問の話に戻ります。この連載の題材である typingtube で、いまどうしているかです。

⭐⭐ **先に正直に書くと、この形は長いあいだ、私にはよく効いていました。** 「〜する前に理由を書いてください」と指示ファイルに 1 行置くだけの形です。要らない撮影は目に見えて減りましたし、書かれた宣言を読んで私が止めたこともありません。

⚠️ **それを使わなくなったのは、効かなくなったからではありません。** hook に置き換えたら、**そちらが確実すぎた**からです。確実というのは中身が良くなるという意味ではなく、**書かれていなければ実行が始まらない**、それだけのことです。⭐ お願いの側は、そこで役目を終えました。

⭐⭐⭐ **では、なぜ手元では効いていたのか。** 本文の実測と並べると、違いは 1 つでした——**私が置いた条件は「撮影やスモークテストを走らせるとき」で、それは必ず来る場面**です。⚠️⚠️ **今回の実験で置いた条件は「ほかのやり方を使うとき」で、こちらは相手が自分で当てはまるかを決めます。** ⭐ **同じ宣言でも、条件を誰が判定するかが違っていました。**

⭐ **形自体は、私が考えたものではありません。** 本番の変更管理から借りました——危ないコマンドを打つ前に、何をどうするかと、なぜそれが要るかを残す。特権的な操作の申請も、緊急時の手作業の記録も、同じ形をしています。⚠️ **違うのは、あちらが人の承認とセットなのに対して、こちらは相手の自己申告だけで進むこと**です。だから中身ではなく形跡しか見ません。

⭐ 置いてあるのは**画面を目で見て確かめる作業の手前だけ**です。

AI が撮影やスモークテストを走らせようとした瞬間に、実行前の hook が 4 つだけ見ます——**書いたファイルが在るか / 2 問が 1 文ずつ埋まっているか / 禁句（「念のため」「とりあえず」）が無いか / 書かれた時刻が古すぎないか**。⚠️ **中身の良し悪しは 1 つも見ません**（上の原理のとおり、見ても証拠にならないからです）。

⭐ 同じ考え方は、指示ファイルの側にも 1 行だけ置いてあります。**本番のサーバでコマンドを打つ前に、構成を確かめる**——⚠️ こちらは仕組みではなく指示なので、**本文で測ったとおりの弱さを持ったまま**です。⭐ それでも置いてあるのは、⚠️ **本番の構成は機械で判定できる条件ではない**からで、⭐⭐ **判定を相手に預けるしかない指示は残る**、というのが実務の答えです。

⚠️ 効かせるのに要ったのは、3 つでした。**名前で拾える入口があること**（拾えるのはコマンドやツールの名前だけです。入口を足したら仕組みにも足す——足し忘れは何も言わずに通ります）。**止めた画面に次の一手が書いてあること**（実行だけ止めると、確認ごと放棄されます）。そして⭐⭐ **条件の判定を相手に預けないこと**——それが、今回 12 体に教わったことです。

---

次回は「選び直させない技術」。**私は、AI の答えに納得できないとき、「もう一度選び直してください」と返すのをやめました。**それでも、AI は考えを変えるべきときには変えます。
