Install
openclaw skills install slack-readerRead and summarize Slack channel history and thread conversations. Use when receiving Slack links (https://...slack.com/archives/...) or requests to view cha...
openclaw skills install slack-readerScript to fetch Slack channel history, threads, and individual replies. Output is LLM-friendly format: one message per line, ascending order (oldest→newest), minimal whitespace.
scripts/slack-thread.sh (entry point) → scripts/slack-thread.py (main logic)
https://abstract-im.slack.com/archives/C0AE4MGLNUU
^^^^^^^^^^^
Channel ID
https://abstract-im.slack.com/archives/C0AE4MGLNUU/p1770775935866499
^^^^^^^^^^^ ^^^^^^^^^^^^^^^^
Channel ID Message ts (parent)
https://abstract-im.slack.com/archives/C0AE4MGLNUU/p1770776063826049?thread_ts=1770775935.866499&cid=C0AE4MGLNUU
^^^^^^^^^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^
Channel ID Reply ts (child) Parent ts Channel ID (duplicate)
p + 10 digits (seconds) + 6 digits (microseconds). API uses seconds.microseconds format (e.g., p1770775935866499 → 1770775935.866499)| Link Format | Mode | Behavior |
|---|---|---|
/archives/CHANNEL | Channel | Fetch channel history |
/archives/CHANNEL/pTS | Thread | Fetch full thread with ts as parent |
/archives/CHANNEL/pTS?thread_ts=... | Reply | Fetch single reply only |
scripts/slack-thread.sh https://abstract-im.slack.com/archives/CHANNEL/pTIMESTAMP
scripts/slack-thread.sh <channel-id> <thread-ts>
scripts/slack-thread.sh https://abstract-im.slack.com/archives/CHANNEL
scripts/slack-thread.sh <channel-id>
scripts/slack-thread.sh <channel-id> --limit 100
scripts/slack-thread.sh <channel-id> --with-threads
scripts/slack-thread.sh <channel-id> --with-threads --thread-limit 5
scripts/slack-thread.sh https://abstract-im.slack.com/archives/CHANNEL/pREPLY_TS?thread_ts=PARENT_TS&cid=CHANNEL
/archives/CHANNEL = channel, /archives/CHANNEL/pTS = thread, /archives/CHANNEL/pTS?thread_ts=... = reply--with-threads.| Option | Description | Default |
|---|---|---|
--limit N | Number of channel history messages (0=all) | 0 (all) |
--from YYYY-MM-DD | Messages after this date only (channel mode) | none |
--to YYYY-MM-DD | Messages up to this date only (channel mode) | none |
--with-threads | Include thread replies inline | off |
--thread-limit N | Max replies per thread (0=all) | 0 |
--desc | Descending order (newest→oldest) | off (default ascending) |
Use --desc to switch to descending order.
[reply] ch:C0AE4MGLNUU(#dev-backend) thread:1770775935.866499
[2026-03-04T14:32:28|1770776063.826049] user1: Confirmed, will apply the fix
[thread] ch:C0AE4MGLNUU(#dev-backend) parent:1770775935.866499 replies:144 range:2026-02-25~2026-03-04
[participants] user1, user2, user3, absbot (4)
[2026-02-25T22:57:27|1770775935.866499] user1: Parent message (oldest)
[2026-03-04T14:31:05|1770776005.123456] user1: Second message
[2026-03-04T14:32:28|1770776063.826049] absbot: Latest message text 📎file.png [:thumbsup:user2,user3]
[channel] ch:C0AE4MGLNUU(#dev-backend) msgs:200 threads:3
[participants] user1, user2, user3, absbot (4)
[2026-03-04T14:29:00|1770775740.111111] user1: Message text
[2026-03-04T14:32:28|1770775948.222222] absbot: Message text [thread replies:13 latest:2026-03-04T16:00:00]
[2026-03-04T14:30:00|1770775800.333333] user3: Thread reply (older)
[2026-03-04T14:31:00|1770775860.444444] user2: Thread reply (newer)
| Element | Format | Example |
|---|---|---|
| Timestamp+ID | ISO 8601 + ts | [2026-02-11T17:45:56|1770775935.866499] |
| Sender | Real name (including bots) | user1:, absbot: |
| Mention | @name | @user3 |
| Reaction | [:emoji:names] | [:thumbsup:user2,user3] |
| Attachment | 📎filename userID/fileID | 📎image.png U0ADM19GY6N/F0ADRC9PEHL |
| Thread info | [thread replies:N latest:time] | [thread replies:13 latest:2026-03-04T16:00:00] |
| Inline reply | 1-space indentation | [ts] user: text |
| Participants | [participants] names (N) | [participants] user1, user2 (2) |
| Channel name | ch:ID(#name) | ch:C0AE4MGLNUU(#dev-backend) |
📎filename U0ADM19GY6N/F0ADRC9PEHLhttps://abstract-im.slack.com/files/{userID}/{fileID}conversations.replies API duplicates parent message at [0] on every pageseen_ts set--limit applies only in channel mode (thread mode always fetches all)--with-threads fetches thread replies in parallel with up to 8 workers~/.cache/slack-reader/users.json (TTL 24 hours)Retry-After header duration then retries (max 3 attempts)--with-threads, if an individual thread fetch fails, only that thread is skipped; the rest outputs normallychannel_not_found, suggest /invite @absbot.--with-threads may miss conversations inside threads.