TRENDSHIFT #1 딥다이브 · 2026-04-02 분석

Claw Code 딥다이브
— Claude Code를 Rust로 클린룸 재구현한 역대 최단시간 100K 스타 에이전트 CLI

2026년 3월 Claude Code 소스 유출 사건 후 클린룸 방식으로 Rust + Python 재구현. 역대 최단시간 GitHub 100K+ 스타 기록. 다중 모델 제공자(Anthropic, OpenAI 호환, Grok), unsafe 코드 완전 금지, MCP 전 전송 방식 지원. (저장소: ultraworkers/claw-code · ⭐117K+ · MIT)
목차
  1. 프로젝트 한줄 요약
  2. 왜 주목받는가
  3. 기술 스택 전체 지도
  4. 아키텍처 심화 분석
  5. 디렉토리 구조 해부
  6. 학습 포인트 (기술별)
  7. 하드웨어 / 시스템 요구사항
  8. 직접 해볼 수 있는 실습 과제
  9. 관련 기술 심화 학습 로드맵
  10. 핵심 키워드 사전
  11. 참고 링크

1프로젝트 한줄 요약

Claw Code가 정확히 무엇을 하는 도구인가

Claw Code는 Claude Code의 아키텍처를 Rust와 Python으로 클린룸 재구현한 에이전트 코딩 CLI 도구다. 소스 유출 사건 이후 "단순 아카이브가 아니라 실제로 동작하는 도구를 만들자"는 목표로 탄생했으며, 역대 최단시간 GitHub 100K+ 스타를 기록했다.

한 컷 비유

"레시피 공개된 뒤 셰프들이 더 안전한 재료(Rust)로 직접 만든 오리지널 요리"

Claude Code의 소스코드가 실수로 공개되자 수천 개의 포크가 생겼습니다. 대부분은 단순 복사본이었지만, Claw Code는 달랐습니다. 원본 레시피(아키텍처)를 보고 더 안전한 재료(Rust + unsafe 금지)로 처음부터 다시 요리한 것입니다.

핵심 차이는 Provider 추상화입니다. Claude Code는 Anthropic API 전용이지만, Claw Code는 전략 패턴으로 Anthropic, OpenAI 호환, Grok을 같은 코드로 다룰 수 있습니다.

2왜 주목받는가

트렌딩 이유와 경쟁 도구 대비 강점
기존 상황의 문제
Claude Code 소스 유출 → 단순 포크의 홍수, 법적 위험

2026년 3월 31일 Anthropic이 DMCA 요청을 8,100+개 레포에 보냈다. 단순 복사 포크는 법적으로 삭제됐지만, 클린룸 재구현(rewrite)은 살아남았다.

Claw Code의 해법
클린룸 재구현 + Rust + 다중 모델 제공자

원본 소스를 직접 참조하지 않고, 공개된 동작/스펙만 보고 처음부터 재구현. MIT 라이선스로 누구나 포크/수정 가능. unsafe 코드 완전 금지로 메모리 안전성 보장.

경쟁 도구 비교

비교 항목Claude Code (원본)OpenAI Codex CLIClaw Code
언어TypeScript/ShellRustRust (메모리 안전 + 고성능)
모델 제공자Anthropic 전용OpenAI 전용다중 제공자 (Anthropic, OpenAI 호환, Grok)
오픈소스비공개Apache-2.0MIT 라이선스
MCP 지원클라이언트클라이언트+서버Stdio, WebSocket, Remote
unsafe 정책없음일부 허용완전 금지 (forbid)

3기술 스택 전체 지도

Rust 워크스페이스 · Python 검증 레이어 · 인프라

Rust 워크스페이스 (핵심 런타임)

┌─────────────────────────────────────────────────┐ │ Rust 기술 스택 │ ├─────────────────────────────────────────────────┤ │ 언어 │ Rust (Edition 2021, Stable) │ │ 빌드 │ Cargo (Workspace, Resolver v2) │ │ 비동기 런타임 │ Tokio 1.x (multi-thread) │ │ HTTP 서버 │ Axum 0.8 │ │ HTTP 클라이언트│ Reqwest 0.12 (rustls-tls) │ │ 직렬화 │ Serde 1.x + serde_json │ │ 터미널 UI │ Crossterm 0.28 + Rustyline 15 │ │ 마크다운 │ pulldown-cmark 0.13 │ │ 구문 강조 │ Syntect 5 │ │ 해싱 │ sha2 0.10 │ │ 보안 정책 │ unsafe_code = "forbid" │ └─────────────────────────────────────────────────┘

Python 워크스페이스 (포팅 검증용)

요소설명
Python 3.10+dataclasses, typing 활용
목적아키텍처 검증 & 포팅 상태 추적
패턴Frozen Dataclasses, CLI 진입점
테스트unittest discover

인프라 & CI/CD

요소설명
CI/CDGitHub Actions
대상 플랫폼macOS, Linux (Windows 미완성)
배포 방식소스 빌드 (cargo install)
코드 품질clippy (all=warn, pedantic=allow 억제), rustfmt

4아키텍처 심화 분석

11개 크레이트 모노레포 · Provider 추상화 · MCP · Sandbox

시스템 구조도

사용자 입력 │ ▼ ┌──────────────────────────────────────────────────────────┐ │ rusty-claude-cli (바이너리 크레이트) │ │ Rustyline(REPL) + Crossterm(터미널UI) + pulldown-cmark │ │ │ │ │ commands 크레이트 ← /help /session /compact /config │ └───────────┬──────────────────────────────────────────────┘ ▼ ┌──────────────────────────────────────────────────────────┐ │ runtime 크레이트 (핵심 엔진) │ │ Session Manager | Conversation Runtime | Config Loader │ │ OAuth Flow | Permission Policy | Hook Runner │ │ │ │ MCP 서브시스템 │ │ McpServer Manager | McpTool | McpResource │ │ Stdio | WebSocket | Remote │ │ │ │ 실행 환경 │ │ Sandbox Executor | Bash Runner | File Ops(R/W/Edit) │ └────────────┬──────────────────────┬───────────────────────┘ │ │ ┌────────▼──────┐ ┌──────────▼──────────┐ │ api 크레이트 │ │ tools 크레이트 │ │ │ │ 도구 매니페스트 + 실행 │ │ Providers │ └─────────────────────┘ │ ClawProvider │ │ OpenAI Compat│ ┌─────────────────────┐ │ │ │ plugins 크레이트 │ │ SSE Stream │ │ 발견 + 레지스트리 + 훅│ └───────────────┘ └─────────────────────┘ │ ▼ LLM API (Anthropic | OpenAI 호환 | Grok)

설계 패턴 ①: Workspace 모노레포 (11개 크레이트)

핵심 패턴
단일 책임 원칙(SRP) + path 의존성
각 크레이트가 하나의 역할만 담당. path = "../runtime" 같은 로컬 의존성으로 연결. workspace.dependencies로 버전 통일 관리. 순환 참조 방지.

설계 패턴 ②: Provider 추상화 (Strategy 패턴)

api 크레이트의 providers/ 디렉토리에 anthropic.rsopenai_compat.rs가 분리되어 있다. Grok(xAI)는 별도 파일 없이 openai_compat.rsOpenAiCompatConfig로 처리된다(xAI 전용 URL·env var 포함). 새로운 LLM 제공자를 추가하려면 이 디렉토리에 파일 하나만 추가하면 된다. 전형적인 Strategy 패턴이다.

설계 패턴 ③: MCP 프로토콜 통합

runtime 크레이트의 MCP 파일 구조: mcp.rs → 프로토콜 정의 (JsonRpc Request/Response/Error) mcp_client.rs → 클라이언트 로직 mcp_stdio.rs → 표준입출력 기반 통신 (자식 프로세스와 연결) 지원 전송 방식: Stdio | WebSocket | Remote

설계 패턴 ④: Sandbox 실행 모델

sandbox.rs가 유일한 public 모듈인 점이 인상적이다. 이는 모든 외부 코드 실행이 샌드박스를 통해야 한다는 설계 의도를 나타낸다. 파일 작업(file_ops.rs)이나 bash 실행(bash.rs)도 샌드박스 컨텍스트 안에서 이루어진다.

설계 패턴 ⑤: Hook 시스템

hooks.rsHookRunner가 도구 실행 전후에 사용자 정의 로직을 주입할 수 있다. Claude Code의 훅 시스템과 동일한 패턴으로, 프리/포스트 실행 단계에서 검증이나 로깅을 수행한다.

5디렉토리 구조 해부

src/ (Python) + rust/crates/ (핵심) 이중 구조
ultraworkers/claw-code/ ├── src/ # 🐍 Python 워크스페이스 (포팅 검증) │ ├── main.py # CLI 진입점 (summary, manifest 명령) │ ├── models.py # 데이터 모델 (Subsystem, PortingModule 등) │ ├── runtime.py # 런타임 상태 관리 │ ├── session_store.py # 세션 영속화 │ ├── permissions.py # 권한 관리 │ ├── cost_tracker.py # 토큰 비용 추적 │ └── ... (28개 서브디렉토리) │ ├── rust/ # 🦀 Rust 워크스페이스 (핵심) │ ├── Cargo.toml # 워크스페이스 매니페스트 │ └── crates/ │ ├── rusty-claude-cli/ # 사용자 인터페이스 (바이너리 `claw`) │ │ └── src/main.rs # REPL + 명령어 라우팅 │ ├── api/ # API 클라이언트 │ │ └── src/ │ │ ├── client.rs # HTTP 클라이언트 추상화 │ │ ├── sse.rs # SSE 스트림 │ │ └── providers/ # LLM 제공자별 구현 │ │ ├── anthropic.rs # Anthropic 호환 │ │ └── openai_compat.rs # OpenAI 호환 (Grok/xAI 포함) │ ├── runtime/ # 핵심 런타임 엔진 │ │ └── src/ │ │ ├── session.rs # 세션 생명주기 │ │ ├── conversation.rs # 대화 런타임 루프 │ │ ├── permissions.rs # 권한 정책 │ │ ├── hooks.rs # 훅 실행기 │ │ ├── sandbox.rs # 샌드박스 (유일한 pub) │ │ ├── bash.rs # Bash 명령 실행 │ │ ├── file_ops.rs # 파일 읽기/쓰기/편집 │ │ ├── mcp.rs # MCP 프로토콜 정의 │ │ ├── oauth.rs # OAuth 인증 흐름 │ │ └── compact.rs # 대화 압축 │ ├── tools/ # 빌트인 도구 │ ├── commands/ # 슬래시 명령어 │ ├── plugins/ # 플러그인 시스템 │ ├── claw-rag-service/ # RAG 서비스 (Axum 0.8 기반) │ ├── claw-analog/ # 미니 에이전트 하네스 │ ├── telemetry/ # 텔레메트리 │ ├── mock-anthropic-service/ # 테스트용 모의 서버 │ └── compat-harness/ # 호환성 레이어 │ └── tests/ # 테스트 스위트

6학습 포인트 (기술별)

이 레포에서 무엇을 배울 수 있는가

Rust 학습

배울 것어디서왜 중요한가
Cargo Workspace 설계rust/Cargo.toml대규모 Rust 프로젝트의 표준 구조. resolver v2, 공유 의존성 관리
Tokio 비동기 런타임runtime 크레이트 전체LLM API 호출, MCP 통신 등 모두 async/await 기반
Axum 웹 프레임워크server 크레이트tower 생태계 위의 현대적 Rust 웹 서버 구축법
Reqwest + SSEapi/src/sse.rsLLM 스트리밍 응답을 처리하는 실전 패턴
unsafe 금지 정책Cargo.toml 린트 설정unsafe_code = "forbid" — 프로덕션 안전성 확보
Clippy 린트 설정워크스페이스 린트all=warn으로 기본 규칙 강제, pedantic=allow로 과도한 경고 억제 — 실용적 품질 균형

MCP (Model Context Protocol)

배울 것어디서왜 중요한가
JSON-RPC 프로토콜runtime/mcp.rsMCP의 통신 기반
Stdio 전송 계층runtime/mcp_stdio.rs프로세스 간 통신(IPC) 구현
도구 매니페스트tools/src/lib.rsLLM이 도구를 발견하고 호출하는 스키마

CLI / 터미널 UX

REPL 구현: claw-cli + Rustyline으로 대화형 CLI 구축 패턴. 터미널 제어: Crossterm으로 색상, 커서, 키 입력 처리. 마크다운 렌더링: pulldown-cmark + Syntect로 터미널에서 코드 구문 강조 출력.

7하드웨어 / 시스템 요구사항

Rust 빌드 환경 포함
항목최소 사양권장 사양
OSLinux (glibc 2.17+) 또는 macOSmacOS (Apple Silicon) 또는 최신 Linux
RustStable 툴체인 (1.70+)최신 Stable
메모리2GB (빌드 시)4GB+
디스크500MB (빌드 아티팩트)1GB
네트워크LLM API 접속 필요안정적인 인터넷
API 키Anthropic 또는 OpenAI 호환 키여러 제공자 키
Windows미완성 (Linux WSL2 권장)

8직접 해볼 수 있는 실습 과제

난이도별 5가지 과제
과제 1

빌드하고 실행해보기 ★ 입문 30분

git clone https://github.com/ultraworkers/claw-code.git
cd claw-code/rust
cargo build --release -p claw-cli
./target/release/claw
Anthropic API 키를 설정하고 간단한 대화를 나눠보자. REPL에서 /help 명령어로 사용 가능한 슬래시 명령어를 확인한다.
과제 2

Python 포팅 상태 확인 ★ 입문 30분

cd claw-code
python3 -m src.main summary
python3 -m src.main manifest
Python 워크스페이스가 원본의 어느 부분까지 재현했는지 확인하고, models.py의 데이터클래스 구조를 분석해보자.
과제 3

새로운 Provider 추가하기 ★★ 중급 2~4시간

rust/crates/api/src/providers/ 디렉토리에 ollama_provider.rs를 추가해서 로컬 Ollama 서버와 통신하는 제공자를 구현한다.

openai_compat.rs의 패턴을 참고하면 된다. SSE 스트리밍 응답 처리와 토큰 카운팅 로직에 집중할 것.
과제 4

커스텀 슬래시 명령어 만들기 ★★ 중급 2~4시간

commands 크레이트에 /stats 명령어를 추가한다. 현재 세션의 토큰 사용량(usage.rs)을 예쁘게 출력하는 기능이다.

Crossterm으로 컬러 출력, 테이블 형식 사용. usage.rs에서 입력/출력 토큰 합산하고 예상 비용 계산 추가.
과제 5

MCP 서버 연동 구현 ★★★ 고급 1~2일

runtime의 MCP 서브시스템을 활용해서 외부 MCP 서버(예: 파일 시스템 서버)를 연결하고, REPL에서 MCP 도구를 호출할 수 있도록 E2E 파이프라인을 완성한다.

단계: (1) MCP 서버 설정 파일 구성 (2) McpServerManager에 서버 등록 (3) REPL에서 MCP 도구 목록 확인 명령 추가 (4) 도구 호출 및 결과 표시

9관련 기술 심화 학습 로드맵

6주 Rust + 에이전트 CLI 학습 플랜

1주차: Rust 기초 다지기

The Rust Book 1~10장 (소유권, 라이프타임, 제네릭), rustlings 연습 문제 풀기, 간단한 CLI 도구 하나 만들어보기 (clap 사용).

2주차: 비동기 프로그래밍

Tokio 공식 튜토리얼 (mini-redis 예제), async/await 심화 — Pin, Future 트레이트 이해, claw-code의 runtime 크레이트 코드 리딩.

3주차: 웹 서버 & API 클라이언트

Axum 공식 예제 따라하기, Reqwest로 LLM API 호출하는 미니 프로젝트, SSE(Server-Sent Events) 스트리밍 구현, claw-code의 api, server 크레이트 분석.

4주차: MCP & 에이전트 아키텍처

MCP 스펙 문서 읽기 (modelcontextprotocol.io), 간단한 MCP 서버/클라이언트 구현, JSON-RPC 2.0 프로토콜 이해, claw-code의 MCP 서브시스템 코드 리딩.

5주차: 플러그인 시스템 & 확장성

Rust의 동적 디스패치 (dyn Trait) vs 정적 디스패치, 플러그인 레지스트리 패턴 구현, claw-code의 plugins 크레이트 분석 + 자체 플러그인 작성.

6주차: 종합 프로젝트

배운 것을 합쳐서 "나만의 에이전트 CLI" 제작. Provider 추상화 + MCP 도구 + REPL + 샌드박스 실행. GitHub에 공개하고 README 작성.

10핵심 키워드 사전

이 레포를 이해하는 데 꼭 필요한 용어들
키워드설명
Clean-room Implementation원본 소스를 직접 참조하지 않고, 공개된 동작/스펙만 보고 처음부터 재구현하는 방식. 저작권 분쟁을 피하기 위한 소프트웨어 개발 기법
Agent HarnessAI 에이전트를 "말 끌채"처럼 제어하는 도구. 사용자 입력 → LLM 호출 → 도구 실행 → 결과 반환의 루프를 관리
MCPModel Context Protocol. LLM이 외부 도구/데이터 소스와 표준화된 방식으로 통신하는 규격. JSON-RPC 2.0 기반
REPLRead-Eval-Print Loop. 사용자 입력을 읽고(Read), 실행하고(Eval), 결과를 출력(Print)하는 대화형 루프
SSEServer-Sent Events. 서버에서 클라이언트로 실시간 단방향 스트리밍. LLM의 토큰 단위 스트리밍 응답에 사용
Cargo Workspace여러 Rust 크레이트를 하나의 프로젝트로 묶어 관리하는 방식. 의존성과 빌드 설정을 공유
TokioRust의 비동기 런타임. async/await 코드를 멀티스레드에서 효율적으로 실행
AxumTower 서비스 위에 구축된 Rust 웹 프레임워크. 타입 안전하고 컴파일 타임에 라우팅 검증
SerdeRust의 직렬화/역직렬화 프레임워크. #[derive(Serialize, Deserialize)]로 자동 구현
OAuth + PKCEProof Key for Code Exchange. 공개 클라이언트(CLI 등)에서 안전하게 OAuth 인증을 수행하는 확장
Strategy 패턴알고리즘을 캡슐화하여 런타임에 교체 가능하게 하는 디자인 패턴. Provider별 구현이 대표적
ClippyRust의 정적 분석 도구. all=warn으로 기본 규칙을 강제하고, pedantic은 allow(억제)로 설정해 과도한 경고를 방지하는 실용적 구성
LSPLanguage Server Protocol. 에디터와 언어 서버 간 통신 프로토콜. 코드 완성, 정의 이동 등을 표준화
DMCADigital Millennium Copyright Act. 저작권 침해 콘텐츠의 삭제를 요청하는 미국 법률
Sandbox코드 실행을 격리된 환경에서 수행하여 시스템 안전성을 보장하는 기법
rustfmtRust 코드 포매터. 팀 전체의 코드 스타일 통일에 사용

11참고 링크

더 깊이 파고들 때 유용한 자료들