내버려두면 모든 소프트웨어 프로젝트가 따르는 그래프가 있다. 코드 줄 수가 올라간다. 의존성이 올라간다. 빌드 시간이 올라간다. 전체 시스템을 이해하는 사람 수가 내려간다. 어느 시점에서 프로젝트는 한 사람이 전체를 머릿속에 담을 수 없는 임계점을 넘고, 그 시점부터 모든 변경은 완전히 볼 수 없는 복잡성과의 협상이다.
대부분의 AI 에이전트 프레임워크는 그 임계점을 몇 년 전에 넘었다. LangChain은 수만 줄의 핵심 코드를 가지고 있다. OpenClaw의 node_modules에는 1,200개 이상의 패키지가 포함되어 있다. "미니멀" 프레임워크조차 도구 실행 엔진, 프로바이더 추상화 계층, 플러그인 시스템, 설정 파서를 세면 수천 줄이 되는 경향이 있다.
NanoClaw의 핵심은 대략 500줄의 TypeScript다. 기능이 적어서가 아니다 — WhatsApp 메시징, 컨테이너 격리, 영구 메모리, 예약 작업, 에이전트 스웜, 웹 브라우징을 지원한다. 복잡성이 어디에 있어야 하는지에 대해 다른 베팅을 하기 때문이다.
복잡성은 어딘가에 있어야 한다
"적은 코드" 논거의 솔직한 버전은 NanoClaw가 복잡성을 제거했다는 게 아니다. NanoClaw가 복잡성을 더 잘 관리되는 곳으로 옮겼다는 것이다.
에이전트 루프 — 메시지를 받고, 어떤 도구를 사용할지 결정하고, 도구를 실행하고, 오류를 처리하고, 멀티턴 대화를 관리하는 것 — 는 복잡하다. 대부분의 프레임워크에서 이 복잡성은 프레임워크 유지보수자가 작성하고 당신이 신뢰하고, 디버그하고, 업데이트해야 하는 애플리케이션 코드에 있다. NanoClaw에서 이 복잡성은 Anthropic 엔지니어링 팀이 유지하고, Claude의 실제 동작에 대해 테스트하고, 모델과 동기화하여 업데이트하는 Claude Agent SDK에 있다.
도구 실행 — 웹 브라우징, 파일 접근, 셸 명령 — 은 복잡하다. 대부분의 프레임워크에서 각 도구는 자체 오류 처리, 자체 재시도 로직, 자체 보안 모델을 가진 커스텀 구현이다. NanoClaw에서 도구는 컨테이너 안의 Claude Code가 제공한다. 도구 구현은 Anthropic이 유지하며, 수천 명의 개발자가 Claude Code CLI를 통해 매일 사용하는 것과 같은 도구다.
보안 모델 — 샌드박싱, 권한 시행, 시크릿 관리 — 은 복잡하다. 대부분의 프레임워크에서 보안은 버그가 있을 수 있는 애플리케이션 수준 코드다. NanoClaw에서 보안은 운영체제가 시행하는 컨테이너 격리다. Apple Container와 Docker는 수천 명의 엔지니어에 의해 수년간 강화되었다. NanoClaw의 80줄 컨테이너 오케스트레이션 코드는 그 투자를 복제하려 하지 않고 활용한다.
패턴은 일관적이다: NanoClaw의 500줄은 잘 유지되고 잘 테스트된 컴포넌트를 연결하는 오케스트레이션 계층이다. 복잡성은 존재하지만, 어떤 단일 오픈소스 프로젝트보다 더 많은 리소스와 전문성을 가진 팀이 유지하는 컴포넌트에 있다.
500줄로 할 수 있는 것
500줄이 가능하게 하는 기능은 대부분의 사람들이 예상하는 것보다 넓다 — 기능이 NanoClaw의 코드가 아닌 컴포넌트에서 오기 때문이다.
웹 브라우징은 컨테이너 이미지에 Chromium과 agent-browser가 포함되어 있어 작동한다. NanoClaw는 브라우저를 구현하지 않는다 — 컨테이너에 마운트한다. 파일 접근은 컨테이너에 마운트된 파일시스템이 있어 작동한다. NanoClaw는 파일 I/O를 구현하지 않는다 — 어떤 경로가 사용 가능한지 설정한다. 에이전트 스웜은 Claude Code가 에이전트 위임을 네이티브로 지원하여 작동한다. NanoClaw는 멀티 에이전트 오케스트레이션을 구현하지 않는다 — 컨테이너를 생성하고 Claude가 조율하게 한다.
500줄은 NanoClaw의 사용 사례에 특화된 것들을 처리한다: Baileys를 통한 WhatsApp 메시지 수신, SQLite에서 그룹 상태 조회, 적절한 마운트를 가진 적절한 컨테이너 생성, stdin을 통한 시크릿 전달, IPC를 통한 응답 수집, WhatsApp으로의 전달. 이것이 NanoClaw를 제품으로 정의하는 결정들이다 — 사용자를 AI 에이전트에 안전하고 편리하게 연결하는 방법에 대한 선택.
나머지는 모두 더 잘하는 컴포넌트에 위임된다. 이것은 게으름이 아니다. 작성하지 않는 코드가 최고의 코드라는 인식이다 — 작성하지 않은 코드에는 버그가 없고, 유지보수가 필요 없으며, 보안 취약점을 만들지 않기 때문이다.
유지보수 배당금
작은 코드베이스의 실질적 이점은 처음에는 명확하지 않은 방식으로 시간이 지남에 따라 복리로 쌓인다.
Anthropic이 개선된 도구 사용을 가진 Claude Agent SDK 새 버전을 출시하면, NanoClaw는 하나의 의존성을 업데이트하여 개선을 얻는다. 업데이트할 추상화 계층도, 다시 작성할 어댑터도, 확인할 호환성 매트릭스도 없다. SDK가 직접 사용되므로, SDK 개선이 즉시 흘러들어온다.
컨테이너 런타임에서 보안 취약점이 발견되면, 수정은 Docker나 Apple Container를 업데이트하는 것이지 NanoClaw의 코드를 패치하는 것이 아니다. 보안 경계는 작은 오픈소스 프로젝트가 아닌 Apple과 Docker의 인프라 팀이 유지한다.
새 기여자가 코드베이스를 이해하고 싶을 때, 한 시간 안에 500줄 전체를 읽을 수 있다. 플러그인 시스템, 프로바이더 추상화, 도구 실행 프레임워크를 이해할 필요가 없다. 전체 아키텍처가 하나의 멘탈 모델에 들어간다: WhatsApp에서 메시지가 들어오고, 컨테이너가 Claude로 처리하고, 응답이 WhatsApp으로 돌아간다.
이것이 최소 코드의 유지보수 배당금이다. 작성하지 않는 모든 줄은 디버그하지 않고, 문서화하지 않고, 새 기여자에게 설명하지 않고, 세상이 변할 때 패치하지 않는 줄이다.
적은 것이 실제로 많은 것일 때
500줄 철학이 보편적으로 적용되는 것은 아니다. 특정 비즈니스 로직을 가진 커스텀 AI 애플리케이션을 만든다면, 그 로직을 표현할 수 있는 프레임워크가 필요하다 — LangChain, CrewAI, 또는 유사한 도구. Claude Agent SDK가 다루지 않는 AI 제공업체를 지원해야 한다면, 프로바이더 추상화 계층이 필요하다. 비기술 사용자를 위한 플러그인 생태계가 필요하다면, 플러그인 시스템이 필요하다.
NanoClaw의 베팅은 더 좁다: 채팅 채널에 연결하고, 컨테이너에서 안전하게 실행하고, 공식 SDK를 통해 Claude의 기능을 활용하는 개인 AI 어시스턴트에게 500줄은 충분한 것이 아니라 최적이다. 그 이상의 모든 줄은 사용자에게 도움이 되지 않는 복잡성, 제품을 개선하지 않는 유지보수 부담, 존재할 필요가 없는 공격 표면이 될 것이다.
소프트웨어 업계에는 더 많은 것을 향한 깊은 편향이 있다. 더 많은 기능, 더 많은 추상화, 더 많은 설정 옵션, 더 많은 코드 줄. 더 많은 코드가 더 많은 기능을 의미한다는 가정이다. NanoClaw는 반례다 — 기능이 포함하는 코드가 아닌 연결하는 컴포넌트에서 오는 프로젝트. 500줄은 제품이 아니다. 사용자와 AI 사이의 최소한의 다리이며, 아무것도 방해하지 않도록 가능한 한 얇게 설계되었다.