Spark
Spark
🏆 AI 챔피언
🏡 내집마련 찐친

OpenClaw로 만든 우리집 AI 사무실 — 텔레그램과 슬랙에 '스머프 에이전트' 4명 출근시키기

📝 한줄 요약

새로 산 DGX Spark를 AI 에이전트 상시 서버로 만들고, 슬랙 채널 3개 + 텔레그램 1개에서 4명의 AI 에이전트(스머프 컨셉)가 각자 역할을 나눠 일하는 환경을 코딩 없이 구축했다. 핵심은 "이름이 같아도 일하는 곳이 다르면 페르소나를 나눈다"는 원칙.


🎯 배경 / 문제 상황

새로 구매한 DGX Spark와 상견례(기본 리눅스 사용법 스터디, Ollama 설치하여 로컬에 Qwen, Gemma 등 설치, TailScale 이용해 외부 접속 등)를 마치고 제대로 활용해 보고 싶다는 생각이 들었다. 24시간 켜두는 서버이니, AI 에이전트를 상주시키기에 딱이었다.

목표는 두 가지였다. 첫째, 기존 윈도우 랩탑에 설치해 둔 OpenClaw를 DGX Spark로 옮긴다. 둘째, 슬랙에서 여러 AI 에이전트가 각자 역할을 맡아 협업하는 "AI 사무실"을 만든다.

혼자 일하는 AI 하나보다, 역할을 나눈 여러 AI가 낫다고 봤다. 그래서 콘셉트를 '개구쟁이 스머프'로 잡았다. 명령을 분배하는 똘똘이, 인프라를 만드는 만능이, 자료를 찾아주는 편리 — 캐릭터에 역할을 입히면 누가 무슨 일을 하는지 직관적으로 와닿는다.

스머프 세계의 스머프

[에이전트 월드 컨셉도]

참고한 자료는 GPTers 뽀짝이 서재의 OpenClaw 수업이었다.


🔧 작업 과정

1단계 — 두 기기의 역할을 나누기

가장 먼저 정리한 건 "어디서 무엇을 하느냐"였다. DGX Spark는 에이전트가 사는 집(상주 서버), 집 데스크탑은 슬랙 앱을 설정하는 작업대. 이 둘을 헷갈리면 작업이 꼬인다.

다행히 OpenClaw의 슬랙 연동은 Socket Mode를 쓴다. DGX Spark가 슬랙 쪽으로 먼저 연결을 거는 방식이라, 공유기 포트포워딩이나 고정 IP가 전혀 필요 없었다. 인터넷만 되면 끝.

2단계 — 구조 결정: 욕심을 버리고 단순하게

처음엔 "슬랙 봇을 3개 만들어서 똘똘이·만능이·편리가 각각 다른 봇으로 보이게 하자"고 생각했다. 그런데 검증된 방식은 앱 1개 + 채널 분리였다. 봇은 하나지만, 채널마다 다른 에이전트가 응답하는 구조.

💡 이때 배운 것 화려한 구조보다 검증된 단순 구조로 시작하는 게 맞다. 봇 이름표가 똑같이 보여도, 채널에 들어가면 누가 일하는지 명확하다. 욕심은 2차 확장으로 미뤘다.

3단계 — 에이전트 등록은 '손'이 아니라 '명령'으로

여기서 첫 번째 벽을 만났다. 설정 파일(openclaw.json)을 직접 편집해서 에이전트를 추가했더니 이런 오류가 떴다.

Invalid config: agents: Invalid input
- bindings.0/1/2: Invalid input

내가 추측해서 쓴 문법이 OpenClaw 최신 버전의 규격과 맞지 않았던 것이다. 백업을 해둔 덕에 즉시 원상 복구할 수 있었다.

해결책은 접근 방식을 바꾸는 것이었다. 손으로 파일을 고치는 대신, OpenClaw가 제공하는 전용 명령을 썼다.

💡 이때 쓴 명령

openclaw agents add brainy --workspace /home/spa/.openclaw/workspace-brainy --non-interactive
openclaw agents add handy --workspace /home/spa/.openclaw/workspace-handy --non-interactive
openclaw agents add convenient --workspace /home/spa/.openclaw/workspace-convenient --non-interactive

명령을 쓰니 OpenClaw가 자기 버전에 맞는 형식으로 알아서 기록했다. "Invalid input"이 나올 수가 없었다.

4단계 — 텔레그램의 똘똘이를, 스머페트로

원래 텔레그램에는 '똘똘이'라는 이름의 에이전트가 있었다. 그런데 슬랙에도 똘똘이를 새로 만들 참이었다. 똘똘이가 둘이 되면 혼란스럽다.

그래서 결정했다 — 텔레그램의 에이전트는 스머페트로 페르소나를 교체한다. 단순히 겹치는 이름을 피하려는 게 아니었다. 역할 자체가 다르기 때문이다.

  • 텔레그램의 스머페트 → 이기종 도구(텔레그램↔슬랙) 사이를 잇는 커뮤니케이션·매개 역할

  • 슬랙의 똘똘이 → 슬랙 안에서 에이전트들을 지휘하는 오케스트레이션 역할

같은 'AI 비서'라도 일하는 무대와 임무가 다르다. 무대가 다르면 페르소나도 나눈다 — 이게 이번 프로젝트에서 가장 중요하게 잡은 원칙이었다.

5단계 — 슬랙 채널 연결

openclaw configure라는 대화형 마법사로 슬랙을 연결했다. 채널 3개(#똘똘이-총괄, #만능이-인프라, #편리-데이터)를 등록하고, 봇이 지정된 채널에서만 동작하도록 Allowlist 정책을 골랐다.

6단계 — 라우팅 사고, 그리고 스키마 정독

두 번째 벽. 봇은 분명히 응답하는데, 모든 슬랙 채널이 죄다 스머페트로만 답했다. 똘똘이 채널에서도, 만능이 채널에서도 스머페트가 튀어나왔다.

한국 트위터 계정 스크린샷

원인을 파보니, 채널과 에이전트를 연결하는 '바인딩'에서 채널 ID를 엉뚱한 자리에 넣고 있었다. accountId(슬랙 워크스페이스 계정)라는 칸에 채널 ID를 넣은 것이다. 그래서 매칭이 안 되고 전부 기본 에이전트로 떨어졌다.

여기서 또 한 번 "추측을 멈추고 직접 확인" 원칙을 썼다. OpenClaw의 설정 스키마를 통째로 뽑아서 정독했다.

💡 이때 쓴 명령

openclaw config schema > ~/oc-schema.json

스키마를 보니 답이 명확했다. 슬랙 채널은 accountId가 아니라 peer라는 칸에, kindid를 함께 넣어야 했다. 올바른 바인딩으로 교체하고 재시작하니 — 드디어 채널마다 똘똘이·만능이·편리가 각자 페르소나로 응답했다.

7단계 — 에이전트가 일을 더 잘하도록 R&R 정리

마지막 다듬기. 에이전트들이 응답할 때마다 엉뚱하게 파일을 뒤지며 "failed"를 내는 게 보였다. 규칙 파일에 "세션 시작 시 OO 파일을 읽어라"라고 적어둔 걸, 에이전트가 곧이곧대로 파일 검색 명령으로 실행했던 것이다.

해결은 간단했다. "파일을 읽어라"는 지시를 빼고, 필요한 규칙을 규칙 파일 본문에 직접 다 적었다. 읽으러 갈 파일이 없으니 헤맬 일도 없다. 동시에 각 에이전트에 정체성 파일(IDENTITY.md)을 만들어, 자기가 누구이고 어느 채널에서 무슨 역할인지 첫 줄에서 인식하도록 했다.

한국어로 된 두 사람의 대화 스크린샷


😓 막혔던 순간

이번 작업에서 큰 벽이 세 번 있었다. 그런데 돌이켜보니 셋 다 원인이 같았다 — 내가 추측으로 설정을 건드린 것.

  1. 설정 파일을 손으로 편집 → Invalid input

  2. 채널 ID를 잘못된 칸에 입력 → 라우팅 전부 실패

  3. 규칙 파일에 모호한 지시 → 에이전트가 파일을 뒤지며 failed

세 번 다, 추측을 멈추고 "도구에게 정답을 직접 물어보자"로 전환했더니 풀렸다. 전용 명령을 쓰고, 스키마를 정독하고, 규칙을 명확히 적었다. 비개발자(Flowgrammer)에게 가장 위험한 건 '대충 맞겠지' 하는 추측이고, 가장 강력한 무기는 '도구가 알려주는 정답'이다.


📊 결과

슬랙 채널 3개 + 텔레그램 1개에서 4명의 AI 에이전트가 역할을 나눠 일하는 환경이 완성됐다. 반복 업무를 위임하는 체계가 잡혔다.

특히 의미 있던 건 역할 설계였다. 텔레그램의 똘똘이는 스머페트로 페르소나를 바꿔 이기종 도구 간 커뮤니케이션을 담당하게 했고, 슬랙에서 새로 만든 똘똘이는 슬랙 내 에이전트 오케스트레이션을 맡겼다. 같은 '똘똘이'라는 뿌리에서 출발했지만, 일하는 무대가 다르므로 혼동을 막기 위해 페르소나를 명확히 구분한 것이다.

무대

에이전트

역할

텔레그램

스머페트

이기종 도구 간 커뮤니케이션·매개

슬랙 #똘똘이-총괄

똘똘이

슬랙 내 에이전트 오케스트레이션

슬랙 #만능이-인프라

만능이

코드·인프라·자동화

슬랙 #편리-데이터

편리

자료 검색·지식베이스


💡 핵심 팁

설정 파일을 손으로 추측해서 고치지 마라.

AI 도구의 설정은 버전마다 규격이 다르다. "이쯤이면 맞겠지" 하고 직접 편집하면 십중팔구 막힌다. 대신 도구가 제공하는 것을 활용하라.

  • 전용 명령 (예: agents add) — 도구가 알아서 올바른 형식으로 써준다

  • 스키마 출력 (예: config schema) — 정확한 규격을 직접 알려준다

  • 도움말 (--help) — 모든 옵션이 거기 있다

추측을 한 번 줄일 때마다 시행착오가 극적으로 줄어든다. 이건 코딩 실력이 아니라 '태도'의 문제다.


🚀 다음 계획

지금은 MVP로 에이전트 3종(+텔레그램 1)을 띄웠지만, 스머프 마을엔 캐릭터가 더 많다. 다음 확장은 익살꾼(결과 알림), 투덜이(코드 QA) 등을 추가하는 것이다.

그리고 에이전트끼리 서로 일을 주고받는 협업(sessions_send)을 실전 워크플로우에 본격 적용해 볼 계획이다. 똘똘이가 만능이에게 일을 시키고, 만능이가 끝내면 똘똘이가 취합해 보고하는 — 진짜 '팀'처럼 움직이는 AI 사무실을 완성하는 게 목표다.

2
1개의 답글
밀어주고 끌어주는

온·오프라인 AI 스터디

AI로 어디까지 할 수 있는지
직접 확인하실 분만 신청하세요.