Skip to main content
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.

How it works, end to end

1

A customer messages your support inbox

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.

What v1 does

Drafts every new message

Sonnet 4.6 against the customer’s latest message, your help docs, and your tone hint.

Sends through Intercom

The approved reply lands in Intercom as your connected admin. The customer sees a normal agent reply.

Tracks outcomes

30-day rolling stats: sent unedited, sent edited, discarded. Acceptance rate is the signal.

Polls automatically

Every 10 minutes per workspace. You can also force a poll from the page.

What v1 explicitly doesn’t do

The point of v1 is to validate demand, not ship a full helpdesk.

No autonomous send

Every reply is human-approved. No auto-resolve, no confidence-gated send.

No new inbox UI

Agents still triage, tag, and escalate in Intercom. Triage is a co-pilot, not a replacement.

No threading or attachments

Only the latest customer message feeds the draft. Prior history retrieval is a follow-up.

No multi-helpdesk

Intercom only. Front, Plain, Zendesk are deferred until the demand signal is real.

Setup

1

Connect Intercom

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.

Working through the queue

The Triage page is built to work like an inbox. A few affordances:

Keyboard shortcuts

Available when the Open filter is active and no input has focus. The currently-focused card carries a thin blue outline.
KeyAction
jFocus the next card
kFocus the previous card
EnterSend the focused card’s draft
eDrop focus into the draft textarea (so you can edit)
rRedraft the focused card’s reply
dDiscard the focused card
EscWhen the textarea has focus, return to card-level shortcuts
The hint strip above the cards shows the live mapping.

Sort the queue

Above the cards, a sort dropdown:
  • Oldest first (default) — work the queue back-to-front, so nothing ages out
  • Newest first — useful for live-shift work where you want the freshest customer message
  • At-risk accounts first — surfaces conversations where the customer’s company is flagged on the Accounts view

Send-and-next

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.

Optimistic redraft

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.

Reading the stats strip

The strip at the top of the Triage page rolls up the last 30 days of outcomes.
StatWhat it meansWhat to watch for
DraftsTotal conversations with a logged outcomeVolume signal
Sent uneditedAgent pressed Send without changing the draftThe gold-standard signal
Sent editedAgent edited then sentHealthy, but watch the edit pattern
DiscardedAgent dismissed the draftDrafts missing the mark
Acceptance(sent_unedited + sent_edited) / totalShould climb week-over-week
Unedited of sentsent_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.

Settings

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.
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’”).
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.

API

GET    /triage?status=open|sent|discarded|resolved
POST   /triage/poll                       # owner/admin: force a poll (rate-limited 20/hr)
GET    /triage/stats                      # 30-day outcome rollup
POST   /triage/:id/redraft                # regenerate the draft (rate-limited 60/hr)
POST   /triage/:id/send                   # body { draftId, body }
POST   /triage/:id/discard
GET    /triage/docs                       # list help-doc snippets
POST   /triage/docs                       # body { title, body }
PATCH  /triage/docs/:id                   # body { title?, body? }
DELETE /triage/docs/:id                   # soft-archive

Costs

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.

Frequently asked

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.
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.
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.
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.
Claude Sonnet 4.6. Configurable in the worker’s MODELS.triage constant if you self-host.
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.

Privacy

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.

What’s next, out of v1 scope

  • Autonomous send for high-confidence categories
  • 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.