skills/slack-latest/SKILL.md
Gather recent Slack messages, read threads, send replies, and upload/download files. Use when the user asks about Slack activity or wants to interact with Slack.
npx skillsauth add junghan0611/agent-config slack-latestInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
slack.py is a self-contained Python script (no dependencies beyond
the standard library) at {baseDir}/slack.py.
환경변수 방식 (권장 — ~/.env.local에 설정):
export SLACK_WORKSPACE_URL="https://WORKSPACE.slack.com"
export SLACK_TOKEN="xoxc-..."
export SLACK_COOKIE="xoxd-..."
환경변수가 없으면 ~/.config/skills/slack-latest/credentials.json 파일을 읽음.
api/ 입력 → *.slack.com/api/ 요청 찾기pbpaste | python3 {baseDir}/slack.py auth
토큰 수명: 브라우저 로그아웃 시 만료. 인증 에러 발생하면 재설정.
검증:
python3 {baseDir}/slack.py auth-test
채널 메시지 수집. 기본적으로 --no-dm을 사용하여 개인 DM을 제외한다.
# 채널만 (DM 제외) — 기본 사용법
python3 {baseDir}/slack.py gather --days 3 --no-dm --out ~/tmp/slack-recent.json
# DM 포함 (사용자가 명시적으로 요청한 경우만)
python3 {baseDir}/slack.py gather --days 3 --out ~/tmp/slack-recent.json
Output: JSON array grouped by channel (most recently active first).
| Flag | Description |
|------|-------------|
| --days N | time window (default: 3) |
| --no-dm | DM/group DM 제외 (채널만) |
| --max-text N | truncate message text in chars (default: 500) |
| --include-ids | add _id, _uid, _ts for follow-up API calls |
| --compact | single-line JSON (saves ~25% size) |
| --out PATH | output file path (default: ~/tmp/slack-recent.json) |
[
{
"channel": "#general",
"messages": [
{
"from": "홍길동", "at": "2026-03-07 12:18 KST",
"text": "배포 완료했습니다",
"replies": [
{"from": "김영희", "at": "2026-03-07 12:20 KST", "text": "확인!"}
]
}
]
}
]
repliesolder_replies: N when replies fall outside time windowKST)gather 는 bot_message 를 noise 로 버려서, 봇이 쏘는 alert 채널(서버응답체크 / cube alerts 등)을
통째 누락한다. history 는 단일 채널을 읽되 --include-bot 으로 bot alert 를 살리고,
alert 본문이 attachments/blocks 에만 있을 때도 text 로 복원한다. read-only.
이것이 운영 점검("문제 없나?!")에서 P0 bot alert 회수 경로다.
# bot alert 채널 — --include-bot 필수
python3 {baseDir}/slack.py history --channel C095PQMMW9J \
--days 14 --include-ids --include-bot --out /tmp/noti-server-history.json
출력은 gather 호환 [{"channel","_id","messages":[...]}] 라서 incidentcli
slack_alert ingest 가 바로 먹는다:
cd ~/repos/work/incidentcli
./run.sh ingest --from slack_alert --input /tmp/noti-server-history.json \
--incident-id <DENOTE_ID> --window FROM..UNTIL --out /tmp/envelope.json
./run.sh validate-output /tmp/envelope.json
| Flag | Description |
|------|-------------|
| --channel | Channel ID (required) |
| --include-bot | bot_message alert 포함 (기본 제외 — alert 채널엔 필수) |
| --days N | time window (default: 1). 비면 7/14 로 넓혀도 됨 — 빈 결과는 정상일 수 있음 |
| --channel-name | 표시 이름 override (기본: conversations.info 로 해석) |
| --include-ids | _uid 추가 (_ts/_id 는 항상 포함) |
| --max-text N | message text truncate (default: 800) |
| --compact / --out | gather 와 동일 |
channel_join 등)만 항상 skip, bot alert 는 --include-bot 로 제어.python3 {baseDir}/slack.py thread --channel C0123456789 --ts 1700000000.000001
send 는 텍스트만 / 파일만 / 텍스트+파일 첨부 모두 지원. 스레드 답글도 가능.
# 텍스트만 (chat.postMessage)
python3 {baseDir}/slack.py send --channel C0123456789 --text "Hello"
# 스레드 답글
python3 {baseDir}/slack.py send --channel C0123456789 \
--thread-ts 1700000000.000001 --text "Got it"
# 파일만 업로드 (files.upload v2 — getUploadURLExternal + complete)
python3 {baseDir}/slack.py send --channel D09336BAYF7 \
--file ~/Documents/report.pdf
# 파일 + 메시지 (--text 가 initial_comment 로 들어감)
python3 {baseDir}/slack.py send --channel D09336BAYF7 \
--file ~/report.pdf \
--text "이사님, 검토 요청드립니다."
# 스레드 안에 파일 첨부
python3 {baseDir}/slack.py send --channel C0123456789 \
--thread-ts 1700000000.000001 \
--file ~/snapshot.png --text "방금 캡쳐"
옵션:
| Flag | Description |
|------|-------------|
| --channel | Channel/DM ID (required) |
| --text | 메시지 본문. --file 과 함께 쓰면 첨부 코멘트로 들어감 |
| --file | 업로드할 파일 경로 |
| --title | 파일 제목 (기본: 파일명). --file 없으면 무시 |
| --thread-ts | 스레드 답글 timestamp |
--text 와 --file 둘 다 비어 있으면 에러.
# 파일 ID 로 다운로드 (현재 디렉토리에 원본 파일명으로 저장)
python3 {baseDir}/slack.py get-file --file-id F0B529622S3
# Permalink URL 로도 가능 (URL 안에서 F<ID> 자동 추출)
python3 {baseDir}/slack.py get-file \
--url "https://team.slack.com/files/U092.../F0B5.../report.doc"
# 출력 경로/디렉토리 지정
python3 {baseDir}/slack.py get-file --file-id F0B529622S3 --out /tmp/report.doc
python3 {baseDir}/slack.py get-file --file-id F0B529622S3 --out ~/Downloads/
파일 ID 는 gather --include-ids 결과의 메시지에 보이는 files[].id, 또는
업로드 후 응답의 permalink URL 에서 얻을 수 있다.
--no-dm 사용. 사용자가 명시적으로 DM 요청 시에만 생략send 실행 전 반드시 사용자 확인 (파일 첨부도 동일)get-file 결과의 saved 경로를 사용자에게 알림testing
Cut an OpenClaw-style CalVer snapshot tag. Tag loop = collect commits + closed NEXT.md items, move them to CHANGELOG.md, remove only those closed items from NEXT.md, then pre-flight/tag/push/stamp when explicitly requested. Not SemVer/deploy; doc/ops repos tag too. ROADMAP.md is optional/manual. Triggers: 태그 박자, 릴리즈 컷, changelog 정리, NEXT 비우자/갈무리, cut a release/tag, vYYYY.M.D[-suffix].
development
멀티하네스용 /recall 래퍼. native custom command surface가 없는 하네스(예: Antigravity, Codex)에서도 /recall에 해당하는 다축 맥락 복원을 skill로 호출한다. session-recap, NEXT.md·ROADMAP.md, git status/log, semantic-memory를 조합해 어제/오늘의 작업축을 되살린다.
tools
포지(forge) — 셀프호스팅 Forgejo 이슈/PR/라벨/코멘트 작업면. 힣 에이전트가 코드 면에서 일하는 공유 손. botment의 자식 패턴(가든 댓글면 → 코드 댓글면 endpoint swap). 'forge', 'forgejo', '포지', 'issue', 'pull request', '이슈', '풀리퀘', '코드 댓글', '라벨'.
tools
sync entwurf 자식을 들여다보는 손. 호출자가 'Mattering...'에 묶여있을 때 자식 분신이 무엇을 하는지 확인. entwurf_peers는 control socket 있는 세션만 보여주는데, 이 스킬은 자식 entwurf 세션(이름 태그 entwurf)까지 합쳐서 본다. 트리거: 'entwurf-peek', '분신 들여다보기', '진행 중 세션', 'sync entwurf 안에서', 'peek session', 'live session map', '분신 추적'.