샌드박스 런타임
모든 사용자는 재시작 후에도 유지되는 격리되고 지속적인 샌드박스 환경을 갖게 됩니다.지속성
임시 샌드박스와 달리 Myrm 샌드박스는 다음을 유지합니다.- 설치된 패키지 및 도구
- 파일 시스템 상태
- 환경 구성
- 실행 중인 프로세스(자동 재시작 포함)
격리
각 샌드박스는 다음을 통해 격리된 환경에서 실행됩니다.- 전용 파일 시스템 볼륨
- 네트워크 네임스페이스 격리
- 리소스 제한(CPU, 메모리, 디스크)
- 런타임 시 시행되는 보안 정책
- 6계층 동시성 및 리소스 방어: 프로세스 수준 RLIMIT 적용(NPROC=512 포크 폭탄 방지, CPU 시간 제한, 가상 메모리 제한, 파일 설명자 제한, 파일 크기 제한) + SubAgent 팬아웃 제한(턴당 최대 3개의 대리인 호출) + 유형별 동시성 세마포(기본값 5) + 단계별 시간 제한 보호(300초) + 메모리 압력 조정 로드 차단 + 컨테이너 수준 cgroup 하드 캡.
resourcePython 모듈은 에이전트가 자체 한도를 확대하는 것을 방지하기 위해 블랙리스트에 추가되었습니다. - 4레벨 메모리 압력 모니터: 컨테이너 인식 cgroup v2 감지, 플래핑 방지를 위한 히스테리시스, Pub/Sub 가입자를 통한 조정된 로드 차단, 긴급 시 자동 GC를 통한 실시간 시스템 메모리 모니터링(정상 → 경고 → 위험 → 비상). 프로세스 수준 리소스 추적(RSS/VMS + 512포인트 기록 링 버퍼 + 주문형 힙 프로파일링)과 결합되어 에이전트는 리소스 소진이 문제가 되기 전에 자체 보호합니다.
- UI 상호 작용 블랙리스트: 백그라운드에서 실행되는 하위 에이전트의 경우 샌드박스는 UI 인터페이스(
interactive_feedback,send_message)를 차단하여 팝업으로 사용자를 방해하지 않도록 보장하고 백그라운드 작업과 포그라운드 사용자 상호 작용 간의 진정한 물리적 격리를 제공합니다. - 계층형 프로세스(PID) 한도: 샌드박스의 프로세스 상한은 결제 권한입니다 — Free 200 / PRO 512 / MAX 1024 — 컨테이너에 자동 적용되고 생성 시 검증되어 요금제와 컨테이너 리소스가 항상 일치합니다. 프로세스 포화는 cgroup 한도(
pids.current/pids.max) 기준으로 2단계 임계값(70% 경고 / 90% 오류), 브라우저 프로세스 귀속, Doctor 패널의 상위 메모리 프로세스 표시와 함께 모니터링됩니다 — “프로세스 테이블이 가득 차서 에이전트가 멈추는” 조용한 장애가 더 이상 없습니다.
기본 OS 수준 샌드박스(Docker 필요 없음)
로컬 및 데스크톱 배포의 경우 Myrm은 모든 주요 플랫폼에서 기본 OS 수준 프로세스 격리를 제공합니다.
샌드박스 공급자는 시작 시 자동으로 감지되므로 구성이 필요하지 않습니다. 기본 제공자를 사용할 수 없는 경우 시스템은 명확한 경고와 함께 정상적으로 대체됩니다.
Docker 기반 접근 방식에 비해 주요 이점:
- Docker 데스크톱 종속성 없음(Windows/macOS에서 설치 마찰 감소)
- 밀리초 미만 시작(컨테이너 이미지 가져오기 없음)
- 기본 OS 보안 기본 요소(사용자 공간 에뮬레이션이 아닌 커널 적용)
- 로컬 WebUI, Tauri 데스크톱 및 클라우드 모드에서 동일하게 작동합니다.
제로 레이턴시 에이전트 시작
에이전트 실행은 요청 수신 후 30ms 이내에 토큰 생성을 시작합니다.- 로컬/데스크톱: 작업 공간 설정(mkdir + 실행기 바인딩)에 15ms 미만 소요 — LLM RTT 측정 오류 내
- 클라우드: 미리 준비된 샌드박스 풀은 사용자 요청이 도착하기 전에 컨테이너가 준비되도록 보장합니다. 콜드 스타트 지연은 없습니다.
- 도구 초기화: 첫 번째 실행 후 캐시됨(
_tools_initialized플래그) — 후속 메시지는 완전히 건너뜁니다. - MCP 연결: 글로벌 싱글톤 영구 연결 풀 - 메시지 간 재연결 오버헤드 없음
- TTFT 모니터링: 지속적인 성능 검증을 위한 내장형
benchmark_llm_ttft()프로브 +time_to_first_action_seconds히스토그램
코드 실행
에이전트는 샌드박스에서 직접 코드를 실행할 수 있습니다.- Python 3.14, Node.js 20, Bun 1.3, 쉘 스크립트
- uv/pip, npm, apt를 통한 패키지 설치
- 파일 읽기/쓰기 작업
- 네트워크 액세스(구성 가능)
사전 설치된 데이터 과학 스택(70개 이상의 패키지)
샌드박스에는 가장 일반적으로 필요한 라이브러리가 준비되어 있으므로 설치를 기다릴 필요가 없습니다.Jupyter급 인라인 차트
matplotlib로 생성된 차트는 자동으로 캡처되어 대화에 인라인으로 표시되므로 수동으로 파일을 다운로드할 필요가 없습니다. CJK 글꼴(중국어, 일본어, 한국어)은 기본적으로 올바르게 렌더링되며 빌드 시 확인됩니다.스마트 오류 복구
패키지가 누락된 경우 에이전트는 정확한 설치 명령을 제안하는 실행 가능한 진단 힌트를 자동으로 수신하여 시행착오 루프를 제거합니다. 자동 언어 라우팅: 하나의 내장 실행 도구가 입력이 Python인지 셸인지 감지합니다.python3 -c에 코드를 래핑하거나 별도의 도구를 선택할 필요가 없습니다. 유효하지 않은 Python은 실행 전 명확한 구문 오류로 발견되므로 블라인드 재시도에 더 적은 토큰을 소비합니다.
경쟁업체 대비: OpenClaw의 exec 도구는 셸 전용입니다. Hermes은 쉘과 Python을 별도의 도구로 분할합니다. Myrm은 GUI 사용자를 위한 하나의 간단한 도구를 유지하고 내부적으로 올바르게 라우팅합니다.
업로드된 파일 액세스
메시지에 첨부한 파일(끌어서 놓기 또는 클릭하여 업로드)은 샌드박스 작업 영역에서 자동으로 사용할 수 있습니다.- 작은 파일(100KB 미만): 콘텐츠는 즉각적인 분석을 위해 LLM 컨텍스트에 직접 삽입됩니다.
- 대형 파일(100KB 이상): 에이전트가
file_read_tool로 읽거나 코드(예:pandas.read_csv())로 처리할 수 있도록 작업 공간_uploaded/디렉터리에 자동으로 복사됩니다.
작업공간 샌드박스(Git 작업트리 격리)
프로젝트 수준 격리를 위해 모든 채팅 세션에서 샌드박스 모드를 활성화하세요.- 원클릭 토글: 메시지 입력 툴바에서 ‘샌드박스’ 버튼을 클릭합니다.
- Git 작업 트리: 모든 변경 사항이 제한된 격리된 분기를 만듭니다.
- 병합 또는 삭제: 완료되면 좋은 변경사항을 다시 병합하거나 실험을 삭제합니다.
- 위험 없음: 명시적으로 병합할 때까지 기본 코드베이스가 수정되지 않습니다.
- 리팩토링 실험(“위험 없이 이 접근 방식을 시도해 보세요”)
- 에이전트가 여러 솔루션을 동시에 탐색하도록 허용
- 변경 사항을 수락하기 전에 테스트하려는 코드 검토
- 로케일 안전: 모든 git 명령은
LANG=C을 사용하여 영어가 아닌 시스템에서 구문 분석 실패를 방지합니다. - 자동 정리: 시작 시 오래된 작업 트리와 고아 샌드박스 분기가 자동으로 정리됩니다.
- Git-invisible: 샌드박스 디렉터리는
.git/info/exclude를 통해git status에서 자동 제외됩니다. - 구조적 오류: 실패는 명확한 진단을 위해 특정 이유(분기 존재, 이미 체크아웃됨, 경로 존재)를 반환합니다.
--worktree 플래그와 달리 Myrm의 작업 공간 샌드박스는 GUI 토글을 통해 사용할 수 있고 세션 중에 활성화/비활성화할 수 있으며 사전 승인 통합이 포함된 완전한 병합/삭제 워크플로가 포함되어 있습니다.
Git 및 PR 전달
샌드박스는 Git 워크플로를 즉시 사용 가능하게 만듭니다. 완전히 새로운 환경에서도 바로 동작합니다:- 호스트 한정 푸시 자격 증명:
GITHUB_TOKEN이 존재하고 HTTPSgithub.com원격 저장소로 푸시할 때, Myrm은 인라인 자격 증명 헬퍼를 주입합니다(단, 샌드박스에 기존 자격 증명이 없을 때만). 이 헬퍼는 호스트 한정입니다:github.com/www.github.com에만 응답하며, 토큰은 타사 Git 서버(예: 자체 호스팅 GitLab 원격 또는 원시 HTTPS URL)에 절대 전달되지 않습니다. 토큰은 환경 변수로 참조되며 명령에 절대 인라인되지 않습니다. - 자동 커밋 신원: 샌드박스에 전역
git config user.name/user.email이 없으면 Myrm이 연결된 GitHub 계정에서 자동 해석합니다(login@users.noreply.github.com,TMPDIR캐시 + 5초 타임아웃 + 로컬 폴백).git commit이 첫 시도부터 성공합니다 — “Please tell me who you are” 차단이 없습니다. - 원클릭 PR 전달: 설정 > 통합 > GitHub의 GitHub 통합과 함께 사용하세요 — 웹훅 URL이 복사 버튼과 함께 표시되며, 설정한 Webhook Secret이 GitHub에 입력한 값과 일치해야 합니다(페이로드는
X-Hub-Signature-256으로 검증). PR 열림 / issue / push 이벤트가 전체 컨텍스트와 함께 채팅으로 돌아옵니다.
3계층 리소스 관리
샌드박스는 응답성을 최대화하면서 비용을 최소화하기 위해 세 가지 리소스 단계를 거칩니다.- CPU 스로틀 — 짧은 유휴 기간 후에
ResourceScaler은 CPU 할당량을 전체 할당의 25%로 줄입니다. 새 작업이 도착하면boost_sandbox()은 콜드 스타트 지연 없이 즉시 전체 CPU를 복원합니다. - 절전 모드 — 더 긴 유휴 기간(계획에 따라 다름: 무료의 경우 5분 → Max의 경우 24시간) 후에
SandboxRecycler는 컨테이너를 중지하지만 영구 볼륨을 유지합니다. 수면 기간에는 WU 비용이 발생하지 않습니다. - 파기 — 장기간 비활성(구성 가능, 기본값 7일) 후에 샌드박스가 완전히 회수됩니다.
- 역방향 프록시 활동 추적 — 프록시를 통한 모든 사용자 HTTP/WebSocket 요청은 샌드박스의 활동 타임스탬프를 새로 고칩니다(오버헤드를 방지하기 위해 5분당 1개의 DB 쓰기로 제한됨).
- WebSocket 연결 가드 — 샌드박스에 제어 플레인에 대한 활성 WebSocket 연결이 있는 경우(예: 백그라운드 심층 조사 또는 장기 실행 작업 중) 재활용기는 활동 타임스탬프에 관계없이 절전 모드를 건너뜁니다.
기업 조직 관리 및 볼륨 핸드오프
B2B 팀의 경우 Control Plane은 전체 조직 수명주기 관리를 제공합니다.- RBAC: 원자적 권한 확인을 통한 소유자/관리자/구성원 역할
- 멱등성 멤버십: 동일한 사용자를 두 번 추가하면 기존 기록이 안전하게 반환됩니다.
- 원클릭 오프보딩: 직원이 퇴사하면 관리자가 샌드박스를 동결하고 볼륨을 백업한 후 후임자에게 전송합니다. 이 모든 것이 한 번의 작업으로 이루어집니다.
- 불변의 감사 추적: 규정 준수를 위해 모든 오프보딩 작업이 기록됩니다.
- 조직 간 보호: 사용자는 자동으로 두 조직에 속할 수 없습니다.
- 3-웨이 취소 대칭: 구성원 제거 시 Org MCP / 승인 정책 / 모델 화이트리스트가 즉시 3중으로 비워집니다(fire-and-forget 비동기 푸시). 샌드박스가 절전 중이면 깨어날 때 잔여 거버넌스가 자동으로 정리되어 권한 유령 창이 발생하지 않습니다.
- 아카이브 보존 자동 정리: 오프보드 아카이브는 조직의 보존 일수(
archive_retention_days, 기본 365일)에 따라 자동 삭제되어 규정 준수 보존과 디스크 절약을 동시에 달성합니다. - 전송 안전 경계: 명시적
backup_path는 백업 디렉터리 내부에 있어야 하며(범위 밖은 409 반환), 자체 전송(source == target)은 거부되며, UI는 아카이브가 완료된 구성원만 전송 소스로 표시합니다.
비밀이 전혀 없는 LLM 게이트웨이
클라우드 호스팅 모드에서는 API 키가 샌드박스에 들어가지 않습니다.- 실제 키는 Control Plane의 AES-256-GCM SecretsVault에 저장됩니다.
- 샌드박스는 실제 공급자에 대해 쓸모가 없는 서명된 가상 키(
myrm-vk-...)를 수신합니다. - 모든 LLM 통화는 가상 키를 확인하고 실제 자격 증명을 삽입하는 CP 릴레이를 통해 라우팅됩니다.
- 요청 본문은 바이트 단위로 스트리밍되어 업스트림 프롬프트 접두사 캐시를 완벽하게 보존합니다.
- 완전히 손상된 샌드박스라도 사용 가능한 API 자격 증명을 유출할 수 없습니다.