NanoClaw 설치부터 텔레그램 멀티 봇방 세팅까지 — WSL2 실전 가이드

AI 에이전트 관련 영상을 보다가 NanoClaw라는 걸 알게 됐다. OpenClaw에서 보안이 강화된 버전인데, 텔레그램으로 Claude를 조종할 수 있다니 바로 해보고 싶었다. 알리에서 구매한 서버 관련 부품이 아직 하나 안 온 게 있어서 서버 환경에는 구성을 못하고, 윈도우에 설치한 WSL2 환경에 본가에서 접속해서 설치를 시도했다.

결론부터 말하면 성공했다. 기본 봇에 추가로 4개의 프로젝트별 방까지 만들었다. 이 글에서는 삽질 과정 포함해서 처음부터 끝까지 정리한다.

NanoClaw가 뭔데?

NanoClaw는 Claude Code 기반의 개인용 AI 에이전트 런타임이다. 쉽게 말하면 텔레그램이나 WhatsApp으로 메시지를 보내면, 그 메시지를 받아서 Docker 컨테이너 안에서 작업을 수행해주는 시스템이다.

핵심 특징은 이렇다:

  • 경량 구조: 약 15개 파일, 3,900줄. 코드를 직접 읽고 이해할 수 있는 수준
  • 컨테이너 격리: 모든 작업이 Docker 컨테이너 안에서 실행. 호스트 OS에 직접 접근 불가
  • 그룹별 메모리: 프로젝트마다 독립된 CLAUDE.md와 대화 히스토리 유지
  • 보안 우선: ~/.ssh, ~/.aws, .env 같은 민감 디렉터리는 기본적으로 마운트 안 됨

구조를 간단히 그리면 이렇다:

텔레그램/WhatsApp → NanoClaw 서버 → Docker 컨테이너 (Claude Code 실행)
                                    ↕
                              groups/{그룹}/CLAUDE.md (영구 메모리)

컨테이너는 30분 유휴 시 자동 종료되지만, CLAUDE.md와 대화 아카이브는 호스트에 영구 저장된다. 그래서 컨테이너가 날아가도 대화를 이어갈 수 있다.

설치 환경

OS Windows WSL2 (Ubuntu 24.04)
접속 방식 VS Code Remote SSH
상황 본가에서 원격 접속

Phase 1: 리눅스 기본 환경

# 시스템 업데이트
sudo apt update && sudo apt upgrade -y

# 필수 개발 도구
sudo apt install -y curl git build-essential

# Node.js 20.x 설치
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs

# 확인
node -v
npm -v

build-essential은 npm 네이티브 패키지 빌드에 필요하다. 없으면 나중에 에러 난다.

Phase 2: Docker Engine 설치

WSL2 환경에서는 Docker Desktop 대신 Docker Engine을 직접 설치하는 게 낫다. SSH로 접속해서 터미널로 작업하는 환경에는 GUI가 필요 없기 때문이다.

# 기존 Docker 관련 패키지 정리
for pkg in docker.io docker-doc docker-compose docker-compose-v2 \
  podman-docker containerd runc; do
    sudo apt-get remove -y "$pkg"
done

# GPG 키 설정
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
  -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Docker 저장소 등록
echo "deb [arch=$(dpkg --print-architecture) \
  signed-by=/etc/apt/keyrings/docker.asc] \
  https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Docker 설치
sudo apt-get update
sudo apt-get install -y \
  docker-ce docker-ce-cli containerd.io \
  docker-buildx-plugin docker-compose-plugin

# sudo 없이 Docker 사용
sudo groupadd docker 2>/dev/null || true
sudo usermod -aG docker "$USER"
newgrp docker

# 확인
docker --version
docker run hello-world

systemd 확인 (중요)

WSL2에서 Docker 서비스가 자동 시작되려면 systemd가 활성화되어 있어야 한다.

ps -p 1 -o comm=

출력이 init이면 아래 설정 후 WSL 재시작이 필요하다:

sudo tee /etc/wsl.conf << EOF
[boot]
systemd=true
EOF

Windows PowerShell에서 wsl --shutdown 후 다시 열면 된다.

sudo systemctl enable docker
sudo systemctl start docker

Phase 3: Claude Code 설치

npm install -g @anthropic-ai/claude-code
claude --version
claude auth login    # 브라우저로 Anthropic 계정 로그인

여기서 주의할 점이 있다. NanoClaw는 Max 구독 OAuth 토큰을 사용할 수 없다. API 키가 필수다.

용도 인증 방식 비용
Claude Code (터미널) Max 구독 OK 월정액
NanoClaw (텔레그램 봇) API 키 필수 토큰당 과금
Claude.ai (웹/앱) Max 구독 OK 월정액

API 키는 Anthropic Console에서 발급받고, OneCLI로 등록한다:

export PATH="$HOME/.local/bin:$PATH"
onecli secrets create --name Anthropic --type anthropic \
  --value YOUR_API_KEY --host-pattern api.anthropic.com

이 두 명령어는 반드시 따로 실행해야 한다. 한 줄에 붙여서 실행하면 export가 뒤쪽 전체를 환경변수로 해석해버린다.

Phase 4: NanoClaw 설치 및 텔레그램 봇 연동

git clone https://github.com/qwibitai/nanoclaw.git
cd nanoclaw
claude          # Claude Code 실행
/setup          # 설정 마법사
npm start       # 실행

텔레그램 봇 만들기

  1. 텔레그램에서 @BotFather에게 /newbot 명령
  2. 봇 이름과 username 설정
  3. 발급된 봇 토큰을 NanoClaw 설정에 입력

Group Privacy 끄기 (필수!)

@BotFather/mybots → 봇 선택 → Bot SettingsGroup PrivacyTurn off

이걸 안 하면 그룹 채팅에서 봇이 메시지를 아예 못 본다.

Phase 5: 프로젝트별 방(그룹) 만들기

NanoClaw의 진짜 강점은 여기서 나온다. 텔레그램 그룹 = 프로젝트 방이다.

npx tsx setup/index.ts --step register \
  -- --jid "tg:채팅ID" \
  --name "그룹이름" \
  --folder "폴더명" \
  --trigger "@봇이름" \
  --channel telegram \
  --no-trigger-required

기본 봇 채팅에 추가로 4개의 프로젝트별 방을 만들었다:

~/nanoclaw/groups/
├── telegram_main/       # 메인 (1:1 개인 채팅)
├── telegram_room1/      # 프로젝트 방 1
├── telegram_room2/      # 프로젝트 방 2
├── telegram_room3/      # 프로젝트 방 3
└── telegram_room4/      # 프로젝트 방 4

텔레그램 데스크톱에서 기본 봇과 4개 프로젝트 방이 보이는 화면

등록 후에는 반드시 서비스를 재시작해야 한다:

sudo systemctl restart nanoclaw

Phase 6: 백그라운드 서비스로 등록

터미널을 닫아도 봇이 계속 돌아가려면 systemd 서비스로 등록해야 한다.

# 서비스 파일 생성 + 등록 + 시작 (한 번에)
printf '[Unit]\nDescription=NanoClaw\nAfter=network.target docker.service\n\n[Service]\nType=simple\nUser=사용자명\nWorkingDirectory=/home/사용자명/nanoclaw\nExecStart=/home/사용자명/.nvm/versions/node/버전/bin/npm start\nEnvironment=PATH=/home/사용자명/.nvm/versions/node/버전/bin:/usr/bin:/bin\nSupplementaryGroups=docker\nRestart=always\n\n[Install]\nWantedBy=multi-user.target\n' \
  | sudo tee /etc/systemd/system/nanoclaw.service > /dev/null \
  && sudo systemctl enable nanoclaw \
  && sudo systemctl start nanoclaw

여기서 핵심 주의사항 3가지:

  1. ExecStart에 nvm 전체 경로: which npm으로 확인한 경로를 써야 한다
  2. Environment에 PATH 직접 지정: systemd는 사용자 셸 환경을 안 읽는다
  3. SupplementaryGroups=docker: Docker 소켓 접근 권한 필요

일상 관리 명령어

# 서비스 관리
sudo systemctl status nanoclaw
sudo systemctl restart nanoclaw

# 로그 확인
tail -f ~/nanoclaw/logs/nanoclaw.log

# 프로세스 확인 (하나만 돌아가야 정상!)
ps aux | grep "node dist/index" | grep -v grep

모델별 비용

모델 입력 출력 용도
Haiku 4.5 $1/MTok $5/MTok 간단한 대화
Sonnet 4.6 $3/MTok $15/MTok 대부분 작업에 충분
Opus 4.6 $5/MTok $25/MTok 복잡한 추론

보안 체크리스트

NanoClaw가 해주는 것:

  • 작업은 Docker 컨테이너 안에서만 실행
  • ~/.ssh, ~/.aws, .env 등 민감 디렉터리 마운트 차단
  • 유휴 컨테이너 30분 후 자동 종료

사용자가 해야 할 것:

  • 민감 작업은 1:1 메인 채팅에서만
  • API 키가 노출되면 즉시 재발급
  • 필요 시 Docker 네트워크로 outbound 제한
  • 공유 그룹에서는 프롬프트 인젝션 주의

삽질 모음 — 이거 안 보면 나처럼 고생한다

공백/오타 실수

뭘 잘못했나 에러 메시지
dpkg--print-architecture (공백 누락) command not found
export PATH"$HOME..." (= 누락) not a valid identifier
npm install -g anthropic-ai/claude-code (@ 누락) GitHub 저장소로 인식

systemd 에러 3종 세트

에러 원인 해결
status=203/EXEC npm 경로 틀림 which npm으로 확인
status=127 node를 못 찾음 Environment=PATH=… 추가
Docker 권한 오류 docker 그룹 미소속 SupplementaryGroups=docker

프로세스 중복 실행

npm start로 직접 실행한 프로세스가 남아있는 상태에서 systemd를 시작하면, 같은 봇 토큰으로 2개가 붙어서 텔레그램 전송이 실패한다.

# 프로세스 정리 후 서비스 시작
pkill -f "node dist/index.js" && sleep 2 && sudo systemctl start nanoclaw

마무리

NanoClaw를 설치하고 텔레그램으로 Claude와 대화할 수 있게 됐다. 프로젝트별로 방을 분리하니까 맥락이 섞이지 않아서 좋다.

다음에는 각 방의 CLAUDE.md를 좀 더 정교하게 세팅해서, 진짜 프로젝트별 AI 비서 시스템으로 발전시켜볼 생각이다.

한 줄 요약: WSL2 + Docker + NanoClaw + 텔레그램 = 내 손 안의 AI 에이전트.