あるとき、Claudeの5時間のセッション制限に当たってしまいました。 どうして?と思って振り返ってみると、原因は単純でした。 同じセッションに、どんどん別の話題を振っていたのです。
調べもの、実装、仕様との照合、途中で気づいた別件。 新しいタブを開くのがめんどうで、つい今のタブでそのまま話してしまう。 そうやってどれも同じタブへ投げているうちに会話が長くなり、制限まで使い切っていました。
会話が長いと便利な面もありますが、前の話題の前提が次の依頼に混ざってしまいます。 続きのつもりで聞いたわけではないのに、さっきまでの判断がにじんでくる。 制限に当たったのも、別件を同じ場所で処理し続けた結果でした。
そこで、フックを足したり仕様照合の進め方を見直したりしながら、セッションをどこで切るかを決めました。
- 発言のたびに、フック
context-length-nudge.shが文脈の長さをチェックし、80k以上ならClaudeに知らせる - Claudeが、今回の依頼がそれまでと別の話題かどうかを判断する
- 別の話題なら、このセッションでは作業に入らず、
session-handoffで引き継ぎ文を書いて新しいタブを開く
同じ作業の続きならその場で進め、別件なら今のタブでは手をつけない、というルールです。
80kは「もう動かない」という限界ではなく、「そろそろ長くなってきた」という合図です。 短いうちから毎回切るのは面倒なので、長くなってきたときだけ発火するようにしています。 制限そのものを伸ばすための工夫というより、1つのタブで1つの仕事を続けるための仕組みです。
新しいタブに移るときは、頭の中だけに残さず、引き継ぎ文を書いておくのがポイントです。 どこまで進んだか、次に何をすればいいかを書き残してから席を立つ感覚に近いです。 それまでの記憶を捨てるのではなく、作業場所を分けるイメージです。
入れてみていちばんよかったのは、違う話題を振ると新しいセッションが自動で開かれることです。 めんどくさがってそのまま話してしまうわたしでも、別の話題は最初から新しいタブで始まるので、長いコンテキストを引きずらずに済むようになりました。