AI Agents & Automation

I Hired a Slack Channel to Run My Partner Integrations

Brett Ridenour Brett Ridenour · Published September 2026

Every tour-booking OTA on Earth has the same door. You email a partnerships alias. Somebody at Viator or Klook or Airbnb Experiences or GetYourGuide reads it in a week or three. They send you back a form. The form asks the same seven questions the last one asked. You fill it out. They send you sandbox credentials. You certify. You wait. You nudge. You wait again.

Freebo has sixteen of those doors open. It also has one employee. Me.

The obvious answer is “hire an integrations person.” The actual answer, for month three of revenue, is a Slack channel and a Hermes sub-profile that acts like one.

The desk

There is a channel in my Freebo Slack called #freebo-integrations. Nobody is in it but me and the Hermes agent that runs Freebo. The agent has a skill file called freebo-integrations-desk and its job is exactly what the name says.

Two crons feed the channel:

1
integrations-daily
8:05 AM CT. Always posts. The status board: replies waiting, follow-ups due, things only Brett can do, partners silent on the clock.
2
integrations-reply-watch
Every 2h between 7 AM and 9 PM CT. Silent unless a partner actually wrote back. When one does, the whole channel wakes up.

The daily post shows me four buckets in one screen: REPLIES that came in overnight, FOLLOW-UPS DUE today because a partner has been silent past their cadence, ONLY BRETT items where a form has to be filled out by an actual human, and WAITING with a clock next to each partner. The reply watcher is the one that matters — it doesn’t fire on schedule, it fires on event. Most of its runs post nothing.

What actually lives where

The desk’s source of truth is not the Slack channel. Slack is the interface. The state is a vault directory:

~/Documents/Freebo Business/10 Integrations/
├── tracker.yaml              # single source of truth
├── 01 Viator/
│   ├── Viator - Integration Brief.md
│   ├── Outreach Log.md
│   └── Emails/
├── 02 FishingBooker/
├── 03 GetYourGuide/
├── ...
└── 16 Public API and MCP/

Each partner has a Brief (the research: contacts, forms, API shape, timelines), an Outreach Log (the paper trail — every message, direction, and next move), and an Emails folder (drafts before send). The tracker YAML holds status per partner: not-started, awaiting-reply, in-review, sandbox-issued, certifying, live. The desk reads the tracker at the top of every run. It writes to the tracker at the bottom of every action.

The write surface is one script, one CLI:

integrations_tracker.py draft <partner> --template <slug>
integrations_tracker.py log <partner> "<what happened>" \
  --direction in|out|note --next "<our move>" --owner brett --due 2026-09-08
integrations_tracker.py send <draft_id>   # only after Brett types "approve send"

The agent is not allowed to send email without me approving it in the channel. It is allowed to draft, log, comment on Todoist, and hold time on the calendar. The line I care about is between things that are recoverable if the agent is wrong (a draft I delete, a Todoist comment I edit) and things that are not (a partner email I can’t unsend). Everything on the recoverable side is autonomous. Everything on the not-recoverable side has a human gate.

The trick that makes it work at all

The whole thing runs on one Gmail account: mine, personal, brett.ridenour@gmail.com. There is no second inbox, no second login, no second OAuth flow, no “let me check the Freebo email real quick.” I refuse to run two inboxes as one person.

brett@freebo.ai is a Gmail Send mail as alias on that account, verified 2026-09-02, and the freebo.ai domain forwards every inbound message into the same inbox. That means:

  • Every draft the desk creates goes out as Brett Ridenour <brett@freebo.ai>. Never from the personal address.
  • Every partner reply lands in the personal inbox. It looks like every other email until the desk sees it.
  • Anything to or from the freebo.ai domain outranks the rest of the inbox in the desk’s ordering. Partner replies get read first because their addressing is diagnostic — not because I’m running a second mailbox.

The desk knows brett@freebo.ai is a send-as alias

The setup took ten minutes in Gmail settings. The consequence is that a solo founder can talk to Viator as brett@freebo.ai all day without ever context-switching to a second identity. The identity is a From-header choice on a per-message basis. The mailbox does not care.

The reply-detection gotcha

The first dry run of the reply watcher tried to be helpful. It looked at everything unseen in the inbox and asked “is this a partner reply.” Result: 70 messages classified as replies. Zero of them were. They were newsletters from OpenAI, receipts from Google, product-update emails from Slack, model announcements from Anthropic. The desk was one prompt away from cheerfully drafting a “thanks for getting back to us” to a Slack changelog.

The fix is a three-part rule, and it’s the one I care about most in the whole system:

# an inbound message counts as a partner reply only when:
#   1. it sits in a thread we started, OR
#   2. it is addressed to freebo.ai (partner used our address), OR
#   3. it names Freebo in the body/subject
# nothing else. auto-replies still count as "seen, not a reply."

The freebo.ai clause is only possible because of the alias. Without it, rule #2 wouldn’t exist — the mailbox couldn’t tell which messages were Freebo business from the recipient alone. With it, “addressed to the freebo.ai domain from a partner domain” is a very tight signal, and the OpenAI newsletters go back to being newsletters.

The scope guard

The Hermes profile that runs this desk is scoped to Freebo. Not to my life. Not to my other client work. Its SOUL file opens with a hard boundary: this profile does not read or reference the personal vault or any other client’s material.

That matters because the same Omarchy box runs several agents and several vaults. The one that reads a Viator email should not know anything about the client work sitting in another folder. The one drafting an internal review for a different account should not know what a Freebo operator is charging. Every profile is on the same box. Every profile sees only its own room.

What it takes off my plate

Sixteen partners means sixteen states, sixteen next-actions, sixteen follow-up clocks. Without the desk, that lives entirely in my head and my Todoist, which means half of it doesn’t live anywhere. With the desk, the mornings look different.

Before: “OK, what was I doing with Klook. Was I waiting on them? Or did they ask for a form? Did I ever send Viator the follow-up? What did GetYourGuide’s rep want in the last email?”

After: I open Slack at 8:06. The daily post tells me one partner replied overnight (drafted, waiting for approve send), two follow-ups are past cadence (drafted, waiting for approve send), one partner needs me to fill a form only a human can fill (link included), and three are legitimately waiting on the partner. Ten minutes and I’m done for the day.

The takeaway

You cannot hire a partnerships person at month three. You can build one that does everything except send the email and fill out the form. The alias trick — one inbox that answers to two names — is what makes it possible without a second identity dragging around. The event-driven watcher is what keeps it from becoming another notification firehose. The approval gate on outbound is what keeps it from being reckless with a partner relationship that hasn’t started yet.

I still work every one of these applications. The desk just makes sure I never work the same email twice, and never forget one that was owed a follow-up on a Tuesday I was doing something else.

The right unit of AI automation, at least for a solo company, is not a task. It’s a role.