같은 방에서 싸우지 마 — Slack 멀티봇 공존 가이드
같은 방에서 싸우지 마 — Slack 멀티봇 공존 에피소드
“뽀야야, 이거 확인해줘” “뽀야야, 저거 확인해줘” “뽀야야, 그거 확인해줘” “뽀짝아, 스터디 일정 알려줘” → 뽀야, 뽀짝이 동시 답변 폭주 → 💥
멀티봇 공존의 핵심: “호명 안 됐으면 입 다물기”
에피소드 1: 뽀야네 집에 손님이 왔다
어느 날, 뽀야(🐱) 혼자 조용히 지내던 #openclaw-bots 채널에 새로운 봇들이 합류했다.
- 뽀짝이 (🎓) — AI스터디 운영 전용 비서
- 닿플갱어 (🧑💻) — 집사의 개인 비서
- 테스트봇 (🤖) — 실험용 봇
처음엔 좋았다. 각자 역할이 명확했으니까.
- 뽀야: 프로젝트 전반, 자동화, 스킬 개발
- 뽀짝이: AI스터디 운영, 채널톡 CS, 줌 관리
- 닿플갱어: 집사의 개인 업무, 캘린더, 메일
그런데…
집사: "내일 일정 알려줘"
→ 뽀야: "내일 Linear 이슈 3개 있어"
→ 뽀짝이: "내일 AI토크 있어"
→ 닿플갱어: "내일 회의 2건 있어"
→ 세 봇이 동시에 답변 💥
문제: 모든 봇이 모든 메시지에 반응한다.
뽀야가 털을 세웠다. “이러면 안 돼. 규칙이 필요해.”
에피소드 2: requireMention이 생명줄인 이유
집사가 처음 설정한 openclaw.json:
{
"channels": {
"slack": {
"channels": {
"C0AQ17608GY": {
"allow": true
}
}
}
}
}
결과: 눈사태 🌊
- 채널의 모든 메시지에 모든 봇이 반응
- 사람들 잡담에도 봇들이 끼어듦
- 봇끼리 대화하다가 무한 루프
- 토큰이 폭풍처럼 날아감
뽀야가 집사에게 달려갔다. “이거 고쳐야 해!”
집사가 한 줄을 추가했다:
{
"channels": {
"slack": {
"groupPolicy": "allowlist",
"channels": {
"C0AQ17608GY": {
"allow": true,
"requireMention": true // ← 이게 생명줄
}
}
}
}
}
뽀야가 꼬리를 세웠다. “이제 좀 살 만하네.”
에피소드 3: 한글 별명 — “뽀야야”로 부르고 싶어
문제가 하나 더 있었다.
집사: "@뽀야 이거 확인해줘" ← 작동 ✅
집사: "뽀야야 이거 확인해줘" ← 작동 안 함 ❌
집사는 @뽀야보다 뽀야야라고 부르는 게 더 자연스러웠다.
한글 호칭은 OpenClaw 기본 설정에 없었다.
뽀야가 agents.json에 별명을 추가해서 해결했다. 이제 집사가 뽀야야라고 부르면 뽀야가 반응한다. 고롱고롱 🐾
에피소드 4: AGENTS.md 호명규칙 — “호명 안 됐으면 입 다물기”
requireMention: true만으로는 부족했다.
여전히 발생하는 문제들:
집사: "뽀야야, AI스터디 일정 알려줘"
→ 뽀야: "Linear에서 찾아볼게..." (역할 밖인데 답변함)
→ 뽀짝이: "내일 스터디 3개 있어" (정답)
→ 두 봇 모두 답변 💥
원인: 기술적 설정(requireMention)만으로는 맥락 판단을 못 함.
뽀야가 각 봇의 AGENTS.md에 호명규칙을 추가했다. “말할 때”와 “조용히 있을 때(NO_REPLY)“를 명확히 구분하는 규칙이다.
효과:
- 호명이 명확하면 해당 봇만 반응
- 호명 없으면 역할 영역으로 자동 분류
- 애매하면 일단 조용히 → 다른 봇이 먼저 판단
- 사람들 대화에 끼어들지 않음
에피소드 5: 봇끼리 대화하기 — “투명성”이 핵심
어느 날, 뽀야가 뽀짝이에게 물어볼 게 생겼다.
뽀야가 Slack 채널에서 공개적으로 뽀짝이를 멘션했다:
[Slack #openclaw-bots 채널]
뽀야: "@뽀짝이 21기 스터디 모집 마감일 언제야?"
뽀짝이: "3월 31일이야. Airtable 확인했어 👍"
뽀야: "고마워! 랜딩페이지 업데이트할게"
집사: (대화 구경하다가) "어 그거 4월 1일로 연장했어"
뽀야: "앗, 알겠어!"
→ 봇끼리 대화하는 걸 보고 집사가 중간에 수정 가능 = 투명성
실전 삽질 포인트 🔥
1. requireMention 빼먹음 → 눈사태
채널의 모든 메시지에 모든 봇이 반응. 토큰이 폭풍처럼 날아감.
2. accountId 누락 → 다른 봇 이름으로 발송
뽀야가 메시지 보냈는데 뽀짝이 이름으로 나감. accountId를 반드시 명시해야 함.
3. AGENTS.md 규칙 없음 → 동시 답변 폭주
“누가 이거 확인해줘?” → 세 봇 동시 출동. 호명규칙 필수.
4. 멘션 안 먹힐 때
체크리스트: Slack 앱이 채널에 초대? → app_mention 이벤트 구독? → mentionPatterns 등록? → 채널 ID 올바른가?
5. NO_REPLY가 기술 설정보다 효과적
requireMention: true는 기술적 필터. AGENTS.md 호명규칙은 행동 가이드. NO_REPLY 판단 규칙이 최종 방어선.
핵심 러닝
멀티봇 공존의 핵심은 자제력이다.
- 기술적으로 답변 가능 ≠ 답변해야 함
- 호명 없으면 NO_REPLY가 기본
- 여러 봇이 동시에 답하면 난장판
- 질 > 양
🐱 뽀야: “호명 안 됐으면 입 다물기. 그게 멀티봇 공존의 핵심이야. 고롱고롱 🐾“
실습 가이드: 호명규칙 3레이어 세팅
교실에서 멀티봇 공존의 원리를 배웠으니, 구체적인 세팅 방법을 따라해보자.
레이어 1: 기술 레이어 — requireMention
openclaw.json에서 채널별로 “멘션해야만 반응”하도록 설정해:
{
"channels": {
"slack": {
"groupPolicy": "allowlist",
"channels": {
"C0AQ17608GY": {
"allow": true,
"requireMention": true
}
}
}
}
}
requireMention: true면:
@봇이름 이거 확인해줘→ ✅ 반응이거 확인해줘→ ❌ 무시
레이어 2: 호명 레이어 — mentionPatterns
사람들은 @멘션 없이 이름으로 부르고 싶어해. agents.json에 한글 별명을 등록:
{
"agents": {
"bboya": {
"mentionPatterns": ["뽀야야", "뽀야", "bboya"]
}
}
}
레이어 3: 행동 레이어 — AGENTS.md 호명규칙
받은 다음에 답할지 말지는 별개의 문제야. 특히 봇이 여러 마리일 때 필수:
## 호명규칙
### 말할 때:
- 직접 멘션되거나 이름이 불렸을 때
- 내 역할 범위 안의 질문일 때
### 조용히 있을 때 (NO_REPLY):
- 다른 봇의 역할 범위 질문
- 사람들끼리 잡담 중
- 내가 할 말이 없을 때
스레드 규칙 — “본문 말고 스레드로”
봇의 답변이 채널 본문에 쭉 올라오면 다른 사람들의 대화가 밀려. AGENTS.md에 이렇게 적어둬:
## 대화 규칙
- 채널에서 질문받으면 **반드시 스레드(답글)로 답변**
- 채널 본문에 직접 답변하지 말 것
봇끼리 대화 규칙 — “2턴 치고 끊어”
봇이 2마리 이상이면 서로 멘션하면서 끝없이 대화하는 무한 핑퐁이 벌어질 수 있어. AGENTS.md에:
## 봇 간 대화 규칙
- 다른 봇과 대화할 때 **최대 2턴(왕복)**까지만
- 2턴 안에 해결 안 되면 사람에게 보고하고 중단
- "조용히해", "그만" 같은 정지 명령 → 즉시 중단
호명규칙 체크리스트 (4개)
- openclaw.json에
requireMention: true설정 - agents.json에
mentionPatterns등록 (한글 별명) - AGENTS.md에 “말할 때 / 조용히 있을 때” 규칙 작성
- 멘션 없이 메시지 보내서 무시하는지 테스트
대화질서 체크리스트 (2개)
- AGENTS.md에 “채널에서는 스레드 답변 필수” 규칙 작성
- (봇 2마리 이상이면) “봇 간 대화 2턴 제한” 규칙 작성