Pi 1.0, MCP 지원을 Codemode로 추가: 하네스 샌드박스에서 JS로 도구 호출 조합
- Pi 1.0이 MCP 지원을 Codemode 방식으로 추가함. Codemode는 LLM이 하네스 쪽에서 도구 호출을 조합하도록 하는 구조이고, Pi에서는 QuickJS/WASM 샌드박스에서 돌며 네트워크, 파일시스템, 타이머가 없고 RAM도 제한됨
- 일반 도구 호출은 bash 출력의 마지막 2000줄만 컨텍스트에 넣지만 Codemode 호출은 더 큰 출력을 구조적으로 받음. 동시 실행과 워크플로 표현이 가능하고, 호출 사이에 상태를 transcript에 저장해 다음 호출에서 다시 불러올 수 있음
- Codemode는 Pi에서 MCP가 켜져 있을 때만 기본 활성화되고, 설정의 "defaultTools": ["+codemode"]로 켤 수 있음. 이름은 Cloudflare가 처음 붙였고 이미지 생성이나 one-shot 분류기 API처럼 일반 도구로는 컨텍스트를 낭비할 호출도 Codemode로 노출함
- 저자는 bash가 실행되는 프로그램만 조합할 수 있어 read나 view_image 같은 네이티브 도구와 서브 에이전트 오케스트레이션은 하네스가 맡아야 한다고 봄. 하네스(브레인)와 실행 환경(핸즈)을 나누면 파일시스템과 신뢰 수준이 달라지고, 샌드박스를 써도 하네스 자체는 샌드박스 밖에 남음
- HN 반응은 엇갈림. JavaScript를 쓰는 이유로 모델 학습량, Promise 동시성, 샌드박싱 용이함을 들었고, 작은 모델에서 내부 호출 하나가 실패하면 부모 코드 전체가 실패해 토큰이 늘어난다는 지적과 설명이 장황하다는 비판, 턴 수가 10분의 1로 줄었다는 옹호가 함께 나옴
Hacker News 의견들
codemode 구현이 왜 거의 다 JavaScript인지 모르겠음. bash로 codemode 프로토타입을 만들어봤는데 똑같이 잘 돌았고, LLM한테 가르칠 프롬프트가 0임. 도구 이름이 "bash"면 알아서 씀
모델이 JS로 학습돼 있어서임. 지시를 훨씬 적게 줘도 되고 동시성은 Promise로 표현하는 게 잘 맞음. code mode가 하네스 쪽에서 돌아서 bash는 타깃으로 까다롭고
bash 샌드박싱이 JS나 Lua보다 훨씬 어려움. 임베딩 툴링은 JS나 Lua가 훨씬 좋음
중단된 실행 복구가 문제임. 이미 끝난 사이드 이펙트와 안전하게 반복할 수 있는 호출을 구분해야 함
서브에이전트는 좀 다름. 내 Claude Code 로그를 보면 서브에이전트 캐시 쓰기는 5분 티어, 메인 세션은 1시간 티어임
Claude가 자주 짜는 미니 스크립트랑 뭐가 다르냐면, Claude 스크립트는 MCP 도구를 못 부름. 그러면 전부 CLI나 라이브러리로 가야 하고 입출력 스키마가 자기설명적이라는 장점을 잃음
codemode를 프로토타입에서 썼다가 도로 걷어냈음. 작은 로컬 LLM이 토큰을 평소보다 더 씀. 도구 호출을 코드로 우아하게 합치는 건 됐는데, 안에 들어간 호출 하나가 파라미터 검증에서 실패하면 부모 코드 실행 전체가 실패하고 LLM이 코드 블록을 통째로 다시 씀
작은 모델에서는 codemode가 잘 안 될 거란 걱정이 그대로 나온 셈임. Opus나 Sol에서는 환상적인데 스케일 다운은 의문임
Cloudflare 글까지 합쳐서 말만 많고 시스템 수준 그림이 없음. 하네스 기계장치를 제대로 다루려면 homoiconicity, actor 시맨틱스, object capability가 필요하고 code mode는 그걸 LLM 토큰 스트림에서 거꾸로 해킹해 재발명하는 중임
그냥 이렇게 보면 됨. 지금은 도구 호출마다 고정 JSON 스키마가 있는데, codemode는 모델이 프로그램을 써서 도구를 원하는 대로 조합하게 하자는 것. 그 언어(보통 JS)에 하네스 내부 API가 노출됨
Pi에서 codemode 영구 비활성화가 안 됨. settings.json에서 껐는데도 계속 켜지고 autoEnableCodemode도 false로 뒀는데 소용이 없음
MCP나 codemode는 자동으로 켜지지 않음. extensions에 "-builtin:codemode"만 넣으면 완전히 꺼지고, "-builtin:mcp"는 MCP를 독립적으로 제거함
Sol 6.1에서 code mode를 쓰면 서브에이전트 쪽이 점점 망가짐. 쓸수록 서브에이전트 프롬프트를 못 쓰고 단어를 붙여쓰면서 키워드를 뿜음
제목이 "What is Codemode"인데 본문은 "Codemode가 뭔지 모른다면, 기본적으로는..."이라고 함. 모르는 사람한테 설명하는 글이어야 하는 거 아님? bash 출력 2000줄 얘기도 무슨 뜻인지 모르겠음
이 도구 생태계 깊이 들어가 있지 않으면 뇌가 파싱을 못 함. Armin이 처음부터 차근차근 설명해줬으면 했음
왜 Pi 글이 아니라 개인 블로그인지 모르겠음. earendil 글도 codemode가 뭔지 모르면 읽기 어려움
복잡한 장치를 이득 없이 들여온 느낌임. MCP도 필요 없고 pi의 약속은 bash 하나면 된다는 거였음. 도구 호출을 가상 bash 명령으로 주입하는 게 최소 침습적이었을 텐데
나는 codemode 좋던데. 턴 수가 10분의 1로 줄어듦