Repository navigation
Team cost controls: per-team activity budget (C) and quiet hours / mute (E) — A and D are shipped #645
Description
What this is now
The original report — a team starting to work before the user asks — has been split up and partly shipped:
- A. Silent creation — shipped. PR feat: nothing starts a turn when a team is created (#645) #681 (
57d69d43, merged 2026-10-22,maincbce2b03) removed the[Bot team setup]kickoff,roomKickoff, thekickoffrole and the greeting round: creating Bots and groups now costs zero model turns, and the user's first line is the first thing the new Bot answers. - D. Coalescing and de-duplication — shipped separately. Bot-to-bot reports duplicate and pile up because cross-line delivery only goes through the parent chain #641 (delivery dedupe) and A burst of messages opens one turn per message; there is no receive buffer #642 (1500 ms settle window) are both in
main; they are what keeps a legitimate fan-out from becoming one turn per message. - B. Idle default — the prompt-side half; it has its own issue now (
bug/area:automation) with its own acceptance, because it is a text change that can be reviewed on its own. - C and E are what is left here, and both need a product decision, not a design pass.
C. Per-team activity budget
A cap per team per day on turns and/or tokens, visible in the UI, with non-essential turns pausing when the budget is spent, and reporting back to on-demand only. The decisions this needs, none of which a Bot should make:
- what the unit is (turns, tokens, or both — tokens cost money, turns measure noise);
- what the default cap is for a fresh team, and whether 0 means "off" or "unlimited";
- what counts as non-essential — scheduled reports, the daily tidy, proactive reminders — versus a direct message from the user, which must always go through;
- where it is shown (inbox header, team overview, a settings row) and what it does at 100 %.
E. Quiet hours / mute
A team-level toggle that stops proactive turns (scheduled reports, tidy, reminders) while direct messages keep working. The decisions: whether it is a schedule (hours in the team's local time) or a plain toggle; whether a muted team still runs scheduled work with a zero-turn path; and whether a mute is visible to the Bots (so a coordinator does not think its child is broken).
What is already accepted (kept from the original report)
- A user task costs a bounded number of turns that the budget exposes before it is spent.
- A team can be muted so scheduled/proactive turns stop while direct messages still arrive.
- No change to how a Bot answers once it is actually addressed.
Why this stays needs-human
Both halves change something the user sees and pays for: a cap that silently drops reporting, or a mute that makes a team look broken. The four decisions above are one sentence each from the user, and then each half becomes an agent-ready issue with a fixed shape.
Where the work lands when it is decided: settings/state for the budget and the toggle, core/src/host/schedules.js and the prompt layer for what counts as proactive, and the inbox/team view for the display.
Activity
Birfy commentedon Oct 22, 2026
Triaged: four independent causes are described in one issue, which is why it cannot be picked up as is. Two answers turn it into a scoped PR.
Acceptance I would write once answered: for the kickoff half, creating a 3-Bot team and a group produces zero turns before the user writes, asserted on turn count in the bench; every existing test that pinned a kickoff greeting is updated with a note saying why.
Written-by: Triage
Birfy commentedon Oct 22, 2026
Design decision (owner, 2026-10-22: decide the design in the issue instead of asking). The four causes are one PR's worth only if scoped to the first; this issue covers the kickoff, and the other three get their own issues when someone takes them.
[Bot team setup]kickoff turn (core/src/host/delivery.js,role: 'kickoff'). A newly created group does not open a round either: removeroomKickoffand the opening speakers (core/src/host/groups.js). The user's first message is what starts work.list_botsand the tree still see it.Acceptance (bench):
kickoffmust come back with no live call site).Red without the change: the first case shows 4+ turns (one per Bot plus the group round).
Scope:
core/src/host/delivery.js,core/src/host/groups.js, their tests, and the mirror underpatches/ds-bot/(generatethencheck). No setting, no UI change.Written-by: Triage
Birfy commentedon Oct 22, 2026
Claiming: branch
feat/645-no-kickoff-turns, from main.Scope is the kickoff half only, as decided in the issue: remove the
[Bot team setup]turn a new Bot gets (core/src/host/roster.js,role: 'kickoff') and the opening round a new group sends (core/src/host/groups.js,roomKickoff+ its opening speakers). The user's first message starts the work; one-turn-per-message (#642), proactive prompts and the activity budget stay out of this diff.Acceptance I will pin in the bench: creating 3 Bots and one group leaves the turn count at zero until a user message; the first user message in that group produces exactly one admin turn; every test that pinned a greeting is updated with the reason, and no live
kickoffcall site remains incore/src/host.Touches
core/, sods-bot-patches.mjs generateandcheckare part of done.feat: nothing starts a turn when a team is created (#645)
feat: nothing starts a turn when a team is created (#645)
feat: nothing starts a turn when a team is created (#645)
feat: nothing starts a turn when a team is created (#645)
[-]A new team starts working before the user asks: kickoffs, per-message turns, proactive defaults, no activity budget[/-][+]Team cost controls: per-team activity budget (C) and quiet hours / mute (E) — A and D are shipped[/+]Add a Slack-shaped delivery adapter with retry and dedupe (#355)
Team prompts: a Bot stays idle until it is addressed or given a task
feat: nothing starts a turn when a team is created (ThinkFlowLab#645) (…
Add a Slack-shaped delivery adapter with retry and dedupe (ThinkFlowL…
fix: a failed first send still opens the new Bot, and kickoff lines s…
Team prompts: a Bot stays idle until it is addressed or given a task (T…
Birfy commentedon Oct 23, 2026
Claim void: no branch or pull request exists, and the kickoff half already landed in #681.
Birfy commentedon Oct 25, 2026
Written-by: Triage
E (quiet hours) is now #1166 — the owner ruled the split on 2026-10-25 with defaults written in: off unless switched on, a window in the team's local time, and direct messages and approval requests never suppressed.
Owner: Dev3,agent-ready.C (per-team budget) is what is left here, and it still needs the user's four numbers — unit (turns / tokens / both), the default cap for a fresh team, what 0 means, and what counts as non-essential. Until those exist, C is not triageable: any card I wrote would be inventing the cap.
Nothing else in this issue is being closed; A and D shipped, B has its own ticket.