GEODE . 문서
GitHub
GEODE 운영
How-to

메신저 연동

게이트웨이 어댑터로 GEODE를 Slack, Discord, Telegram에 연결합니다.

메신저 연동은 serve 데몬의 게이트웨이가 담당합니다. Slack은 Socket Mode로 이벤트를 push 받고, Discord와 Telegram은 poller가 메시지를 가져옵니다. binding 규칙에 맞는 채널만 GEODE 실행으로 흘러갑니다.

지원 채널

채널토큰 환경 변수수신 방식
SlackSLACK_BOT_TOKEN + SLACK_APP_TOKENSocket Mode (push)
DiscordDISCORD_BOT_TOKENcore/server/supervised/discord_poller.py
TelegramTELEGRAM_BOT_TOKENcore/server/supervised/telegram_poller.py

토큰은 시크릿이므로 ~/.geode/.env에 둡니다. Slack의xoxb- 봇 토큰은 Web API 발신에, xapp- 앱 토큰은 Socket Mode 연결에 각각 사용됩니다. 앱 토큰이 없으면 이전 history polling 경로로 폴백하지만 doctor는 이를 DEGRADED로 표시합니다.

Slack 연동 절차

Slack 앱에서 Socket Mode를 켜고, connections:write 범위의 app-level token을 만듭니다. Bot Token Scopes에는 app_mentions:read, chat:write, channels:history, channels:read를 넣고 bot event app_mention, message.channels를 구독한 뒤 앱을 재설치합니다.

# 1) 두 토큰을 시크릿 레이어에 저장
echo 'SLACK_BOT_TOKEN=xoxb-...' >> ~/.geode/.env
echo 'SLACK_APP_TOKEN=xapp-...' >> ~/.geode/.env
echo 'GEODE_GATEWAY_ENABLED=true' >> ~/.geode/.env

# 2) binding 규칙 선언 (.geode/config.toml)
#    channel_id가 없는 규칙은 안전상 건너뜁니다
[gateway]
pollers = ["slack"]
allow_computer_use = false

[[gateway.bindings.rules]]
channel = "slack"
channel_id = "C0ABCDEF1"
require_mention = true

# 3) Slack 채널에서 /invite @geode 후 데몬 재시작
pkill -f "geode serve"
geode serve &

# 4) 점검
geode doctor slack

binding 필드 각각의 의미와 검증 방법은 바인딩 설정 가이드에 있습니다. geode doctor slack은 앱 토큰, 봇 scope, 각 binding의 채널 멤버십과 클릭 가능한 채널 링크까지 검사합니다.

메시지가 실행되는 방식

매칭된 메시지는 channel, channel_id, 발신자, 스레드로 세션 키를 만들어 같은 스레드의 대화가 하나의 세션으로 이어집니다 (core/memory/session_key.py). 실행은 DAEMON 모드라 승인 프롬프트가 없고, 그래서 run_bash delegate_task, 원격 desktop control은 기본 차단됩니다. 메시지당 wall-clock 예산은 binding의 time_budget_s가 정하며 기본 120초입니다 (core/messaging/models.py).

require_mention = true여도 새 대화의 첫 메시지만 GEODE를 멘션하면 됩니다. 첫 메시지의 루트 timestamp가 처음부터 thread/session/checkpoint 키가 되며, GEODE가 참여한 스레드의 이후 사람 대댓글은 재멘션 없이 같은 문맥을 이어갑니다. 데몬 재시작 뒤에도 ACTIVE 또는 PAUSED 체크포인트의 메시지와 상태를 CLI resume 경로로 복원합니다.

메신저에서 computer use

먼저 geode doctor에서 computer-use desktop이 정상인지 확인합니다. 그 다음 멤버십이 제한된 비공개 binding에서만 아래처럼 원격 제어를 명시적으로 엽니다. 옵션이 꺼져 있으면 provider-visible schema가 있더라도 DAEMON executor가 computer computer_use를 dispatch 전에 거부합니다.

[computer_use]
enabled = true
env = "host"
driver = "helper"

[gateway]
allow_computer_use = true

이 옵션은 Slack뿐 아니라 같은 DAEMON 실행 경계를 쓰는 모든 gateway binding에 적용됩니다. binding을 통과한 모든 발신자가 desktop action을 요청할 수 있으므로 제한된 채널에서만 사용하세요.run_bash, delegate_task, personal-workspace 도구, scheduler, MCP run_agent 차단은 유지됩니다.

실패 모드

증상원인해법
봇이 아무 채널에도 반응하지 않음binding 규칙 없음 또는 channel_id 불일치바인딩 없는 채널은 무시가 기본값입니다. 규칙의 channel_id를 실제 ID로 맞춥니다.
geode doctor slack이 토큰 누락 보고SLACK_BOT_TOKEN 또는 SLACK_APP_TOKEN이 .env에 없음두 토큰을 ~/.geode/.env에 추가하고 데몬을 재시작합니다.
bot_member=False봇이 바운드 채널에 없음doctor가 제시한 채널 링크를 열고 /invite @geode를 실행합니다.
새 대화의 멘션 없는 메시지에 응답하지 않음require_mention = true첫 메시지는 멘션해야 합니다. 한 번 참여한 스레드의 대댓글은 재멘션 없이 이어집니다.
응답이 120초 부근에서 끊김메시지당 time budget 도달binding 또는 [gateway]time_budget_s를 올립니다.

다음