AI-Powered Inbox Triage
I was spending too much time in Slack. Not chatting—just deciding what needed attention. Reading messages, mentally prioritizing, context-switching between conversations.
So I built a tool to automate the triage part.
The Problem With Slack
Slack is great for communication. It’s terrible for task management. Every channel is equally loud. Every notification feels urgent. The cognitive load of deciding “what do I need to respond to right now?” adds up.
I wanted something that would:
- Pull my unread messages
- Classify them by urgency
- Let me process them one at a time with a single keypress
- Learn from my decisions over time
Why a CLI?
My first attempt used Claude Code directly. I’d ask Claude to check my Slack, classify messages, and take actions. It worked, but slowly—about 5 seconds per action because everything went through the LLM.
The CLI approach is different:
| Operation | LLM Version | CLI Version |
|---|---|---|
| Fetch messages | ~5s (Claude does it) | ~700ms (direct API) |
| Add reaction | ~5s (Claude does it) | ~700ms (direct API) |
| Classify priority | ~5s | ~2s (batched) |
The insight: use AI only where it adds value. Fetching messages doesn’t need intelligence. Adding emoji reactions doesn’t need intelligence. Priority classification does.
How It Works
Step 1: Fetch and Filter
The CLI searches Slack for messages from the last 3 days. It automatically excludes:
- My own messages
- Bot messages
- Noisy channels I’ve configured to ignore
- Threads I’ve already replied to
Messages are grouped into conversations by channel. All unread messages in #design-team become one conversation to process.
Step 2: Classify
Claude classifies conversations (not individual messages) in a single batch:
| Priority | Meaning |
|---|---|
| P1 | Urgent—direct reports with blockers, emergencies |
| P2 | Important—leadership, strategy discussions |
| P3 | Normal—general team updates |
| P4 | Low—thank you messages, acknowledgments |
Some senders have a priority floor—DMs from certain people never drop below P1 or P2, regardless of content.
Step 3: Triage
The interface shows one conversation at a time with a progress bar to keep you motivated:
SLACK INBOX (18 conversations remaining)
████████████░░░░░░░░░░░░░░░░░░░░░░░░ 28% complete
📈 Making progress!
[P1] #product-strategy
3 messages from 2 participants
--- Message 1/3 ---
Person-A at 1/7/2026, 2:30 PM
"Quick question about the roadmap priorities..."
--- Message 2/3 ---
Person-B at 1/7/2026, 2:45 PM
"I think we should focus on the mobile app first..."
--- Message 3/3 ---
Person-A at 1/7/2026, 3:00 PM
"Makes sense. Can you loop in the team?"
Actions:
[1] Add to Todoist [2] Draft reply
[3] React & archive [4] Archive only
[q] Quit
Press a number to take action. Most conversations take 2-3 seconds to process.
Step 4: Learn
The archive stores full conversation history with the action I took. Over time, patterns emerge. Classification rules can be updated based on what actually gets prioritized.
Privacy Considerations
Sender names are anonymized before sending to Claude—“Person-A”, “Person-B” instead of real names. This keeps the AI focused on content, not personalities, and reduces data exposure.
The archive also stores anonymized names. Real names never leave the system.
What I Learned Building This
Direct API calls beat LLM orchestration for simple tasks. Let AI do the thinking, not the clicking.
Batch processing beats individual processing. Classifying 50 conversations at once is cheaper and faster than 50 separate calls.
Markdown as state management works well. Queue in a file, archive in a file, drafts in a file. Easy to inspect, version, and debug.
Progress tracking matters for motivation. The progress bar showing “45% to inbox zero” actually helps me finish the queue.
Results
A typical session:
Session complete:
- Processed: 35 conversations
- Remaining: 0
- Actions: 8 todoist, 12 replied, 10 reacted, 5 archived
What used to be 30+ minutes of Slack scanning is now 10 minutes of focused triage. The tool handles the cognitive load of “what needs attention?” so I can focus on “how should I respond?”
Trade-offs
Setup complexity: Requires API keys for Slack, Todoist, and Anthropic. Initial configuration takes an hour or so.
Manual send: Draft replies are saved to a file for copy-paste rather than auto-sending. This is intentional—I want to review before sending.
Terminal-only: No GUI. You need to be comfortable in a command line.
Would I Recommend Building This?
If you’re drowning in Slack: yes. The upfront investment pays off within a week.
If Slack isn’t a major time sink for you: probably not worth it. The problem has to be painful enough to justify the solution.
The broader lesson is that AI tools work best as multipliers on workflows you’ve already identified as bottlenecks. Start with the problem, not the technology.
Related: Self-Improvement Loops, My Claude Code Setup