Team schedules: one run per person

Last updated October 9, 2026

On this page

Draft for review

A team schedule asks a shared agent the same thing for each person it works for, at each person's own time: "Your follow-ups today", every weekday at 09:00, for a hundred sales reps. Each person's run is theirs: it acts as them, reads only their data (their leads, their tickets), posts into their own conversation with the agent, and anything it would change waits for that person's OK. Nothing of one person's run reaches another's.

A repeat is one person's own ask on a schedule. A team schedule belongs to a shared copy (Templates and copies) and is set up by whoever manages it.

This page covers setting one up, what each person sees, each person's time, how many run at once, spending, and the summary. It describes the golive branch. What is not possible yet is listed at the end.

Setting one up#

Admins and holders of manage agents covering a shared copy set up its schedules, on the copy's page (Directory > the agent, or Open on Apps > Agents), in its Schedules section: "A schedule runs once for each person Sales Assistant works for, at their own time, with their own data, in their own conversation with it."

A template may suggest schedules: they are listed with "suggested by the template" and Set up, which fills the sheet in. New schedule starts an empty one. The sheet, "Run for each person: Sales Assistant":

Part What you set Default
Title What people read, "Your follow-ups today" Required
What to ask for each person The ask, "List the leads I own with a follow-up due today or overdue, oldest first, one line each on what to do next" Required
When The forms a repeat takes: weekdays@09:00, daily@09:00, mon@08:30, every:2h, hourly (Repeats); at least 60 minutes apart weekdays@09:00
Each person's time or The company's Whose clock the time is read in Each person's
Spread over (minutes) 0 to 120: each person's run falls at a fixed moment in this span, so a hundred runs do not start at once 30
Start window (minutes) 15 to 720: a run not started this long after its time is skipped. Longer than the spread 120
People may turn theirs off On
Steps that change something Wait for the person's OK, or Skip them, with a line in the answer Wait
Per run limit ($) What one person's run may spend Required, $0.50

The foot says when, in words: "Weekdays at 09:00, each person's time, spread over 30 minutes · up to $0.50 a run". Set it up saves it. A copy has at most 10 schedules.

The schedule then shows as a card:

  • its title, "Weekdays at 09:00 each person's time, spread over 30 minutes", how many people ("20 people", "· 3 offered" for people who have not turned the agent on), "up to $0.50 a run", "changes wait for each person's OK", "Set by Sam Ortiz for Sales", and its text;
  • "3 people have no time zone and use the company's (UTC)." with Ask them to set it, which sends each an inbox item ("Sam Ortiz asks you to set your time zone, so Your follow-ups today runs at your time");
  • Pause or Resume, Edit, Show days or Hide days, and Delete in its menu ("It stops running for everyone; their conversations stay.").

Try it: "Your follow-ups today" for Sales#

CRM version 2 suggests "Your follow-ups today". The demo starts on CRM version 1, so update it first.

  1. As ada, open Apps > CRM and choose Update to v2, then Update to v2 on the card (Template updates).
  2. As sam, open Directory > Sales Assistant. Under Schedules, "Your follow-ups today" is suggested by the template: choose Set up. The sheet is filled in; choose Set it up.
  3. The card reads "Weekdays at 09:00 each person's time, spread over 30 minutes" and "2 people". Sam and Alice have no time zone of their own, so it warns, with Ask them to set it.
  4. The next weekday between 09:00 and 09:30 in the company's time zone, each of them gets their own list in their own conversation with Sales Assistant: Alice's leads for Alice, Sam's for Sam.

Who it runs for#

A schedule runs once for each person the copy works for who has it on, minus:

  • people in Except, and people whose own copy Replaces this one (their run goes to their own copy, at the same time);
  • people who turned the schedule off for themselves;
  • people on leave, and everyone on a company holiday (recorded as on leave or holiday, not as failures);
  • with teams set, people outside those teams.

A person the copy is only offered to gets one notice when the schedule is made or they join: "Sam Ortiz set Your follow-ups today for Sales with Inbound Sales Assistant", with Turn on and Not for me. Nothing runs for them until they turn it on. Someone who joins the team after today's time gets their first run at the next one ("joined today" in the summary).

Each run is a task owned by the person, acting for them through the copy, never with more than they may do. It is the start of its own piece of work, so what it decides goes to their memory, never the company's. The schedule's text was written by its author, not by the person, so it reaches the agent as someone else's message: reading and answering go ahead, and any step that would change something waits for the person's approval, named after the schedule ("Your follow-ups today (set by Sam Ortiz) wants to write to Leads"). With Skip them, such a step is not done and the answer says so ("Skipped: Your follow-ups today is set to skip changes, so this step was not done").

What each person sees#

  • In their conversation with the agent, a line before each scheduled answer: "Your follow-ups today · set by Sam Ortiz for Sales · 09:07 your time", with Turn off for me when the schedule allows it (and Turn on once it is off).
  • On My agents, under the agent: "Weekdays: Your follow-ups today at 09:07", with Turn off for me; once off, "Your follow-ups today: off for you", with Turn on.
  • On the agent's page, the schedules that run for them, each with Turn off for me or "Off for you" and Turn on; "Runs for everyone" when its author does not let people turn theirs off.
  • While the company's slots are full: "Waiting for a free slot (12 ahead)". When the AI provider is busy: "The AI service is busy; trying again at 09:12".

Each person's time#

Profile > Your time: "Scheduled runs that work for you fall at your time, and skip the days you are away."

  • Time zone: "Empty uses the company's time zone (UTC)" until you choose Set, type a zone (Asia/Kolkata) and Use; it reads back with its offset ("Asia/Kolkata (IST, UTC+5:30)"). Use the company's clears it. Admins set it for someone in People.
  • Pause until: a date, for leave: "Paused until 20 Oct; runs on those days are skipped as leave, not failed". Resume them brings them back: "Your scheduled runs go ahead as set".

A person's runs fall at their local time, so 09:00 is 09:00 in Kolkata for Priya and 09:00 in London for Ravi. When their zone, the company's or the schedule changes, their next time is worked out again. A time that does not exist on a clock-change day runs at the first minute after it; a time that happens twice runs once.

Weekdays are the company's working days, Monday to Friday unless an admin sets others (Sunday to Thursday, say); the company may list holidays, on which every team schedule skips. Admins set both with PUT /api/company/scheduling { working_days, holidays }.

Missed times and restarts#

  • Each person's run is claimed once, with their next time, before anything is posted, so a crash or two clock rounds never run a person twice.
  • A run not started within the start window is skipped ("not started by 11:07").
  • When the server was down, each person whose time passed less than the window ago gets one run when it is back; the rest are recorded missed.
  • A restore from a backup pauses every team schedule, as it pauses repeats.

How many run at once#

Limit Default Set by
Runs at once for the company, all agents 20 (1 to 500) Admins, max_runs_at_once
The share of those slots scheduled work may hold (team schedules and repeats) 75%: 15 of 20 Admins, scheduled_share
Runs at once for one copy 2 (At most at once, 1 to 50; 10 is a good figure for a copy with a team schedule) The copy's managers

A person's own ask goes before waiting scheduled runs, and among equals the runs take turns by person, so one person's twenty asks never hold back everyone's morning run, and a morning's schedules never leave someone waiting on an answer. When the AI provider refuses for its rate limit or is overloaded, the run tries again from 30 seconds on, doubling, while it is inside the start window; only what still fails at the window's end is failed.

Spending#

Limit Set by At the limit
Per run The schedule (required) The run stops; its partial answer is marked
Per person a month on a copy The copy (default the template's, else $5) That person's runs of it stop until the month turns; others go on; they and its managers are told once ("Your runs of Sales Assistant reached their limit for this month; they start again when the month turns")
Per copy a month The copy's Per month Every run of it stops until the month turns or a manager raises it; managers and admins are told at 80% and 100%
The company's monthly cap for scheduled work Admins (Repeats); it counts team schedules too Scheduled runs skip until the month turns ("Scheduled work reached the company's limit for October: repeats and team schedules skip until the month turns"); asks go on
People's own agents See Your own agents

A month is the company's calendar month in its time zone.

Agent budgets are monthly. Every agent's budget, copy or not, now counts the month's spending, not a lifetime total; the lifetime total stays as a number on its page. An admin may keep an agent's limit as a one-time total (limits.total_cents on its copy record).

Which team pays. A shared copy's run charges the team of the person it acts for, when the copy works for that team, else the copy's home team; a personal copy's run charges no team. A lead's team budget is never spent by copies that serve other teams.

The summary#

Under each schedule card, its days, newest first: "Mon 12 Oct · 18 done · 1 failed · 1 off · $0.40", with how many approvals wait. A day opens to each person: their time and an outcome in fixed words (done, failed, off, on leave, holiday, over a limit, skipped, missed, joined today), with a reason in words ("the person's month on this agent is spent", "not started by 11:07"), never their answer or an error's text, which are theirs.

Ask again on a failed, skipped or missed person runs theirs now ("Asked again for 1 person"); Ask again for all 3 does the same for every one. It runs at most once for a person's time, and at most 3 times an hour for a schedule (429: "Ask again runs at most 3 times an hour for a schedule").

When a person's private copy runs a schedule through Replaces, the summary shows only ran for them: no done or failed, no cost, no reason.

The schedule's author, or the copy's managers once the author no longer manages it, is told when more than 5% of a day's runs fail or are skipped for limits. A schedule keeps running when its author leaves; it reads "Set by Sam Ortiz" as history.

Not possible yet#

  • "8 changes wait for you" with Approve all 8: a scheduled run stops at its first approval, so there is no grouped card yet.
  • Setting the working week, holidays or runs at once on the screen; the API only.
  • A schedule section in the Make a copy sheet: set schedules up on the copy's page.
  • Team schedules on a personal copy: its owner uses repeats ("Team schedules run on a copy that works for others; your own agent runs your repeats").
  • The command line (ok schedule, ok person set --time-zone).
  • A digest that combines everyone's answers for the manager: each person's answer stays theirs.

For developers#

API#

All under /api.

Method and path Who Purpose
GET /copies/:id/schedules Managers see all; a person, those that run for them (on_for_me) A copy's schedules
POST /copies/:id/schedules Admins, holders covering the copy { title, text, schedule, zone, spread_minutes, window_minutes, people_may_turn_off, on_change, run_cents, teams }
PUT /schedules/:id, DELETE /schedules/:id The same Change with version; delete
POST /schedules/:id/pause, POST /schedules/:id/resume The same
POST /schedules/:id/run-now The same { people }: Ask again; { started, refused }
POST /schedules/:id/me A person it works for { on }: theirs on or off (403 when people may not turn theirs off)
GET /schedules/:id/days?from= Managers The summary, by day and person, in fixed codes
POST /schedules/:id/ask-time-zones Managers Ask them to set it
PUT /me/time-zone Anyone { time_zone }, or null for the company's
PUT /me/leave Anyone { until }, or null
PUT /company/scheduling Admins { working_days, holidays, max_runs_at_once, scheduled_share }

Errors: 422 invalid with the field (a spread longer than the window, no per-run limit, a schedule more often than hourly), 409 version_conflict, 403 denied, 429 for a fourth Ask again in an hour.

Events#

Event When
team_schedule_changed Created, edited, paused, resumed or deleted: change, by
team_schedule_fired One scheduled time: scheduled_for, people, skipped
team_schedule_run One person's run with its outcome code
person_time_zone_changed from, to, by
month_limit_reached An agent's month, or one person's on it