frontmatter · SKILL.md+
name: inbox-triage
description: >
Work the real social inbox: pull the actual comments and mentions Inklate has ingested
from connected channels, triage them into buckets (question, praise, objection, lead,
spam), and draft on-voice replies ready to paste. Covers LinkedIn, X (Twitter),
Instagram, and Facebook today, with Mastodon, Threads, Bluesky, TikTok, and YouTube in
platform review.
Use when the user says "work my inbox", "check my mentions", "any comments to answer",
or "who mentioned me". Requires the Inklate CLI (npm i -g inklate) or the Inklate MCP connection. Reads social-context.md when
present so drafted replies match the user's voice and red lines. Leads get flagged
prominently — the inbox is where revenue hides. Replies are drafted for the user to
send, never sent on their behalf.
license: MIT
metadata:
version: 0.1.1
topics:
- engagement
examplePrompt: "Triage my inbox and draft replies to anything that needs one"
pairsWith:
- social-reply
mcpTools:
- interactions_list
- search
cliCommands:
- interactions list
- searchTriage every real interaction across the user's channels and hand back a worked inbox: buckets, priorities, and paste-ready replies.
Transports
- CLI (preferred):
inklate(npm i -g inklate) — structured YAML on stdout (--jsonfor JSON), progress on stderr, and typed exit codes:3no credentials,4a deliberate refusal with its machine-readable payload on stdout,6the resource changed underneath you,7rate limited but safe to re-run later. Pass--no-inputwhen running unattended so a missing flag fails loudly instead of prompting, and--yesto carry an approval the user has already given in chat. - MCP (fallback): the Inklate MCP tools when the CLI is not installed.
Steps below name the MCP operation with the CLI form in parentheses; the fields are the same on both.
Connection check
- Run
inklate auth check(MCP:organizations_list) first. - On exit 3 (no credentials): interactively run
inklate auth login; headless, the key comes fromINKLATE_API_KEY=inklate_…in the environment orinklate auth set --token inklate_…. If neither transport is available at all, tell the user to install withnpm i -g inklate(or connect athttps://inklate.com/skills/connect?ref=skills-inbox-triage) and STOP. - If multiple organizations exist, ask which one to work before fetching anything (CLI:
--org <slug>).
Context
Read social-context.md (project root, then .agents/social-context.md) if present. ## Voice is the register every drafted reply is written in; ## Never is a hard filter on what a reply may say; ## Audience sharpens lead-spotting. Proceed without it if absent — but say replies will be in a neutral voice and can be re-drafted once context exists.
Workflow
- Establish the window: default to interactions since the user last worked the inbox, or the last 7 days if unknown. Confirm in one line and proceed.
- Call
interactions_list(CLI:inklate interactions list --since … --kinds …) for the window across all connected channels. Inklate ingests comments and mentions — those are the two kinds; direct messages are not ingested, so an empty inbox means no comments or mentions, never "no DMs either". If the user asks about DMs specifically, say they aren't available here rather than reporting a clear inbox. If the volume is large, work channel by channel and say so. - Triage every item into exactly one bucket:
- Lead — buying signals, "how much", "does it work with", requests for a demo or a call. Highest priority, always listed first.
- Question — needs a factual answer about the product or a post's content.
- Objection — pushback, criticism, or a correction. Deserves the most careful reply.
- Praise — deserves acknowledgment; a short warm reply keeps the flywheel turning.
- Spam — bots, engagement farming, irrelevant promotion. Recommend ignore; never draft replies to spam.
- When an interaction references one of the user's posts and the reply depends on what that post said, call
search(CLI:inklate search "…") to pull the post and read it before drafting — replies must be grounded in what was actually published. - Draft replies for every non-spam item that warrants one, in the user's voice. The DRAFTING craft belongs to the paired
social-replyskill — when it is installed, hand each item to it and collect the drafts; only draft inline (following the rules below) when it is not:- Questions get real answers — say what you don't know rather than inventing product facts.
- Objections get generous, non-defensive replies that concede what's true.
- Leads get a reply that moves toward a concrete next step (a link, a call, a question that qualifies them).
- Praise gets a short, warm, specific acknowledgment — not a canned thanks.
- Match each platform's register: a LinkedIn comment reply and an X reply are not the same length or tone.
- Present drafts as a per-item, paste-ready list: platform, author, their message, your drafted reply. Reply-sending is not exposed as an Inklate tool — the user sends each reply themselves, which also keeps a human on the send button. Offer one revision pass on any draft.
- Ask if the user wants any bucket expanded (e.g. every spam item listed) before closing out.
Quality bar
- Every fetched interaction lands in exactly one bucket — nothing unclassified, nothing silently dropped.
- Leads are impossible to miss: first in the receipt, flagged in the summary line.
- Replies are grounded: product questions answered only from what you know or what
searchreturned; unknowns are flagged for the user to fill in, never invented. - Every draft respects
## Neverfrom social-context.md; a reply that trips a red line comes back as a flagged judgment call instead. - Objection replies never argue tone-for-tone; they concede what's true and clarify what's not.
- Comments and mentions are the whole surface. Never imply DMs were checked, and never let an empty result stand as "nothing needs you" without saying which kinds were searched.
- You draft; the user sends. Do not represent any reply as sent.
Receipt
End with the triage table:
| # | Channel | Author | Bucket | Their message (short) | Action |
|---|---|---|---|---|---|
| 1 | Dana K. | LEAD | "Does this work for agencies? Pricing?" | reply drafted below | |
| 2 | X | @devguy | question | "Which API does the scheduler use?" | reply drafted below |
| 3 | @fanacct | praise | "This carousel was gold" | reply drafted below | |
| 4 | X | @cryptobot | spam | promo link | ignore |
Below the table: the count per bucket with leads called out ("2 leads — answer these first"), then the full numbered list of drafted replies, each paste-ready under its item number, and any drafts needing a fact from the user before sending.