
Claude Code × Discord로 만드는 「정보 수집 완전 자동 파이프라인」
요약
Claude Code의 Discord 플러그인과 Skills 기능을 활용하여, Discord에 URL을 입력하면 자동으로 내용을 요약하고 GitHub에 저장하는 자동화 파이프라인 구축 방법을 소개합니다.
핵심 포인트
- Claude Code와 Discord 간의 양방향 통신 구현
- 트윗 내용 취득부터 GitHub 커밋까지 전 과정 자동화
- Discord 채널별 분류 및 스레드 기반의 효율적 운영 방식
- 정보 수집의 '나중에 읽기용 무덤' 문제를 자동화로 해결
서론
X(구 Twitter)에서 발견한 기술 기사나 AI 논문의 URL을 Discord에 툭 던지는 것만으로——
- 트윗 내용 취득
- 링크된 기사나 논문도 읽기
- 카테고리 자동 판정
- 상세한 요약 Markdown 생성
- GitHub 리포지토리(Repository)에 commit & push
- Discord에 간결한 요약을 답장
이 모든 것이 완전 자동(Full Automation)으로 완료됩니다.

위는 URL만 붙여넣은 게시물, 아래는 Bot의 답장입니다. 카테고리 판정·요약·기록처 링크까지, 이쪽에서는 아무것도 하지 않았습니다.
이 기사에서는 Claude Code의 Discord 플러그인과 Skills 기능을 조합하여 만든 「정보 수집 완전 자동 파이프라인」의 구조와, 1,000건 이상의 Discord 과거 이력을 한꺼번에 정리한 실전 사례를 소개합니다.
왜 만들었는가 - 경위
원래 X(구 Twitter)에서 발견한 기술 기사나 「나중에 읽어야지」라고 생각한 논문을, Discord에 자신만의 서버를 세워 장르별 채널에 던져 넣으며 관리하고 있었습니다. AI, 프로그래밍, 디자인, 논문… 등으로 채널을 나누어 URL을 붙여가는 운영 방식이었습니다.
하지만 붙여넣는 것만으로 만족해버려서, 결국 다시 보지 않는 「나중에 읽기용 무덤」이 되어버렸습니다.
그러던 차에 Claude Code가 Discord 플러그인을 공개했습니다. 「Discord와 Claude Code가 연결된다」는 말을 듣는 순간, ——내가 정보 수집에 사용하고 있는 Discord 채널과, 정리용 GitHub 리포지토리를 연결하면 잘 될 것 같다는 생각이 들었습니다.
시행착오
처음에는 Discord의 **개인 채팅(DM)**에서 Claude Code와 주고받는 방식으로 시도했습니다. 심플하고 바로 작동할 것 같았기 때문입니다.
하지만 실제로 사용해 보니, AI도 논문도 프로그래밍 URL도 전부 DM에 섞이는 형태가 되어 상당히 사용하기 불편했습니다. 어렵게 채널별로 나누어 정리해 온 것이 빛을 발하지 못하는 구성이었습니다.
그래서 방침을 전환하여, Discord 서버의 채널 측으로 Claude Code를 부르는 형태로 만들었습니다. 여기에 더해 「특정 스레드(Thread)만 보기」 설정을 하여, 필요한 때에만 반응하도록 하고 있습니다.
이로써 채널별로 정리하면서, 보고 싶은 스레드만 Claude Code가 처리하는 현재의 운영 방식에 안착했습니다.
전체 아키텍처
┌─────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ Discord │────▶│ Claude Code │────▶│ GitHub Repo │
│ (스마트폰/PC) │◀────│ (상주 터미널) │ │ (자동 push) │
...
사용자가 하는 일은 Discord에 URL을 붙여넣는 것뿐입니다.
셋업 (Setup)
1. Claude Code Discord 플러그인 도입
Claude Code에는 공식 Discord 플러그인이 있어, Discord 채널과의 양방향 통신이 가능합니다.
# Claude Code의 플러그인 설정 (settings.json)
{
"enabledPlugins": {
...
Discord Bot을 생성하고, 토큰을 설정하여 페어링하면 Discord로부터의 메시지가 실시간으로 Claude Code에 전달됩니다.
2. fxtwitter API를 통한 트윗 취득
X(Twitter)의 트윗 내용을 취득하기 위해, 무료이며 인증이 필요 없는 fxtwitter API를 사용합니다.
트윗 ID를 URL에서 추출하여 이 API에 액세스합니다. 그것만으로 작성자명, 본문, 이미지, 인용 원문 등 모든 정보를 JSON 형식으로 취득할 수 있습니다.
3. 리포지토리의 디렉토리 구성
discord/
├── research/ # 카테고리별·연월별로 정리
│ ├── AI 전반/
...
4. Skills를 통한 워크플로우 정의
Claude Code의 Skills 기능을 사용하여, 이 워크플로우 전체를 SKILL.md에 정의합니다.
{기록처 리포지토리}/.claude/skills/discord-record/SKILL.md
Skills에 작성함으로써, Claude Code가 「X URL이 오면 이 절차로 처리한다」는 판단을 자율적으로 수행할 수 있게 됩니다.
Skills의 설계
실제로는 2개의 스킬 (Skills) 로 나누어 운용하고 있습니다:
discord-record: Discord 채널에서 X URL을 감지 → 취득 → 요약 → 기록 → push → 답장하는 메인 워크플로우 (Main Workflow)fetch-tweet: 트윗 취득 부분을 독립된 user-invocable 스킬로 분리 (/fetch-tweet {URL}로 단발 호출 가능)
두 가지 모두 프로젝트 레벨 (Project level) (기록 대상 리포지토리의 .claude/skills/`)에 두고 있습니다.
{기록 대상 리포지토리}/.claude/skills/
├── discord-record/
│ └── SKILL.md ← 메인 워크플로우
...
처음에는 사용자 레벨 (~/.claude/skills/)에 두었으나, 스킬 자체를 git으로 동기화하고 싶어져서 리포지토리 측으로 옮겼습니다. 실행하고 있는 것은 상시 가동 중인 Windows PC이고, 기사나 설정을 작성하는 것은 별도의 Mac입니다. 사용자 레벨에 두면 한쪽 단말기에만 존재하는 상태가 됩니다. 실제로 그 때문에 "있어야 할 스킬이 없다"며 혼란을 겪었습니다.
기록 대상 리포지토리에 스킬을 함께 두면 git pull로 일치시킬 수 있고, 스킬의 변경 이력도 그대로 남습니다. 공식 문서에서도 공유 방법의 첫 번째로 ".claude/skills/를 버전 관리 (Version control)에 커밋한다"를 꼽고 있습니다.
discord-record 스킬 (개요)
---
name: discord-record
description: Discord로부터 X URL을 취득하여 요약하고 리포지토리에 기록
...
스킬의 내용에는 다음과 같은 6단계 (Step)를 정의하고 있습니다:
Step 1: 트윗 내용 취득
- URL에서 트윗 ID를 추출
- fxtwitter API로 본문·게시자·인용 원본을 취득
Step 2: 링크 대상 콘텐츠 취득
- Zenn, Qiita, note 등의 기사 URL이 있으면 WebFetch로 내용도 취득
- arXiv 논문의 경우 PDF 다운로드 + 상세 요약도 작성
Step 3: 카테고리 자동 판정
- 내용에 기반하여 11개 카테고리 (AI 전반, Claude, 디자인 등)로 자동 분류
Step 4: MD 파일 작성
- Discord 답장용의 간결한 요약과는 별도로, MD 파일에는 상세한 내용을 기술
- 링크 대상의 기사·논문·툴의 내용을 철저히 조사하여 기록
Step 5: Git commit & push
- 자동으로 스테이징(Staging) → 커밋(Commit) → 푸시(Push)
Step 6: Discord 답장
- 카테고리 + 1줄 요약 + 2~3줄의 요점 + MD 파일의 GitHub 링크
- 간결하게. 장문 금지
Discord 답장과 MD 상세도의 분리
이 부분이 설계상의 포인트입니다.
- Discord 답장 → 간결하게 (카테고리 + 요약 + 요점만)
- MD 파일 → 상세하게 (링크 대상의 기사·툴·논문의 내용까지 조사하여 기술)
Discord는 어디까지나 통지·확인의 장이며, 자세한 내용은 GitHub의 MD를 보러 가는 설계입니다.
실전 예시: 1,000건의 과거 이력을 한꺼번에 정리
배경
Discord 서버에 1년 이상 축적된 X의 URL 군 (약 1,055건)을 모두 이 포맷으로 상세한 요약으로서 기록했습니다.
채널과 건수
| 채널 | 건수 |
|---|---|
| program | 301건 |
| ... |
처리 흐름
- Discord 데이터 패키지 (package.zip)에서 messages.json을 추출 → 월별로 X URL의 트윗 ID를 추출
- 병렬 서브 에이전트 (Parallel Sub-agent) (최대 12건/배치 × 5~6배치 병렬)로 fxtwitter API에서 한꺼번에 취득 → 월별 상세판 정리 MD 파일을 작성
- git commit & push
서브 에이전트에 대한 프롬프트 (Prompt) 설계
다음 12개의 X tweet ID에 대하여,
https://api.fxtwitter.com/i/status/{ID} 에 WebFetch로 접속하여
내용을 취득해 주세요.
...
중요: 서브 에이전트(Sub-agent)에는 파일 경로를 참조하는 것이 아니라, ID를 프롬프트에 직접 포함해야 합니다. 서브 에이전트에서는 부모 에이전트의 /tmp/ 파일을 볼 수 없기 때문입니다.
논문 채널의 특별 처리
논문 채널(34건)에서는 추가로 다음을 실시합니다:
- 트윗으로부터 원문 논문의 arXiv ID를 특정 (WebSearch로 검색)
- arXiv에서 PDF를 다운로드 (
discord/paper/AI전반/에 저장) - PDF를 읽고 상세한 요약 MD를 작성 (배경·방법론·실험 결과·의의 구조)
- PDF + 요약 MD 쌍으로 저장
13건의 논문 PDF와 요약을 자동으로 생성했습니다.
리플리 체인(Reply Chain) 취득
X에서는 하나의 주제를 연속 트윗(셀프 리플라이)으로 작성하는 경우가 있습니다. 첫 번째 트윗만 가져오면 이야기가 중간에 끊겨 버립니다. 그래서 연속 트윗 전체를 묶어서 가져오는 스크립트도 준비했습니다. 이 부분만은 fxtwitter가 아니라 X API v2의 종량제(Pay-per-use)를 사용합니다.
핵심은 검색 쿼리(Search Query)를 구성하는 것입니다.
# 동일한 대화(conversation_id) 내에서, 게시자가 자기 자신에게 답장한 것만 추출
query = f"conversation_id:{tweet_id} from:{author_username} to:{author_username}"
params = {
...
conversation_id는 스레드 전체를 묶는 ID입니다. 여기에 from:과 to:를 동일한 사용자 이름으로 적용하면, 타인의 리플라이를 제외한 '본인의 연속 트윗만' 남게 됩니다. 그 후 next_token으로 페이지네이션(Pagination)을 하고, created_at으로 시계열 정렬을 하면 원래 순서로 되돌릴 수 있습니다.
next_token = data.get("meta", {}).get("next_token")
...
all_replies.sort(key=lambda t: t.get("created_at", ""))
Discord에서 (리플라이) URL 형식으로 보내면 이 경로를 통해 연속 트윗 전체가 하나의 MD 파일로 합쳐집니다. 전체적으로 150줄 정도의 작은 스크립트입니다.
운용해 보니
좋았던 점
- 정보의 산재 방지: Discord로 흘러가는 URL이 모두 구조화되어 남음
- 사후 검색 가능: GitHub 리포지토리 검색이나 grep으로 과거 정보를 찾을 수 있음
- 높은 요약 품질: Claude Code가 링크된 기사까지 읽고 요약하므로, 트윗 본문만으로는 알 수 없는 상세 내용이 기록됨
- 스마트폰에서도 기록 가능: Discord에 URL만 붙여넣으면 되므로, 이동 중에도 정보 수집 완료
개선하고 싶은 점
- 이미지 내용도 취득 및 기록하고 싶음 (현재는 이미지가 포함된 트윗의 이미지 내용을 기록하지 못하는 경우가 있음)
- 카테고리 판정 정밀도 향상 (드물게 오분류가 발생함)
- 중복 체크 (동일한 URL을 두 번 보냈을 경우의 탐지)
요약
Claude Code의 Discord 플러그인 + Skills + fxtwitter API의 조합으로, "URL을 붙여넣기만 하면 정보가 정리되는" 파이프라인을 구축했습니다.
1,000건 이상의 과거 이력을 포함하여 모두 상세한 요약으로 기록할 수 있으며, 연구 활동 및 지식 습득(Catch-up)에 크게 기여하고 있습니다.
Claude Code의 Skills 기능은 이러한 정형 워크플로우(Workflow) 자동화에 매우 강력합니다. 한 번 스킬을 정의해 두면, 이후에는 Claude Code가 자율적으로 판단하여 처리해 줍니다.
사용 기술
- Claude Code — AI 처리의 핵심
- Claude Code Discord Plugin — Discord 양방향 통신
- Claude Code Skills — 워크플로우 정의
- fxtwitter API — 트윗 내용 취득 (무료·인증 불필요)
- X API v2 — 리플리 체인 취득 (종량제·(리플라이) 명령어 사용 시에만)
- Git/GitHub — 버전 관리 및 공개
부록: 실제 SKILL.md 전문
여기까지 소개한 내용은 허구가 아니라 실제로 구동 중인 두 개의 SKILL.md로 구현되어 있습니다. 복사해서 재사용할 수 있도록 전문을 올려둡니다.
discord-record/SKILL.md (메인 워크플로우)
---
name: discord-record
description: Discord로부터 X/Twitter URL을 가져와 내용을 요약하여 리포지토리에 기록하고, git push 후 Discord로 답장하는 워크플로우
...
WebFetch: https://api.fxtwitter.com/i/status/{TWEET_ID}
취득하는 정보:
- 게시 일시, 게시자 이름, 핸들
- 트윗 본문 (전문)
...
```markdown
# 제목
## 기본 정보
- **게시자**: 이름 (@handle)
- **원문 URL**: https://x.com/handle/status/{ID}
- **기사 URL**: (있는 경우)
- **게시일**: YYYY-MM-DD
- **기록일**: YYYY-MM-DD
## 내용
(3-10행의 상세 설명. 구체적인 기술명, 도구명 포함. 불렛 포인트 권장)
Step 5: Git commit & push
이 스킬은 기록 대상 리포지토리 내에서 동작하므로, 리포지토리 루트에서 그대로 실행한다.
(터미널마다 절대 경로가 다르므로 cd는 작성하지 않는다. Windows/Mac 어느 쪽에서든 동일한 절차로 동작한다).
git add "discord/research/{카테고리}/{연도}/{월}/"
git commit -m "Discord 기록: {제목 단축 버전}"
git push
논문 PDF가 있는 경우에는 discord/paper/ 도 add한다.
커밋 메시지에 Co-Authored-By 등의 트레일러(trailer)는 붙이지 않는다.
Step 6: Discord 답장
...
카테고리: {카테고리명}
내용: {1행 요약 제목}
{2-5행의 요점 불렛 포인트}
주의:
- 인게이지먼트(engagement) 수치(좋아요, RT, 북마크, 조회수)는 불필요
- 커밋 해시 URL이 아니라, MD 파일의 직접 링크를 보낸다
...
## fetch-tweet/SKILL.md (트윗 취득을 분리한 보조 스킬)
name: fetch-tweet
description: X(Twitter)의 URL로부터 트윗 내용(텍스트·이미지)을 취득하여 표시한다. X의 URL이 포함된 메시지를 받았을 때 사용한다.
...
**{게시자 이름}** (@{핸들}) — {게시 일시}
{트윗 본문}
{이미지가 있는 경우: 이미지 내용 설명}
좋아요: {수} / RT: {수} / 북마크: {수} / 조회: {수}
인자 (Arguments)
$ARGUMENTS
### 배치 장소 및 재현 절차
1. 디렉토리 생성
mkdir -p ~/.claude/skills/discord-record
mkdir -p ~/.claude/skills/fetch-tweet
...
사용자 레벨(`~/.claude/skills/`)에 두면 모든 프로젝트에서 이용할 수 있습니다. 프로젝트별로 고유하게 설정하고 싶다면 `<project>/.claude/skills/`에 두어도 괜찮습니다.
### Discussion

AI 자동 생성 콘텐츠
본 콘텐츠는 Zenn AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기