678KB 바이너리 하나로 돌아가는 AI 에이전트, nullclaw
Zig로 작성된 678KB 정적 바이너리, 1MB RAM, 2ms 미만 부팅으로 동작하는 자율형 AI 에이전트 프레임워크 nullclaw의 아키텍처와 보안 설계를 정리한다.
2026-08-12 · 최초 발행 2026-03-17
대부분의 AI 에이전트 프레임워크는 Python 런타임, 수십 개의 의존성, 수백 메가바이트의 설치 용량을 요구한다. nullclaw는 이 전제를 정면으로 뒤집는다. Zig로 컴파일된 678KB 정적 바이너리, 1MB RAM, 2밀리초 미만 부팅 시간으로 자율형 AI 에이전트를 실행하며, 런타임 의존성이 없고 libc만 있으면 동작한다.
크기가 곧 실행 가능 여부를 가르는 환경들
nullclaw는 Zig 언어로 작성된 초경량 자율형 AI 어시스턴트 프레임워크다. 단순한 CLI 챗봇이 아니라 50개 이상의 AI 프로바이더, 19개의 채널, 35개 이상의 도구, 10개의 메모리 엔진을 지원하는 완전한 에이전트 런타임이다. MCP(Model Context Protocol) 지원, 서브에이전트, 스트리밍, 음성 기능까지 담으면서도 바이너리 크기는 678KB에 머문다. "작은 것이 옳다(small is correct)"는 철학 아래, 클라우드 환경과 엣지 디바이스, 임베디드 시스템, IoT 하드웨어 어디서든 동일한 바이너리가 돌아가도록 설계됐다.
| 항목 | 일반 Python AI 프레임워크 | nullclaw |
|---|---|---|
| 바이너리/설치 크기 | 수백 MB | 678 KB |
| RAM 사용량 | 수백 MB ~ GB | 1 MB |
| 부팅 시간 | 수초 | 2ms 미만 |
| 런타임 의존성 | Python, pip 패키지 다수 | libc만 필요 |
| 배포 방식 | 가상환경, Docker 권장 | 단일 바이너리 복사 |
이 차이는 특정 환경에서 결정적이다. 메모리가 제한된 Raspberry Pi 같은 SBC(Single Board Computer), 컨테이너 이미지 크기가 중요한 서버리스 환경, 오프라인 동작이 필요한 엣지 디바이스에서 nullclaw는 Python 기반 프레임워크가 아예 실행될 수 없는 조건에서도 돌아간다.
vtable로 나눈 8개 인터페이스
nullclaw의 경량성과 확장성은 Zig의 vtable 인터페이스 패턴에서 나온다. 런타임에 동적 디스패치를 쓰면서도 불필요한 추상화 레이어를 배제해 성능과 크기를 동시에 최소화했다.
각 인터페이스는 vtable을 통해 구현체와 분리되어 있어, 새로운 프로바이더나 도구를 추가해도 코어 바이너리 크기에 영향을 주지 않는다.
| 인터페이스 | 구현체 수 | 주요 예시 |
|---|---|---|
| providers | 50개 이상 | OpenAI, Anthropic, Ollama, 로컬 모델 |
| channels | 19개 | CLI, HTTP, WebSocket, 음성, Serial |
| tools | 35개 이상 | 파일 시스템, 셸 실행, 웹 검색, MCP |
| memory | 10개 | 인메모리, SQLite, 벡터 DB, 파일 기반 |
기본 거부, 명시적 허용
AI 에이전트가 시스템에 접근할 때 생길 수 있는 권한 남용 문제는 다층 샌드박스로 다룬다. 에이전트와 호스트 시스템 사이에 명시적 페어링 과정을 거쳐 신뢰 관계를 설정하는 페어링 인증, Linux의 landlock·firejail·bubblewrap·Docker로 시스템 콜을 제한해 허용된 파일 경로와 네트워크 주소 외에는 접근하지 못하게 하는 OS 수준 격리, 기본적으로 모든 접근을 거부하고 허용 목록에 등록된 작업만 실행하도록 하는 명시적 허용 목록, 에이전트가 작업할 수 있는 디렉토리 범위를 프로젝트 밖으로 벗어나지 못하게 제한하는 워크스페이스 스코핑, API 키와 인증 토큰을 암호화해 저장하고 평문 노출이나 외부 전송을 막는 비밀 관리가 축을 이룬다. "최소 권한의 원칙"을 설계 단계에서부터 강제하는 구조다.
네이티브·Docker·WASM, 그리고 하드웨어까지
nullclaw는 세 가지 실행 환경을 지원한다. 컴파일된 정적 바이너리를 그대로 실행하는 네이티브 실행은 libc 외 의존성이 없어 대부분의 Linux, macOS 환경에서 별도 설정 없이 동작한다. 격리가 필요한 경우에는 Docker 컨테이너를 쓸 수 있는데, 이미지 크기가 매우 작아 서버리스 환경에서 콜드 스타트 지연이 최소화된다. WebAssembly로 컴파일하면 브라우저나 WASM 런타임에서도 실행할 수 있어 클라이언트 사이드 AI 에이전트 실행까지 가능해진다.
하드웨어 통합 지원은 nullclaw를 단순한 소프트웨어 에이전트 프레임워크 이상으로 만든다. AI 에이전트가 물리적 세계와 직접 상호작용하는 엣지 AI, 로보틱스, IoT 자동화 시나리오에서 활용할 수 있다.
Python도 Rust도 아닌 Zig를 고른 이유
nullclaw가 Python, Rust 대신 Zig를 선택한 것은 언어 특성이 설계 목표와 정확히 맞아떨어지기 때문이다. 가비지 컬렉터가 없고 런타임 오버헤드가 극히 낮은 컴파일 타임 메모리 관리 덕분에 1MB RAM이라는 제약을 달성할 수 있었고, 기본적으로 정적 링킹을 지원하는 빌드 시스템 덕분에 단일 바이너리 배포가 자연스럽다. C 코드와 헤더를 직접 임포트할 수 있는 상호운용성으로 기존 C 라이브러리 생태계를 활용하면서도 Zig의 안전성 특성을 유지하고, comptime을 통한 컴파일 타임 코드 실행으로 vtable 인터페이스를 런타임 오버헤드 없이 구현했다.
| 프레임워크 | 언어 | 크기 | RAM | 임베디드 지원 | 설치 복잡도 |
|---|---|---|---|---|---|
| LangChain | Python | ~수백 MB | ~수백 MB | 불가 | 높음 |
| AutoGPT | Python | ~수백 MB | ~수백 MB | 불가 | 높음 |
| crewAI | Python | ~수백 MB | ~수백 MB | 불가 | 중간 |
| nullclaw | Zig | 678 KB | 1 MB | 가능 | 매우 낮음 |
nullclaw의 포지셔닝은 기존 프레임워크의 대체재가 아니라, 기존 프레임워크가 아예 동작할 수 없는 환경을 위한 솔루션에 가깝다. 클라우드 서버에서 LangChain을 밀어낼 이유는 크지 않지만, 엣지 디바이스나 임베디드 시스템, 오프라인 환경에서는 유일한 선택지가 될 수 있다. Raspberry Pi의 GPIO를 제어하고 Arduino와 통신하고 WASM으로 브라우저에서 실행되는 AI 에이전트는, 소프트웨어 세계를 넘어 물리적 세계와 AI를 통합하려는 방향을 보여준다.