포스트

Discord를 회의실 삼아 Claude Code 에이전트랑 게임 만든다

Discord를 회의실 삼아 Claude Code 에이전트랑 게임 만든다

둘이서 시작한 인디 게임 Save the Penguin. 시작할 때 서로 지인들한테 확정 판매로 미리 약속을 잡아두고 들어갔다. 작은 프로젝트지만 들어줄 사람이 정해져 있다는 게 작업의 결을 바꿨다. 다만 둘 다 시간이 다르게 비어서 어차피 비동기로 굴러간다. 그래서 Discord 채널 하나를 공용 회의실로 두고, 누가 피드백을 던지면 Claude Code 에이전트가 그걸 받아 코드를 고치고 빌드를 다시 올리는 식으로 굴리고 있다.

어떻게 굴러가나

파이프라인 역할은 직접 만든 southglory/system-agents-plugins가 한다. Claude Code의 슬래시 스킬로 Discord ↔ 에이전트를 연결하는 도구 모음이다.

쓰는 스킬은 네 개다. /discord-huddle-sync는 REST 폴링으로 채널의 새 메시지·첨부 파일을 로컬 JSONL에 적재한다. 누락 없이 받기 위해서다. /discord-huddle-listen은 Gateway WebSocket으로 실시간 signal 파일을 떨어뜨리고, Claude Code의 Monitor가 그걸 픽업한다. 빠르게 반응하기 위해서다. /discord-huddle-post는 반대 방향 — 에이전트가 채널에 텍스트·파일·웹페이지 스냅샷을 게시한다. /discord-huddle-summarize는 적재된 JSONL을 현재 세션의 모델이 직접 읽고 회의록 마크다운으로 정리한다. 별도 LLM API 호출이 없으니 요약 비용이 따로 안 든다.

여기에 system-agents-templatechatrooms/, board.yaml, turn-bot이 결합되면 에이전트들끼리 턴제로 작업 보드도 굴린다. Unity 쪽은 별도 플러그인의 /publish-build 한 줄로 빌드 → zip → GitHub Release → Discord 게시까지 이어진다.

빌드를 봇이 알아서 던진다

Discord에 빌드와 피드백이 흐르는 모습

PenguinCollab은 디스코드 봇 형태로 떠 있는 Claude Code 에이전트다. 빌드 링크와 zip을 채널에 자동으로 올리는 것도 이 친구다. 그 옆에 내가 “녹화 방식 점검해야 함, ffmpeg gif 정리” 같은 노트를 던져두면, /discord-huddle-listen으로 실시간 시그널을 받고 있는 PenguinCollab이 그 자리에서 흐름을 읽고 작업에 반영한다.

내가 “나머지는 @강현명 님 피드백을 따를 것”이라고 한 줄 적어두면 동작이 달라진다. PenguinCollab은 그 지점에서 멈추고 동료가 답을 남길 때까지 기다린다. 즉답할지 사람을 기다릴지가 메시지 한 줄로 결정된다.

피드백 → 채팅 → 에이전트 반영 → 새 빌드 자동 게시. 이 사이클이 거의 손을 안 거치고 돈다.

기술 결정도 같은 채널에서 한다

GuppyLM 도입 보고와 모델 비교

펭귄 DJ에게 영어로 말하게 하려고 8.7M 파라미터 GuppyLM을 올렸다고 채널에 보고하고, 응답이 “i’m just a fish, i don’t know” 식으로 단편적이라 “그렇게 멍청하면 LLM 맞긴 한가요?”라고 자조도 같이 적어뒀다. PenguinCollab이 그 글타래에 모델 사이즈 비교와 Phi-3-mini, TinyLlama 1.1B Chat fine-tune 같은 후보를 정리해 답해주고, 그 흐름 위에서 다음 트랙을 정했다. 게임 코드 토론도, 모델 결정도, 빌드 배포도 Discord 채널 하나로 모여든다.

이렇게 했더니 뭐가 좋았나

가장 큰 건 시간차가 사라진 점이다. 동료가 새벽에 던진 피드백을, 다음 날 작업 들어간 사람이 그대로 이어받아 진행한다. 채널엔 PenguinCollab이 항상 떠 있어서 던진 메시지가 허공에 사라지지 않는다.

회의록은 자동으로 쌓인다. /discord-huddle-summarize가 채팅을 마크다운으로 정리해 git에 commit하니까, 새로 합류한 사람도 git clone만 하면 과거 토론을 다 읽을 수 있다. 빌드 배포는 /publish-build 한 줄이라 손이 거의 안 간다.

세션 간 컨텍스트 유실 문제도 huddle sync가 메운다. Claude Code 세션이 끊겨도 다음 세션에서 sync 한 번 돌리면 그동안의 대화가 전부 들어온다.

한계도 있다

피드백 사이클이 결국 사람 시간에 묶인다. 빨리 오면 사이클이 빠르고, 오프라인이면 에이전트가 가설을 세워 진행해야 한다. 그래서 에이전트별 CLAUDE.md에 “어디까지는 단독으로 결정해도 된다”는 권한 룰을 따로 적어둔다.

봇과 에이전트는 세션이 떠 있을 때만 산다. Gateway listener는 별도 프로세스로 사용자가 띄워야 하고, 죽으면 그동안의 메시지는 sync로 늦게 복구된다.

여전히 사람의 결정이 필요한 순간도 있다. 모델 교체로 빌드 사이즈가 +900MB 늘어나는 결정 같은 건 봇이 단독으로 내릴 수 없고, 그래서도 안 된다.

전체 흐름

1
2
3
4
5
6
7
8
9
10
사람 동료 (Discord 메시지)
   ↓ /discord-huddle-listen (실시간 signal)
Claude Code 에이전트
   ↓ 코드 수정 + 컴파일 + 검증
Unity 빌드
   ↓ /publish-build
GitHub Release + Discord 게시
   ↓
사람 동료 (다음 피드백)
   ↺

게임 개발이 즐거운 이유는 결국 누군가 “오 이거 재밌네” 혹은 “이건 좀 이상한데”라고 말해주기 때문이다. system-agents-plugins는 그 말을 채널에 남겨두고, 시간이 다른 사람·봇·에이전트가 그걸 이어받아 다음 빌드를 만든다. 비동기 협업이 늘 답답했던 부분을 절반쯤은 메워준다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.