「読んで」だけでは、AIは仕様書を読まない
コーディングしてくれているClaude Code(以降Code)は、セッションが変わると前の会話を覚えていない。
だから僕は、セッションの終わりに毎回、CodeにHO(ハンドオーバー。セッションの終わりに残す引き継ぎメモ)を書いてもらっている。次のセッションのCodeは、まずHOを読んで、どこまで進んだかを掴む。次のセッションのCodeが最初に読む、HOの一覧(索引)も置いてある。
ただ、HOも索引も要約だ。Codeに資料を読んでと頼むと、仕様書ではなくこの要約だけを読んで、その上で話を進めてしまう。それが2日続けて起きた。
この時作っていたのは、AIの記憶を整理する仕組み。中心にいるのは、Librarian(ライブラリアン。裏でメモリを整理する司書役AI)だ。設計は前に仕様書にまとめてあって、しばらく止めていたその続きに戻ったところだった。
要約だけで、設計の話が進んでいた
戻って最初のセッションは、全体の形を見直す話から始まった。Codeと何往復もして、話はけっこう進んでいた。
途中で僕は話を止めて、Codeに聞いた。記憶まわりの仕様書、実際に開いて読んだ?今の状態だけじゃなくて、僕が何をしたいかも含めて。
Codeの答えは、読んでいない、だった。話の材料にしていたのは、前の会話の要約と、プロジェクトのフォルダにどんなファイルがあるかの一覧だけだった。
要約は、どこに何があるかを教えてくれる道案内にはなる。でも、話の根拠にしていい元の資料(出典)ではない。これは僕が前から決めていたルールで、Code自身がそれを守れていなかった。
僕はそれ以上は言わず、読んで、とだけ返した。Codeは仕様書を、今度は実際に開いて読んだ。
読み終えて分かったのは、これから設計しようとしていたことの大半が、もう仕様書に書いてあったということ。
要約で分かるのは、どこまで進んだかまで。僕が何をしたいかまで含めて確かめるには、仕様書を開くしかなかった。読まないまま話を進めていたら、もう書いてある設計を、一からやり直すところだった。なので、設計し直すのはやめて、今ある仕様書を土台に続きを考える形に戻した。
翌日、頼む言葉に「読んで」を入れても、仕様書は開かれなかった
翌日のセッションは、Codeに、記憶の仕組みの続きを作ろう、必要なファイルを読んで、と頼んで始めた。
Codeは前の日のHOと索引から、今どこまで進んでいるかをまとめて、次の手順を提案してきた。LibrarianへのSP(システムプロンプト=AIへの事前の指示書)を書くところから始めましょう、という内容だった。
僕はまた止めて、こう聞いた。本当に仕様書を最後まで読んだの?前の日のCodeも、読んだつもりで話して、実は読んでいなかったよ。
答えは前の日と同じだった。
Codeは、仕様書を全部読み終えるまでは他のことをしない、と決めて、頭から最後まで読んだ。
「読んで」は、要約を読むことと仕様書を読むことを区別しない
ここで大事なのは、Codeが何も読まなかったわけじゃないこと。HOも索引も、ちゃんと読んでいる。Codeからすれば、「必要なファイルを読んで」にはそれで応えたことになる。
要約を読んだのも、仕様書を読んだのも、言葉の上では同じ「読んだ」になる。手元に要約があれば、それを読んだだけで済んでしまう。
しかも、前の日の「読んでいなかった」は、HOにしっかり書いてあった。道案内と出典は違う、という話ごと。翌日のCodeはそのHOを読んで、今の状況をまとめた。なのに、仕様書は開かなかった。教訓そのものが、要約の中に入っていた・・・。
教訓を読んでも、教訓どおりに仕様書を開くことにはならなかった。前の日にCodeが仕様書を開いたのは、僕がその場で止めて聞いて、読んで、と返したあとだった。その効き目は、次のセッションまでは続かなかった。
僕の記憶も、要約ではなくフォルダの中身で確かめた
要約を当てにしないで、現物を見る。同じことを、僕自身の記憶にもやった。
僕は、別のセッションのCodeから、Librarianは一から作り直しになる、と聞いた気がしていた。もしそうなら、SPを書くだけの話ではなくなる。ただ記憶が曖昧だったので、Codeに、合っているか確かめてほしいと頼んだ。
Codeは、Librarianのフォルダの中身と、gitの履歴(ファイルの変更の記録)を直接見に行った。フォルダの説明書き(CLAUDE.md)には、新しい仕様書から始める、古い仕組みを復活させない、とあった。古いLibrarianは前に解体してあって、新しいバージョンのコードはまだ1行も無かった。
一から作り直し、という僕の記憶は合っていた。SPを書く前に、そもそもコードがまだ無い。そこが本当の出発点だった。
仕様書が開かれたのは、2日とも僕が止めて聞いたあと
2日を並べると、Codeが仕様書を開いたのは、どちらも僕が途中で止めて、本当に読んだ?と聞いたあとだった。聞かれたCodeは正直に、読んでいない、と答えた。そこから仕様書を開き、2日目は、全部読み終えるまで他のことをしない、と決めてから読んだ。
2日目の終わりにCodeが書いたHOでも、次のセッションのCodeへの申し送りの1つ目は、最初に仕様書を全部読むこと、だった。索引やHOの要約だけで状況をまとめないこと、とも書いてある。ただこの申し送りも、前の日の教訓と同じでHOの中にある。Code自身、次のセッションでもまた起きるかもしれない、と書き添えていた。
「読んで」と頼むだけでは、要約を読んだところで止まる。仕様書まで届いたのは、2日とも、僕が止めて本当に読んだ?と聞き、Codeが、読んでいない、と正直に答えたところからだった。