diff --git a/.changeset/document-read-thread-message-ts.md b/.changeset/document-read-thread-message-ts.md new file mode 100644 index 0000000..9f20216 --- /dev/null +++ b/.changeset/document-read-thread-message-ts.md @@ -0,0 +1,5 @@ +--- +"slack": patch +--- + +Document that `slack_read_thread` takes the thread timestamp as `message_ts`, not `thread_ts`. Search permalinks surface this value as `?thread_ts=`, so the slack-search skill and the find-discussions, standup, and summarize-channel commands now call out the correct parameter name to prevent a failed first call and retry. diff --git a/commands/find-discussions.md b/commands/find-discussions.md index 7c3772c..c44f05e 100644 --- a/commands/find-discussions.md +++ b/commands/find-discussions.md @@ -6,7 +6,7 @@ Given the topic provided in $ARGUMENTS: 1. Use the `slack_search_public` tool to search for messages matching the topic. Use the topic as a natural language question first for semantic results. 2. If semantic results are sparse, follow up with a keyword search using key terms from the topic. -3. For the most relevant results, use `slack_read_thread` to fetch full thread conversations so you capture the complete discussion context. +3. For the most relevant results, use `slack_read_thread` to fetch full thread conversations so you capture the complete discussion context. Pass the thread's `channel_id` and the timestamp from the result's permalink (`?thread_ts=`) as `message_ts` — the parameter is named `message_ts`, not `thread_ts`. 4. Present the results organized by relevance: - For each discussion found, show: the channel name, who started it, a brief summary of the conversation, and the date. - Group related discussions together if they span multiple channels. diff --git a/commands/standup.md b/commands/standup.md index dae6ba2..9c07f4f 100644 --- a/commands/standup.md +++ b/commands/standup.md @@ -11,7 +11,7 @@ description: Generate a standup update based on your recent Slack activity - **What I'm working on next** — Any mentions of upcoming work, plans, or follow-ups - **Blockers** — Any questions asked that went unanswered, issues raised, or explicit mentions of being stuck -4. For messages in threads, use `slack_read_thread` to get the full context so you can accurately describe what the user contributed. +4. For messages in threads, use `slack_read_thread` to get the full context so you can accurately describe what the user contributed. Pass the message's timestamp from the search results as `message_ts` — the parameter is named `message_ts`, not `thread_ts`. 5. Format the standup as: diff --git a/commands/summarize-channel.md b/commands/summarize-channel.md index c9fca28..fa22278 100644 --- a/commands/summarize-channel.md +++ b/commands/summarize-channel.md @@ -6,7 +6,7 @@ Given the channel name provided in $ARGUMENTS (strip any leading `#`): 1. Use the `slack_search_channels` tool to find the channel ID for the provided channel name. Strip any leading `#` from the argument before searching. 2. Use the `slack_read_channel` tool to read recent messages from the channel (default limit of 100 messages). -3. For any messages that have threads with replies, use `slack_read_thread` to read the thread contents so the summary captures threaded discussions. +3. For any messages that have threads with replies, use `slack_read_thread` to read the thread contents so the summary captures threaded discussions. Pass the parent message's timestamp as `message_ts` — the parameter is named `message_ts`, not `thread_ts`. 4. Produce a concise summary organized by topic or theme. The summary should include: - An overview of the main topics discussed - Key decisions or action items mentioned diff --git a/skills/slack-search/SKILL.md b/skills/slack-search/SKILL.md index 789fda2..dbe1b3e 100644 --- a/skills/slack-search/SKILL.md +++ b/skills/slack-search/SKILL.md @@ -93,7 +93,7 @@ Example: `content_types="files" type:pdfs budget after:2025-01-01` After finding relevant messages: -- Use `slack_read_thread` to get the full thread context for any threaded message. +- Use `slack_read_thread` to get the full thread context for any threaded message. It takes the thread's `channel_id` and the parent message's timestamp — but the timestamp parameter is named `message_ts`, **not** `thread_ts`. A result's permalink shows this value as `?thread_ts=`; pass that `` under `message_ts`. - Use `slack_read_channel` with `oldest`/`latest` timestamps to read surrounding messages for context. - Use `slack_read_user_profile` to identify who a user is when their ID appears in results. @@ -103,3 +103,4 @@ After finding relevant messages: - **Parentheses don't work.** Don't try to group search terms with `()`. - **Search is not real-time.** Very recent messages (last few seconds) may not appear in search results. Use `slack_read_channel` for the most recent messages. - **Private channel access.** Use `slack_search_public_and_private` when you need to include private channels, but note this requires user consent. +- **`slack_read_thread` expects `message_ts`, not `thread_ts`.** Search permalinks contain `?thread_ts=`, but the tool's timestamp parameter is named `message_ts`. Pass the timestamp value under `message_ts` (with the thread's `channel_id`) — a call using `thread_ts` is rejected.