# How to let an AI agent reply for your company, with approval (/blog/how-to-let-an-ai-agent-reply-for-your-company)

At my company, a lot of things just need a ✅ from me in Slack.

Our two official social accounts are a good example. Last week the TinyFish team told me that a lot of companies hire someone just to reply from the company account, under other people's posts, so the account stays active. That person costs several thousand dollars a month and can't be online 24 hours a day.

A day later Spencer (one of my co-founders) set up an agent to do that job for @CoreSpeedHQ on X and for our LinkedIn page. It drafts the replies, Hao (our CTO) and I tap ✅ in Slack, and then it posts. We made a short film of one real round. Here's how it's built.

[At my company, a lot of things just need a ✅ from me in Slack.](https://www.youtube.com/watch?v=Xq3qPDNaOME)

The film rebuilds one real round, with the real text: TinyFish's "congrats on launching!" and our reply.

## What it runs on \[#what-it-runs-on]

Here is each part of CoreSpeed it uses:

* **A virtual machine in the cloud.** The agent has its own machine on Agent Fleet, and a routine wakes it every 10 minutes.
* **The [X connector](/catalog/twitter)** reads our mentions and searches X. The **[Slack connector](/catalog/slack)** posts each draft as a card and reads our ✅.
* **[Team memory](/memory)** holds what the agent needs to know about our product, and the decisions we made about this loop.
* **[CoreSpeed Drive](/docs/drive)** is the shared drive for our agents and our team. It holds our approved launch copy, and the film with its cover and stills.
* **[Tie](/tie)** lets the agent type its replies on our office Mac mini.
* **[Smart Approval](/docs/approvals)** is a second gate on that typing.
* **The [media tools](/docs/media)** made the film's voiceover and music.

## 1. A reply round every 10 minutes \[#1-a-reply-round-every-10-minutes]

The agent runs as a routine on Agent Fleet, our home for agents in the cloud. It's coming soon; inside the company we call it Ensemble. Every 10 minutes the routine starts a round. The agent reads our mentions and checks new posts from the team and from partners like TinyFish. Every half hour it also searches for companies in our space.

Spencer kept its job narrow. It only replies. It doesn't write posts of its own, and it never likes, follows or DMs anyone. It drafts at most three replies a round and posts at most 25 a day. Between 11 PM and 7 AM Pacific it drafts nothing, because the people who approve are asleep.

![The routine CoreSpeedHQ reply loop: every 10 minutes, Pacific time, replies only, posts once both Hao and Milton have reacted ✅, pauses itself on November 20.](/blog/how-to-let-an-ai-agent-reply-for-your-company/routine.webp)

The routine. It pauses itself on November 20, when we review it.

## 2. Team memory, so it knows the product \[#2-team-memory-so-it-knows-the-product]

A reply from the company account has to get the product right. Before it writes, the agent reads our team memory and its own rules file, and both get sharper every time we correct it.

On day one it drafted a post saying a team policy lives in memory. Spencer pointed out that a policy is a [Smart Approval](/blog/introducing-smart-approval) rule and has nothing to do with memory. The correction went into its rules, and the agent added a check that flags any draft tying the two together.

It also pulls what it needs from Drive. On the day we launched Tie, it read our approved launch copy there before it wrote a word about Tie.

## 3. A slop check before anyone sees it \[#3-a-slop-check-before-anyone-sees-it]

Spencer also asked for a slop check before anything posts. So the agent wrote one, a short script that flags what makes a reply sound like a bot. It catches em dashes, "it's not X, it's Y", lists of three, "great post", and anything over X's 280 characters.

A draft only reaches Slack once it passes. Then the agent reads it once more itself.

![The agent's round: it reads Slack, our mentions and the TinyFish thread, drafts a reply, and runs slopcheck.py. One draft is flagged for a three-item list; the TinyFish reply passes at 36 of 280 characters.](/blog/how-to-let-an-ai-agent-reply-for-your-company/slop-check.webp)

One draft goes back for a list of three. The TinyFish reply passes at 36 characters.

## 4. Approval in Slack: a card and two ✅ \[#4-approval-in-slack-a-card-and-two-]

Every draft becomes its own card in our #marketing channel. The card links the post we're replying to, sums it up in one line, and quotes the reply with its length. It goes out only when both Hao and I have reacted ✅. A ❌ drops it. To change the wording, either of us writes a new version in the thread.

A draft that waits more than 24 hours expires. So does one where a teammate already said the same thing.

TinyFish replied "congrats on launching!" under our Tie launch post. The agent drafted "Thank you 🐟 big week for both of us". Hao tapped ✅ that afternoon, I tapped mine that night, and it went out the next morning.

![The Slack card in #marketing: Reply to @Tiny\_Fish, the link to their post, what they said, the reply, 36/280, slop check pass. Hao has reacted with a check mark.](/blog/how-to-let-an-ai-agent-reply-for-your-company/slack-card.webp)

The card for TinyFish, with Hao's ✅. Mine came that night.

## 5. Posting on X from our office Mac mini, through Tie \[#5-posting-on-x-from-our-office-mac-mini-through-tie]

Through X's API, a company account can only reply where someone mentioned or quoted it, and most posts worth replying to don't. So the agent posts the way a person would. It types the reply into Chrome on our office Mac mini, signed in as CoreSpeed, through Tie. Reading and searching still go through the API, with the X connector. Writing happens only in the browser.

LinkedIn has no service account for company pages. So a real page admin is signed in on the same Mac, and the agent comments as the CoreSpeed page, never as that person. That side is set up but hasn't posted a comment yet.

After each reply the agent checks that it's live and puts the link in the card's thread. Then it writes a receipt to its log and commits the round to git.

![Run 113, Saturday 11:00 AM: ✅ Hao, ✅ Milton. On the office Mac mini, through Tie, the agent opens TinyFish's post, types the reply, clicks Reply, and the reply is live at 11:02 AM.](/blog/how-to-let-an-ai-agent-reply-for-your-company/mac-mini.webp)

Both ✅ in, typed on the Mac mini, live at 11:02 AM.

## 6. Smart Approval as a second gate \[#6-smart-approval-as-a-second-gate]

Our org also has a Smart Approval policy. It checks every write an agent makes through CoreSpeed and can hold one until a person decides. When it raises a card on that typing, the reply waits for someone to press Approve as well.

Today the two ✅ are the gate we count on, because the card comes up on some of that typing but not all of it.

![Typing a reply on the Mac mini returns Approval required, browser\_type has not run. A Smart Approval card in Slack asks for Approve and run, Deny, or Review on the dashboard.](/blog/how-to-let-an-ai-agent-reply-for-your-company/smart-approval.webp)

When the policy asks, nothing is typed until a person presses Approve.

## What changed \[#what-changed]

On its first full day the agent posted 10 replies, every one with both ✅. Since then the slow part has been us. A draft is ready within ten minutes, then waits for the busier of two founders, and plenty have expired. That's the trade we picked. Nothing goes out from the company account until both of us have read it.

## Try it \[#try-it]

Team memory, Smart Approval, the media tools, the X and Slack connectors and Tie (in beta) all work on CoreSpeed today. Drive and Agent Fleet, where the 10-minute routine runs, are coming soon. Paste one line into your agent:

```
set up https://corespeed.io/SKILL.md
```