[일주일프/01] Slack 쓰레드를 단일 문서로 취합해주는 Claude Skill

LLM이 읽기 쉬운 데이터를 만들어주세요.
💡
'일주일프'나와 내 주변 사람을 위한 유용한 프로그램을 매주 1개씩 만들어서 소셜 미디어에 공유하는 프로젝트입니다. 2026년에 잡은 가장 중요한 목표이기도 합니다.

작업 배경

코르카에서는 작년 말부터 AI Science에 베팅해서 열심히 이것저것 건드려보고 있습니다. AI 시대에 걸맞게 AX 팀의 한 사람 한 사람이 프로젝트를 하나씩 맡아 E2E로 탐색, 기획, 구현까지 다 해보고 있는데요. 저도 하나 새로 만들어보기 위해 탐색을 시작했습니다.

첫 질문은 '어디부터 탐색하지?' 였는데요. 다행히 얼마 전부터 AI Science에 관련된 흥미로운 글을 볼 때마다 슬랙의 특정 쓰레드에 링크를 공유하는 전통(?)이 생겼습니다. 자연스럽게, 새로운 제품 아이디어를 탐색하기 시작하는 데 가장 좋은 소스도 이 슬랙 쓰레드라고 생각했죠. 그러니 '이 링크에 있는 자료들을 쫙 조사해보자'가 다음 수순이었습니다.

저는 대개 AI 사용의 첫 단계를 LLM이 읽기 쉬운 포맷(= 마크다운)으로 문서를 하나 만드는 것으로 시작합니다. 처음에는 Claude in Chrome을 이용해서 내용을 취합시켜봤는데 속도가 너무 느려서 답답했어요. 그리고 이렇게 슬랙 메시지를 취합하는 행동은 앞으로도 꽤 자주 할 것 같았습니다.

대신 Claude Code에서 '슬랙 쓰레드 링크를 주면 CLI를 통해 단일 문서로 취합하는 스크립트'를 만들기 위한 기술을 몇가지 제안해달라고 했더니 ​3가지 후보를 줬습니다.

  • Slack MCP: CLI보다 MCP 연동하면 더 쉽다고 제안했는데, 저는 스크립트로 할 수 있는 건 웬만하면 MCP를 쓰기 싫었기 때문에 패스했습니다.
  • slack-cli: 2년 전에 개발 중단되었길래 패스했습니다.
  • slackcli: 두 달 전에 만들어진 녀석이어서 일단 선택해봤습니다.

테스트용 슬랙 봇을 만들고, 권한을 추가하고, slackcli를 이용해서 PoC를 구현했습니다. 30분도 안 돼서 만족스러운 문서를 만들 수 있게 깎을 수 있었지만, slackcli의 부족한 점들이 (대상 채널에 자동으로 join을 못 하고, 사람 이름이 user id로 나오는 등 필요한 API들이 부재함) 눈에 여럿 띄더군요. 그래서 기존 코드를 참고하여, slackcli에 대한 의존성 없이 직접 돌아가도록 해봤는데 (신중하게 Plan을 짜긴 했지만) 거의 원샷에 변환됐어요.

claude-plugins/plugins/slack-to-md/skills/slack-to-md/SKILL.md at main · corca-ai/claude-plugins
Contribute to corca-ai/claude-plugins development by creating an account on GitHub.

(참고로 이 스킬은 코르카의 클로드 플러그인 마켓플레이스에 공개되어 있습니다)

slack-to-md 스킬 소개

1개 이상의 Slack 메시지 URL을 단일한 마크다운 문서로 변환하는 스킬입니다.

사용법:

  • 링크를 이용해 기존 메시지 취합하기: slack-to-md <slack-message-url1> <slack-message-url2> <...>
  • 기존 문서 업데이트하기(예: 쓰레드에 새로 추가된 메시지를 기존 문서에 추가): slack-to-md <path-to-file.md>
  • 그 외: slack-to-md #foo 채널과 #bar 채널에서 이러저러한 내용을 취합해줘

주요 기능:

  • Slack 스레드의 모든 메시지를 마크다운으로 변환. 봇은 필요시 자동으로 해당 채널에 join
  • 문서 생성을 위한 bash 스크립트를 이용해 토큰 절약
  • 첫 메시지 내용을 기반으로 의미있는 파일명 자동 생성
  • slack-outputs/ 디렉토리에 저장

필수 조건:

  • Node.js 18+ 필요
  • jq 설치 필요 (JSON 파싱용)
  • Slack Bot 설정 필요 (생성 가이드):
    • OAuth scopes: channels:historychannels:joinusers:read
    • plugins/slack-to-md/skills/slack-to-md/.env.local에 BOT_TOKEN=xoxb-... 설정

구현 과정에서 고려한 점

외부에도 공개할 목적으로 스킬을 만든 건 처음인데, 스킬 깎는 게 하나의 프로그램을 구현하는 거랑 정말 유사하더군요. 이런 것들을 신경쓰며 만들었습니다.

1) LLM이 꼭 할 필요 없는 일은 시키지 않는다

토큰이 아무리 장기적으로 저렴해진다 해도, 토큰을 꼭 쓸 필요 없는 부분은 피하는 게 유리합니다. 비용뿐 아니라 속도와 일관성 때문에 그렇습니다. 따라서,

  • 인간이 할 일은 인간이 한다: Slack 봇 만들고 권한 주기, 환경변수로 토큰 넣기, 슬랙 링크 제공하기 등
  • 스크립트(결정론적 알고리즘)가 할 일은 스크립트로 한다:
    • 에이전트에게 Slack API 사용법을 문서화해서 주고 API를 호출하게 하는 게 아니라, Slack API를 호출하는 스크립트를 사용하게 한다. 이 안에서 최대한 자동화한다(슬랙 채널에 자동 봇 join 등).
    • Slack API 호출 결과 JSON을 정해진 포맷으로 문서화하는 역할도 에이전트가 하는 게 아니라 스크립트를 호출하게 한다.

2) Skill은 오케스트레이터, 스크립트는 Tools

1과 연결됩니다. 스크립트는 서로 의존적인 게 아니라 최대한 독립적으로, stdin을 입력받아 stdout으로 내보내는 저수준 API로 설계했습니다(처음에 Opus가 세운 PLAN에서는 스크립트가 서로 의존적이었습니다). 그래야 스킬을 실행하는 에이전트가 스크립트들을 Tool로서 조합해서, 지능적으로 사용할 수 있습니다.

예를 들어 slack-to-md #foo 채널과 #bar 채널에서 이러저러한 내용을 취합해줘 같이, 기존 유즈케이스에서 다루기 조금 어려운 요청을 하더라도 에이전트가 저수준 API를 이용해 결과를 낼 수 있는 것이죠.

3) skill-creator 스킬로 리팩토링

일단 결과를 보고 나면 개선하고 싶어지는 게 사람 심리죠. 그러나 핑퐁을 거치다 보면 스킬 문서가 비대해지기 마련입니다. 그래서 저는 적당히 스킬 문서가 깎였다 싶으면 Anthropic이 제공하는 기본 스킬 중 하나인 skill-creator 스킬을 참고해서 더 좋은 / 압축된 스킬 문서를 만들어달라고 합니다. 대개 중복이 줄어들고, 더 명시적인 구조로, 더 좋은 문서가 생성되더군요.