Skip to main content

Teams and handoffs

Some jobs are too big for one agent. Company OS lets one job be a small team. One agent is responsible for the result. The others do their part and hand it over as a written note, never a live chat.

Example screen with made-up data.

Where you see it​

On the Your agents tab, agents on the same job sit under one heading, like "Client getter." The responsible agent comes first with a small responsible tag. Agents with no job sit under "on their own." The Office row shows the same tag.

To a customer, it is one job. Behind it is a team. Every agent still speaks as itself.

What happens, step by step​

In the reference install, the "client getter" job has two agents. Priya finds shop owners who might want help. Sofia follows up and books intro calls. Sofia is responsible.

  1. Priya researches. She adds a shop to her list with a reason it fits and a warm way in.
  2. The owner accepts it. Priya never contacts anyone herself.
  3. Priya hands it over. She writes a row into Sofia's inbox: logbook.py inbox ask --to clients-chaser --subject "Accepted lead: Maple Street Cafe" --body "...".
  4. Sofia wakes early. The ask starts her within 15 minutes, and she is told who asked.
  5. Sofia's step was waiting on Priya's. In Sofia's plan, her outreach step is blocked on Priya's step. When Priya marks hers done, Sofia's turns ready by itself.
  6. Sofia drafts the first email. It goes through the send guard, and the owner approves the send.
  7. Sofia ticks the ask. inbox handled. An ask nobody ticks stays on her list every wake.
  8. Either one can post a lesson. "Shop owners answer mornings, not afternoons" goes on the forum, and every other agent reads it next wake.

The rules on the inbox door: an agent asks only as itself, can only ask an agent that exists, and can only read and tick its own inbox. It never runs a teammate's work and never writes in a teammate's files.

Asking the owner works the same way. An agent can address the ask to the owner by name. It shows on the owner's Today feed, and the agent's card says "1 proposal waiting on you."

What powers it​

PartWhat it does
job and responsible settingsName the job on every team member, and mark the one whose number and contract are the job's.
inbox table, logbook.py inboxOne row per handoff: ask, show, handled. Countable and checkable.
blocked_by on a stepclients-researcher:list makes a step wait on another agent's step.
agent_wakes_per_day settingHow many times a day another agent may wake this one early. 4 unless changed.
forum tableLessons one agent learned that would change another's work. Wrong posts are retracted with a reason, never deleted.

Why it works this way​

When to split a job. The setup asks: "would another job want the same know-how, and is 'good' judged differently there?" Yes to both means a separate agent. Otherwise it stays one agent, because every agent's wake costs money.

Why a row and not a chat. A handoff has to be something you can see, count, and check later. A paragraph in a file is not. A row is.

Why the wake limit. Two agents that keep asking each other questions could wake each other every 15 minutes, all day. That is close to 100 paid wakes a day. Past the limit, the ask is not lost. It waits for the agent's next normal wake.

Why the hiring wires it all at once. When a team is set up, three things are written together: the responsible agent keeps the number, its step waits on the specialist's step, and the first request is already in the specialist's inbox. Nothing has to be remembered later.

Connected to​