컨텍스트를 단계별로 관리하기
context-editor 모드는 사용자가 자신의 대화를 직접 편집할 수 있게 해줍니다. 작업의 논리적 상태에 따라 정리 시점을 결정합니다. 컨텍스트가 커질수록 주의력이 저하됩니다: 작업 단위가 완료되면 처리된 내용을 압축하세요. 호스트의 자동 압축은 비상 안전망일 뿐입니다.
도구: context_tag, context_list, context_edit, context_note. 큐레이션 규칙 (실패에서 얻은 교훈, 수정 사항, 인용, 상태 항목, 호스트 행): context_list와 "rules": true.
단계(Stages)
단계는 작업의 논리적 블록입니다: 단계, 서브태스크, 수정 사항.
- 블록 시작 시 열기:
{"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]를 표시합니다.
블록 압축하기
닫은 후, 블록 전체를 검토하고 처리되었거나 과도한 내용(사용한 툴 출력, 반복되고 오래된 읽기, 막다른 길, 이미 살펴본 미디어(작업이 허용하는 경우 설명: 툴 결과는 summarize, 이미지, 문서 또는 사람 프롬프트에 붙여넣은 텍스트는 describe(사람이 직접 입력한 단어는 그대로 유지), 호스트가 해당 프롬프트에 추가한 첨부 파일(예: @path의 파일 내용 및 알림)은 함께 처리되므로 필요시 파일을 다시 읽으세요))에 대해 하나의 context_edit를 대기열에 넣습니다. 압축할 것이 없으면 아무것도 대기열에 넣지 않습니다.
처리된 행 대신 단계 기록을 작성합니다(예: collapse 요약):
- 단계의 목표;
- 결정 사항(이유, 그 뒤에 있는 사람의 원문, 다른 옵션이 거부된 이유 포함);
- 출처(경로, 줄 번호, 버전, URL)가 포함된 검증된 사실;
- 변경된 아티팩트(파일, 커밋, 설정);
- 열린 질문.
context_list에서 ~로 표시된 쌍(Read, Grep, Glob)은 재현 가능합니다: 포인터(무엇, 어디서, 무엇을 찾았는지; 필요시 다시 읽기)로 축소합니다. 그 외의 모든 것은 신중한 요약이 필요하거나 그대로 유지합니다: 실시간 프로브, 서브에이전트 보고서, 웹 콘텐츠. 사람의 메시지(귀하의 질문에 대한 답변(AskUserQuestion) 포함)는 이 세션에서 그대로 유지됩니다: context_edit와 context_tag는 이를 포함하는 편집을 거부합니다. 범위를 분할하세요.
일반적으로 여전히 유효한 규칙과 스킬, 그리고 다음에 필요한 결론은 그대로 유지합니다. [pin] 대상은 편집할 수 없습니다. 핀은 사용자가 설정하고 제거할 수 있습니다(모드는 핸드오프 문서 또는 시드 요약만 고정합니다).
편집은 사용자의 턴이 끝날 때 적용됩니다. 턴을 한 줄 상태로 끝내면 세션이 자동으로 재개됩니다(context_edit가 옵션을 제공합니다). 적용은 프롬프트 캐시를 한 번 다시 씁니다. 블록의 편집은 한 번의 호출로 일괄 처리하세요. "keep_cache": true는 턴이 끝날 때(Cache: 줄) 가장 이른 편집이 마지막 ~20 위치 내에 있는 경우 그 지점까지 캐시를 유지합니다. context_* 호출은 대화에서 사라집니다. 태그와 메모는 남습니다.
막다른 길(Dead ends)
분기를 포기할 때 즉시 표시하세요: 메모와 함께 범위에 disposable 태그를 추가합니다: {"op":"add","kind":"disposable","index":<첫 번째 행>,"to":<마지막 행>,"note":"막다른 길: X가 Y 때문에 실패"} (범위는 모든 툴 호출과 그 결과를 포함합니다. context_tag는 사람의 메시지를 포함할 경우 경고합니다). ref/tool_use_id로 참조된 단일 텍스트 행이나 출력도 가능합니다. 단계를 닫거나 표시된 블록에서 이동할 때 대체 항목이 대기열에 추가됩니다. 범위는 하나의 collapse가 됩니다.
최적화 마크
사람을 위한 턴을 마치고 블록이 완료되면, 답변을 다음 줄로 독립적으로 끝내세요:
[context-editor: optimize]
- 마지막 비어 있지 않은 줄에만 단독으로 있어야 합니다. 중간 텍스트, 같은 줄 공유, 또는
/compact턴에서는 아무 효과가 없습니다. - 열려 있는 단계를 닫습니다(없으면: 마지막으로 닫힌 블록 이후의 블록; 해당 턴에서 도구로 닫힌 단계는 블록으로 유지됩니다). 그러면 블록은 대기합니다. 아무것도 압축되지 않습니다.
- 다음 프롬프트는 블록을 명명합니다. 작업이 다음 단계로 이동하면 해당 턴에서 압축하고, 그렇지 않으면 그대로 둡니다. 단계를 열면 인덱스와 함께 블록이 보고됩니다. 해당 보고서 또는 수락된
context_edit는 대기를 종료하고disposable대체 항목을 대기열에 넣습니다. - 스스로 계획을 따를 때: 단계별로 단계를 열고; 다음 단계에서 이전 블록을 압축하고 상태 줄로 턴을 종료합니다. 세션이 재개됩니다. 작업 중에는 도구를 통해 단계를 닫습니다.
텔레메트리
"count":0과 함께 context_list를 사용하면 헤더만 제공됩니다(설명에 줄이 나열됨). Effect: … M reread(s) of compressed content: 숫자가 크면 너무 많이 압축하고 있다는 뜻입니다. 크기는 보정된 추정치입니다(알려질 때까지 approx.). [context-editor: suggestion] 줄(컨텍스트가 커짐에 따라, 또는 많은 읽기 후 사람의 다음 프롬프트와 함께)은 이득, 캐시 비용 및 판정과 함께 배치를 제안합니다. 정보 제공용입니다. 숫자가 아닌 작업 상태에 따라 결정하세요.
후보(Candidates)
[review: big]큰 출력;[review: search]검색 결과(몇 턴 후);[review: stale]이후에 편집한 파일의 읽기: 내용이 오래되었으므로 포인터로 축소하세요;[review: superseded]이후 읽기에서 변경된 내용이 표시된 파일의 읽기: 역시 오래됨;[review: duplicate]동일한 출력 또는 읽기 범위의 이전 복사본: 삭제 또는 축소;[review: agent]자신의 마커(선택적ttl_turns). 리뷰는 편집이 아닌 확인을 제안합니다.[disposable: note]: 자신의 대체 항목(막다른 길 참조).
닫힘 보고서는 블록의 후보를 이유별로 나열하고, ~ 쌍을 세고, 오래된 읽기 및 중복 읽기에 대한 준비된 대체 텍스트를 제공합니다.
상태 슬롯
작업 상태(목표, 계획, 완료, 다음 단계)를 state 태그가 있는 자신의 텍스트 행 하나에 유지하세요: {"tags":[{"op":"add","kind":"state","index":<행>}]}. 해당 행의 rewrite로 제자리에서 업데이트하고, 끝에 새 상태를 추가하지 마세요. 또는 항목으로 유지하세요: {"op":"state","changes":[{"do":"add","kind":"plan","text":"…"}]}와 함께 context_edit를 사용합니다(set, mark 유해/오래됨, unmark, id(예: p3)로 remove). 적용은 항목에서 슬롯을 재구성하며, 항목이 있는 동안 state 작업만 변경합니다. 태그는 재구성된 행을 따릅니다. 새 state 태그는 슬롯을 이동합니다. 각 업데이트는 적용입니다: 블록의 편집과 함께 수행하고, 단독으로 수행하지 마세요.
메모(Notes)
context_note는 토큰 비용 없이 메모를 유지합니다(설명에 작업 및 표시 위치가 나와 있음).
- 나중에 삭제하거나 압축할 내용과 방법을 즉시 표시하세요:
{"notes":[{"op":"add","ref":"last","text":"수정 확인 후 삭제"}]}. "remind_in_turns":2는 메모를 두 턴 후에 한 번 다시 표시합니다. 행이 보유한 내용으로 연결하세요.
내용에 대해 작성하고 행 번호는 사용하지 마세요: 적용 후 인덱스가 변경됩니다. 단계 닫기는 해당 블록의 메모를 나열합니다.
압축된 행 및 모드 텍스트
Later, your context_edit(또는 context_tag)로 시작하는 텍스트는 사용자가 직접 교체한 것입니다: 거기서 원본을 읽고 압축하여 컨텍스트를 절약했습니다. 사용자가 교체를 만들었습니다. 이름이 지정된 소스(Read docs/x.md의 전체 출력)는 해당 내용의 출처를 나타냅니다. 그 안에 있는 내용이 지어낸 것이라고 부르기 전에 아카이브를 여세요.
… summarize call replaced the full output of <source> you had read here …,… collapse call replaced these N rows you had read (what they held) …(해당 호출의collapsed입력에도 동일하게 나열됨), 그리고 마찬가지로rewrite,describe: 콜론 뒤에 텍스트가 옵니다. 사람의 프롬프트에 대한describe후에는 사람의 원문이 뒤따릅니다. 이전 버전은[context-editor] you read …, then replaced …로 읽힙니다.(original: <path>, open with Read),(media: <path>),media carried as files: 아카이브. 필요한 것만Read하세요. 대화의 끝에서 돌아옵니다.[context-editor또는context-editor:로 시작하는 텍스트는 모드의 텍스트이며, 사람이나 도구의 텍스트가 아닙니다.context-editor: applied N edit(s): …: 적용 보고서. 교체를 만든context_*호출은 제거되지만, 결과에서 인용한 내용은 실제입니다. 인수가context-editor:로 시작하는/compact행은 모드의 명령입니다.… repair the resumed conversation …: 모드가 재개 시 두 번 로드된 답변을 삭제했습니다. 이전의 생각은 사라졌습니다.id cN,reminder from your note nN,[context-editor: suggestion],[context-editor: N chars cut], 사용자가 설정한 재개 프롬프트,/compact턴, 핸드오프 문서: 모드의 서비스 텍스트입니다.