Skip to main content

One thing leaves, and it is one sentence long

When somebody mentions an Agentick agent in Slack, or labels a Linear issue for it, the text of that message and the name of the channel it arrived on are sent to TypeSafe, who answer four narrow questions about it so that we can decide whether the message is work at all. That is the whole payload. Two fields:
The channel is the word slack or the word linearnot a channel id, not a thread id, not your workspace name. The message is capped at 4,000 characters.

Why we send anything at all

Without this, every message addressed to your agent becomes a case: a greeting spends a turn of your own model subscription, takes seconds instead of milliseconds, and bills you for a unit of work that was somebody saying hello. The classifier answers four questions — is the author asking for something, is it aimed at the agent, what kind of message is it, is there enough here to start on — and our own code combines those answers into the decision. We never ask the model “should this open a case?”; the policy stays ours, in a function you could read in a sitting.

What never leaves

The list of nothing else is the part worth reading:

Never sent

  • Repository contents and file diffs
  • Prompts sent to a model, and the completions that come back
  • Your agent’s persona or configuration
  • Any prior case, ticket or conversation
  • The reporter’s identity, user id or email
  • Channel ids, thread ids, workspace names
  • Environment variables
  • Credentials of any kind

Sent

  • The message text (≤ 4,000 characters)
  • The word slack or the word linear

Whose key, and whose bill

Ours. This is the one inference call our cloud makes, and we pay for it. It does not touch your model budget and does not appear on your spend. Model spend for the actual work is unchanged and unaffected: your key, your machine, direct egress to your provider.

When it fails

The classifier is a third party, and third parties have bad days. Every failure — outage, timeout, rate limit, expired key, malformed answer, or an answer the model itself is not confident about — resolves the same way: the case opens anyway, and is recorded as unclassified. Nothing is inferred from a failure. A message we could not classify is treated exactly as it would have been before the classifier existed, because getting this wrong in the other direction would silently drop somebody’s real request.

Bots and the agent’s own messages

Never classified, and never sent. Messages from bots — including the agent’s own posts — are discarded before the classifier is reached. That is structural rather than a rule someone remembered to write, and it is what stops an agent from classifying its own replies in a loop.