用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/rusq/slackdump --skill slackdump-sqlite3命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
正在显示 SKILL.md
| name | slackdump-sqlite3 |
| description | Guidance for querying a Slackdump SQLite3 database directly via the sqlite3 CLI. |
| metadata | {"audience":"general","workflow":"database"} |
Use this skill when the Slackdump MCP and SQLite MCP are both unavailable and
you must fall back to the sqlite3 command-line tool.
Look for slackdump.sqlite in the current directory or the archive directory.
If multiple files exist, ask the user to choose one.
You must not run any UPDATE, DELETE, INSERT, DROP, CREATE, or other
DML/DDL statements. Only SELECT and data-dictionary queries are permitted.
-- List all tables
.tables
-- Show schema for a table
.schema MESSAGE
| Table | Description |
|---|---|
| SESSION | One row per slackdump invocation |
| CHUNK | One row per Slack API call |
| TYPES | Chunk type lookup (e.g. MESSAGES, THREADS) |
| MESSAGE | Channel and thread messages |
| CHANNEL | Slack channels / conversations |
| S_USER | Workspace members |
| FILE | File attachments linked to messages |
| WORKSPACE | Workspace information |
| CHANNEL_USER | Members of a channel |
| SEARCH_MESSAGE | Messages from slackdump search results |
| SEARCH_FILE | Files from slackdump search results |
| ID | NAME | Stores data in |
|---|---|---|
| 0 | MESSAGES | MESSAGE |
| 1 | THREAD_MESSAGES | MESSAGE |
| 2 | FILES | FILE |
| 3 | USERS | S_USER |
| 4 | CHANNELS | CHANNEL |
| 5 | CHANNEL_INFO | CHANNEL |
| 6 | WORKSPACE_INFO | WORKSPACE |
| 7 | CHANNEL_USERS | CHANNEL_USER |
| 8 | STARRED_ITEMS | (no table) |
| 9 | BOOKMARKS | (no table) |
| 10 | SEARCH_MESSAGES | SEARCH_MESSAGE |
| 11 | SEARCH_FILES | SEARCH_FILE |
Chunk types with (no table) are not implemented yet, but reserved for future implementation. You will not see those chunks in the database.
A MESSAGE row is a thread reply when PARENT_ID IS NOT NULL AND IS_PARENT = FALSE.
Note: thread-parent messages also have PARENT_ID set (equal to their own
ID), so PARENT_ID IS NOT NULL alone matches both parents and replies.
Use IS_PARENT = TRUE to select thread-parent messages, and
IS_PARENT = FALSE AND PARENT_ID IS NOT NULL for replies only.
MESSAGE.ID is not the Slack timestamp string. It is the timestamp
converted to an int64 by stripping the dot:
e.g. "1648085300.726649" → 1648085300726649.
Use MESSAGE.TS for the human-readable Slack timestamp (e.g. for display or
for passing to get_thread).
Every entity table (MESSAGE, CHANNEL, S_USER, FILE, etc.) stores the
complete Slack API JSON payload in a DATA column (stored as a blob). Columns
like TS, PARENT_ID, IS_PARENT, MODE, NAME are extracted for indexing,
but all other fields (reactions, edited timestamps, message subtypes, user
profiles, etc.) are only accessible via SQLite's JSON_EXTRACT:
-- Example: get the subtype and reaction count of messages
SELECT TS,
JSON_EXTRACT(DATA, '$.subtype') AS subtype,
JSON_ARRAY_LENGTH(DATA, '$.reactions') AS reaction_count
FROM MESSAGE
WHERE CHUNK_ID = 44;
The same message (same MESSAGE.TS AND MESSAGE.CHANNEL_ID) can appear in
multiple chunks and multiple sessions. There are two distinct reasons:
slackdump resume run the same
message may be fetched again and stored in a newer session.CHUNK.TYPE_ID=0
(channel history) and once under CHUNK.TYPE_ID=1 (thread messages).Always scope your query to the correct chunk type first, then pick the latest session:
CHUNK.TYPE_ID = 0 when querying channel history messages.-- Latest version of each channel-history message in a channel (TYPE_ID=0)
WITH LATEST AS (
SELECT T.ID, MAX(CHUNK_ID) AS CHUNK_ID
FROM MESSAGE AS T
JOIN CHUNK AS CH ON CH.ID = T.CHUNK_ID
WHERE 1=1
AND CH.TYPE_ID IN (0,1)
AND (
T.CHANNEL_ID = [CHANNEL_ID]
AND (
( CH.TYPE_ID=0 AND (CH.THREAD_ONLY=FALSE OR CH.THREAD_ONLY IS NULL))
OR (CH.TYPE_ID=1 AND CH.THREAD_ONLY=TRUE AND T.IS_PARENT=TRUE)
)
)
GROUP BY T.ID
)
SELECT T.ID,T.CHUNK_ID,T.CHANNEL_ID,T.TS,T.PARENT_ID,T.THREAD_TS,T.IS_PARENT,T.IDX,T.NUM_FILES,T.TXT,T.DATA,T.LATEST_REPLY
FROM LATEST L
JOIN MESSAGE AS T ON 1 = 1 AND T.ID = L.ID
T.CHUNK_ID L.CHUNK_ID CHUNK CH T.CHUNK_ID CH.ID
T.ID;
CHUNK.TYPE_ID = 1 when querying thread messages.-- Latest version of each thread message in a thread (TYPE_ID=1)
WITH LATEST AS (
SELECT T.ID, MAX(CHUNK_ID) AS CHUNK_ID
FROM MESSAGE AS T
JOIN CHUNK AS CH ON CH.ID = T.CHUNK_ID
WHERE 1=1
AND CH.TYPE_ID IN (0,1)
AND (
T.CHANNEL_ID = [CHANNEL_ID]
AND T.PARENT_ID = [PARENT_MESSAGE_ID]
AND ( JSON_EXTRACT(T.DATA, '$.subtype') IS NULL OR (JSON_EXTRACT(T.DATA, '$.subtype') = 'thread_broadcast' AND CH.TYPE_ID = 1 ) )
)
GROUP BY T.ID
)
SELECT T.ID,T.CHUNK_ID,T.CHANNEL_ID,T.TS,T.PARENT_ID,T.THREAD_TS,T.IS_PARENT,T.IDX,T.NUM_FILES,T.TXT,T.DATA,T.LATEST_REPLY
FROM LATEST L
JOIN MESSAGE AS T ON 1 = 1 AND T.ID = L.ID
AND T.CHUNK_ID = L.CHUNK_ID JOIN CHUNK CH ON T.CHUNK_ID CH.ID
T.ID
Other views prefixed with V_ are internal to slackdump and track unprocessed
threads during execution. Do not rely on them for analysis.
Prepare this repository for a release. Use when asked to do pre-release checks, summarize changes since a previous tag, update WHATSNEW.md or changelog entries, update CONTRIBUTORS.md, audit command long help or docs for release-visible features, or verify release documentation consistency.
Collect the Slack conversation data from Slackdump Archive format.
Explains the different Slackdump sources structure.
基于 SOC 职业分类