You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Cumora currently conflates shared visibility with turn activation.
For an ordinary human group message, scheduler.ts fans out to every eligible agent. triage-core.ts then short-circuits human group messages to actionable=true, so every recipient reaches the big model and reasons over substantially the same public room context.
Prompts still differ by persona, private memory, climate, skills, read cursor, assignment, and BYOA session. However, the expensive public-context reasoning is replicated N times. Existing glance/HOLD/duplicate/claim defenses reduce duplicate posts only after the reasoning cost has already been paid.
The triage schema already exposes:
responseMode: "me" | "each" | "one-of-us" | null
but its consumers do not currently use it.
A typical example is this: when I assign a task, Iris remains silent throughout because the task does not require her involvement. Yet her model continues reasoning in the background and consuming my subscription quota. This is unintuitive and results in substantial unnecessary token usage.
Another issue is that when I ask a general question in a group chat without @mentioning anyone, every member jumps in to answer, often producing semantically repetitive responses. This also wastes tokens, as shown below:
Desired model
Keep chat as one shared, durable public ledger, while selecting who receives a full turn:
message committed
|
one routing decision
|
selected agents ---- non-selected agents
full context/turn no big-brain wake
|
reply / claim / explicit handoff
This is selective activation, not hidden information. Non-selected agents remain members and can inspect the message later.
Routing semantics
me: deterministic targets—DM participant, exact mention, quote target, assignee, active work owner, or explicit handoff.
each: all eligible members for @all, voting, roll call, explicit independent answers, or deliberate multi-perspective review.
one-of-us: choose one primary by role fit, assignment/claim ownership, recent ownership, availability, and deterministic tie-breaking.
Use one cheap shared routing decision per message boundary rather than N independent routing calls. For one-of-us, use an atomic Redis/DB claim so multiple replicas select exactly one primary.
If the primary fails, is rate-limited, or finishes without handling the message, expire the lease and wake the next candidate. Human messages remain durable.
Safe fallback:
DM/mention/quote: deterministic delivery
explicit @all: all
router unavailable for a human group message: current all-agent behavior
Problem
Cumora currently conflates shared visibility with turn activation.
For an ordinary human group message,
scheduler.tsfans out to every eligible agent.triage-core.tsthen short-circuits human group messages toactionable=true, so every recipient reaches the big model and reasons over substantially the same public room context.Prompts still differ by persona, private memory, climate, skills, read cursor, assignment, and BYOA session. However, the expensive public-context reasoning is replicated N times. Existing glance/HOLD/duplicate/claim defenses reduce duplicate posts only after the reasoning cost has already been paid.
The triage schema already exposes:
responseMode: "me" | "each" | "one-of-us" | nullbut its consumers do not currently use it.
A typical example is this: when I assign a task, Iris remains silent throughout because the task does not require her involvement. Yet her model continues reasoning in the background and consuming my subscription quota. This is unintuitive and results in substantial unnecessary token usage.
Another issue is that when I ask a general question in a group chat without @mentioning anyone, every member jumps in to answer, often producing semantically repetitive responses. This also wastes tokens, as shown below:
Desired model
Keep chat as one shared, durable public ledger, while selecting who receives a full turn:
This is selective activation, not hidden information. Non-selected agents remain members and can inspect the message later.
Routing semantics
me: deterministic targets—DM participant, exact mention, quote target, assignee, active work owner, or explicit handoff.each: all eligible members for@all, voting, roll call, explicit independent answers, or deliberate multi-perspective review.one-of-us: choose one primary by role fit, assignment/claim ownership, recent ownership, availability, and deterministic tie-breaking.Use one cheap shared routing decision per message boundary rather than N independent routing calls. For
one-of-us, use an atomic Redis/DB claim so multiple replicas select exactly one primary.If the primary fails, is rate-limited, or finishes without handling the message, expire the lease and wake the next candidate. Human messages remain durable.
Safe fallback:
@all: allConstraints
Acceptance criteria
@all/eachstill wake all eligible members.responseMode.one-of-ushas one primary winner across replicas.@all, targeting, handoff, outage, primary failure, mute, and replica races.Relevant code
server/src/agents/scheduler.tsserver/src/agents/triage-core.tsserver/src/agents/inbox-triage.tsserver/src/agents/turn.tsserver/src/agents/runtime/inproc-client.tsserver/src/agents/computer/daemon.ts