--- 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 - search --- Triage 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 (`--json` for JSON), progress on stderr, and typed exit codes: `3` no credentials, `4` a deliberate refusal with its machine-readable payload on stdout, `6` the resource changed underneath you, `7` rate limited but safe to re-run later. Pass `--no-input` when running unattended so a missing flag fails loudly instead of prompting, and `--yes` to 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 1. Run `inklate auth check` (MCP: `organizations_list`) first. 2. On exit 3 (no credentials): interactively run `inklate auth login`; headless, the key comes from `INKLATE_API_KEY=inklate_…` in the environment or `inklate auth set --token inklate_…`. If neither transport is available at all, tell the user to install with `npm i -g inklate` (or connect at `https://inklate.com/skills/connect?ref=skills-inbox-triage`) and STOP. 3. If multiple organizations exist, ask which one to work before fetching anything (CLI: `--org `). ## 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 1. 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. 2. 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. 3. **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. 4. 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. 5. **Draft replies** for every non-spam item that warrants one, in the user's voice. The DRAFTING craft belongs to the paired `social-reply` skill — 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. 6. 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. 7. 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 `search` returned; unknowns are flagged for the user to fill in, never invented. - Every draft respects `## Never` from 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 | LinkedIn | 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 | Instagram | @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.