[일주일프/01] Slack 쓰레드를 단일 문서로 취합해주는 Claude Skill
작업 배경
코르카에서는 작년 말부터 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을 짜긴 했지만) 거의 원샷에 변환됐어요.
(참고로 이 스킬은 코르카의 클로드 플러그인 마켓플레이스에 공개되어 있습니다)
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:history,channels:join,users:read plugins/slack-to-md/skills/slack-to-md/.env.local에BOT_TOKEN=xoxb-...설정
- OAuth scopes:
구현 과정에서 고려한 점
외부에도 공개할 목적으로 스킬을 만든 건 처음인데, 스킬 깎는 게 하나의 프로그램을 구현하는 거랑 정말 유사하더군요. 이런 것들을 신경쓰며 만들었습니다.
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 스킬을 참고해서 더 좋은 / 압축된 스킬 문서를 만들어달라고 합니다. 대개 중복이 줄어들고, 더 명시적인 구조로, 더 좋은 문서가 생성되더군요.
Member discussion