같은 방에서 싸우지 마 — 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턴 제한” 규칙 작성