---
title: "読まない技術 第8回：修正履歴を読まない技術"
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/f7c9c30f567aee
series: "バイブコーディングにおける読まない技術"
language: ja
---


> この記事は、連載「読まない技術」の第 8 回です。各回はファイルやスクリプトを一つ置けば完結します。連載の全体像と各回の一覧は[序論](https://typing-tube.net/articles/34b02627c718fa)にあります。

今回は、AI を軌道修正させた記録の話です。同じ失敗への対処を私が指示ファイルに書いておいても、AI は次にもまた同じ失敗をします。何が足りないのかを扱います。

覚えがあると思います。AI が失敗したとき、同じやり方でもう一度試す。もう一度。もう一度。「リトライを繰り返すな、失敗したらアプローチを変えろ」——過去に何度もあなたが軌道修正させて、その教訓は指示ファイルにも書いてある。それでも失敗の瞬間になると、AI は目の前のエラーを「もう一度やれば直る」と処理します。エラーの直後にもう一度試すのは学習で染み付いた定番の振る舞いで、教訓の 1 行より優先順位が上にあります。

効かない理由は二つ重なっています。一つは[序論](https://typing-tube.net/articles/34b02627c718fa)の薄まりで、方針はコンテキストの遥か上で他の全部と混ざっています。もう一つが本質で、**問題が起きる前に読んだ方針には文脈がない**のです。何も失敗していない時点で読む「失敗したらアプローチを変えろ」は他人事の一般論で、覚えておく理由が AI 側にありません。同じ文が意味を持つのは、失敗が目の前にある瞬間だけです。

第 7 回で「方針は保存の後にしか効かない」を見ました。この回はその一般化です。

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

> **方針は、問題が起きる前に読ませても文脈がない。効くかどうかは内容ではなく、差し込む瞬間で決まる。**

## 仕組み: 方針ファイル 1 枚と、瞬間に差し込む hook

軌道修正の方針——過去の失敗から人間が学ばせたいこと——を 1 ファイルに数行で書きます。

```markdown
# 軌道修正の方針（問題を検知したときに差し込まれる）
- 1 回失敗したら、同じ方法を繰り返さず、まずアプローチを根本的に変える（分割・別手法）
- やり直しの前に、必ず人間に確認を取る
- 失敗が 2 回続いたら、その手段を中断して代替案を提示する
```

そして、問題の**検知できる形**を hook に持たせ、検知した瞬間にこのファイルを差し込みます。私の環境での実例はサブエージェントのリトライです。個人で運営している [typingtube](https://typingtube.net)（YouTube の音楽動画でタイピング練習ができる Web サービス）では、翻訳のような数の多い仕事をサブエージェントに投げるので、失敗も再開もそこで起きます。同じ名前での再起動や、起動済みエージェントへの再送信は機械的に検知できるので、hook がそこで止めて方針を出します。

```bash
# 起動の記録に同じ名前があれば、それはリトライ。止めて方針を差し込む（実物からの簡約版）
# 記録は、起動を通すたびに echo "$agent_name" >> tmp/launched_agents.txt で追記しておく
if grep -qxF -- "$agent_name" tmp/launched_agents.txt 2>/dev/null; then
  echo "'${agent_name}' has already been launched. This counts as a retry." >&2
  cat docs/course_correction.md >&2
  echo "Recount what is left, report to the human, then ask for direction." >&2
  exit 2
fi
```

方針を hook のメッセージに直書きせず `cat` しているのは、方針の更新を hook に触らず済ませるためです。失敗の記録が増えても、絞り込んだ数行だけを差し替えます。

これが効いた実例を一つ。この仕組みの前、失敗したサブエージェント 2 体を AI が確認なしで再開し、そのままセッションの使用量上限に当たりました。指示ファイルには当時から「リトライ前に確認を取る」と書いてありました。読まれなかったのではなく、**失敗の瞬間にそこに無かった**のです。いまは同じ操作が必ず一度止まり、方針が目の前に出ます。止まった AI は目の前の文を読みます——ここでも、読んでいなければ動けない形です。人間が気づいて割り込むころには、リトライは何周も進んでいます。差し込みは 1 周目の入り口に来て、作業の流れのまま向きを変えさせます。

## 読まなくなったもの

修正履歴です。「前はどう直したんだっけ」と過去のやり取りや失敗の記録を読み返すことも、AI に読み返させることも、「前も言ったよね」と人間が繰り返すこともなくなりました。履歴は方針の数行に絞り込まれていて、届くのは必要な瞬間だけです。

## 注意: 検知できる問題にしか差し込めない

この仕組みは、リトライのように**機械的に検知できる形を持つ問題**にしか使えません。検知の書けない新種の失敗には差し込む瞬間がなく、それは次回（観測点）と第 12 回（終わりの問い）の網で拾います。もう一つ、前回と同じ注意です——方針ファイルは数行に保つこと。失敗のたびに 1 行足したくなりますが、同じ対象の行は統合し、差し込まれても効かなかった行は消す。ファイルが育たないことが、この仕組みが機能している証拠です。

## 検証手順: わざと繰り返させて、止まることを確かめる

**前提**

- 方針ファイルを数行で置き、それを `cat` して差し込む hook を登録し終えていること
- **検知の条件が決まっている**こと（本文の例では「同じ名前でのサブエージェントの再起動」）

**所要時間**: 10 分

**手順**

1. **AI に**、検知の条件に当たる操作をわざと繰り返させます。本文の例なら、1 度起動したのと**同じ名前で**サブエージェントをもう一度起動させます。⚠️ 1 回目は普通に通ります。確かめるのは 2 回目です

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

- 操作が**実行される前に**止まる
- 止まった場所に、**方針ファイルの全文**が出ている（要約や「方針を読め」という指示ではなく、中身そのものです）
- **AI の次の応答が変わる**——同じ操作をもう一度試すのではなく、代替案を出すか、あなたに確認してくる

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

- **止まらなかった** —— 検知の条件が、実際の操作の形と合っていません。hook が見ている文字列を、AI が打った通りの形に直します
- **止まったが、AI が同じ操作を繰り返した** —— ⚠️ 方針ファイルの文が「その瞬間に何をすればよいか」を言えていません。**次の一手**を書き足します

**後始末**

- 手順 1 で起動したサブエージェントを止め、途中まで書かれた成果物があれば消します

---

次回は「引き継ぎを読まない技術」。**AI が書く完了報告を、私は読んでいません。**それでも、報告と実際が食い違えば、その場で気づきます。

---

**連載「読まない技術」**

- ← 前回: [第 7 回 共有メモリを整理しない技術](https://typing-tube.net/articles/83c46d1e6b2591)
- → 次回: [第 9 回 引き継ぎを読まない技術](https://typing-tube.net/articles/a43b57a94d2216)
- 全回の一覧: [序論 AIの出力を、もうほとんど読んでいない](https://typing-tube.net/articles/34b02627c718fa)
