Inbox Reads and Triage

SkillAI & models

Lets your agent read and search email, count unread mail, navigate views, and clean up inboxes.

Available today. Use it from your connected AI after setup.

Add ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.

Then ask your AI: use the Inbox Reads and Triage skill

About this skill

Reading the inbox tab bar and rows, listing/searching mail with coverage-aware inventory envelopes, refreshing the UI after mutations, and bulk unread cleanup. Use when reading, searching, counting, archiving, starring, moving, or marking mail read, or when reporting how much of an inbox was covered

What this skill tells your AI

The instructions your AI receives, as published by builderio/agent-native in templates/mail/.agents/skills/inbox-reads-and-triage/SKILL.md and read by ahel’s review.

Reading the inbox

list-inbox-threads is the inbox view itself: it returns the tab bar (Important, pinned labels, saved filters, Other — or one combined Inbox tab when the user has "combine inbox" on), each tab's total/unread counts, and the active tab's rows, all computed from one partition over the synced inbox store. A tab's badge can never disagree with the rows it returns, and the read never waits on a live Gmail call. tab accepts any id from the returned tabs list; an unrecognized or omitted id falls back to the first tab. Use list-emails/search-emails for every other view (Sent, Archive, Trash, All Mail) or an ad hoc query — not for the inbox.

Membership is Superhuman-style, not Gmail's own IMPORTANT label: a thread shows in every pinned-label/saved-filter tab whose query it matches (a thread can appear in more than one). A thread matching no custom tab falls to Important, unless its latest message classifies as automated (bulk senders, List-Unsubscribe, notification-style from:), in which case it falls to Other. If the inbox looks stale despite this, call resync-inbox to force an immediate Gmail resync instead of polling list-inbox-threads in a loop.

Coverage-aware inventory reads

list-emails remains the compatibility list action for the UI and internal callers. External MCP callers receive its structured inventory envelope by default (or pass format: "inventory"). Inventory reads use accountEmails for an explicit set; the legacy singular account alias cannot be combined with it. The response reports each account's success, empty result, exhaustion or bounded error, so partial coverage must never be described as complete. Inventory items are intentionally compact metadata only — use get-email or get-thread only after selecting a specific result when body content is needed.

Refresh after mutations

After backend mail mutations (archive, trash, star, mark-read, move, send), call refresh-list so the UI refetches. Actions that already write refresh-signal internally (e.g. mark-thread-read, move-email, respond-calendar-invite) don't need a second call.

Bulk unread cleanup

For broad unread cleanup in one account, call mark-read once with scope: "all-unread", the exact accountEmail, and any protected conversation IDs in excludeThreadIds. Do not loop mark-thread-read over many conversations. The bulk result's matched, excluded, changed, failure, and remaining-unread counts are the proof of completion.

Knowing what the user is looking at

Use view-screen when the active thread, selected message, draft, or queue item is unclear. Use get-thread for full conversation context instead of relying on ambient screen text.

Moving the UI

navigate accepts view (inbox, starred, sent, drafts, scheduled, archive, trash, draft-queue, settings), plus tab (an inbox tab id from list-inbox-threads; label/filter are accepted aliases), threadId, settingsSection, queuedDraftId, or composeDraftId.

settingsSection opens Settings in the user's tab. general, drafting, snippets, rules, ai-filter, gmail-filters, aliases, and tracking are tabs on Mail › General (/settings/app/<id>). rules is Mail's inbox rules; the core Automations page is the agent's scheduled and event automations. slack opens Channels › Slack, where Slack draft requests and the agent's Slack connection live, and members opens Organization › Members.

Related Skills

  • mail-backends — whether a read hit real Gmail or the local fallback.
  • provider-api-scans — reads beyond the canned actions, and staging large scans for analysis.
  • email-drafts — replying to something you just read.
  • inbox-automations — automating recurring triage instead of repeating it.

Signals

GitHub stars
7k
Forks
613
Last commit
Sep 2026
Advanced
Item type
skill
Key
inbox-reads-and-triage
Source
github.com/builderio/agent-native