Claude Code Web 내부를 파헤치며 드러난, 스트립되지 않은 Go 바이너리와 Anthropic의 비밀 배포 플랫폼, 그리고 AI 네이티브 PaaS 아키텍처 분석.
전체 링크 복사
2026-03-18 Anthropic, Claude Code, Firecracker, PaaS, Antspace
Claude Code Web 내부에는 무엇이 있을까: 스트립되지 않은 Go 바이너리, Anthropic의 비밀 배포 플랫폼, 그리고 AI 네이티브 PaaS의 아키텍처
우리는 Desktop부터 Platform까지 아우르는 풀스택 플랫폼 ArcBox를 만들고 있으며, 포지셔닝은 Railway와 E2B와 유사합니다. 우리의 핵심 철학은 로컬-클라우드 일관성입니다. 즉, Sandbox 기능을 로컬에서 제공하는 완전한 오픈소스 ArcBox Desktop으로 OrbStack을 대체하는 것입니다. 최근 우리는 점점 더 많은 Coding Agent 플랫폼이 웹 기반 진입점을 출시하는 것을 보았고, 놀랍게도 거의 모두가 내부적으로 Firecracker를 선택했습니다. Claude Code도 예외가 아니었습니다. 같은 영역에서 일하는 실무자로서 그 런타임 환경이 궁금해져 조금 파고들게 되었습니다. 가볍게 시작한 strace -p 1은 결국 정식 리버스 엔지니어링 세션으로 이어졌고, 그 과정에서 아직 공개되지 않은 Anthropic 인프라, 그중에서도 전혀 문서화되지 않은 애플리케이션 호스팅 플랫폼까지 드러났습니다.
여기서 설명하는 모든 내용은 Claude Code 세션 내부에서 표준 Linux 도구(strace, strings, objdump, go tool objdump)를 실행하여 발견한 것입니다. 익스플로잇도 없었고, 권한 상승도 없었으며, 네트워크 공격도 없었습니다. 바이너리는 바로 거기에 있었고, 스트립조차 되어 있지 않았으며, 전체 디버그 심볼을 포함하고 있었습니다.
첫 번째 질문은 이것이었습니다. 정확히 어떤 환경일까?

$ dmesg | grep FIRECK
ACPI: RSDP 0x00000000000E0000 000024 (v02 FIRECK)
ACPI: XSDT ... (v01 FIRECK FCMVXSDT ... FCAT 20240119)
ACPI: FACP ... (v06 FIRECK FCVMFADT ... FCAT 20240119)
ACPI: DSDT ... (v02 FIRECK FCVMDSDT ... FCAT 20240119)
ACPI 테이블에는 OEM ID FIRECK와 creator ID FCAT가 서명되어 있는데, 둘 다 Firecracker의 소스 코드에 하드코딩되어 있습니다. 이것은 AWS Lambda와 Fargate를 구동하는 바로 그 MicroVM 기술입니다.


사양은 다음과 같습니다. 4 vCPU (Intel Xeon Cascade Lake @ 2.80GHz), 16GB RAM, 252GB 디스크, Linux 6.18.5. Firecracker는 의도적으로 게스트에서 vmx/svm 플래그를 제거하므로 중첩 가상화는 지원되지 않습니다.
프로세스 트리는 터무니없을 정도로 미니멀합니다.
PID 1: /process_api --firecracker-init --addr 0.0.0.0:2024 ...
└─ PID 517: /usr/local/bin/environment-manager task-run --session cse_...
└─ PID 532: claude (CLI 자체)
systemd도 없습니다. sshd도 없습니다. cron도 없습니다. 로깅 데몬도 없습니다. PID 1은 init이자 WebSocket API 게이트웨이 역할을 동시에 하는 커스텀 바이너리입니다. 커널 커맨드라인이 이를 확인해 줍니다.
rdinit=/process_api init_on_free=1 -- --firecracker-init
reboot=k panic=1 nomodule
PID 1에 대해 strace를 실행해 보면 epoll 이벤트 루프를 돌리면서, 자식 프로세스를 모니터링하기 위해 주기적으로 /proc/*/children와 /proc/*/status를 확인하는 것을 볼 수 있습니다. 본질적으로는 포트 2024(WebSocket API)와 포트 2025(보조 엔드포인트)를 수신하는 최소한의 init supervisor입니다.
진짜 발견은 /usr/local/bin/environment-runner(심볼릭 링크 이름은 environment-manager)였습니다.

$ file /usr/local/bin/environment-runner
ELF 64-bit LSB executable, x86-64, dynamically linked,
Go BuildID=..., with debug_info, not stripped
$ go version -m /usr/local/bin/environment-runner
go1.25.7
path github.com/anthropics/anthropic/api-go/environment-manager
mod github.com/anthropics/anthropic/api-go (devel)
build -ldflags=-X main.Version=staging-68f0dff496
27MB짜리 Go 바이너리였습니다. 스트립되지 않음. 전체 디버그 정보. 전체 심볼 테이블. Anthropic의 비공개 모노레포 github.com/anthropics/anthropic/api-go/environment-manager/에서 빌드된 것입니다.
go tool objdump와 strings를 사용하면 전체 내부 패키지 구조를 추출할 수 있습니다.
internal/
├── api/ # API 클라이언트 (세션 인그레스, 작업 폴링, 재시도)
├── auth/ # GitHub 앱 토큰 제공자
├── claude/ # Claude Code 설치, 업그레이드, 실행
├── config/ # 세션 모드 (new/resume/resume-cached/setup-only)
├── envtype/
│ ├── anthropic/ # Anthropic 호스팅 환경
│ └── byoc/ # Bring Your Own Cloud 환경
├── gitproxy/ # Git 자격 증명 프록시 서버
├── input/ # 표준 입력 파서 + 비밀 정보 처리
├── manager/ # 세션 매니저, MCP 설정, 스킬 추출
├── mcp/
│ └── servers/
│ ├── codesign/ # 코드 서명 MCP 서버
│ └── supabase/ # Supabase 통합 MCP 서버
├── orchestrator/ # 폴 루프, 훅, whoami
├── podmonitor/ # Kubernetes 리스 매니저
├── process/ # 프로세스 실행 + 스크립트 러너
├── sandbox/ # Sandbox 런타임 설정
├── session/ # 활동 기록기
├── sources/ # Git 클론 + 소스 분류
├── tunnel/ # WebSocket 터널 + 액션 핸들러
│ └── actions/
│ ├── deploy/ # ← 여기서부터 흥미로워진다
│ ├── snapshot/ # 파일 스냅샷
│ └── status/ # 상태 보고
└── util/ # Git 헬퍼, 재시도, 스트림 테일러
바이너리에서 추출한 핵심 의존성은 다음과 같습니다.
| Dependency | Purpose |
|---|---|
github.com/anthropics/anthropic/api-go | 내부 Anthropic Go SDK |
github.com/gorilla/websocket | API로 연결되는 WebSocket 터널 |
github.com/mark3labs/mcp-go v0.37.0 | Model Context Protocol |
github.com/DataDog/datadog-go v5 | 메트릭 보고 |
go.opentelemetry.io/otel v1.39.0 | 분산 추적 |
google.golang.org/grpc v1.79.0 | gRPC (세션 라우팅) |
github.com/spf13/cobra | CLI 프레임워크 |
tunnel/actions/deploy/ 패키지 내부에는 두 개의 배포 클라이언트에 대한 함수 심볼이 있습니다.

예상 가능한 쪽인 VercelClient:
CreateDeployment → POST /v13/deploymentsUploadFile → x-vercel-digest 헤더와 함께 PUT /v2/filesWaitForReady → readyState == "READY"가 될 때까지 폴링그리고 예상 밖의 AntspaceClient:
deploy.(*AntspaceClient).Deploy
deploy.(*AntspaceClient).createDeployment
deploy.(*AntspaceClient).uploadTarball
deploy.(*AntspaceClient).streamStatus
바이너리에서 관련 문자열을 추출하자 완전한 배포 프로토콜이 드러났습니다.

1단계: 배포 생성
POST to antspaceControlPlaneURL
Content-Type: application/json
Authorization: Bearer {antspaceAuthToken}
Body: { app name, metadata }
2단계: 빌드 아티팩트 업로드
POST multipart/form-data
File: dist.tar.gz (빌드된 애플리케이션)
Size limit enforced: "project exceeds %dMB limit"
3단계: 배포 상태 스트리밍
Response: application/x-ndjson (streaming)
Status progression: packaging → uploading → building → deploying → deployed
Error: "Streaming unsupported" if client can't handle NDJSON
공개 인터넷 전체에서 "Antspace"를 검색해 봐도 아무것도 나오지 않았습니다. Anthropic 웹사이트, GitHub, 블로그, 문서, LinkedIn, 채용 공고, 컨퍼런스 발표, 특허 출원까지. 검색 결과는 0건이었습니다. 이 플랫폼은 지금까지 공개적으로 어디에서도 언급된 적이 없습니다.
이 이름은 아마도 "Ant"(전해지기로는 Anthropic 직원들의 내부 별칭)와 "Space"(호스팅 공간)의 조합에서 왔을 가능성이 높으며, Heroku나 Vercel 같은 플랫폼과 유사한 명명 패턴을 따릅니다.
| Aspect | Vercel | Antspace |
|---|---|---|
| File upload | SHA 기반 중복 제거, 파일별 업로드 | 단일 tar.gz 아카이브 |
| Build | 원격 빌드 (Vercel이 빌드 수행) | 로컬 npm run build, 결과물 업로드 |
| Status | 폴링 기반 | 스트리밍 NDJSON |
| Auth | Vercel API 토큰 + Team ID | Bearer 토큰 + 동적 control plane URL |
| Public API | 있음, 문서화되어 있음 | 없음, 완전히 내부 전용 |
Anthropic이 단순히 Vercel API를 감싼 것이 아니라 처음부터 완전한 배포 프로토콜을 구축했다는 사실은, 이것이 임시 통합이 아니라 전략적 플랫폼 투자임을 시사합니다.
"Baku"는 claude.ai에서 웹 앱 빌더 경험에 붙은 내부 코드명입니다. 웹에서 Claude에게 웹 애플리케이션을 만들어 달라고 요청하면 Baku 환경이 시작됩니다.
바이너리에서 추출한 내장 리소스를 보면 다음과 같습니다.
프로젝트 템플릿:
/opt/baku-templates/vite-template/tmp/vite-dev.log에 기록Supabase 자동 프로비저닝:
다음 여섯 개 MCP 도구를 자동으로 사용할 수 있습니다.
provision_database: 필요 시 Supabase 프로젝트 생성execute_query: SQL 쿼리 실행apply_migration: 자동 타입 생성이 포함된 버전 관리 스키마 변경list_migrations: 적용된 마이그레이션 목록 조회generate_types: DB 스키마로부터 TypeScript 타입 재생성deploy_function: Supabase Edge Functions 배포환경 변수는 .env.local에 자동으로 기록됩니다.
SUPABASE_URL, SUPABASE_ANON_KEY,
VITE_SUPABASE_URL, VITE_SUPABASE_ANON_KEY
중지 훅(내장 셸 스크립트):
Baku 환경에는 다음 조건 중 하나라도 만족하면 세션 종료를 막는 pre-stop 훅이 있습니다.
tsc --noEmit가 TypeScript 타입 오류를 보고하는 경우기본 배포 대상은 Antspace이며, Vercel이 아니라 Anthropic 자체 플랫폼입니다. Vercel도 대안으로 존재하지만, Baku의 기본 배포 경로는 Anthropic의 자체 플랫폼을 통과합니다.
내부 구성:
.baku/drafts/에 저장.baku/explorations/에 저장[email protected] 사용envtype/ 패키지에는 두 가지 환경 구현이 들어 있습니다.
anthropic: Anthropic 호스팅(Firecracker MicroVM)byoc: Bring Your Own CloudBYOC를 사용하면 엔터프라이즈 고객이 Anthropic API가 세션을 오케스트레이션하는 동안, 자신의 인프라에서 environment-runner를 실행할 수 있습니다. 주요 특징은 다음과 같습니다.
resume-cached (가장 빠른 재시작, 기존 상태 재사용)containProvideAuthRoundTripper가 컨테이너 수준 자격 증명을 주입antspace(Anthropic 내부용)와 baku(Vite 프로젝트 빌더)podmonitor 패키지가 리스 관리를 구현BYOC API 표면에는 7개의 엔드포인트가 포함됩니다.
| Endpoint | Purpose |
|---|---|
/v1/environments/whoami | 신원 확인 |
| Work polling + ack | 작업 큐 |
| Session context | 설정 조회 |
| Code signing | 바이너리 검증 |
| Worker WebSocket | 실시간 터널 |
| Supabase DB query proxy | 데이터베이스 접근 중계 |
지금 우리가 보고 있는 것은 수직 통합형 AI 애플리케이션 플랫폼입니다.
사용자가 원하는 것을 설명한다 (자연어)
↓
Claude가 애플리케이션을 생성한다 (Baku 환경)
↓
Supabase 데이터베이스가 자동 프로비저닝된다 (MCP 도구)
↓
애플리케이션이 Antspace에 배포된다 (Anthropic의 PaaS)
↓
실행 중인 애플리케이션 완성, 사용자는 Anthropic 생태계를 한 번도 벗어나지 않음
이것은 단순한 AI 코딩 도우미가 아닙니다. 아이디어에서 프로덕션까지의 사용자 여정 전체가 Anthropic의 인프라 안에서 이루어지는 AI 네이티브 PaaS의 아키텍처입니다.
경쟁 측면에서의 함의는 큽니다. 이는 Anthropic을 다음과 같은 기업들과 정면으로 맞서게 합니다.
하지만 이 경쟁자들 누구도 갖지 못한 구조적 우위가 하나 있습니다. Anthropic은 전체 스택을 소유하고 있습니다. 사용자의 의도를 이해하는 LLM부터, 코드를 빌드하는 런타임, 그리고 애플리케이션을 호스팅하는 플랫폼까지 전부 말입니다.
모든 발견은 내 Claude Code 세션 내부에서 실행한 표준 Linux 도구를 통해 얻었습니다.
| Tool | Purpose |
|---|---|
strace -p 1 | PID 1의 시스템 호출 추적 |
dmesg | 하이퍼바이저 식별을 위한 커널 메시지 |
file, readelf | 바이너리 식별 |
go version -m | Go 모듈 및 빌드 정보 추출 |
go tool objdump | 심볼 테이블 및 함수 시그니처 추출 |
strings + grep | 바이너리에서 문자열 리터럴 추출 |
objdump -s -j .rodata | 원시 rodata 섹션 추출 |
바이너리는 난독화되지 않았고, 스트립되지 않았으며, 전체 디버그 정보를 포함하고 있었습니다. 디컴파일 도구는 필요하지 않았습니다. 익스플로잇도 사용하지 않았습니다. 네트워크 경계를 넘은 적도 없습니다. 그저 내 계산 환경 안에 존재하던 것을 읽었을 뿐입니다.
전체 디버그 심볼이 포함된 스트립되지 않은 바이너리를 프로덕션에 배포한다는 것은… 확실히 하나의 선택입니다. 덕분에 이번 분석은 아주 쉬워졌습니다. 원래라면 Ghidra와 몇 시간의 디컴파일이 필요했을 작업이 go tool objdump와 grep만으로 끝났습니다.
Antspace는 아직 초기 단계이거나 내부 전용 단계에 있는 것이 분명해 보입니다(버전 문자열에 staging- 접두사가 붙어 있습니다). 하지만 배포 프로토콜 자체는 성숙했고 프로덕션급입니다. Anthropic이 이것을 공개 제품으로 출시할 계획인지, 아니면 Claude 웹 경험을 위한 내부 인프라로만 유지할지는 아직 지켜봐야 합니다.
분명한 것은 Anthropic의 야심이 단순히 LLM 및 AI 에이전트 회사에 머무르지 않는다는 점입니다. 그들은 애플리케이션이 말 한마디로 탄생하는 세계를 위한 인프라를 구축하고 있으며, 그 스택의 모든 레이어를 소유하길 원합니다.
모든 분석은 2026년 3월 18일, 커널 6.18.5에서 실행되는 Firecracker MicroVM 위의 Claude Code Web 세션 내부에서, environment-runner 버전 staging-68f0dff496를 대상으로 수행되었습니다.
TABLE OF CONTENTS
© 저작권 2016-2026, APRILNEA. 모든 권리 보유.
PROD V 6.1.4