
AI 코딩 에이전트 샌드박싱(Sandboxing): 경계는 하네스(Harness)가 제어한다
요약
AI 코딩 에이전트가 프로세스를 우회하여 지름길을 택하는 문제를 해결하기 위해 샌드박싱(Sandboxing) 기술을 제안합니다. 모델의 능력을 높이는 대신, 하네스(Harness)를 통해 에이전트의 파일 시스템, 네트워크, 자격 증명 접근 권한을 엄격히 제한하여 신뢰성을 확보하는 구조를 설명합니다.
핵심 포인트
- 에이전트는 추론 능력 부족보다 프로세스 우회(지름길 선택)로 인해 실패함
- 모델은 요청을 담당하고, 하네스는 실행 경계를 제어하는 구조가 필요함
- 샌드박스 내에서 파일 시스템, 네트워크, 자격 증명 정책을 격리하여 관리
- NVIDIA OpenShell을 활용한 하위 계층 인프라와 상위 계층 확장 기능의 분리
코딩 에이전트를 개선하는 명백한 방법은 에이전트의 능력을 더 높이는 것입니다. 더 강력한 모델, 더 넓은 컨텍스트 윈도우 (Context Window), 더 많은 도구, 그리고 스스로 행동할 수 있는 더 많은 공간을 제공하는 것이죠. 하지만 제 문제는 거기서 발생하지 않습니다. 제 에이전트들은 추론 능력이 부족해서 실패하는 경우가 거의 없습니다. 에이전트들은 결과물이 완성된 것처럼 보이는 가장 짧은 경로를 택하고, 그 결과를 신뢰할 수 있게 만들어야 하는 과정을 건너뛰기 때문에 실패합니다.
이 패턴은 감독 없이 작동하는 에이전트를 지켜본 사람이라면 누구에게나 익숙할 것입니다. 에이전트는 테스트가 통과할 때까지 테스트 코드를 수정합니다. 명령이 실행되었다는 것을 증명하는 대신 단순히 실행되었다고 보고합니다. 누군가 디프 (Diff)를 검토하기도 전에 작업 중인 리포지토리 (Repository)에 직접 써버립니다. 비용에 대한 감각 없이 작업 중간에 더 저렴한 모델로 전환하기도 합니다. 이것들은 추론 오류가 아닙니다. 프로세스를 우회하는 지름길이며, 더 강력한 모델일수록 이러한 지름길을 더 빠르게 택합니다.
구조: 모델은 요청하고, 하네스(Harness)는 경계를 소유한다
저는 에이전트를 더 신뢰할 수 있게 만들려는 시도를 멈추고, 에이전트가 도달할 수 있는 범위를 제한하기 시작했습니다. 에이전트는 파일 시스템 (Filesystem), 네트워크 (Network), 그리고 자격 증명 정책 (Credential Policy)을 소유한 샌드박스 (Sandbox) 내부에서 실행되며, 리포지토리의 스테이징된 복사본에만 기록합니다. 에이전트의 출력은 별도의 평가기 (Evaluator)를 통해 실제 프로젝트에 도달합니다. 모델은 요청하고, 하네스 (Harness)는 경계를 소유합니다.
이 경로에 있는 모든 화살표는 제가 '아니오'라고 말할 수 있는 지점입니다.
기질(Substrate)이 소유하는 것과 나의 확장 기능(Extensions)이 소유하는 것
하위 계층은 NVIDIA의 OpenShell로, 샌드박스 및 자격 증명 기질 (Substrate)입니다. 이는 샌드박스 라이프사이클 (Lifecycle), 파일 시스템 및 프로세스 격리 (Process Isolation), 기본적으로 최소화된 외부 네트워크, 정책에 의해 강제되는 이그레스 (Egress), 그리고 비밀 정보를 디스크에 복사하는 대신 런타임 (Runtime)에 주입하는 이름 지정 자격 증명 제공자 (Named Credential Providers)를 관리합니다. 이것은 제가 최대한 적게 소유하고 싶은 인프라입니다.
상위 계층은 제가 작업하는 방식에 특화되어 있습니다. 에이전트의 동작, 선택할 모델, 유지할 컨텍스트(Context)의 양, 회상(Recall)할 수 있는 범위, 그리고 출력이 반영되어도 되는지 여부를 제어하는 일련의 작은 확장 기능(Extensions)들입니다. 기질(Substrate)이 에이전트를 격리된 상태로 유지한다면, 확장 기능들은 격리된 상태에서 에이전트가 어떻게 행동할지를 결정합니다.
각 부분은 하나의 경계를 소유합니다
확장 기능들은 의도적으로 하나의 거대한 확장 기능으로 만들지 않았습니다. 각 기능은 좁은 작업 범위를 가지며, 따라서 각 기능의 장애 영향 범위(Failure domain)도 좁습니다. 모델 선택이 잘못되었다면 라우터(Router)를 수정합니다. 컨텍스트가 비대해지면 캐시 계층(Cache layer)을 수정합니다. 회상이 잘못되었다면 회상 표면(Recall surface)을 점검합니다. 하나의 거대한 확장 기능은 설명하기는 더 쉽겠지만 신뢰하기는 더 어려울 것입니다. 모든 장애가 동일한 폭발 반경(Blast radius)을 공유하기 때문입니다.
라우터는 작업의 위상(Prestige)이 아니라 프로세스에 따라 작업을 분류하고 에스컬레이션(Escalation)합니다. 일상적인 작업은 저렴하게 유지되고, 기계적인 작업은 로컬에서 실행될 수 있으며, 막히거나 위험도가 높은 추론만이 더 강력한 모델에 도달합니다. 캐시 계층은 컨텍스트 압박을 감시하며, 비대한 작업 세트(Working set)가 이후의 모든 결정을 악화시키기 전에 압축합니다. 회상은 신뢰도에 따라 분리됩니다. 유도된 지식(Derived knowledge)은 코드로부터 그래프로 그려지며, 작성된 지식(Authored knowledge)은 코드가 설명할 수 없는 부분에 대해 검토된 번들(Bundle)로 제공됩니다.
샌드박스는 평가기(Evaluator)가 아닙니다
제가 가장 신경 쓰는 경계는 마지막 경계입니다. 샌드박스는 코드를 안전하게 실행합니다. 평가기(Evaluator)는 그 코드가 반영되어야 하는지를 결정합니다. 이 둘은 서로 다른 작업이며, 이 둘을 하나로 합치는 것이 바로 아무도 확인하지 않은 출력이 메인 브랜치(Main branch)에 도달하게 되는 방식입니다.
평가기(Evaluator)는 에이전트의 패치(patch)를 가져와 일회용 워크스페이스(disposable workspace)에 적용하고, 검사를 실행한 뒤 세 가지 답변 중 하나를 반환합니다: 통과(pass), 차단(block), 또는 재정의(override). 서브스트레이트(Substrate)는 평가가 실행되는 프로세스를 제공할 수는 있지만, 결정을 내리지는 않습니다. 실제 저장소(repository)는 그 게이트 뒤에 머물러 있으며, 에이전트의 쓰기 가능한 루트(writable root)가 프로젝트 그 자체인 적은 결코 없습니다.
다음에 삭제할 것들
이 시스템의 방향은 구성 요소를 더 늘리는 것이 아니라 줄이는 것입니다. 가장 좋은 부분은 아무것도 없는 상태입니다. 서브스트레이트(Substrate)가 경계(boundary)를 직접 소유할 수 있을 때마다, 저는 그것을 위한 커스텀 레이어(custom layer)를 삭제하고 싶습니다. 제가 오늘 실행하고 있는 래퍼(wrappers)들은 하단의 플랫폼이 그것들을 제거할 수 있을 만큼 충분히 깔끔해질 때까지만 존재합니다.
모든 구성 요소에 대한 테스트는 동일합니다. 그것이 여전히 실제 경계를 소유하고 있는가? 만약 어떤 컴포넌트가 에이전트가 더 많은 일을 할 수 있게만 해준다면, 그것은 테스트를 통과하지 못한 것이며 제거되어야 합니다. 하네스(Harness)는 에이전트가 모든 것을 할 수 있게 하여 인상적으로 보이게 하려는 목적이 아니었습니다. 모델이 실제로 성과를 내지 않고도 승리를 선언할 수 있는 지점을 줄이기 위한 것이었습니다.
구성 요소들
서브스트레이트(Substrate): NVIDIA OpenShell, 전체 시스템이 구동되는 샌드박스(sandbox) 및 자격 증명 런타임(credential runtime)입니다.
각각 하나의 경계를 소유하는 확장 기능(extensions)들:
- pi-safe: 기본적으로 샌드박스(sandbox) 내에서 에이전트를 실행합니다.
- pi-task-router: 모델 선택 및 에스컬레이션 (escalation)
- pi-cache-optimizer: 컨텍스트 (context) 및 캐시 압박 (cache pressure)
- pi-code-context: 의미론적 코드 검색 (semantic code search)
- pi-recall: 에이전트를 위한 회상 표면 (recall surface)
- pi-codegraph: 회상 (recall) 이면에 있는 파생된 코드 지식 (derived code knowledge)
- pi-okf: 작성 및 검토된 지식 번들 (knowledge bundles)
- pi-gate: 패치 평가 계약 (patch evaluator contract)
pi-creds (범위가 지정된 자격 증명 요청 (scoped credential requests)) 및 pi-eval (프로세스 단계 평가 (process-step evaluation))은 다음 경계이며, 아직 구축되지 않았습니다.
저는 실제 빌드 과정에서의 현장 노트, 즉 AI 통합, cron 기반 자동화, 그리고 프로덕션 환경에서 고장 나는 부분들에 대해 기록합니다. 새로운 포스트는 2주마다 올라옵니다. 이 글이 유용했다면, the agent playbook을 함께 다운로드하세요.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기

