Claw Code는 Claude Code의 아키텍처를 Rust와 Python으로 클린룸 재구현한 에이전트 코딩 CLI 도구다. 소스 유출 사건 이후 "단순 아카이브가 아니라 실제로 동작하는 도구를 만들자"는 목표로 탄생했으며, 역대 최단시간 GitHub 100K+ 스타를 기록했다.
Claude Code의 소스코드가 실수로 공개되자 수천 개의 포크가 생겼습니다. 대부분은 단순 복사본이었지만, Claw Code는 달랐습니다. 원본 레시피(아키텍처)를 보고 더 안전한 재료(Rust + unsafe 금지)로 처음부터 다시 요리한 것입니다.
핵심 차이는 Provider 추상화입니다. Claude Code는 Anthropic API 전용이지만, Claw Code는 전략 패턴으로 Anthropic, OpenAI 호환, Grok을 같은 코드로 다룰 수 있습니다.
2026년 3월 31일 Anthropic이 DMCA 요청을 8,100+개 레포에 보냈다. 단순 복사 포크는 법적으로 삭제됐지만, 클린룸 재구현(rewrite)은 살아남았다.
원본 소스를 직접 참조하지 않고, 공개된 동작/스펙만 보고 처음부터 재구현. MIT 라이선스로 누구나 포크/수정 가능. unsafe 코드 완전 금지로 메모리 안전성 보장.
| 비교 항목 | Claude Code (원본) | OpenAI Codex CLI | Claw Code |
|---|---|---|---|
| 언어 | TypeScript/Shell | Rust | Rust (메모리 안전 + 고성능) |
| 모델 제공자 | Anthropic 전용 | OpenAI 전용 | 다중 제공자 (Anthropic, OpenAI 호환, Grok) |
| 오픈소스 | 비공개 | Apache-2.0 | MIT 라이선스 |
| MCP 지원 | 클라이언트 | 클라이언트+서버 | Stdio, WebSocket, Remote |
| unsafe 정책 | 없음 | 일부 허용 | 완전 금지 (forbid) |
| 요소 | 설명 |
|---|---|
| Python 3.10+ | dataclasses, typing 활용 |
| 목적 | 아키텍처 검증 & 포팅 상태 추적 |
| 패턴 | Frozen Dataclasses, CLI 진입점 |
| 테스트 | unittest discover |
| 요소 | 설명 |
|---|---|
| CI/CD | GitHub Actions |
| 대상 플랫폼 | macOS, Linux (Windows 미완성) |
| 배포 방식 | 소스 빌드 (cargo install) |
| 코드 품질 | clippy (all=warn, pedantic=allow 억제), rustfmt |
path = "../runtime" 같은 로컬 의존성으로 연결. workspace.dependencies로 버전 통일 관리. 순환 참조 방지.api 크레이트의 providers/ 디렉토리에 anthropic.rs와 openai_compat.rs가 분리되어 있다. Grok(xAI)는 별도 파일 없이 openai_compat.rs 내 OpenAiCompatConfig로 처리된다(xAI 전용 URL·env var 포함). 새로운 LLM 제공자를 추가하려면 이 디렉토리에 파일 하나만 추가하면 된다. 전형적인 Strategy 패턴이다.
sandbox.rs가 유일한 public 모듈인 점이 인상적이다. 이는 모든 외부 코드 실행이 샌드박스를 통해야 한다는 설계 의도를 나타낸다. 파일 작업(file_ops.rs)이나 bash 실행(bash.rs)도 샌드박스 컨텍스트 안에서 이루어진다.
hooks.rs의 HookRunner가 도구 실행 전후에 사용자 정의 로직을 주입할 수 있다. Claude Code의 훅 시스템과 동일한 패턴으로, 프리/포스트 실행 단계에서 검증이나 로깅을 수행한다.
| 배울 것 | 어디서 | 왜 중요한가 |
|---|---|---|
| Cargo Workspace 설계 | rust/Cargo.toml | 대규모 Rust 프로젝트의 표준 구조. resolver v2, 공유 의존성 관리 |
| Tokio 비동기 런타임 | runtime 크레이트 전체 | LLM API 호출, MCP 통신 등 모두 async/await 기반 |
| Axum 웹 프레임워크 | server 크레이트 | tower 생태계 위의 현대적 Rust 웹 서버 구축법 |
| Reqwest + SSE | api/src/sse.rs | LLM 스트리밍 응답을 처리하는 실전 패턴 |
| unsafe 금지 정책 | Cargo.toml 린트 설정 | unsafe_code = "forbid" — 프로덕션 안전성 확보 |
| Clippy 린트 설정 | 워크스페이스 린트 | all=warn으로 기본 규칙 강제, pedantic=allow로 과도한 경고 억제 — 실용적 품질 균형 |
| 배울 것 | 어디서 | 왜 중요한가 |
|---|---|---|
| JSON-RPC 프로토콜 | runtime/mcp.rs | MCP의 통신 기반 |
| Stdio 전송 계층 | runtime/mcp_stdio.rs | 프로세스 간 통신(IPC) 구현 |
| 도구 매니페스트 | tools/src/lib.rs | LLM이 도구를 발견하고 호출하는 스키마 |
REPL 구현: claw-cli + Rustyline으로 대화형 CLI 구축 패턴. 터미널 제어: Crossterm으로 색상, 커서, 키 입력 처리. 마크다운 렌더링: pulldown-cmark + Syntect로 터미널에서 코드 구문 강조 출력.
| 항목 | 최소 사양 | 권장 사양 |
|---|---|---|
| OS | Linux (glibc 2.17+) 또는 macOS | macOS (Apple Silicon) 또는 최신 Linux |
| Rust | Stable 툴체인 (1.70+) | 최신 Stable |
| 메모리 | 2GB (빌드 시) | 4GB+ |
| 디스크 | 500MB (빌드 아티팩트) | 1GB |
| 네트워크 | LLM API 접속 필요 | 안정적인 인터넷 |
| API 키 | Anthropic 또는 OpenAI 호환 키 | 여러 제공자 키 |
| Windows | 미완성 (Linux WSL2 권장) | — |
git clone https://github.com/ultraworkers/claw-code.git
cd claw-code/rust
cargo build --release -p claw-cli
./target/release/claw
cd claw-code
python3 -m src.main summary
python3 -m src.main manifest
rust/crates/api/src/providers/ 디렉토리에 ollama_provider.rs를 추가해서 로컬 Ollama 서버와 통신하는 제공자를 구현한다.
commands 크레이트에 /stats 명령어를 추가한다. 현재 세션의 토큰 사용량(usage.rs)을 예쁘게 출력하는 기능이다.
runtime의 MCP 서브시스템을 활용해서 외부 MCP 서버(예: 파일 시스템 서버)를 연결하고, REPL에서 MCP 도구를 호출할 수 있도록 E2E 파이프라인을 완성한다.
The Rust Book 1~10장 (소유권, 라이프타임, 제네릭), rustlings 연습 문제 풀기, 간단한 CLI 도구 하나 만들어보기 (clap 사용).
Tokio 공식 튜토리얼 (mini-redis 예제), async/await 심화 — Pin, Future 트레이트 이해, claw-code의 runtime 크레이트 코드 리딩.
Axum 공식 예제 따라하기, Reqwest로 LLM API 호출하는 미니 프로젝트, SSE(Server-Sent Events) 스트리밍 구현, claw-code의 api, server 크레이트 분석.
MCP 스펙 문서 읽기 (modelcontextprotocol.io), 간단한 MCP 서버/클라이언트 구현, JSON-RPC 2.0 프로토콜 이해, claw-code의 MCP 서브시스템 코드 리딩.
Rust의 동적 디스패치 (dyn Trait) vs 정적 디스패치, 플러그인 레지스트리 패턴 구현, claw-code의 plugins 크레이트 분석 + 자체 플러그인 작성.
배운 것을 합쳐서 "나만의 에이전트 CLI" 제작. Provider 추상화 + MCP 도구 + REPL + 샌드박스 실행. GitHub에 공개하고 README 작성.
| 키워드 | 설명 |
|---|---|
| Clean-room Implementation | 원본 소스를 직접 참조하지 않고, 공개된 동작/스펙만 보고 처음부터 재구현하는 방식. 저작권 분쟁을 피하기 위한 소프트웨어 개발 기법 |
| Agent Harness | AI 에이전트를 "말 끌채"처럼 제어하는 도구. 사용자 입력 → LLM 호출 → 도구 실행 → 결과 반환의 루프를 관리 |
| MCP | Model Context Protocol. LLM이 외부 도구/데이터 소스와 표준화된 방식으로 통신하는 규격. JSON-RPC 2.0 기반 |
| REPL | Read-Eval-Print Loop. 사용자 입력을 읽고(Read), 실행하고(Eval), 결과를 출력(Print)하는 대화형 루프 |
| SSE | Server-Sent Events. 서버에서 클라이언트로 실시간 단방향 스트리밍. LLM의 토큰 단위 스트리밍 응답에 사용 |
| Cargo Workspace | 여러 Rust 크레이트를 하나의 프로젝트로 묶어 관리하는 방식. 의존성과 빌드 설정을 공유 |
| Tokio | Rust의 비동기 런타임. async/await 코드를 멀티스레드에서 효율적으로 실행 |
| Axum | Tower 서비스 위에 구축된 Rust 웹 프레임워크. 타입 안전하고 컴파일 타임에 라우팅 검증 |
| Serde | Rust의 직렬화/역직렬화 프레임워크. #[derive(Serialize, Deserialize)]로 자동 구현 |
| OAuth + PKCE | Proof Key for Code Exchange. 공개 클라이언트(CLI 등)에서 안전하게 OAuth 인증을 수행하는 확장 |
| Strategy 패턴 | 알고리즘을 캡슐화하여 런타임에 교체 가능하게 하는 디자인 패턴. Provider별 구현이 대표적 |
| Clippy | Rust의 정적 분석 도구. all=warn으로 기본 규칙을 강제하고, pedantic은 allow(억제)로 설정해 과도한 경고를 방지하는 실용적 구성 |
| LSP | Language Server Protocol. 에디터와 언어 서버 간 통신 프로토콜. 코드 완성, 정의 이동 등을 표준화 |
| DMCA | Digital Millennium Copyright Act. 저작권 침해 콘텐츠의 삭제를 요청하는 미국 법률 |
| Sandbox | 코드 실행을 격리된 환경에서 수행하여 시스템 안전성을 보장하는 기법 |
| rustfmt | Rust 코드 포매터. 팀 전체의 코드 스타일 통일에 사용 |