본문으로 건너뛰기

NanoClaw: 컨테이너 격리로 안전한 경량 OpenClaw 대안

정석

NanoClaw

“OpenClaw는 강력하지만… 50만 줄의 코드베이스를 이해하는 건 또 다른 문제입니다.”

많은 개발자가 OpenClaw의 방대함에 압도됩니다. 53개의 설정 파일, 70개 이상의 의존성, 그리고 복잡하게 얽힌 아키텍처. 물론 강력하지만, “그냥 간단한 에이전트 하나 만들고 싶은데”라는 니즈에는 과도한 면이 있습니다.

NanoClaw는 이 문제를 정면으로 공략합니다. QwibitAI에서 개발한 이 프로젝트는 “이해 가능한 코드베이스”와 “진정한 보안 격리”라는 두 가지 핵심 가치를 동시에 추구합니다.


탄생 배경: 복잡성의 역설

OpenClaw가 50만 줄의 코드로 성장하는 동안, 많은 사용자가 비슷한 의문을 가졌습니다.

“정말 이 모든 게 필요한가?” “설정 파일만 53개라니, 어디서부터 시작해야 하지?” “커스터마이징하려면 어디를 봐야 하는 거야?”

복잡성의 역설: 더 많은 기능을 추가할수록, 실제로 사용하는 사람은 줄어든다.

NanoClaw는 반대 방향으로 출발했습니다. “최소한의 것만 남기고, 나머지는 과감히 버리자.” 그 결과, 한 프로세스, 몇 개의 파일, 이해 가능한 코드베이스가 탄생했습니다.


OpenClaw vs NanoClaw: 숫자로 보는 차이

항목OpenClawNanoClaw
코드 라인 수~500,000줄한 프로세스, 몇 개 파일
설정 파일53개코드로 커스터마이징
의존성70+최소화
보안 모델애플리케이션 레벨 권한OS-level 컨테이너 격리
러닝 커브높음낮음
진입 장벽상당함낮음

이 비교는 OpenClaw가 “나쁘다”는 게 아닙니다. OpenClaw는 엔터프라이즈급 기능과 확장성을 제공합니다. NanoClaw는 **“그냥 빠르고 안전하게 에이전트 돌리고 싶은 사람”**을 위한 대안입니다.


보안: 진정한 격리의 의미

NanoClaw의 가장 큰 차별점은 컨테이너 격리입니다.

기존 접근의 한계

대부분의 AI 에이전트 프레임워크는 애플리케이션 레벨에서 권한을 체크합니다:

// 전통적 접근: 앱 레벨 권한 체크
if (hasPermission(user, 'file:read', path)) {
  // 위험: 버그가 있으면?
  readFile(path);
}

이 방식의 문제는 버그 하나가 치명적이라는 점입니다. 권한 체크 로직에 취약점이 있으면, 에이전트가 접근하면 안 되는 파일까지 접근할 수 있습니다.

NanoClaw의 접근: OS-level 격리

# NanoClaw: 컨테이너로 완전히 격리
docker run --rm \
  -v /allowed/path:/workspace \
  nanoclaw-agent

컨테이너 밖의 파일은 물리적으로 접근이 불가능합니다. 권한 체크 버그? 상관없습니다. 컨테이너 자체가 접근할 수 없으니까요.

지원하는 컨테이너 런타임

# macOS에서 Apple Container로 전환
@Andy /convert-to-apple-container

Agent Swarms: 에이전트 팀 협업의 시대

NanoClaw는 최초로 Agent Swarms를 지원하는 오픈소스 에이전트 프레임워크 중 하나입니다.

단일 에이전트의 한계

복잡한 작업은 한 에이전트가 처리하기 어렵습니다:

Swarms 접근: 전문화된 팀

┌─────────────┐
│   Orchestrator   │
└──────┬──────┘

   ┌───┴───┬───────┐
   ▼       ▼       ▼
┌─────┐ ┌─────┐ ┌─────┐
│Email│ │Calendar│ │Slack│
│Reader│ │Writer│ │Notifier│
└─────┘ └─────┘ └─────┘

각 에이전트는 자신의 전문 영역만 처리합니다:

Orchestrator가 이들을 조율합니다. 이렇게 하면:


아키텍처: 단순함의 미학

NanoClaw의 아키텍처는 놀라울 정도로 단순합니다:

Channels → SQLite → Polling Loop → Container → Response


                    Claude Agent SDK
                    (격리된 컨테이너 내부)

핵심 구성 요소

  1. Channels: WhatsApp, Telegram, Slack, Discord, Gmail 등
  2. SQLite: 메시지 큐 및 상태 저장
  3. Polling Loop: 새 메시지 감지
  4. Container: Claude Agent SDK 실행 환경
  5. Response: 채널로 결과 전송

단일 Node.js 프로세스

모든 게 한 프로세스에서 돌아갑니다. 마이크로서비스? 없습니다. 복잡한 메시지 큐? 없습니다. 그냥 단순한 폴링 루프와 SQLite.

“왜 폴링이야? 이벤트 기반이 더 효율적이잖아?”

네, 맞습니다. 하지만 폴링은 이해하기 쉽습니다. 버그가 나면 어디서 봐야 할지 명확합니다. 그게 NanoClaw의 철학입니다.


Skills 시스템: 기능 대신 스킬

NanoClaw는 “기능” 대신 “스킬”이라는 개념을 사용합니다:

명령설명
/setup초기 설정
/add-whatsappWhatsApp 채널 추가
/add-telegramTelegram 채널 추가
/add-discordDiscord 채널 추가
/add-slackSlack 채널 추가
/add-gmailGmail 채널 추가
/customize커스터마이징 가이드
/debug문제 진단

스킬의 철학

기능은 “이미 만들어진 것”입니다. 스킬은 “배울 수 있는 것”입니다.

NanoClaw에서는 새로운 채널을 “추가”하는 게 아니라 “가르치는” 개념입니다. /add-whatsapp을 실행하면, 에이전트가 WhatsApp을 이해하게 됩니다.


커스터마이징: 코드가 곧 설정

NanoClaw에는 53개의 설정 파일이 없습니다. 대신, 코드로 직접 커스터마이징합니다.

자연어 커스터마이징

@Andy send an overview of the sales pipeline every weekday morning at 9am

@Andy review the git history for the past week each Friday

@Andy every Monday at 8am, compile AI news from Hacker News

코드 레벨 커스터마이징

// 트리거 워드 변경
"Change the trigger word to @Bob"

// 응답 스타일 변경
"Remember to make responses shorter"

// 커스텀 그리팅 추가
"Add a custom greeting when I say good morning"

이게 다입니다. 복잡한 설정 파일을 찾아 헤맬 필요가 없습니다.


지원 채널: 어디서든 접근

NanoClaw는 5개 주요 채널을 지원합니다:

채널용도
WhatsApp개인 메신저, 가장 친숙한 인터페이스
Telegram개발자 친화적, 봇 API 강력
Slack팀 협업, 워크스페이스 통합
Discord커뮤니티, 게이밍 문화
Gmail이메일 자동화, 공식 업무

Isolated Group Context

각 그룹/채널은 별도의 컨테이너에서 실행됩니다:

WhatsApp 그룹 A → Container A
WhatsApp 그룹 B → Container B
Slack 워크스페이스 C → Container C

이렇게 하면:

Main Channel: 관리용 Self-Chat

NanoClaw에는 “Main Channel”이라는 개념이 있습니다. 이건 관리자가 에이전트와 직접 대화하는 채널입니다:

# Main Channel (관리자 전용)
Admin: @Andy status
Andy: All systems operational. 3 containers running.

Admin: @Andy logs container-1
Andy: [Showing last 50 lines...]

설치: 30초 만에 시작

# 방법 1: GitHub CLI로 (권장)
gh repo fork qwibitai/nanoclaw --clone
cd nanoclaw
claude
# Then run /setup

# 방법 2: 수동으로
git clone https://github.com/YOUR_USERNAME/nanoclaw.git
cd nanoclaw
claude
# Then run /setup

/setup을 실행하면, NanoClaw가 필요한 의존성을 설치하고 컨테이너를 설정합니다.


실제 사용 시나리오

시나리오 1: 개인 비서

# WhatsApp에서
@Andy 내일 오전 10시에 팀 미팅 리마인더 해줘

@Andy 이번 주 쓴 돈 정리해서 월요일 아침에 보내줘

@Andy 해외뉴스 중에서 AI 관련 것만 모아서 매일 아침 8시에 요약해줘

시나리오 2: 팀 협업

# Slack에서
@Andy 이번 스프린트 진행 상황을 금요일 오후 5시에 #general에 공유해줘

@Andy 새로운 팀원이 들어오면 온보딩 체크리스트를 DM으로 보내줘

@Andy GitHub PR이 머지되면 관련 팀원들에게 Slack으로 알림 보내줘

시나리오 3: 개발자 도구

# Telegram에서
@Andy production 서버 로그를 매시간 체크해서 에러가 있으면 알려줘

@Andy 백업이 실패하면 즉시 나한테 DM 보내줘

@Andy 새로운 이슈가 등록되면 우선순위별로 분류해서 정리해줘

시나리오 4: Agent Swarms 활용

# 복잡한 작업을 여러 에이전트가 협업
@Team 고객 불만 이메일이 오면:
1. 이메일 분석 (Email Analyzer)
2. 유사 사례 검색 (Knowledge Searcher)
3. 응답 초안 작성 (Response Drafter)
4. 품질 검토 (Quality Checker)
5. 발송 승인 요청 (Approval Requester)

No Configuration Sprawl: 설정 파일 지옥의 끝

OpenClaw 사용자들이 가장 힘들어하는 부분 중 하나가 설정 파일 관리입니다:

# OpenClaw 설정 파일들 (일부)
agents.yml
channels.yml
providers.yml
skills.yml
permissions.yml
storage.yml
logging.yml
# ... 그리고 46개 더

NanoClaw는 다릅니다:

// NanoClaw: 코드가 곧 설정
export default {
  trigger: '@Andy',
  channels: ['whatsapp', 'telegram'],
  container: 'docker',
  model: 'claude-3-5-sonnet'
};

설정 파일? 하나면 충분합니다. 아니, 그것도 선택사항입니다. 그냥 코드로 직접 작성해도 됩니다.


기술 스택: TypeScript의 힘

NanoClaw는 OpenClaw와 동일하게 TypeScript로 작성되었습니다:

TypeScript 선택의 이유

  1. 타입 안전성: 에이전트 로직의 복잡성을 타입으로 관리
  2. 개발자 경험: IDE 지원, 자동완성, 리팩토링
  3. 생태계: npm의 방대한 라이브러리
  4. 친숙함: OpenClaw 사용자가 쉽게 적응

커뮤니티와 생태계

공식 리소스

성장세

21,000+ GitHub 스타는 우연이 아닙니다. 개발자들은 “단순함”과 “보안”이라는 두 가지 가치에 열광하고 있습니다.


마치며: “작지만 강력한” 대안

NanoClaw는 OpenClaw를 대체하려는 게 아닙니다. OpenClaw가 엔터프라이즈급 플랫폼이라면, NanoClaw는 개인/소규모 팀용 도구입니다.

“OpenClaw는 비행기고, NanoClaw는 자동거야. 둘 다 이동 수단이지만, 용도가 달라.”

복잡한 설정 없이, 그냥 바로 시작하고 싶다면 NanoClaw를 시도해보세요. 50만 줄의 코드베이스를 이해할 필요가 없습니다. 몇 개의 파일만 보면 됩니다.

그리고 무엇보다, 컨테이너 격리로 진정한 보안을 경험할 수 있습니다. 애플리케이션 레벨 권한 체크? 그건 이제 과거의 일입니다.


🔗 관련 정보

이전
Claw 경량화 시리즈 완전 비교: 2026년, 당신에게 맞는 Claw는?
다음
ZeroClaw: 100% Rust로 작성된 초고속 AI 어시스턴트 인프라