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:

  1. Pull my unread messages
  2. Classify them by urgency
  3. Let me process them one at a time with a single keypress
  4. 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:

OperationLLM VersionCLI 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:

PriorityMeaning
P1Urgent—direct reports with blockers, emergencies
P2Important—leadership, strategy discussions
P3Normal—general team updates
P4Low—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