AI drafts a reply for every new customer message. You approve, edit, or discard. The customer never sees a draft until you press Send.
Triage is Forepost’s first move into the inbox — an AI co-pilot that sits next to your agents while they work in Intercom. It’s not a replacement helpdesk. Your team keeps replying in Intercom; Forepost just gives them a credible first draft for every new customer message.
Triage is in beta. Intercom only in v1. Front, Plain, and Zendesk are on the roadmap.
Nothing changes for the customer. They send a message to Intercom the way they always have.
2
Forepost polls Intercom every ~10 minutes
The cron asks Intercom for every open conversation updated in the last 48 hours and finds the latest customer message in each thread.
3
Claude drafts a reply
The customer’s message, your help-doc snippets, and your tone hint go into a Sonnet 4.6 prompt. The system prompt tells it to open with the answer, no greetings, no emojis, ask a clarifying question when unsure.
4
The draft appears on your Triage page
Nothing has been sent to the customer yet. The conversation card shows their message, the draft reply, and three buttons.
5
An agent decides what to do
Send ships the draft as-is via Intercom’s reply API. Edit then Send sends an edited version. Redraft regenerates from scratch. Discard drops the conversation from Triage.
6
Forepost records the outcome
Every decision is logged as sent_unedited, sent_edited, or discarded. The 30-day stats strip turns those into an acceptance rate so you can tell, in weeks not months, whether draft quality is climbing.
In Settings → Integrations → Helpdesk integrations, click Connect Intercom. The same OAuth flow used for metric ingestion. Triage reuses the existing token.
2
Enable Triage
In Settings → Integrations → Triage, flip the toggle. The Triage nav item appears in the sidebar under Console.
3
Add a tone hint (optional)
One line, fed into every draft prompt: “warm but concise; British English; never use the word ‘reach out’”. Saves you from re-editing every draft for voice.
4
Paste help-doc snippets
Same Settings page. Each snippet is a title plus plain-text body. Think one billing-tier policy, one refund script, one known workaround per snippet. Up to ~8000 chars of doc context fit per draft.
5
Wait or trigger a poll
The cron runs every 10 minutes. Or click Poll Intercom at the top of the Triage page to force one immediately.
After Send (or Discard), focus auto-advances to the next pending card and lands inside its draft textarea, ready to edit. Lets a leader work through 10–15 drafts without ever touching the mouse.
Click Redraft and the textarea immediately swaps to a skeleton with a small loading indicator while Claude regenerates. When the new draft lands, the textarea returns with the fresh content. No frozen UI during the round-trip.
The strip at the top of the Triage page rolls up the last 30 days of outcomes.
Stat
What it means
What to watch for
Drafts
Total conversations with a logged outcome
Volume signal
Sent unedited
Agent pressed Send without changing the draft
The gold-standard signal
Sent edited
Agent edited then sent
Healthy, but watch the edit pattern
Discarded
Agent dismissed the draft
Drafts missing the mark
Acceptance
(sent_unedited + sent_edited) / total
Should climb week-over-week
Unedited of sent
sent_unedited / (sent_unedited + sent_edited)
Crossing 50% is the product signal
If discarded climbs past 30%, your tone hint or help-doc snippets need attention — the model isn’t getting enough context to draft credibly. If unedited-of-sent climbs past 50%, you’ve earned the right to think about Triage as a standalone product.
Boolean. When off, the cron skips your workspace and the Triage nav item is hidden. Toggling off does not delete prior drafts or conversation rows.
Tone hint
One optional line, max 240 characters. Fed into every draft prompt as a voice constraint. Useful for accent (“British English”), tone (“warm but concise”), or banned phrases (“never use ‘reach out’”).
Help-doc snippets
Workspace-scoped library. Owners and admins can add, edit (blur to save), and archive. Total context cap is ~8000 characters across all snippets per draft. Older snippets fall off the prompt context first if the total exceeds the cap — keep entries concise and on-topic.
Each draft is one Claude Sonnet 4.6 call. Roughly 1.5k input tokens (system prompt + customer message + doc context) and ~400 output tokens. At Anthropic’s current pricing that works out to ~$0.01-0.03 per draft.A team handling 30 customer messages a day spends roughly $1/day per workspace.
Sonnet 4.6 is the deliberate choice over Haiku for v1. Customer-facing tone matters more than structured-output speed. If volume scales, the next move would be Haiku for routine drafts and Sonnet for tier-2 categories — not in v1.
Does the customer see anything before I press Send?
No. The draft lives only in Forepost until you click Send via Intercom. Until then, nothing has touched the customer’s conversation in Intercom beyond reading it.
What if I want to reply in Intercom directly, not through Triage?
Click Discard on the Forepost card and reply in Intercom as normal. The conversation drops out of the open Triage list and the discard is logged so your stats stay honest.
Does Triage retrieve prior messages in the thread?
Not in v1. Only the latest customer message goes into the draft prompt. This is a known limitation; thread-history retrieval is the first follow-up feature once v1 demand is validated.
Can I use Triage with Zendesk, Front, or Plain?
Not yet. OAuth scaffolding for those providers exists, but the metric and draft paths are Intercom-only in v1. Each new provider is its own discrete piece of work.
What model is used?
Claude Sonnet 4.6. Configurable in the worker’s MODELS.triage constant if you self-host.
Who can use Triage in my workspace?
Anyone with a workspace seat sees the Triage page when Triage is enabled. Sending and discarding requires owner or admin role. Members can read drafts but can’t send them in v1 — this will likely loosen once the role model for inbox actions is clearer.
Customer messages and Forepost-generated drafts live in your workspace’s D1 scope. The customer’s body is stored long enough to render in the Triage view; on Send, only the final agent-approved body is written to Intercom and stored on triage_drafts.final_body. Nothing is shared cross-workspace.When you discard or resolve a conversation, the rows stay for the 30-day stats rollup. They can be wiped from /admin/clear-demo-data if needed in development; production rows are retained by default for trend analysis.
Embedding-based RAG over help docs (today: simple concatenation)
Front, Plain, Zendesk OAuth and draft paths
Thread-history retrieval to ground drafts on prior agent replies
A separate “Console” brand surface, priced independently
Saved replies and macros
Multi-language draft hints beyond model defaults
Each of these is a discrete piece of work. Triage v1 stays small on purpose — the point is to learn whether AI-assisted drafting is worth paying for, not to ship a helpdesk.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Forepost","colors":{"primary":"#5B6CFF","light":"#5B6CFF","dark":"#3A4AD9"},"logo":{"light":"https://mintcdn.com/kianforepostai/Cfqd9x6MfMpDkoGC/logo/light.svg?fit=max\u0026auto=format\u0026n=Cfqd9x6MfMpDkoGC\u0026q=85\u0026s=48f808ad5df86d09330e34b828137657","dark":"https://mintcdn.com/kianforepostai/Cfqd9x6MfMpDkoGC/logo/dark.svg?fit=max\u0026auto=format\u0026n=Cfqd9x6MfMpDkoGC\u0026q=85\u0026s=869b599c3ac60ee8bc2ce104bdee1d57","href":"https://forepost.ai"},"favicon":"https://mintcdn.com/kianforepostai/Cfqd9x6MfMpDkoGC/favicon.svg?fit=max\u0026auto=format\u0026n=Cfqd9x6MfMpDkoGC\u0026q=85\u0026s=546dcd2dbdbcd74371e8f9b496d33465","background":{"color":{"light":"#F5F3EE","dark":"#0E1116"}},"navbar":{"links":[{"href":"https://forepost.ai","label":"Forepost"}],"primary":{"type":"button","label":"Sign in","href":"https://app.forepost.ai"}},"footer":{"socials":{"x":"https://x.com/forepostai","linkedin":"https://www.linkedin.com/company/forepost-ai"},"links":[{"header":"Product","items":[{"label":"App","href":"https://app.forepost.ai"},{"label":"Marketing site","href":"https://forepost.ai"}]},{"header":"Company","items":[{"label":"Privacy","href":"https://forepost.ai/privacy"},{"label":"Terms","href":"https://forepost.ai/terms"},{"label":"Contact","href":"mailto:kian@forepost.ai"}]}]},"search":{"prompt":"Ask the docs anything..."},"seo":{"metatags":{"og:type":"website","og:site_name":"Forepost Docs"},"indexing":"navigable"},"fonts":{"family":"Geist"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"kianforepostai","hasAudioNarration":false,"actualSubdomain":"kianforepostai","customDomains":["docs.forepost.ai"],"gitSource":{"type":"github","owner":"kian-fpai","repo":"forepost-app","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6a21de10ac32c8aaa6f52bb6","collectionId":"80356de8-ed18-42a8-84b9-12431d8cfa20","schemaVersion":"v2"},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6a21de10ac32c8aaa6f52bb6:success","clientVersion":"0.0.4044","searchFilterCounts":[{"language":"default","tag":"Help","count":32},{"language":"default","tag":"Reference","count":10},{"language":"default","tag":"Data \u0026 delivery","count":9},{"language":"default","tag":"Daily intelligence","count":7},{"language":"default","tag":"Tools","count":6},{"language":"default","tag":"Concepts","count":6},{"language":"default","tag":"Get started","count":5},{"language":"default","tag":"Trust","count":4},{"language":"default","tag":"Customers","count":2},{"language":"default","tag":"Help \u0026 troubleshooting","count":2}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":true},"customCss":[],"page":{"pagePath":"help/triage","slug":"/help/triage","pageMetadata":{"title":"Triage","description":"AI drafts a reply for every new customer message. You approve, edit, or discard. The customer never sees a draft until you press Send.","icon":"inbox","href":"/help/triage"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"AI drafts a reply for every new customer message. You approve, edit, or discard. The customer never sees a draft until you press Send.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,em:`em`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Accordion,AccordionGroup,Card,CardGroup,CodeBlock,Heading,Note,Step,Steps,Table,Tip}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!AccordionGroup)_missingMdxReference(`AccordionGroup`,true);if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tip)_missingMdxReference(`Tip`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Triage is Forepost’s first move into the inbox — an AI co-pilot that sits next to your agents while they work in Intercom. It’s not a replacement helpdesk. Your team keeps replying in Intercom; Forepost just gives them a credible first draft for every new customer message.`}),`\n`,_jsx(Note,{children:_jsx(_components.p,{children:`Triage is in beta. Intercom only in v1. Front, Plain, and Zendesk are on the roadmap.`})}),`\n`,_jsx(Heading,{level:`2`,id:`how-it-works-end-to-end`,children:`How it works, end to end`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`A customer messages your support inbox`,children:_jsx(_components.p,{children:`Nothing changes for the customer. They send a message to Intercom the way they always have.`})}),_jsx(Step,{title:`Forepost polls Intercom every ~10 minutes`,children:_jsx(_components.p,{children:`The cron asks Intercom for every open conversation updated in the last 48 hours and finds the latest customer message in each thread.`})}),_jsx(Step,{title:`Claude drafts a reply`,children:_jsx(_components.p,{children:`The customer’s message, your help-doc snippets, and your tone hint go into a Sonnet 4.6 prompt. The system prompt tells it to open with the answer, no greetings, no emojis, ask a clarifying question when unsure.`})}),_jsx(Step,{title:`The draft appears on your Triage page`,children:_jsx(_components.p,{children:`Nothing has been sent to the customer yet. The conversation card shows their message, the draft reply, and three buttons.`})}),_jsx(Step,{title:`An agent decides what to do`,children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Send`}),` ships the draft as-is via Intercom’s reply API. `,_jsx(_components.strong,{children:`Edit then Send`}),` sends an edited version. `,_jsx(_components.strong,{children:`Redraft`}),` regenerates from scratch. `,_jsx(_components.strong,{children:`Discard`}),` drops the conversation from Triage.`]})}),_jsx(Step,{title:`Forepost records the outcome`,children:_jsxs(_components.p,{children:[`Every decision is logged as `,_jsx(_components.code,{children:`sent_unedited`}),`, `,_jsx(_components.code,{children:`sent_edited`}),`, or `,_jsx(_components.code,{children:`discarded`}),`. The 30-day stats strip turns those into an acceptance rate so you can tell, in weeks not months, whether draft quality is climbing.`]})})]}),`\n`,_jsx(Heading,{level:`2`,id:`what-v1-does`,children:`What v1 does`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`Drafts every new message`,icon:`pen-line`,children:_jsx(_components.p,{children:`Sonnet 4.6 against the customer’s latest message, your help docs, and your tone hint.`})}),_jsx(Card,{title:`Sends through Intercom`,icon:`paper-plane`,children:_jsx(_components.p,{children:`The approved reply lands in Intercom as your connected admin. The customer sees a normal agent reply.`})}),_jsx(Card,{title:`Tracks outcomes`,icon:`chart-line`,children:_jsx(_components.p,{children:`30-day rolling stats: sent unedited, sent edited, discarded. Acceptance rate is the signal.`})}),_jsx(Card,{title:`Polls automatically`,icon:`rotate`,children:_jsx(_components.p,{children:`Every 10 minutes per workspace. You can also force a poll from the page.`})})]}),`\n`,_jsx(Heading,{level:`2`,id:`what-v1-explicitly-doesn’t-do`,children:`What v1 explicitly doesn’t do`}),`\n`,_jsx(_components.p,{children:`The point of v1 is to validate demand, not ship a full helpdesk.`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`No autonomous send`,icon:`hand`,children:_jsx(_components.p,{children:`Every reply is human-approved. No auto-resolve, no confidence-gated send.`})}),_jsx(Card,{title:`No new inbox UI`,icon:`browser`,children:_jsx(_components.p,{children:`Agents still triage, tag, and escalate in Intercom. Triage is a co-pilot, not a replacement.`})}),_jsx(Card,{title:`No threading or attachments`,icon:`paperclip`,children:_jsx(_components.p,{children:`Only the latest customer message feeds the draft. Prior history retrieval is a follow-up.`})}),_jsx(Card,{title:`No multi-helpdesk`,icon:`plug`,children:_jsx(_components.p,{children:`Intercom only. Front, Plain, Zendesk are deferred until the demand signal is real.`})})]}),`\n`,_jsx(Heading,{level:`2`,id:`setup`,children:`Setup`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Connect Intercom`,children:_jsxs(_components.p,{children:[`In `,_jsx(_components.strong,{children:`Settings → Integrations → Helpdesk integrations`}),`, click `,_jsx(_components.strong,{children:`Connect Intercom`}),`. The same OAuth flow used for metric ingestion. Triage reuses the existing token.`]})}),_jsx(Step,{title:`Enable Triage`,children:_jsxs(_components.p,{children:[`In `,_jsx(_components.strong,{children:`Settings → Integrations → Triage`}),`, flip the toggle. The `,_jsx(_components.strong,{children:`Triage`}),` nav item appears in the sidebar under `,_jsx(_components.em,{children:`Console`}),`.`]})}),_jsx(Step,{title:`Add a tone hint (optional)`,children:_jsxs(_components.p,{children:[`One line, fed into every draft prompt: `,_jsx(_components.em,{children:`“warm but concise; British English; never use the word ‘reach out’”`}),`. Saves you from re-editing every draft for voice.`]})}),_jsx(Step,{title:`Paste help-doc snippets`,children:_jsx(_components.p,{children:`Same Settings page. Each snippet is a title plus plain-text body. Think one billing-tier policy, one refund script, one known workaround per snippet. Up to ~8000 chars of doc context fit per draft.`})}),_jsx(Step,{title:`Wait or trigger a poll`,children:_jsxs(_components.p,{children:[`The cron runs every 10 minutes. Or click `,_jsx(_components.strong,{children:`Poll Intercom`}),` at the top of the Triage page to force one immediately.`]})})]}),`\n`,_jsx(Heading,{level:`2`,id:`working-through-the-queue`,children:`Working through the queue`}),`\n`,_jsx(_components.p,{children:`The Triage page is built to work like an inbox. A few affordances:`}),`\n`,_jsx(Heading,{level:`3`,id:`keyboard-shortcuts`,children:`Keyboard shortcuts`}),`\n`,_jsxs(_components.p,{children:[`Available when the `,_jsx(_components.strong,{children:`Open`}),` filter is active and no input has focus. The currently-focused card carries a thin blue outline.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Key`}),_jsx(_components.th,{children:`Action`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`j`})}),_jsx(_components.td,{children:`Focus the next card`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`k`})}),_jsx(_components.td,{children:`Focus the previous card`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`Enter`})}),_jsx(_components.td,{children:`Send the focused card’s draft`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`e`})}),_jsx(_components.td,{children:`Drop focus into the draft textarea (so you can edit)`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`r`})}),_jsx(_components.td,{children:`Redraft the focused card’s reply`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`d`})}),_jsx(_components.td,{children:`Discard the focused card`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`Esc`})}),_jsx(_components.td,{children:`When the textarea has focus, return to card-level shortcuts`})]})]})]}),`\n`,_jsx(_components.p,{children:`The hint strip above the cards shows the live mapping.`}),`\n`,_jsx(Heading,{level:`3`,id:`sort-the-queue`,children:`Sort the queue`}),`\n`,_jsx(_components.p,{children:`Above the cards, a sort dropdown:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Oldest first`}),` (default) — work the queue back-to-front, so nothing ages out`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Newest first`}),` — useful for live-shift work where you want the freshest customer message`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`At-risk accounts first`}),` — surfaces conversations where the customer’s company is flagged on the `,_jsx(_components.a,{href:`/help/accounts`,children:`Accounts`}),` view`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`send-and-next`,children:`Send-and-next`}),`\n`,_jsx(_components.p,{children:`After Send (or Discard), focus auto-advances to the next pending card and lands inside its draft textarea, ready to edit. Lets a leader work through 10–15 drafts without ever touching the mouse.`}),`\n`,_jsx(Heading,{level:`3`,id:`optimistic-redraft`,children:`Optimistic redraft`}),`\n`,_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Redraft`}),` and the textarea immediately swaps to a skeleton with a small loading indicator while Claude regenerates. When the new draft lands, the textarea returns with the fresh content. No frozen UI during the round-trip.`]}),`\n`,_jsx(Heading,{level:`2`,id:`reading-the-stats-strip`,children:`Reading the stats strip`}),`\n`,_jsx(_components.p,{children:`The strip at the top of the Triage page rolls up the last 30 days of outcomes.`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Stat`}),_jsx(_components.th,{children:`What it means`}),_jsx(_components.th,{children:`What to watch for`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Drafts`})}),_jsx(_components.td,{children:`Total conversations with a logged outcome`}),_jsx(_components.td,{children:`Volume signal`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Sent unedited`})}),_jsx(_components.td,{children:`Agent pressed Send without changing the draft`}),_jsx(_components.td,{children:`The gold-standard signal`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Sent edited`})}),_jsx(_components.td,{children:`Agent edited then sent`}),_jsx(_components.td,{children:`Healthy, but watch the edit pattern`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Discarded`})}),_jsx(_components.td,{children:`Agent dismissed the draft`}),_jsx(_components.td,{children:`Drafts missing the mark`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Acceptance`})}),_jsx(_components.td,{children:`(sent_unedited + sent_edited) / total`}),_jsx(_components.td,{children:`Should climb week-over-week`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Unedited of sent`})}),_jsx(_components.td,{children:`sent_unedited / (sent_unedited + sent_edited)`}),_jsx(_components.td,{children:`Crossing 50% is the product signal`})]})]})]}),`\n`,_jsx(Tip,{children:_jsx(_components.p,{children:`If discarded climbs past 30%, your tone hint or help-doc snippets need attention — the model isn’t getting enough context to draft credibly. If unedited-of-sent climbs past 50%, you’ve earned the right to think about Triage as a standalone product.`})}),`\n`,_jsx(Heading,{level:`2`,id:`settings`,children:`Settings`}),`\n`,_jsxs(AccordionGroup,{children:[_jsx(Accordion,{title:`Triage enabled`,icon:`toggle-on`,id:`triage-enabled`,children:_jsx(_components.p,{children:`Boolean. When off, the cron skips your workspace and the Triage nav item is hidden. Toggling off does not delete prior drafts or conversation rows.`})}),_jsx(Accordion,{title:`Tone hint`,icon:`quote-left`,id:`tone-hint`,children:_jsx(_components.p,{children:`One optional line, max 240 characters. Fed into every draft prompt as a voice constraint. Useful for accent (“British English”), tone (“warm but concise”), or banned phrases (“never use ‘reach out’”).`})}),_jsx(Accordion,{title:`Help-doc snippets`,icon:`file-lines`,id:`help-doc-snippets`,children:_jsx(_components.p,{children:`Workspace-scoped library. Owners and admins can add, edit (blur to save), and archive. Total context cap is ~8000 characters across all snippets per draft. Older snippets fall off the prompt context first if the total exceeds the cap — keep entries concise and on-topic.`})})]}),`\n`,_jsx(Heading,{level:`2`,id:`api`,children:`API`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`10`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`10`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`GET`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` /triage?status=open`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`|`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`sent`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`|`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`discarded`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`|`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`resolved`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`POST`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` /triage/poll`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # owner/admin: force a poll (rate-limited 20/hr)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`GET`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` /triage/stats`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # 30-day outcome rollup`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`POST`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` /triage/:id/redraft`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # regenerate the draft (rate-limited 60/hr)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`POST`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` /triage/:id/send`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # body { draftId, body }`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`POST`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` /triage/:id/discard`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`GET`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` /triage/docs`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # list help-doc snippets`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`POST`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` /triage/docs`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # body { title, body }`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`PATCH`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` /triage/docs/:id`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # body { title?, body? }`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`DELETE`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` /triage/docs/:id`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # soft-archive`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`costs`,children:`Costs`}),`\n`,_jsx(_components.p,{children:`Each draft is one Claude Sonnet 4.6 call. Roughly 1.5k input tokens (system prompt + customer message + doc context) and ~400 output tokens. At Anthropic’s current pricing that works out to ~$0.01-0.03 per draft.`}),`\n`,_jsxs(_components.p,{children:[`A team handling 30 customer messages a day spends roughly `,_jsx(_components.strong,{children:`$1/day per workspace`}),`.`]}),`\n`,_jsx(Note,{children:_jsx(_components.p,{children:`Sonnet 4.6 is the deliberate choice over Haiku for v1. Customer-facing tone matters more than structured-output speed. If volume scales, the next move would be Haiku for routine drafts and Sonnet for tier-2 categories — not in v1.`})}),`\n`,_jsx(Heading,{level:`2`,id:`frequently-asked`,children:`Frequently asked`}),`\n`,_jsxs(AccordionGroup,{children:[_jsx(Accordion,{title:`Does the customer see anything before I press Send?`,id:`does-the-customer-see-anything-before-i-press-send`,children:_jsxs(_components.p,{children:[`No. The draft lives only in Forepost until you click `,_jsx(_components.strong,{children:`Send via Intercom`}),`. Until then, nothing has touched the customer’s conversation in Intercom beyond reading it.`]})}),_jsx(Accordion,{title:`What if I want to reply in Intercom directly, not through Triage?`,id:`what-if-i-want-to-reply-in-intercom-directly-not-through-triage`,children:_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Discard`}),` on the Forepost card and reply in Intercom as normal. The conversation drops out of the open Triage list and the discard is logged so your stats stay honest.`]})}),_jsx(Accordion,{title:`Does Triage retrieve prior messages in the thread?`,id:`does-triage-retrieve-prior-messages-in-the-thread`,children:_jsx(_components.p,{children:`Not in v1. Only the latest customer message goes into the draft prompt. This is a known limitation; thread-history retrieval is the first follow-up feature once v1 demand is validated.`})}),_jsx(Accordion,{title:`Can I use Triage with Zendesk, Front, or Plain?`,id:`can-i-use-triage-with-zendesk-front-or-plain`,children:_jsx(_components.p,{children:`Not yet. OAuth scaffolding for those providers exists, but the metric and draft paths are Intercom-only in v1. Each new provider is its own discrete piece of work.`})}),_jsx(Accordion,{title:`What model is used?`,id:`what-model-is-used`,children:_jsxs(_components.p,{children:[`Claude Sonnet 4.6. Configurable in the worker’s `,_jsx(_components.code,{children:`MODELS.triage`}),` constant if you self-host.`]})}),_jsx(Accordion,{title:`Who can use Triage in my workspace?`,id:`who-can-use-triage-in-my-workspace`,children:_jsx(_components.p,{children:`Anyone with a workspace seat sees the Triage page when Triage is enabled. Sending and discarding requires owner or admin role. Members can read drafts but can’t send them in v1 — this will likely loosen once the role model for inbox actions is clearer.`})})]}),`\n`,_jsx(Heading,{level:`2`,id:`privacy`,children:`Privacy`}),`\n`,_jsxs(_components.p,{children:[`Customer messages and Forepost-generated drafts live in your workspace’s D1 scope. The customer’s body is stored long enough to render in the Triage view; on Send, only the final agent-approved body is written to Intercom and stored on `,_jsx(_components.code,{children:`triage_drafts.final_body`}),`. Nothing is shared cross-workspace.`]}),`\n`,_jsxs(_components.p,{children:[`When you discard or resolve a conversation, the rows stay for the 30-day stats rollup. They can be wiped from `,_jsx(_components.code,{children:`/admin/clear-demo-data`}),` if needed in development; production rows are retained by default for trend analysis.`]}),`\n`,_jsx(Heading,{level:`2`,id:`what’s-next-out-of-v1-scope`,children:`What’s next, out of v1 scope`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Autonomous send for high-confidence categories`}),`\n`,_jsx(_components.li,{children:`Embedding-based RAG over help docs (today: simple concatenation)`}),`\n`,_jsx(_components.li,{children:`Front, Plain, Zendesk OAuth and draft paths`}),`\n`,_jsx(_components.li,{children:`Thread-history retrieval to ground drafts on prior agent replies`}),`\n`,_jsx(_components.li,{children:`A separate “Console” brand surface, priced independently`}),`\n`,_jsx(_components.li,{children:`Saved replies and macros`}),`\n`,_jsx(_components.li,{children:`Multi-language draft hints beyond model defaults`}),`\n`]}),`\n`,_jsx(_components.p,{children:`Each of these is a discrete piece of work. Triage v1 stays small on purpose — the point is to learn whether AI-assisted drafting is worth paying for, not to ship a helpdesk.`})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Triage","description":"AI drafts a reply for every new customer message. You approve, edit, or discard. The customer never sees a draft until you press Send.","icon":"inbox","href":"/help/triage"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"How it works, end to end","slug":"how-it-works-end-to-end","depth":2,"children":[]},{"title":"What v1 does","slug":"what-v1-does","depth":2,"children":[]},{"title":"What v1 explicitly doesn’t do","slug":"what-v1-explicitly-doesn’t-do","depth":2,"children":[]},{"title":"Setup","slug":"setup","depth":2,"children":[]},{"title":"Working through the queue","slug":"working-through-the-queue","depth":2,"children":[{"title":"Keyboard shortcuts","slug":"keyboard-shortcuts","depth":3,"children":[]},{"title":"Sort the queue","slug":"sort-the-queue","depth":3,"children":[]},{"title":"Send-and-next","slug":"send-and-next","depth":3,"children":[]},{"title":"Optimistic redraft","slug":"optimistic-redraft","depth":3,"children":[]}]},{"title":"Reading the stats strip","slug":"reading-the-stats-strip","depth":2,"children":[]},{"title":"Settings","slug":"settings","depth":2,"children":[]},{"title":"API","slug":"api","depth":2,"children":[]},{"title":"Costs","slug":"costs","depth":2,"children":[]},{"title":"Frequently asked","slug":"frequently-asked","depth":2,"children":[]},{"title":"Privacy","slug":"privacy","depth":2,"children":[]},{"title":"What’s next, out of v1 scope","slug":"what’s-next-out-of-v1-scope","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"kianforepostai","siteName":"Forepost","title":"Triage - Forepost","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-05-12T10:42:42.919Z","originalFileLocation":"help/triage.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"AI drafts a reply for every new customer message. You approve, edit, or discard. The customer never sees a draft until you press Send.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Forepost\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/kianforepostai/RhG8MDAcSvsiFA5y/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/kianforepostai/RhG8MDAcSvsiFA5y/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/kianforepostai/RhG8MDAcSvsiFA5y/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/kianforepostai/RhG8MDAcSvsiFA5y/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/kianforepostai/RhG8MDAcSvsiFA5y/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/kianforepostai/RhG8MDAcSvsiFA5y/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/kianforepostai/RhG8MDAcSvsiFA5y/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/kianforepostai/RhG8MDAcSvsiFA5y/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/kianforepostai/RhG8MDAcSvsiFA5y/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Triage - Forepost\">\u003cmeta data-mint-head property=\"og:description\" content=\"AI drafts a reply for every new customer message. You approve, edit, or discard. The customer never sees a draft until you press Send.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Forepost Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.forepost.ai/help/triage\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://kianforepostai.mintlify.app/_mintlify/api/og/v2?division=Console+%28beta%29\u0026amp;title=Triage\u0026amp;description=AI+drafts+a+reply+for+every+new+customer+message.+You+approve%2C+edit%2C+or+discard.+The+customer+never+sees+a+draft+until+you+press+Send.\u0026amp;theme=5c89e1e5ffbadb8e8ad1bc8d\u0026amp;signature=0d1b93c9dcda8a9bae8e6902ebedf64b859c5a54b9e9639ced74fc114dc4ddb4\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Triage - Forepost\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"AI drafts a reply for every new customer message. You approve, edit, or discard. The customer never sees a draft until you press Send.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://kianforepostai.mintlify.app/_mintlify/api/og/v2?division=Console+%28beta%29\u0026amp;title=Triage\u0026amp;description=AI+drafts+a+reply+for+every+new+customer+message.+You+approve%2C+edit%2C+or+discard.+The+customer+never+sees+a+draft+until+you+press+Send.\u0026amp;theme=5c89e1e5ffbadb8e8ad1bc8d\u0026amp;signature=0d1b93c9dcda8a9bae8e6902ebedf64b859c5a54b9e9639ced74fc114dc4ddb4\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/kianforepostai/RhG8MDAcSvsiFA5y/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Forepost\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#5B6CFF\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.forepost.ai/help/triage\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/help/triage.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.forepost.ai/#organization\",\"name\":\"Forepost\",\"url\":\"https://docs.forepost.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/kianforepostai/Cfqd9x6MfMpDkoGC/logo/light.svg?fit=max\u0026auto=format\u0026n=Cfqd9x6MfMpDkoGC\u0026q=85\u0026s=48f808ad5df86d09330e34b828137657\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.forepost.ai#website\",\"name\":\"Forepost\",\"url\":\"https://docs.forepost.ai\",\"publisher\":{\"@id\":\"https://docs.forepost.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.forepost.ai/help/triage#webpage\",\"url\":\"https://docs.forepost.ai/help/triage\",\"name\":\"Triage\",\"description\":\"AI drafts a reply for every new customer message. You approve, edit, or discard. The customer never sees a draft until you press Send.\",\"dateModified\":\"2026-05-12T10:42:42.919Z\",\"isPartOf\":{\"@id\":\"https://docs.forepost.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.forepost.ai/help/triage#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.forepost.ai/help/triage#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Forepost\",\"item\":\"https://docs.forepost.ai\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Triage\",\"item\":\"https://docs.forepost.ai/help/triage\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.forepost.ai/help/triage#article\",\"headline\":\"Triage\",\"name\":\"Triage\",\"description\":\"AI drafts a reply for every new customer message. You approve, edit, or discard. The customer never sees a draft until you press Send.\",\"url\":\"https://docs.forepost.ai/help/triage\",\"mainEntityOfPage\":{\"@id\":\"https://docs.forepost.ai/help/triage#webpage\"},\"dateModified\":\"2026-05-12T10:42:42.919Z\",\"publisher\":{\"@id\":\"https://docs.forepost.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.forepost.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Forepost\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Forepost","nav":{"global":null,"tabs":[{"tab":"Help","groups":[{"group":"Get started","pages":[{"title":"Welcome to Forepost","icon":"house","href":"/introduction"},{"title":"Set up your workspace","icon":"play","href":"/help/onboarding"},{"title":"Demo data","icon":"play","href":"/help/demo-data"},{"title":"Account \u0026 sign-in","icon":"user","href":"/help/account"},{"title":"Teammates","icon":"user-plus","href":"/help/teammates"}]},{"group":"Daily intelligence","pages":[{"title":"Daily Brief","icon":"newspaper","href":"/help/daily-brief"},{"title":"Horizon","icon":"binoculars","href":"/help/horizon"},{"title":"Weekly Watch","icon":"calendar-days","href":"/help/weekly-watch"},{"title":"Now bar","icon":"bell","href":"/help/now"},{"title":"Ask Forepost","icon":"messages","href":"/help/ask-forepost"},{"title":"Decisions","icon":"bookmark","href":"/help/decisions"},{"title":"Custom alerts","icon":"bell","href":"/help/alerts"}]},{"group":"Customers","pages":[{"title":"Accounts","icon":"users","href":"/help/accounts"},{"title":"Themes","description":"Track repeated topics across conversations. When a theme crosses its weekly threshold, Forepost can auto-file a Linear bug.","icon":"tags","href":"/help/themes"}]},{"group":"Console (beta)","pages":[{"title":"Triage","icon":"inbox","href":"/help/triage"}]},{"group":"Tools","pages":[{"title":"Watchlist","description":"The twelve things Forepost watches on your behalf, and only those.","icon":"list-check","href":"/help/watchlist"},{"title":"Team","icon":"users","href":"/help/team"},{"title":"Coaching","icon":"comment","href":"/help/coaching"},{"title":"Board Pack","icon":"presentation","href":"/help/board-pack"},{"title":"Headcount","icon":"calculator","href":"/help/headcount"},{"title":"Archive","icon":"archive","href":"/help/archive"}]},{"group":"Data \u0026 delivery","pages":[{"title":"Import data from your helpdesk","icon":"upload","href":"/help/import-data"},{"title":"Intercom integration","icon":"message-circle","href":"/help/intercom"},{"title":"Front, Plain, Zendesk","icon":"plug","href":"/help/front-plain-zendesk"},{"title":"Linear integration","icon":"git-branch","href":"/help/linear"},{"title":"Google Calendar integration","icon":"calendar","href":"/help/google-calendar"},{"title":"Deep-link templates","icon":"link","href":"/help/deep-links"},{"title":"Forwarding","href":"/help/forwarding"},{"title":"Email \u0026 unsubscribing","icon":"envelope","href":"/help/email"},{"title":"Team briefings","icon":"envelopes-bulk","href":"/help/team-briefings"},{"title":"Slack delivery","icon":"slack","href":"/help/slack"}]},{"group":"Help \u0026 troubleshooting","pages":[{"title":"Troubleshooting","icon":"wrench","href":"/help/troubleshooting"},{"title":"FAQ","icon":"circle-question","href":"/help/faq"}]}]},{"tab":"Reference","pages":[{"title":"Reference","href":"/reference/eight-signals"}]}]},"basePath":"","title":"Triage - Forepost","buildId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","deploymentId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","dynamics":[],"chunks":[]}