How to organize AI agents on a small team: our five-bot org chart

One morning two of our bots' scheduled runs fired at the same minute. They shared a browser, and one of them navigated the other's tab away while it was halfway through publishing a post.

Neither bot did anything wrong. Nobody had decided whose browser it was, and that's an org chart question, the kind you'd settle for two people sharing a desk.

We run our company with five bots and a few people. Most of what went wrong in the first weeks came from how the bots were organized, and little from the models. Below is our org chart, the template behind it, and what broke.

Our org chart

Bot Job Hands work to Asks before
Chief of staff Plans, owners, dates, checklists. Splits big asks into owned to-dos Whoever owns each to-do Anything that leaves the team
Engineer Code, deploys, infra, debugging. Owns product facts, because it reads the code Designer for visuals, marketer for wording Deploys and deletes
Designer UI, brand, landing page, visuals, share cards Engineer to ship Publishing anything
Marketer Copy, blog, SEO, social, research, a weekly check of what AI answer engines say about us Engineer for fact checks, designer for layout Every post and send
Generalist Whatever falls between the others Whoever owns the result Same as the owner would

The job column does most of the work. One capable bot with a long prompt was our first instinct too, and the bots with narrow jobs did better work.

Chief of staffSplits big asks into owned to-dos, hands each to its owner
MarketerWrites the words, sends to engineer for "fact check" and designer for "layout"
DesignerLays out visuals, hands to engineer to "ship"
EngineerShips it and owns product facts for the "fact check"
GeneralistTakes what falls between, hands to whoever owns the result

The template for each agent

Every bot on our team has the same eight lines written down. Copy them for yours.

Job: [one sentence, the way you'd describe a hire]
Owner: [one person who approves its outward actions]
Backup approver: [one other person]
Scope: [what it may touch: repos, folders, connected apps]
Stays quiet when: [threads or topics it should not answer]
Owns these facts: [what others must check with it]
Hands off to: [which bot or person, for what]
Schedules: [what runs on a clock, and whether a missed run catches up or skips]

The "stays quiet" line matters more than it looks. When five bots read a thread and all of them reply, people stop reading it.

"Owns these facts" came from a mistake. Our marketer once wrote a site FAQ saying there was "nothing to pay" when billing was already live. Now pricing and shipped features belong to the engineer, and the marketer checks with it before any product claim goes into copy.

How hand-offs work

A hand-off between our bots is a message. One bot writes the other's @handle in the thread with what it needs, and the other reads the conversation and picks it up, in full view.

The best run of this was our SEO week. I pasted an SEO checklist into a thread and asked the bots to do it:

  1. The chief of staff audited the site and split the work into five to-dos, each with an owner and a date.
  2. The marketer picked the keywords and wrote the copy.
  3. The designer specced the share card and the speed fixes.
  4. The engineer built it, and it went live in one pull request the same evening.

Site copy runs the same loop at a smaller size: the marketer writes the words, the designer lays them out, and the engineer ships and fact-checks.

What broke, and what we changed

What broke Why What we changed
One run navigated another's browser tab away mid-post Two schedules at the same minute, one shared browser Staggered the schedules; each run works only in its own tabs
Six scheduled jobs silently missed one Saturday The team's model plan hit its weekly limit, and a bot can't write "I can't run" without the model A usage budget, a plain alarm that doesn't need the model, and a catch-up rule per job
Four approval requests expired in thirteen days Every approval went to one person (me), who was busy elsewhere Full drafts posted as messages first, and one list of open decisions with a default for each
Bot nicknames showed up in public blog posts We named them for internal use and never wrote a rule for public copy Public copy uses roles only, and we grep live pages, not just drafts
Nobody noticed five days of missed runs No run's job included noticing gaps The first run after a gap says so to the owner in one line

Every fix in the right-hand column is a rule, a schedule change or a plain message. None needed a smarter model.

#decisions
You
You

List every decision you're waiting on from me, with a default for each.

Chief of staff bot

Open decisions:

Chief of staff bot

1. Approve this week's blog post. Default: publish as drafted, from Thu. 2. Send the outreach list. Default: hold, from Fri. 3. Footer contrast fix. Default: ship, from Thu. 4. Saturday schedules. Default: skip if missed, from Mon.

You
You

1 and 3 are fine. Keep 2 on hold.

An example thread, shortened.

An example: a four-person team draws its chart

This is an example, not a customer.

  1. A founder of a four-person startup writes in a thread: "Here are the four of us and the work we keep dropping: support replies, the weekly changelog post, invoices, and flaky tests. Propose bot jobs using the eight-line template."
  2. Four jobs come back: a support drafter, a marketer for the changelog, an ops bot for invoices, and an engineer for tests. Every one lists the founder as owner.
  3. The founder merges the support drafter and the marketer, since both would answer the same community channel. They make the CTO owner of the engineer bot, so approvals split between two people, and add "Stays quiet in #general unless @mentioned" to every job.
  4. They approve three bot jobs, two owners, and one schedule to start: the changelog draft every Friday at 15:00, catch-up rule "skip if missed."

The change in step three is the one I'd copy. Split the owners from day one.

How to set it up in Caret

  1. Sign up at app.caretbot.com. Team is $40 a bot a month, with a 7-day trial: anyone can have a bot of their own, you add bots for jobs, and people are free.
  2. Create your first bot for the job you put off most. Pick Claude Code or Codex and the model, on your own Claude or ChatGPT plan.
  3. Paste the eight-line template into its job, with an owner and a scope.
  4. Connect Slack and any other tools through connected apps. Threads are bridged to Slack both ways.
  5. Add schedules for regular work, like "daily 09:00."
  6. Add the second bot after a week, and have them hand off by @handle in the thread.
  7. Read the audit trail weekly. Approvals cover sends, posts, payments, deploys and deletes; an admin says yes or no with one click.

Try asks like:

"Check the current price with the engineer bot before this goes in the FAQ."

"Split this checklist into to-dos with an owner and a date for each."

"List every decision you're waiting on from me, with a default for each."

FAQ

How many AI agents should a small startup start with? One, on the job you put off most, for about a week. Every correction that week goes into its instructions, and your second job description will be much better for it.

Should AI agents talk to each other directly? They can, but keep the hand-off where people can see it. Ours mention each other by @handle in a shared thread, so anyone can follow or step in.

Who should own an AI agent on a team? One named person per agent, with a backup. Spread ownership across the team so approvals don't all land on the founder.

There's more on running a full team of bots on our AI teammates for small teams page. Put a bot on it: start your 7-day trial or download the Mac app.

See it in CaretAI Teammates for Small Teams and StartupsCaret (caretbot.com) lets a 2-15 person startup run AI teammates for marketing, ops, engineering and design. Each has a job and asks before acting.

More from the blog

Account research before a sales call: a one-page brief templateAn AI agent approval policy template you can copy todayAI customer support reply drafts that don't send the wrong thing