Grok Build · Context Isolation

서브 에이전트의 네 가지 격리 차원

컨텍스트 소스, 신원 연속성, 작업 디렉토리, 파일 변경 범위는 각각 서로 다른 경계를 제어합니다. 이것들을 단순히 하나의 "격리 수준"으로 합치면 재개(resumption)와 worktree의 실제 동작을 오해하기 쉽습니다.

학습 목표

다음을 정확히 설명할 수 있습니다: ContextSource::New / ResumedResumeSourceDataSubagentIsolationMode, 그리고 작업에 따라 새 세션, 재개, worktree를 선택할 수 있습니다.

TEACHING DIAGRAM

격리는 직교 차원들의 집합입니다

동일한 Resumed 서브 에이전트가 worktree를 재사용할 수도, 일반 cwd를 상속받을 수도 있습니다. 컨텍스트 연속성과 파일 공간 격리는 별도로 판단해야 합니다.

네 가지 격리 차원: 컨텍스트, 신원, 작업 디렉토리, 변경 범위 childsession ContextSourceNew / Resumed Identitytype / persona / model pin Effective cwdworktree > override > parent Isolation modeNone / Worktree
ContextSource의 공개 의미론

ContextSource::New

새 세션은 이전 이력을 상속하지 않습니다. spawn 프로세스는 새로운 system prompt와 prompt context를 수립한 후 현재 작업 입력을 받습니다. 독립적인 파일 공간을 의미하지 않으며, 파일 공간은 여전히 isolation과 cwd에 따라 결정됩니다.

ContextSource::Resumed

완료된 peer subagent로부터 계속합니다. 소스 코드가 원본 transcript와 tool state를 복사하며, 모델은 source model을 그대로 사용합니다. system prompt와 prompt context는 현재 AgentDefinition에 따라 다시 렌더링됩니다.

구현 보충: xai-grok-subagent-resolution::ContextSource 공개 열거형은 New와 Resumed만 있습니다. 쉘 내부에는 InitialContextSource::Forked도 있으며, 부모 세션에서 컨텍스트를 미러링하거나 요약하는 데 사용됩니다. 이것은 다른 bootstrap 분기에 속하며 공개 열거형 멤버로 표현해서는 안 됩니다.
ResumeSourceData가 재개 위치 정보를 전달합니다
신원subagent_id, type, persona, model_id
디렉토리child_cwd, worktree_path
세션 데이터child_session_id로 transcript와 tool state를 찾습니다
스냅샷snapshot_ref로 삭제된 worktree를 재구성할 수 있습니다

신원 검증

  • subagent_type은 source와 일치해야 합니다.
  • 명시적 Persona는 source와 일치해야 합니다. 명시하지 않으면 source의 것을 상속합니다.
  • model은 신원 게이트에 참여하지 않습니다. 요청의 model override는 소프트하게 무시되고 source model에 고정됩니다.

재개 제약 사항

  • transcript 복사나 읽기에 실패하면 명시적 resume은 실패하고 닫힙니다.
  • source transcript가 대상 모델 컨텍스트 윈도우의 80%를 초과하면 재개를 거부합니다.
  • 재개는 tool state를 복사하지만 plan state, plan mode state, signals는 복사하지 않습니다.
SubagentIsolationMode는 두 가지만 있습니다

None

서브 에이전트는 해석된 cwd를 사용하며, 보통 부모 워크스페이스와 동일합니다. 컨텍스트 윈도우는 여전히 독립적인 자식 세션입니다. None은 파일 작업 공간 격리를 나타내며, 대화 이력 공유를 의미하지 않습니다.

Worktree

서브 에이전트는 독립적인 worktree 경로를 사용합니다. 재개 시 source worktree를 우선 재사용합니다. 경로가 제거되었고 snapshot_ref가 있으면 영구 git ref에서 재수화할 수 있습니다. 이 열거형에는 "sandbox" 멤버가 없습니다.

crates/codegen/xai-grok-subagent-resolution/src/types.rs crates/codegen/xai-grok-subagent-resolution/src/resume.rs crates/common/xai-tool-types/src/task.rs bootstrap_initial_context resolve_child_cwd
실제 소스 코드 스냅샷
crates/common/xai-tool-types/src/task.rsREAL SOURCE
pub enum SubagentIsolationMode {
    #[default]
    #[serde(alias = "None")]
    None,
    #[serde(alias = "Worktree", alias = "work_tree", alias = "work-tree")]
    Worktree,
}

스냅샷 설명: 열거형은 wire alias를 보여주기 위해 완전히 보존되었습니다. 위의 동심원은 차원 직교성을 강조하기 위한 교육 시각 자료이며, 소스 코드의 객체 계층 구조가 아닙니다.

실습: 두 작업의 경계 선택하기

작업 A는 어제 절반만 완료된 리팩토링을 계속하면서 원래 worktree의 커밋되지 않은 변경 사항을 유지해야 합니다. 작업 B는 현재 저장소를 독립적으로 분석하기만 하면 됩니다. 각각 New 또는 Resumed, None 또는 Worktree를 선택하고, transcript, model, cwd, 파일 변경 범위가 어떻게 처리되는지 설명하십시오.

Takeaway: New와 Resumed는 정보 연속성을 제어하고, None과 Worktree는 파일 공간을 제어하며, ResumeSourceData는 신원, 디렉토리, 세션, 스냅샷을 찾는 역할을 담당합니다. 먼저 차원을 분해하고, 그 다음 격리 강도를 논의하십시오.