OpenTag는 “Claude in Slack”류 경험을 오픈소스와 셀프호스팅 방식으로 구현한 CopilotKit 기반 Slack 에이전트다. Slack 스레드를 읽고 답변하며, 도구를 호출하고, 표·차트 같은 풍부한 결과를 대화 안에 렌더링하고, 중요한 액션은 승인 게이트 뒤에 둘 수 있다.
무엇을 해결하나
팀 채팅 안의 AI 에이전트는 단순 봇보다 더 많은 책임을 진다. 스레드 맥락을 이해하고, 사내 도구를 호출하고, 결과를 사람이 읽기 좋은 UI로 보여주며, 티켓 생성이나 데이터 변경처럼 되돌리기 어려운 작업은 사람이 승인해야 한다. OpenTag는 이 패턴을 Slack 우선으로 패키징한 예제다.
구조
OpenTag는 CopilotKit의 봇 패키지 위에 얇게 올라간다.
| 구성 요소 | 역할 |
|---|---|
@copilotkit/bot | 스레딩, 도구 호출, human-in-the-loop 게이트를 담당하는 플랫폼 독립 봇 엔진 |
@copilotkit/runtime | LLM과 도구를 실행하는 AG-UI 에이전트 백엔드 |
@copilotkit/bot-ui | Slack Block Kit, Discord Components, Telegram HTML 등으로 렌더링되는 크로스플랫폼 JSX |
@copilotkit/bot-slack | Slack 어댑터 |
@copilotkit/bot-store-redis | 재시작 후에도 스레드 상태를 유지하기 위한 선택 저장소 |
즉, Slack 연결부와 LLM 런타임을 분리해 두 프로세스로 운영한다. 같은 코드 구조를 Discord, Telegram, WhatsApp 어댑터로 확장할 수 있다는 점도 핵심이다.
셀프호스팅 시작
현재 안정적인 실행 경로는 CopilotKit 모노레포의 examples/slack 예제를 사용하는 방식이다.
pnpm install
pnpm --filter slack-example runtime
pnpm --filter slack-example dev필수 비밀값은 Slack Bot Token, Slack App Token, 그리고 OpenAI 또는 Anthropic API 키다.
SLACK_BOT_TOKEN=xoxb-...
SLACK_APP_TOKEN=xapp-...
OPENAI_API_KEY=sk-...Slack 앱은 slack-app-manifest.yaml로 만들고, 봇을 채널 스레드에서 멘션해 작업을 맡긴다.
어디에 적합한가
- Slack 안에서 운영·지원·분석 워크플로를 자동화하려는 내부 플랫폼 팀
- 사내 도구 호출을 AI 에이전트에 연결하되, 승인 게이트를 반드시 두고 싶은 팀
- 표, 차트, 액션 버튼 같은 생성형 UI를 채팅 안에 렌더링하려는 제품 팀
- 벤더의 per-seat AI 봇 대신 런타임과 모델 선택권을 직접 갖고 싶은 조직
한계와 판단 기준
OpenTag는 완제품 SaaS라기보다 셀프호스팅 가능한 기준 구현에 가깝다. Slack 앱 생성, 토큰 관리, 런타임 배포, 스레드 저장소, 관찰성은 운영자가 직접 책임져야 한다. 빠른 내부 실험에는 적합하지만, 전사 배포 전에는 권한 범위, 감사 로그, 도구별 승인 정책, Redis 같은 영속 저장소를 먼저 설계해야 한다.
관련 문서
- agent-harness — AI 에이전트 성능을 결정하는 스캐폴딩 설계
- agentops — AI 에이전트 프로덕션 운영을 위한 관찰·제어 레이어
- openui — 생성형 UI를 위한 스트리밍 우선 UI 언어와 런타임
참고 자료
- CopilotKit/OpenTag — GitHub 공식 저장소
- CopilotKit Slack quickstart — CopilotKit Docs