Every newsroom I've worked with has a mailbox where the public can reach out — to give feedback, send tips, or pitch stories. Most of the time, someone reads it and dishes out stories to reporters. But someone has to sift through those emails to separate what matters from what doesn't, and that's not the best use of anyone's time.

The fastest way to automate newsroom email triage is with Claude Desktop and its built-in task scheduler, Cowork. You write a prompt that tells Claude what to look for, connect Gmail and Slack via MCP integrations, and set it to run hourly. Claude reads your inbox, classifies each email as urgent, monitor, or noise, labels the urgent ones in Gmail, and posts a Slack digest — no server, no code.

There is a limitation: it only works if your computer is awake and Claude Desktop is running. Great for when you're at your desk — but it won't catch anything when your computer is off.

What Is Claude Desktop Cowork?

Cowork is Claude Desktop's built-in task scheduler. You write a prompt, set a frequency (hourly, daily, etc.), and Claude runs it on that schedule using whatever MCP tools you've connected. Think of it as a cron job where the script is plain English.

In this triage setup, Cowork triggers Claude to check Gmail and post to Slack every hour: no Firebase functions, no n8n, no Zapier. If you've built automated Slack reports before — like sending Omeda email stats to Slack with Firebase — Cowork is a much lighter-weight option for single-machine workflows.

How the Inbox Triage Works

Here is what the automation does every hour:

  1. Fetches all unread emails received in the past 60 minutes

  2. Classifies each one as urgent, monitor, or noise based on the sender domain and email content

  3. Applies a Gmail label called Urgent to anything that needs attention

  4. Posts a Slack digest to your channel

There is some classification logic here; you'll need to decide what that looks like for your newsroom. Domain signals come first: .gov or .mil addresses are flagged urgent by default, as are known news organization domains and anything with "law", "LLP", or "legal" in the domain name. Then come the content signals: Claude reads the email for keywords you define, such as "FOIA", "embargo", or "on background". Then, noise: emails with language such as "unsubscribe", "free trial", or "book a call" get filtered out. If anything's ambiguous, it defaults to Monitor.

The Slack digest looks like this:

🔴 Inbox Triage — 2:00 PM

URGENT (2)

• John Smith <[email protected]> — "Re: FOIA Request #2024-441"

• [email protected] — "Story tip: city council vote"

MONITOR (3)

3 emails from real humans, no immediate action needed.

NOISE (11)

11 promotional / sales emails ignored.

If nothing's urgent, you get a quieter all-clear:

✅ Inbox Triage — 3:00 PM — Nothing urgent. 2 monitor, 8 noise.

How to Set It Up (3 Steps)

Step 1: Connect Gmail MCP in Claude Desktop

Claude Desktop → Settings → Integrations → add the Gmail MCP and authorize it with your newsroom's Gmail account. You'll need to allow read access and label management.

Step 2: Create a Slack incoming webhook

Connect the Slack MCP to Claude Desktop. Claude Desktop → Settings → Integrations → Slack.

Step 3: Set up the Cowork Scheduled Task

Claude Desktop -> Cowork -> Scheduled Tasks -> New Task

  1. Set the frequency to Hourly.

  2. Paste the prompt from prompt.md.

  3. Replace #your-channel-name with the channel you want the digest to go to.

  4. Save.

That's it. Trigger it manually the first time to make sure the Slack message lands in the right place and the Gmail labels get added.

What to Watch Out For

The newer_than:1h search operator is fuzzy.

Gmail's newer_than is approximate — it doesn't guarantee exactly 60 minutes.

.gov spam exists.

Not everything from a .gov address is a story. Some government agencies have listservs, automated notification systems, and genuinely spammy mailing lists.

Label creation is idempotent — mostly.

Claude's Gmail MCP reliably handles the "create label if it doesn't exist" step. Still, if you rename the Gmail label manually after setup, the prompt will create a second label called "Urgent" instead of finding the renamed one. Keep the label name consistent.

The goal here isn't to replace the person who reads the tip line — it's to make sure the important stuff doesn't sit unread for three hours because someone was in a meeting. A DOJ email or an embargo notice showing up in Slack five minutes after it lands is a meaningful improvement over discovering it at the end of the day.

Start with the default classification logic, run it for a week, and adjust. You'll quickly see which domains you want to add to the urgent list and which newsletter senders you want to add to the noise. The prompt is the product here — the more you tune it to your beat, the more useful it gets.

Keep Reading