あるとき、Claudeの5時間のセッション制限に当たってしまいました。 どうして?と思って振り返ってみると、原因は単純でした。 同じセッションに、どんどん別の話題を振っていたのです。

調べもの、実装、仕様との照合、途中で気づいた別件。 新しいタブを開くのがめんどうで、つい今のタブでそのまま話してしまう。 そうやってどれも同じタブへ投げているうちに会話が長くなり、制限まで使い切っていました。

会話が長いと便利な面もありますが、前の話題の前提が次の依頼に混ざってしまいます。 続きのつもりで聞いたわけではないのに、さっきまでの判断がにじんでくる。 制限に当たったのも、別件を同じ場所で処理し続けた結果でした。

そこで、フックを足したり仕様照合の進め方を見直したりしながら、セッションをどこで切るかを決めました。

  1. 発言のたびに、フックcontext-length-nudge.shが文脈の長さをチェックし、80k以上ならClaudeに知らせる
  2. Claudeが、今回の依頼がそれまでと別の話題かどうかを判断する
  3. 別の話題なら、このセッションでは作業に入らず、session-handoffで引き継ぎ文を書いて新しいタブを開く

同じ作業の続きならその場で進め、別件なら今のタブでは手をつけない、というルールです。

80kは「もう動かない」という限界ではなく、「そろそろ長くなってきた」という合図です。 短いうちから毎回切るのは面倒なので、長くなってきたときだけ発火するようにしています。 制限そのものを伸ばすための工夫というより、1つのタブで1つの仕事を続けるための仕組みです。

新しいタブに移るときは、頭の中だけに残さず、引き継ぎ文を書いておくのがポイントです。 どこまで進んだか、次に何をすればいいかを書き残してから席を立つ感覚に近いです。 それまでの記憶を捨てるのではなく、作業場所を分けるイメージです。

入れてみていちばんよかったのは、違う話題を振ると新しいセッションが自動で開かれることです。 めんどくさがってそのまま話してしまうわたしでも、別の話題は最初から新しいタブで始まるので、長いコンテキストを引きずらずに済むようになりました。