This is a submission for the OpenClaw Challenge.
What I Built
I built inbox-triage — a personal email triage skill for OpenClaw. It's a single SKILL.md file, 80 lines of Markdown, no code, no API keys, no deployment. When I paste email subject lines or a screenshot of my Gmail into OpenClaw, it sorts them into four buckets:
🔴 URGENT — open now (OA deadlines, interview invites, placement cell mail)
🟡 REVIEW — today-ish (interview prep, company research, professor mail)
🟢 APPLIED — active applications awaiting response (Microsoft, Dbert Labs, Bluestock)
⚫ ARCHIVE — silently filed (LinkedIn noise, daily digests, noreply promos)
The problem it solves is specific: I'm a CS student in active placement season. My inbox gets 200+ mails a week and maybe 10 of them matter. I was missing OA deadlines while reading "5 people viewed your profile" notifications. The script version I built first (Gmail API + regex) broke every time a recruiter emailed from a domain I hadn't hardcoded. A skill handles the fuzzy cases a script can't.
How I Used OpenClaw
The whole project is one SKILL.md. OpenClaw's skills architecture does the heavy lifting — I just describe when the skill fires and what the rules are, in plain Markdown. Three pieces make it work:
The description frontmatter is the trigger. I wrote it to fire whenever I paste email info or ask "what should I open first." OpenClaw reads this and routes the request correctly without me invoking the skill explicitly.
Layered classification rules. The rules go URGENT → REVIEW → APPLIED → ARCHIVE, with an explicit tie-breaker: the more urgent bucket always wins. That single rule handles the hardest case — a no-reply@bluestock.in email with subject "Interview scheduled Thursday 3 PM" is URGENT, not ARCHIVE, because the subject rule beats the sender rule.
A worked example in the skill itself. My first draft was rules-only and hit about 60% accuracy. Adding one fully-worked example with real sender names and expected output pushed it past 95%. Models pattern-match on examples harder than they follow abstract rules.
Demo
Input:
- From: cellplacement507@gmail.com — "Microsoft OA link — complete by 11 PM today"
- From: LinkedIn — "5 people viewed your profile this week"
- From: recruiting@microsoft.com — "Re: Your application — next steps"
- From: Unstop — "Daily digest: 12 new hackathons"
- From: no-reply@bluestock.in — "Interview scheduled: Thursday 3 PM"
- From: Medium Daily Digest — "Top stories in AI"
Output:
🔴 URGENT (open now)
- cellplacement507@gmail.com — Microsoft OA link — complete by 11 PM today — Placement cell + deadline today
- recruiting@microsoft.com — Re: Your application — next steps — Applied company responding to your thread
- no-reply@bluestock.in — Interview scheduled: Thursday 3 PM — Applied company + interview keyword beats noreply rule
⚫ ARCHIVE (3 items archived)
What I Learned
The hardest part of this build wasn't writing the rules. It was being specific enough about what "important" means to me that a model could apply it consistently.
"Placement cell emails matter" is obvious. But what about a LinkedIn notification that happens to mention Microsoft because I follow Microsoft? What about a noreply@ from a company I applied to last week? What about an Unstop email — is it a daily digest (archive) or a status update on something I applied to (surface)?
Every edge case forced me to articulate a preference I'd never actually put into words. By the time the skill was accurate, I understood my own email-reading heuristics better than before I started.
Two other things clicked:
A skill's description field is doing real work — it's not a comment for humans. Vague descriptions don't trigger reliably. Specific ones do.
Explicit output formats make skills reusable. The four-bucket structure with emojis means I can scan the output in two seconds. An open-ended format would've given me paragraphs — which is what I was trying to escape.
Skills are a forcing function for self-knowledge. I didn't expect that going in.
ClawCon Michigan
I didn't attend ClawCon Michigan — I was running Gmail triage from Baharampur, West Bengal, which is a few time zones and an ocean away. But the community around it is what made me want to ship something for this challenge instead of just reading the announcement.
Top comments (0)