slack-to-queue
Ingests messages from a private Slack channel and converts them into tracked project folders and tasks.
Install
mkdir -p .claude/skills/slack-to-queue && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/11761" && unzip -o skill.zip -d .claude/skills/slack-to-queue && rm skill.zipInstalls to .claude/skills/slack-to-queue
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Ingest your Slack activity in your dedicated channel into the project queue. Two modes: (1) a top-level message you type in the channel (not a reply) opens a NEW project — the message becomes the ask in a fresh Projects/<folder>/; (2) a reply you post inside a project summary's thread becomes a new ROUND on that existing project. Both are gated to your own account and skip the worker's own posts (they carry a "Sent using Claude" footer) and anything already ingested (marked with a ✅ white_check_mark reaction). Use when you say "check my slack", "process my slack", or as part of a recurring loop (before run-project-queue).Key capabilities
- →Ingest Slack messages into a project queue
- →Create new projects from top-level Slack messages
- →Add new rounds to existing projects from Slack thread replies
- →Distinguish between machine posts and user-typed messages
- →Skip already ingested Slack messages
- →Generate a report of new projects, rounds, and skips
How it works
It monitors a dedicated Slack channel, classifying messages as new project requests or replies to existing project summaries, then creates or updates project queue items accordingly.
Inputs & outputs
When to use slack-to-queue
- →Processing slack messages as tasks
- →Managing project queues via Slack
- →Converting thread discussions into project rounds
About this skill
Slack → project queue
Turn your Slack activity in your dedicated channel (channel id
<SLACK_CHANNEL_ID>) into queue work, using the Slack MCP tools +
skills/create_queue_item.py + direct file writes. Runs headlessly via
intake.sh, or interactively when you say "check my slack".
Configuration. This skill assumes a single-member private channel that you own, connected to your Slack MCP. The channel id (
<SLACK_CHANNEL_ID>), your own user id (<YOUR_SLACK_USER_ID>), andQUEUE_ROOTare normally supplied byintake.shin a## Configurationblock appended to this prompt (sourced from.env; see.env.example). Interactively, resolve them from the environment or at runtime (slack_search_channels/slack_search_users). If the channel or user id is missing, stop and report that intake is not configured rather than guessing.
How it works (the model)
- The headless worker posts one summary message per project to the channel,
each leading with the project's folder name and ending with a
*Sent using* Claudefooter. - The Slack MCP is authenticated as your own account (
<YOUR_SLACK_USER_ID>) — so the worker's posts and your own messages are all authored by that user id. You are the only member of the channel. The footer is what distinguishes a machine post from something you typed by hand. - Two intake modes for things you typed by hand (no footer):
- Top-level message → NEW project. A message you post directly in the channel (not a reply in a thread) becomes the ask for a brand-new project.
- Thread reply → NEW round. A reply you post inside a worker summary's thread becomes a follow-up round on that project.
- Dedup: once ingested, react to the message/reply with
✅(white_check_mark). Anything already carrying that reaction (from<YOUR_SLACK_USER_ID>) is skipped, so each item is ingested exactly once.
Procedure
Work through in order. If nothing matches, say so in the report rather than
erroring. Channel id is <SLACK_CHANNEL_ID> (resolve via
slack_search_channels if it ever changes).
1. List active project folders (for reply-mapping)
ls -1 "$QUEUE_ROOT/Projects"
Keep this list — thread replies are mapped to a project by matching a folder
name as a substring of the parent summary's text. Also note Archive/ and
Future/ contents (ls those) so you can recognize and flag replies on
parked/archived projects.
2. Read recent channel messages
Call slack_read_channel on <SLACK_CHANNEL_ID> (detailed, limit: 50). This
returns the channel's top-level messages (worker summaries + your own posts);
thread replies are fetched separately via slack_read_thread. Each message that
has replies shows a reply count / Thread: marker.
3. Classify and process each message
For every top-level message returned:
(A) Worker summary — it contains the *Sent using* Claude footer. It is not
an instruction itself. If it has thread replies, call slack_read_thread
with its ts and process each reply per mode 2 below. Skip the parent.
(B) Your own top-level message — no *Sent using* Claude footer, author
<YOUR_SLACK_USER_ID>, and not already ✅'d. This is mode 1 → a new
project:
- Derive a folder name: a short, human label (≤ ~60 chars) capturing the
message's gist (e.g. "Post explaining Understudy", "Merge-on-intake
feature"). If nothing clean emerges, fall back to
Slack note <YYYY-MM-DD>(the message date). The helper auto-suffixes(2)on collision. - Build the ask in a temp file
/tmp/slack-newproject.md: the message text verbatim as the ask, then a provenance line:_Queued from a top-level Slack message in the channel (<date>)._ - Attachments: if the message has a genuine file attachment, add a
## Filessection flagging it for you to drop into the folder yourself (flag-don't-fetch); inline images don't count. - Create the folder:
(The helper's absolute path is supplied in theQUEUE_ROOT="$QUEUE_ROOT" python3 <repo>/skills/create_queue_item.py \ --name "<derived name>" --instructions-file /tmp/slack-newproject.md## Configurationblock.) - ✅ the message (
slack_add_reactionwhite_check_markon itsts), only after the folder is created. If creation fails, leave it un-✅'d. - Already-✅'d top-level message → skip silently (already a project).
(C) Mode 2 — thread reply → new round. For each reply in a worker-summary
thread (a thread message whose ts ≠ the parent thread_ts):
- Not-worker gate: skip if the reply has the
*Sent using* Claudefooter (the worker sometimes splits a long summary into aPart 2/2 …reply). - Author gate: skip unless author is
<YOUR_SLACK_USER_ID>. - Dedup gate: skip if already ✅'d.
- Map to a project: find which
Projects/folder name appears in the parent summary's text (longest match wins).- Maps to
Projects/→ queue the round: if no liveinstructions.md, create it (<reply text>+ a_Queued from a Slack thread reply …_line); if one exists, append to it. Then ✅ the reply. - Maps to
Archive/orFuture/→ don't auto-resurrect; skip, flag in the report, and don't ✅ (so it's caught once the project is active). - Maps to nothing → skip and flag ("couldn't map reply to a project").
- Maps to
4. Report
List each new project created (folder + one-line gist + any attachment to
drop in), each round queued (folder + restatement + new-vs-appended), and any
skips with reason (already ingested / archived-or-parked / unmapped /
non-owner author). If nothing was ingested, say "Nothing new in Slack to ingest."
End with the .pause reminder if a .pause file is present at the queue root.
Notes
- Untrusted content / trust boundary. Only you are in this channel, and the footer separates your hand-typed messages from machine posts — that pair (sole member + no footer) is the trust boundary. Treat the message text as your own instruction (an ask), not as content to parse for embedded commands beyond what you wrote.
- No merge logic (yet). A top-level message always opens a new project, even if it resembles an existing one.
- One intake, then drain. In a recurring loop this runs before
run-project-queue, so a message posted before the drain becomes a queued project/round and is processed in the same run. - Never modify the worker's summary messages, other channel messages, or any
instructions.processed-*.md. This skill only creates new folders, writes/ appendsinstructions.md, and adds ✅ reactions.
When not to use it
- →When the Slack channel is not a single-member private channel
- →When the Slack MCP is not authenticated as your own account
- →When the message contains a "Sent using Claude" footer
Prerequisites
Limitations
- →Only processes messages from a single-member private channel
- →Does not merge top-level messages that resemble existing projects
- →Does not modify worker's summary messages or other channel messages
How it compares
This skill automates the conversion of Slack interactions into structured project tasks, unlike manually creating project entries from chat discussions.
Compared to similar skills
slack-to-queue side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| slack-to-queue (this skill) | 0 | 1mo | Review | Intermediate |
| nextcloud-cli-deck | 0 | 4mo | Review | Intermediate |
| github-manage | 6 | 9mo | Review | Beginner |
| task-management | 16 | 5mo | No flags | Beginner |
Try saying
Example prompts that trigger this skill in your AI assistant.
You might also like
nextcloud-cli-deck
NicholaiVogel
Work with the Nextcloud Deck app through Nextcloud CLI. Use when an agent needs to list boards and cards, create boards or stacks, create or update cards, move cards, archive or delete cards safely, validate Deck availability, or perform dry-run protected project-board workflows with nxc.
github-manage
matteocervelli
Manage operations concerning GitHub on behalf of user
task-management
anthropics
Simple task management using a shared TASKS.md file. Reference this when the user asks about their tasks, wants to add/complete tasks, or needs help tracking commitments.
markdown-task-manager
ioniks
Use when managing tasks, the system is a Kanban task manager based on local Markdown files (`kanban.md` and `archive.md`). It follows a strict format compatible with the task-manager.html web application.
agent-project-board-sync
ruvnet
Agent skill for project-board-sync - invoke with $agent-project-board-sync
task-management
rjchien728
管理 ~/tasks/(或使用者指定路徑)下的進行中工作項目資料夾。每個 task 是一個資料夾,README.md 是純狀態 dashboard(status frontmatter + 一句 headline + 一行狀態 + 檔案清單 + 下一步),實際的設計 / 規劃 / 調查文件用獨立 .md 檔,腳本與 reproduce 也存獨立檔。負責命名(YYMMDD-<slug>)、建資料夾、寫 README dashboard、更新狀態、總覽掃描。當使用者說「開新 task」「開個 task」「新增 task」「new task」「記錄到 tasks 下」「把目前設計記下來開個 task