ステージでコンテキストを管理する
context-editor modを使用すると、会話を自分で編集できます。作業の論理的な状態に基づいてクリーンアップするタイミングを決定します。コンテキストが増えると注意力が低下します: 作業が完了したら、処理済みのものを圧縮してください。ホストの自動圧縮は単なるセーフティネットです。
ツール: context_tag、context_list、context_edit、context_note。キュレーションルール (失敗からの教訓、修正、引用、状態アイテム、ホスト行): context_list と "rules": true。
ステージ
ステージとは、作業の論理的なブロック(フェーズ、サブタスク、修正)のことです。
- ブロックの開始時に開く:
{"tags":[{"op":"open","stage":"設定ファイルを読む"}]}。ブロックはそれを開いたレスポンスから開始されます;"index"を指定すると、context_listのその行から開始されます。 - ブロックが完了し結果が判明したら閉じる:
{"tags":[{"op":"close"}]}。結果には、ブロックの行#a..#b、そのサイズとメディア、クリーンアップ候補、テレメトリー、アドバイスが記載されます。インデックスは最新のものです: そのまま編集に使用できます。 - ステージはフラットです: ステージを開くと、最初に開いているステージが閉じられます。
- 開かなかったブロックを閉じる場合:
{"tags":[{"op":"open","stage":"<名前>","index":<最初の行>},{"op":"close"}]}。 context_listは、開いているステージの最初の行に[stage ▶ 名前]、最後に閉じたブロックの前後に[block ▶ 名前]..[block end]を表示します。
ブロックの圧縮
クローズ後、ブロック全体を確認し、処理済みまたは余分な内容(使用したツールの出力、繰り返しや古い読み取り、行き止まり、すでに確認したメディア)に対して、1つの context_edit をキューに入れます(タスクが許せば、ツールの結果は summarize、画像・ドキュメント・貼り付けたテキスト(ユーザーのプロンプト内)は describe、ユーザーの入力は逐語的に保持します;ホストがプロンプトに追加した添付ファイル(@path からのファイル内容やリマインダーなど)もそれに含まれるため、必要に応じてファイルを再読してください)。圧縮するものがなければ、何もキューに入れません。
処理済みの行の代わりに、例えば collapse の要約として、ステージレコードを記述します:
- ステージの目標;
- 決定事項(理由、その背後にあるユーザーの逐語的な言葉、他の選択肢がなぜ却下されたか);
- 検証済みの事実とその出典(パス、行番号、バージョン、URL);
- 変更された成果物(ファイル、コミット、設定);
- 未解決の質問。
context_list で ~ とマークされたペア(Read、Grep、Glob)は再現可能です: ポインタ(何を、どこで、何が見つかったか;必要なら再度読む)に縮小します。それ以外は、注意深い要約が必要か、そのまま残します(ライブプローブ、サブエージェントレポート、Webコンテンツ)。ユーザーのメッセージ(AskUserQuestion への回答を含む)はこのセッションでは逐語的に保持されます: context_edit と context_tag はこれらをカバーする編集を拒否します;範囲を分割してください。
通常は、有効なルールとスキル、そして次に必要な結論を逐語的に保持します。[pin] ターゲットは編集できません;ピンはユーザーが設定・削除できます(modはハンドオフのドキュメントやシード要約のみをピン留めします)。
編集はターンの終了時に適用されます: 1行のステータスでターンを終了すると、セッションは自動的に再開します(context_edit がオプションを提供します)。適用によりプロンプトキャッシュが1回再書き込みされます: ブロックの編集は1回の呼び出しにまとめてください。"keep_cache": true は、ターン終了時に最も古い編集が最後の約20ポジション以内にある場合、キャッシュをその位置まで維持します(Cache: 行)。context_* 呼び出しは会話から削除されます;タグとメモは残ります。
デッドエンド
ブランチを放棄する場合、すぐにマークします: スパンに disposable タグとメモを追加します。{"op":"add","kind":"disposable","index":<最初の行>,"to":<最後の行>,"note":"行き止まり: YのためXは失敗"}(範囲はすべてのツール呼び出しとその結果を含みます;context_tag はユーザーのメッセージをカバーする場合に警告します)。ref/tool_use_id による単一のテキスト行や出力でも機能します。置き換えは、ステージを閉じるか、マークしたブロックから移動する際にキューに入れられます;範囲は1つの collapse になります。
最適化マーク
ユーザーへのターンを終了し、ブロックが完了したら、回答の最後に次の行を単独で追加します:
[context-editor: optimize]
- 最後の空でない行に単独でのみ配置します;テキストの途中、同じ行に共有、または
/compactターン内では何も行いません。 - 開いているステージを閉じます(ステージがない場合: 最後に閉じたブロック以降のブロック;そのターンでツールによって閉じられたステージはブロックのままです)。ブロックは待機状態になります;何も圧縮されません。
- 次のプロンプトがそのブロックを命名します: 作業が次のステージに移る場合はそのターンで圧縮し、そうでなければそのままにします。ステージを開くとインデックスとともに報告されます;それが承認されるか
context_editが受け入れられると待機が終了し、disposableの置き換えがキューに入ります。 - 自分で計画に従う場合: フェーズごとにステージを開きます;次のステージでは、前のブロックを圧縮し、ステータス行でターンを終了します;セッションは再開します。作業途中では、ツールによってステージを閉じます。
テレメトリー
context_list と "count":0 でヘッダーのみを取得します(その説明に行がリストされています)。Effect: … M reread(s) of compressed content: 数が多い場合は圧縮しすぎです。サイズは校正された推定値です(既知になるまでは approx.)。[context-editor: suggestion] 行(コンテキストが増加するにつれて、または多くの読み取り後のユーザーの次のプロンプトとともに)は、ゲイン、キャッシュコスト、判定を含むバッチを提案します;情報提供のみです。数値ではなく、作業の状態に基づいて判断してください。
候補
[review: big]: 大きな出力;[review: search]: 検索結果(数ターン後);[review: stale]: その後編集したファイルの読み取り: 内容が古くなっているため、ポインタに縮小します;[review: superseded]: 後続の読み取りで内容が変更されたことが示されたファイルの読み取り: 同様に古い;[review: duplicate]: 同じ出力または読み取り範囲の以前のコピー: 削除または縮小します;[review: agent]: 自分自身のマーカー(オプションのttl_turns)。レビューは確認を提案するものであり、編集を提案するものではありません。[disposable: note]: 自分自身の置き換え(デッドエンドを参照)。
クローズレポートは、ブロックの候補を理由別にリストし、~ ペアをカウントし、古い読み取りと重複読み取りの準備済み置き換えテキストを提供します。
ステートスロット
タスクの状態(目標、計画、完了、次)を、state タグが付いた自分のテキスト行の1つに保持します: {"tags":[{"op":"add","kind":"state","index":<行>}]}。その行の rewrite でその場で更新し、新しい状態を最後に追加することはしません。または、アイテムとして保持します: context_edit と {"op":"state","changes":[{"do":"add","kind":"plan","text":"…"}]}(set、mark harmful/outdated、unmark、remove は p3 などのIDで行います);適用によりスロットがアイテムから再構築され、アイテムがある間は state 操作のみがそれを変更します。タグは再構築された行に従います。新しい state タグはスロットを移動します。各更新は適用です: ブロックの編集と一緒に行い、単独では行いません。
メモ
context_note はトークンコストなしでメモを保持します(その説明に操作と表示場所が記載されています)。
- 後で削除または圧縮するものとその方法をすぐにマークします:
{"notes":[{"op":"add","ref":"last","text":"修正が確認されたら削除"}]}。 "remind_in_turns":2は、2ターン後にメモを1回だけ再表示します。行をその内容でリンクします。
行番号ではなく内容について記述してください: インデックスは適用後に変更されます。ステージクローズは、そのブロック内のメモをリストします。
圧縮された行とmodテキスト
Later, your context_edit(または context_tag)で始まるテキストは、自分自身の置き換えです: 元の内容を読んでから、コンテキストを節約するために圧縮しました。置き換えを行ったのはあなたです;その出典名(Read docs/x.md の完全な出力)は、その内容の出所を示しています。何かを作り上げたと考える前に、アーカイブを開いてください。
… summarize 呼び出しが、ここで読んだ <出典> の完全な出力を置き換えました …、… collapse 呼び出しが、読んだこれらの N 行(その内容)を置き換えました …(その呼び出しのcollapsed入力も同じものをリストします)、同様にrewrite、describe: あなたのテキストはコロンの後に続きます。ユーザーのプロンプトに対するdescribeの後は、ユーザー自身のテキストがあなたのテキストの後に続きます。古いものは[context-editor] you read …, then replaced …と読めます。(original: <パス>, open with Read)、(media: <パス>)、media carried as files: アーカイブ。Readは必要なものだけにしてください;会話の最後に戻ってきます。[context-editorまたはcontext-editor:で始まるテキストはmodのものであり、ユーザーやツールのものではありません。context-editor: applied N edit(s): …: 適用レポート;置き換えを行ったcontext_*呼び出しは削除されますが、それらの結果から引用した内容は本物です。引数がcontext-editor:で始まる/compact行はmodのコマンドです;… repair the resumed conversation …: modは、再開が2回ロードした回答を削除しました;以前の思考は失われています。id cN、reminder from your note nN、[context-editor: suggestion]、[context-editor: N chars cut]、設定した再開プロンプト、/compactターン、ハンドオフのドキュメント: modのサービステキスト。