Slack agent
Agent behaviour
How a Slack message becomes a turn: screening, intent routing, the planner, confirmations, thread context and limits.
Agent behaviour
One Slack message is one turn. Knowing the order of a turn helps you explain any reply a customer shows you.
The order of a turn
- Membership and admission. Full workspace member, live link, bound workspace, licence, Slack on.
- Screening. Text that looks like instructions to the agent is refused before any model call: "I only act on partner performance requests from workspace members."
- Help. If the message is a help request, the agent answers from fixed copy, listing only what this person's access and the environment support. No credit needed.
- Credit check. Every other request needs funded credit first.
- Intent. The model classifies the message (diagnose, activate, decide, prove, query, help, unknown). Any partner, month, amount or brief reference not present in the text is dropped. A rules parser covers well-formed phrasing as a fallback.
- Workflow. Diagnose, Prove (revenue and performance) and Activate (briefs) run deterministic code. Open read questions (query) go to the planner.
- Reply. Rendered from fixed copy, posted privately.
The planner
Read questions such as rankings and brief searches use a bounded planner with read tools only: list_partners, get_partner_performance, search_briefs, get_brief. Up to 8 planner steps, each with its own time and token cap. Unambiguous rankings ("top 10 partners") use a fixed read plan, so the model cannot alter the filters.
Turn limits
| Limit | Value |
|---|---|
| Tool calls per turn | 6 |
| Turn deadline | 60 seconds |
| Reply length | 12,000 characters (longer is truncated) |
| Intent extraction | 8 seconds, 400 tokens |
| Confirmation lifetime | 10 minutes |
Hitting a limit gives "That took too long and nothing was recorded" or "That request needed more steps than I am allowed in one turn".
Confirmations
Writes are never executed inside the turn that proposes them. The server builds the proposal text and stores it sealed, bound to the person, thread, link version and workspace version. Confirm executes exactly that stored call after rechecking authority; Cancel discards it. Changed access, an expired or reused proposal, or data that changed since (for example the brief version or the month's figures) refuses the action. Uncertain write outcomes are reported, never retried.
Thread context
When the agent asks a question, the request and question are kept for ten minutes, encrypted, per person per thread. A short answer in the thread fills that one gap. A clear new request, or an acknowledgement, starts fresh. Old tool results are never carried over: later reads use fresh data.
Where it answers
Only in the person's verified one-to-one Messages conversation. A channel @mention from a linked person gets a private nudge: "Open HockeyStick in Agents & apps, then choose Messages to continue privately." No business data appears in channels.