/ 디렉터리 / 플레이그라운드 / CodeRunner
● 커뮤니티 instavm ⚡ 바로 사용

CodeRunner

제작: instavm · instavm/coderunner

에이전트를 위한 VM 격리 코드 실행 — Python, Playwright, 영속 Jupyter 커널, 모두 호스트에서 샌드박스 처리.

CodeRunner는 Claude(와 다른 에이전트)에게 안전하고 영속적인 샌드박스를 제공합니다: 장기 실행 Jupyter 커널로 Python 실행, Playwright로 스크래핑, PDF 및 이미지 조작. 컨테이너 기반 VM 수준 격리로 에이전트가 내 컴퓨터를 망가뜨리지 않고 신뢰할 수 없는 코드를 실행할 수 있습니다. MCP 서버로 노출돼 모든 클라이언트에서 작동합니다.

왜 쓰나요

핵심 기능

라이브 데모

실제 사용 모습

준비됨

설치

클라이언트 선택

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "coderunner-skill": {
      "command": "git",
      "args": [
        "clone",
        "https://github.com/instavm/coderunner",
        "~/.claude/skills/coderunner"
      ],
      "_inferred": true
    }
  }
}

Claude Desktop → Settings → Developer → Edit Config 열기. 저장 후 앱 재시작.

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "coderunner-skill": {
      "command": "git",
      "args": [
        "clone",
        "https://github.com/instavm/coderunner",
        "~/.claude/skills/coderunner"
      ],
      "_inferred": true
    }
  }
}

Cursor는 Claude Desktop과 동일한 mcpServers 스키마 사용. 프로젝트 설정이 전역보다 우선.

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "coderunner-skill": {
      "command": "git",
      "args": [
        "clone",
        "https://github.com/instavm/coderunner",
        "~/.claude/skills/coderunner"
      ],
      "_inferred": true
    }
  }
}

Cline 사이드바의 MCP Servers 아이콘 클릭 후 "Edit Configuration" 선택.

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "coderunner-skill": {
      "command": "git",
      "args": [
        "clone",
        "https://github.com/instavm/coderunner",
        "~/.claude/skills/coderunner"
      ],
      "_inferred": true
    }
  }
}

Claude Desktop과 같은 형식. Windsurf 재시작 후 적용.

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "coderunner-skill",
      "command": "git",
      "args": [
        "clone",
        "https://github.com/instavm/coderunner",
        "~/.claude/skills/coderunner"
      ]
    }
  ]
}

Continue는 맵이 아닌 서버 오브젝트 배열 사용.

~/.config/zed/settings.json
{
  "context_servers": {
    "coderunner-skill": {
      "command": {
        "path": "git",
        "args": [
          "clone",
          "https://github.com/instavm/coderunner",
          "~/.claude/skills/coderunner"
        ]
      }
    }
  }
}

context_servers에 추가. 저장 시 Zed가 핫 리로드.

claude mcp add coderunner-skill -- git clone https://github.com/instavm/coderunner ~/.claude/skills/coderunner

한 줄 명령. claude mcp list로 확인, claude mcp remove로 제거.

사용 사례

실전 활용법: CodeRunner

내 노트북 위험 없이 Claude가 신뢰할 수 없는 코드를 실행

👤 자동 생성 코드를 실험하는 개발자 ⏱ ~15 min intermediate

언제 쓸까: Claude가 완전히 검토하지 않은 스크립트를 작성하고 실행하길 원할 때.

사전 조건
  • macOS Apple Silicon + Python 3.10+ — 현재 제한; Linux 지원은 다양함
  • Skill 설치 — 프로젝트 README에 따라 git clone + ./install.sh
흐름
  1. 작업 전달
    Use coderunner. Write a Python script that downloads my Strava activities CSV from <url>, parses, and computes weekly mileage. Run it in the sandbox.✓ 복사됨
    → 스크립트 실행됨; 출력 표시; 내 파일시스템은 건드리지 않음
  2. 반복
    Add a chart of weekly mileage. Re-run.✓ 복사됨
    → 차트 렌더링됨; 커널 상태 유지 (재import 없음)
  3. 결과 내보내기
    Save CSV + chart to ./out/ on host (this only).✓ 복사됨
    → 그 경로만 쓰여짐; 샌드박스는 봉인 유지

결과: '앗, /Users 삭제됐어' 없는 빠른 실험.

함정
  • 샌드박스에서도 네트워크 접근은 허용됨 — 진정한 신뢰할 수 없는 코드를 실행한다면 네트워크 비활성화; 그렇지 않으면 데이터 유출 가능
함께 쓰기: filesystem

Claude와 함께하는 영속 데이터 분석

👤 Claude를 Jupyter 코파일럿으로 사용하는 분석가 ⏱ ~30 min beginner

언제 쓸까: 커널 상태를 잃지 않고 30분짜리 탐색적 데이터 세션을 원할 때.

흐름
  1. 한 번만 데이터 로드
    Use coderunner. Load /data/sales.csv into df. Show schema + 5 sample rows.✓ 복사됨
    → df가 커널에; 세션 내내 유지
  2. 임시 쿼리
    Pivot by region × month, show top 5 anomalies.✓ 복사됨
    → 피벗 + 플래그된 행
  3. 내보내기
    Save the anomalies subset to /out/anomalies.csv on host.✓ 복사됨
    → /out/에 CSV

결과: 실제로 코드가 실행되는 채팅을 통한 노트북 수준 분석.

함정
  • 긴 세션에서 커널 상태가 벗어남; 오래된 변수 기반 결과 — 관련 없는 작업 사이에 커널 재시작; Claude가 %reset 실행 가능
함께 쓰기: filesystem

안전하게 JS 중심 사이트 스크래핑

👤 SPA에서 일회성 데이터가 필요한 개발자 ⏱ ~20 min intermediate

언제 쓸까: 사이트에 완전한 브라우저가 필요한데 호스트에서 Chrome 프로세스를 실행하고 싶지 않을 때.

흐름
  1. 세션 시작
    Use coderunner Playwright. Open <url>, wait for the table, extract rows as JSON.✓ 복사됨
    → JSON 반환됨; 브라우저는 샌드박스에 유지
  2. 셀렉터 수정
    Selector missed the price column; adjust to find it.✓ 복사됨
    → 업데이트된 셀렉터; 데이터 완성

결과: 데이터 추출됨; 호스트 브라우저 흔적 없음.

함정
  • 사이트가 headless를 감지하고 차단 — skill이 노출하는 --headed=false-but-stealth 옵션으로 chromium 전환

조합

다른 MCP와 조합해 10배 효율

coderunner-skill + filesystem

마운트된 경로를 통해서만 샌드박스로/에서 데이터 이동

Mount only /Users/me/data and /Users/me/out; everything else is read-only.✓ 복사됨
coderunner-skill + duckduckgo-mcp

검색 → 페치 → 분석 파이프라인

Search via duckduckgo, scrape via coderunner Playwright, analyze in Python.✓ 복사됨

도구

이 MCP가 노출하는 것

도구입력언제 호출비용
run_python code: str 모든 코드 실행 0
browser_navigate url, wait_for? SPA 스크래핑을 위한 Playwright 세션 0
browser_extract selector, format navigate 후 데이터 추출 0
pdf_ops input_path, op, args PDF 병합 / 분할 / 추출 0
image_ops input_path, op, args 크기 조정, 형식 변환, OCR 0
kernel_reset 관련 없는 세션 사이 0

비용 및 제한

운영 비용

API 쿼터
없음 — 로컬
호출당 토큰
코드/출력 token만
금액
무료
영속 커널로 재import 대비 token 절약; 상태가 잘못됐을 때만 재설정

보안

권한, 시크릿, 파급범위

최소 스코프: Mounted filesystem paths only Network on/off via config
자격 증명 저장: 에이전트가 볼 수 있어도 괜찮지 않으면 샌드박스에 비밀 키 넣지 않기
데이터 외부 송신: 네트워크가 켜져 있으면 샌드박스가 모든 URL에 접근 가능 — 민감한 실행에서는 비활성화
절대 부여 금지: $HOME 또는 /의 마운트 금지 — 샌드박스의 의미가 없어짐

문제 해결

자주 발생하는 오류와 해결

Linux에서 install.sh 실패

프로젝트는 macOS Apple Silicon이 1등급; Linux 지원은 다양함. 배포판별 메모는 issues 확인

Playwright 오래된 상태

kernel_reset 실행; 오래된 브라우저 컨텍스트가 호출 간에 지속될 수 있음

샌드박스가 인터넷에 접근 불가

설정에서 네트워크 비활성화됨; 필요하면 켜기. 반대로, 불필요할 때는 격리

PDF/이미지 skill 의존성 누락

컨테이너 이미지에 일반적인 것들이 번들됨; 커스텀 의존성 추가를 위해 이미지 재빌드

대안

CodeRunner 다른 것과 비교

대안언제 쓰나단점/장점
Anthropic code execution beta로컬 샌드박스 없이 서버 측 실행을 원할 때클라우드 측; 데이터가 내 컴퓨터를 나감
Docker by hand컨테이너 이미지를 완전히 제어하고 싶을 때수동 설정; MCP 서버가 기본 제공되지 않음

더 보기

리소스

📖 GitHub에서 공식 README 읽기

🐙 열린 이슈 보기

🔍 400+ MCP 서버 및 Skills 전체 보기