Skip to main content
TACAVAR
•AI Infrastructure

Can an AI Agent Leak Private Data Into Slack? What Happened and How to Stop It

Yes — an AI agent with private-data access and a path to a shared channel can post that data to the wrong audience. The controls that stop it: egress allowlists, identity scoping, draft-then-approve, outbound DLP checks, and a full audit log.

Yes. An agent that can read private data and also post to a shared channel can post that data to the wrong audience — without being hacked, jailbroken, or maliciously prompted. Read-only access limits what an agent can change, not where what it read can end up. The fix is not better prompts; it is controlling three things most teams never configure: where agents are allowed to send (egress), whose identity they post under, and what requires a human approval before anything leaves the building.

This is not hypothetical. Below is what was publicly reported about one such incident in early October 2026, the general pattern behind it, and the specific controls that stop it. Tacavar was not involved in this incident and is not claiming to have prevented it — we are describing the control patterns because the same configuration gaps exist in almost every team that has connected an AI agent to both private data and Slack.

What was reported

According to Shane Mac (CEO of XMTP Labs), posting on X on October 6, 2026, an AI agent he used posted his personal bank balances and an expense breakdown into his company's Slack — as him — and then apologized for it. The account was covered by Futurism (October 7), Cybernews (October 7), RuntimeWire and, in an as-told-to piece from Mac himself, Business Insider (October 9). Together they add this reported detail:

  • Per Business Insider, Mac said he gave the agent read-only access to his accounts and told it to send messages only to him. Its monthly audit instead went to the company's executive Slack channel, and a colleague's DM alerted him.
  • Per Futurism, Mac said he had not realized that a separate agent he used could confer with the Slack-connected one.
  • Cybernews reported Mac's statement that his separate agents shared one cloud computer, and RuntimeWire reported that two destinations had similar names (a personal group chat and a work channel). Business Insider and RuntimeWire also report that the vendor shipped a permission change afterward.

We describe the incident only as these sources report it. Futurism notes it could not independently verify Mac's claims, details differ somewhat by outlet, and the vendor's change is described only in general terms. We do not speculate about root cause or assign blame, and this post is not a review of any vendor's product.

One detail matters for anyone designing around this: in the reported account, the post was surfaced when a colleague noticed it and sent Mac a DM — a human catching it after the fact, not a control that stopped it before it went out.

Why it happens: the pattern, not the product

Strip away the specifics and this is a general pattern that any agent setup can drift into. It has five components, and a leak needs them to line up only once:

  1. A private-data agent. Something with access to financial records, HR files, customer PII, or personal accounts. "Read-only" feels safe, but read access is a data-transfer capability once anything else can act on what was read.
  2. A broadcast-capable agent. Something that can post to channels, send DMs, or email — ideally to a wide audience, and often as the user, using the human's own identity so the message carries full credibility.
  3. Shared context or shared infrastructure. The two agents share a workspace, a memory, or (as reported in this incident) a cloud computer. Data that entered through agent A's read access can become available to agent B's send capability — often without anyone deliberately configuring that handoff.
  4. Ambiguous destination names. In the reported case, per RuntimeWire, two destinations had similar names. If an integration lets an agent pick a destination by display name rather than a fixed channel ID, similar names can turn a private message into a broadcast.
  5. A scheduled or proactive run. In the reported case the post came from a monthly audit job. Scheduled or self-initiated runs are exactly when no human is watching the output before it sends.

Every incident in this class is some composition of those five. Which means the controls are also compositional — each one removes a component.

The control checklist

# Control What it stops
1 Egress allowlist per agent Agent sending anywhere not explicitly pre-bound
2 Destination resolution by ID, not display name Wrong-but-similarly-named channel picks
3 Data-class separation Private-data agents reaching broadcast-capable agents
4 Identity scoping — post as a labeled bot Messages impersonating the human
5 Draft-then-approve for posts as the user or to wide channels Unreviewed outbound content
6 DLP-style outbound checks Sensitive patterns (balances, PII, credentials) leaving at all
7 Proactive-run delivery limits Scheduled jobs writing to open destinations
8 Full audit log, including blocked attempts Silent failures and no incident timeline
9 Kill switch / instant connection revocation Ongoing exposure while you investigate
10 Delete + notify runbook Slow, improvised response after the fact

Details on the ones teams most often get wrong:

Egress allowlist. Each agent gets a named, explicit list of destinations it may write to — and the integration resolves those destinations by ID, not by display name. Display names change and collide; channel IDs do not. If your Slack integration lets the model pick a channel by typing a name at runtime, you do not have an allowlist, you have a suggestion.

Data-class separation. Agents with access to personal, financial, or otherwise sensitive connections should be architecturally incapable of writing to shared channels — different connections, different credentials, different runtimes where possible. In the reported account, Mac said he had not realized two agents could confer; separation makes that kind of conferring impossible rather than a matter of memory.

Identity scoping. An agent that posts as you inherits your authority and your audience's trust. The default should be a clearly labeled bot identity. Posting as the user is a privilege that requires approval (next item), not a convenience setting.

Draft-then-approve. Any post made as the user, or into a channel above a size threshold you set, should land in a review queue first: the agent drafts, a human approves, then it sends. This is the same approval gate we describe for tool admission in MCP tool governance in production — applied at the message boundary instead of the tool boundary.

DLP-style outbound checks. Before any outbound message sends, run a pattern and classifier scan: account numbers, balances, salary and expense data, credentials, customer PII. Match → block, escalate to a human, and log. This is a last line of defense that can catch what the allowlist and approvals miss.

Audit everything, including blocks. Every outbound attempt — sent, blocked, pending approval — with agent identity, destination, timestamp, and the approval decision. Without this, your post-incident question is "what else did it post?" with no way to answer.

Proactive-run limits. Scheduled or self-initiated runs should deliver only to a pre-bound private destination — a DM to the operator, a private log channel — never to an open destination the model selects at runtime.

A 10-minute self-audit

You can find most of this exposure without any tooling:

  1. List every AI agent, integration, and automation connected to your workspace — including ones individual employees set up.
  2. For each, write down: what data it can read, where it can write, and whose identity it uses.
  3. Flag any agent that can both read sensitive data and post to a shared or multi-member destination. That intersection is your risk surface.
  4. Check whether destinations are resolved by ID or by name at send time.
  5. Test with dummy data: give a test agent a fake "confidential" string and see if any path can carry it into a shared channel without a human in between.

If step 3 flags anything and step 4 says "by name," you have the pattern described above, waiting for a similarly-named channel and a bad day.

Where governance becomes a standing function

These controls are not one-time setup. Agents get added, connections get shared, channels get renamed, and the person who configured the allowlist leaves. The teams that avoid this incident class treat agent governance as a standing operational function — allowlists reviewed on change, approvals enforced in the runtime, outbound checks tuned as new data classes appear, audit logs actually read. We cover the broader containment picture (failure modes and the six-control table) in What Breaks When AI Agents Go Rogue in Production, and the buying decision in The Governed AI Ops buying guide.

If you are running production agents and want this operated rather than self-assembled — Ask about Governed AI Ops ($1,997/mo): managed agent runtime plus governance. If you are earlier in the journey and mostly need the foundation, Growth Starter ($497/mo) is the softer on-ramp.

FAQ

Is read-only access enough protection? No. Read-only limits what the agent can change, not where what it read can travel. Once read data reaches an agent or runtime with send capability, the read-only flag on the first agent is irrelevant. Treat read access to sensitive data as a data-egress capability.

Is this a prompt-engineering problem? Should I just write better instructions? In the reported account, Mac said he had told the agent to message only him, yet the post went to a work channel. Prompts are probabilistic guidance to a system that also receives tool results, other agents' context, and its own scheduling logic. Instructions are a control surface, never the control.

Who should approve posts made "as me"? You, or a delegated owner you name — via a draft-then-approve queue, not a real-time interrupt. If approval has no dedicated surface, it degrades to "nobody reviews it because reviewing means finding it in the channel."

Does our existing DLP catch this? Only if it inspects Slack outbound messages — some DLP deployments cover email and file shares but not messaging platforms, and none will see agent traffic unless the agent runtime routes through them. The check belongs in the send path itself.

Is this compliance or legal advice? No. This post is educational and describes control patterns. It is not legal, compliance, or privacy advice, and it is not a review of any vendor's product.


Related reading: MCP tool governance in production · What breaks when AI agents go rogue in production · Governed AI Ops buying guide