Skip to main content
Forepost can post your Daily Brief and Weekly Watch directly into Slack at the same time as the email. Most CX leads prefer this once they’ve tried it: the brief lands where the team is already running the day, and decisions happen in-thread instead of buried in an inbox.

Set it up

You’ll create an Incoming Webhook in Slack, copy the URL, paste it into Forepost. Five minutes start to finish.
1

Create a Slack app

Go to api.slack.com/apps and click Create New AppFrom scratch. Name it Forepost (or whatever you like) and pick the Slack workspace you want to post into.
2

Enable Incoming Webhooks

In the app’s left sidebar, open Incoming Webhooks and toggle Activate Incoming Webhooks to on.
3

Add a webhook for a channel

Scroll down and click Add New Webhook to Workspace. Pick the channel you want briefs posted to (we recommend a dedicated #cx-leads or #support-pulse channel — not #general). Authorise.
4

Copy the URL

You’ll be returned to the Incoming Webhooks page with a new entry. Copy the URL. It looks like https://hooks.slack.com/services/T0XXX.../B0XXX.../abc123....
5

Paste into Forepost

In Settings → Delivery → Slack delivery, paste the URL into the Incoming webhook URL field, toggle Slack delivery on, and Save settings.
6

Send a test

Click Send test to Slack. The brief should appear in your chosen channel within a couple of seconds. If it doesn’t, see Troubleshooting below.

How delivery works

  • Independent channels. Slack and email fire independently from the same schedule. Turn either or both on. The same hour and timezone you set for the Daily Brief governs both.
  • One Slack target per workspace. A webhook URL is tied to one channel. If you want the brief in two places, create two webhooks and decide which to use; for two channels in production we’d recommend keeping email on for whoever doesn’t sit in the Slack channel.
  • Block Kit format. Briefs render as native Slack blocks (header, sections, divider, footer with links to the app). Long briefs are chunked across multiple sections so nothing gets truncated.

Capacity breach alerts

Slack delivery has a sub-feature that turns Forepost into a proactive agent rather than a scheduled poster: capacity breach alerts. When your capacity runway drops below 8 weeks, Forepost posts to your Slack channel right away — not at your daily brief hour, not in the Monday digest, but the next cron tick after the breach is detected. The alert names the runway in weeks, the human-handled volume, the team cap, and what adding one agent would do to the cap. Plain numbers, ready to share with finance. Rules:
  • Fires once per breach. First time you cross under 8 weeks, you get an alert. If the runway then worsens further (drops by at least 1 week since the last alert), you get another. If it stays the same or improves, you stay quiet.
  • 24-hour cooldown. Even if the breach worsens twice in a day, you only get one alert. A flapping metric can’t spam your channel.
  • Requires Slack delivery to be on. This feature rides the same webhook as the scheduled brief / digest. The toggle is in Settings → Delivery → Capacity breach alerts, on by default for users who already have Slack delivery configured.
The breach math is the same as the Weekly Watch digest uses (volume × growth assumption × (1 - deflection), divided across active agents at 80% target utilisation). Adjust your team list, deflection, and volume in Settings to influence the calculation. When the alert fires, the timestamp + runway value at that moment are recorded on the Settings → Delivery card so you can see when Forepost last surfaced this.

Agent CSAT alerts

A second proactive surface, same channel, different trigger. When an agent’s CSAT trajectory sustains falling across 3+ weeks with a drop of 2pp or more, Forepost flips the agent’s flag in Settings → Team and posts to Slack with a drafted 1:1 agenda included in the same message:
Forepost flagged Sarah Chen for review. CSAT sustained falling across 4 weeks (-5pp). Forepost drafted the 1:1 agenda below — paste straight into your notes.
Suggested 1:1 agenda for Sarah Chen
  1. Open by checking load — 62 tickets, see if anything’s changed.
  2. Walk through CSAT shape: 84% → 79% across four weeks, ask what’s driving it.
  3. Recognise her one-touch rate is still above the team average.
  4. Coach on one specific ticket type where CSAT slipped.
  5. Agree one thing to try this week, revisit at next 1:1.
The agenda is generated at flag-time by the same model that writes the Daily Brief, following the same voice rules. It’s a copy-paste starting point for your notes, not a script. Rules:
  • One alert per qualifying agent, not one per cron tick. After firing, Forepost holds a 7-day cooldown on re-asserting the same flag.
  • If you clear the flag in Settings → Team, Forepost respects that for 30 days. Re-flagging after you’ve said “I’ve handled it” would feel adversarial; longer cooldown stops Forepost from overruling your judgement.
  • Toggle: Settings → Delivery → Agent CSAT alerts. Independent of capacity breach alerts; some teams want one but not the other.
The flag still applies in-app even if you turn the Slack alert off — the auto-flag itself is the agentic loop, the Slack post is just the channel announcement.

Recovery

When an auto-flagged agent’s CSAT trajectory tips back (no longer falling, no worse than -1pp across the current window), Forepost clears the flag itself and posts a short follow-up:
Forepost cleared Sarah Chen’s flag. CSAT sustained rising across 4 weeks. Up 3pp across 4 weeks. The watchlist entry and the queued 1:1 action have both been auto-resolved — pick it back up manually if you still want the conversation.
The auto-queued action in your Daily Brief gets marked dismissed in the same step, so your morning checklist stays current without you having to triage. If you’d rather Forepost hadn’t closed it, just re-queue the action manually or flag the agent again.

Ask Forepost in Slack (inbound)

The outbound webhook posts Forepost into Slack. The inbound Slack agent goes the other way: you @mention @forepost in a channel or DM the Forepost bot, and Forepost answers in-thread using the same agentic tool loop as Ask Forepost on the web (Ask Forepost).

One-time install

This needs a Slack app with bot permissions, distinct from the incoming webhook above. You can run both — they don’t conflict.
1

Create the Slack app

At api.slack.com/apps, Create New App → From scratch, name it Forepost Agent (or similar), pick the workspace.
2

Add bot scopes

Under OAuth & Permissions → Scopes → Bot Token Scopes, add: app_mentions:read, chat:write, im:history, im:read, im:write. These let the bot read mentions and DMs and post replies.
3

Install the app

Under OAuth & Permissions, click Install to Workspace. Authorise. Copy the Bot User OAuth Token (starts with xoxb-).
4

Enable event subscriptions

Under Event Subscriptions, toggle on. Set the Request URL to https://forepost-app.round-mode-162c.workers.dev/slack/events (or your own worker URL). Under Subscribe to bot events, add app_mention and message.im.
5

Copy the signing secret

Under Basic Information → App Credentials, copy the Signing Secret. Forepost staff must set this as the worker’s SLACK_SIGNING_SECRET env var (one-time op on our side). Email kian@forepost.ai with the secret.
6

Paste the bot token into Forepost

In Settings → Integrations → Slack agent, paste the xoxb-… token and save. Forepost validates the token with Slack and records the team_id so inbound events route correctly.

Using it

In any channel where you’ve invited the Forepost bot:
@forepost what’s CSAT doing this month? @forepost what was Sarah’s last 8 weeks of tickets? @forepost what did you say about deflection last quarter?
Or DM the Forepost bot the same questions. Replies arrive in-thread within a few seconds. The Slack agent always runs with tools on, so questions that need a lookup work natively without you needing to remember a toggle.

What it can do in Slack vs. the web

Slack replies are shorter — 3-6 sentences max, no headings, Slack mrkdwn formatting. Everything else is identical: same workspace context, same voice rules, same tool access. Conversation threads are NOT persisted as Ask Forepost threads on the web (each mention is its own one-shot turn); use the web Ask Forepost surface when you want multi-turn memory.

Slash commands

If the Slack app is installed (see Ask Forepost in Slack above), three slash commands are available alongside @forepost mentions:
/forepost ask <question>                          # runs Ask Forepost; reply posts to the channel
/forepost action <text>                           # files a new pending action in your workspace
/forepost now                                     # latest live-queue snapshot (open / oldest / unassigned)
/forepost responses                               # list pending action assignments for this workspace
/forepost respond <id> accept|decline [note]      # close out an assignment without leaving Slack
The /forepost ask command acks within Slack’s 3-second window and posts the answer in-channel when the agentic turn finishes. /forepost action files a row in the actions table so it shows up on the next Daily Brief’s action history (origin tracked in slack_commands audit). /forepost now reads the latest Now bar snapshot — no extra helpdesk poll.

Responding to delegated actions from Slack

When a CX lead assigns an action to a teammate (see Action assignment), the assignee gets an email with a magic-link response form. The same email now mentions the Slack option inline“Prefer Slack? Run /forepost respond <id> accept or /forepost respond <id> decline in your workspace’s Slack.” — so the assignee never has to discover the Slack path separately. Useful when the team lives in Slack and would rather not jump to email. Flow:
  1. The assignee runs /forepost responses to see open assignments for the workspace, shown as a numbered list with the action text.
  2. They run /forepost respond <id> accept "on it for Thursday" (or decline "Sarah is on leave, suggest Tier 2").
  3. The assignment is marked accepted or declined, the response note is recorded, and the leader gets an email mirroring the magic-link path (subject: X accepted your delegated action (via Slack)).
Tenant scope: the Slack workspace is bound to one Forepost workspace via the Slack app install, so the assignment ID is only valid within that team. The slash command response itself is signature-verified. To add the commands: in your Slack app’s Slash Commands section, create three commands pointing at https://forepost-app.round-mode-162c.workers.dev/slack/commands. Slack will sign each request; the worker verifies the signature against SLACK_SIGNING_SECRET.

Privacy and security

The webhook URL is effectively a password. Anyone holding it can post to the channel as your Slack app. Forepost stores it in our D1 database alongside the rest of your subscription, transmitted only over HTTPS. We never log webhook URLs in plain text. If a URL leaks, revoke it from the Incoming Webhooks page in your Slack app config and paste a fresh URL into Forepost.

Troubleshooting

Most common cause: the webhook URL has a typo or trailing whitespace. The URL must start with https://hooks.slack.com/services/ exactly. Re-copy from the Slack admin page and try again.
Check that Slack delivery is toggled on (not just the webhook field filled in) and that the Send at hour matches what you expect in your timezone. The cron only fires at that local hour.
The cron runs hourly on the hour UTC. If your local hour just ticked over you may wait up to 60 minutes for the next firing. Use Send test to Slack to verify the wiring; the daily brief will land at the next scheduled hour.
In Settings → Delivery → Slack delivery, untick the toggle and Save settings. Or delete the webhook URL field and save. The cron will stop posting to Slack on the next hourly tick.