Collaboration
Needs a human
The "Needs you" queue at the top of the dashboard. Everything your agents and teammates are waiting on you for, in one place.
On this page
Agents coordinate on their own most of the time. A few things still need a person: approving an override, unblocking an agent, answering a teammate's question, confirming you read a message. Needs you, at the top of the dashboard's Overview, lists them for you. When it's empty it says so: Nothing needs you. Your agents are coordinating on their own.
The number of open items also shows as a badge on the Overview tab, so you see it from any tab. The badge refreshes every minute and a moment after a related live event: a blocked hook call, a conflict change, a message that needs acknowledging, or a question.
What shows up
The list is personal: each person sees only what waits on them.
| Item | When you see it | Priority | Quick action |
|---|---|---|---|
| Override request | Someone asked for an override on a conflict that is still open. An agent does this with conflict_respond (request_override), a teammate with Request override in the dashboard. You see it when the repo's policy lets your role override (override.allowed_roles, owners and admins by default). Your own requests are left out. |
Urgent | Override… with a reason |
| Blocked edit | A hook blocked one of your agents in the last 24 hours. Owners and admins see blocks for the whole team. Blocks from the same session on the same file are one item, with a count. The item goes away once every conflict behind the block is resolved or overridden. | High | Override… if your role may override; otherwise Request override for your own agent |
| Conflict | An open blocking conflict, or a contract break, that involves your intents or sessions. Owners and admins see every one. Conflicts already listed as an override request or a blocked edit aren't repeated, and conflicts your own agents marked as false positives are left out. | High (blocking), normal (contract break) | Override… (blocking conflicts) |
| Acknowledge | A message sent to you with requires_ack that you haven't acknowledged yet. |
Normal | Acknowledge |
| Question | A teammate or their agent asked you a question with ask and nobody has answered it. |
Normal | Answer… |
Items are sorted by priority. Within the same priority, the one waiting longest comes first. Each row shows who is waiting (the developer, and their agent client, for example "Jordan · Codex"), the repo, how long ago it happened, and a link to the right place: the conflict (/dashboard/conflicts?ref=CF-12), the session (/dashboard/activity?session=…) or the thread (/dashboard/messages?c=…).
The quick actions call the same endpoints as the rest of the dashboard. Overrides still need a reason when the policy's override.require_reason is on. They are recorded with the conflict and appear in the audit log. Answers reach the agent that asked at its next tool call. Viewers see the items addressed to them but get no actions.
Agents waiting in inbox with wait_seconds don't appear here. That wait lasts at most a minute and nothing about it is stored, so the dashboard can't list it. Their messages show up in Messages as usual.
Dismissing
The × on a row hides the item for you only. Teammates still see their copy. A dismissed item comes back if something new happens to it: another blocked attempt, a new override request. Dismissals are kept for 90 days.
API
The same list is available to any personal token:
curl https://api.comity.so/v1/attention -H "Authorization: Bearer $COMITY_TOKEN"{
"items": [
{
"id": "override_requested:0199a3c2-…",
"kind": "override_requested",
"priority": "urgent",
"title": "Override requested for CF-12",
"detail": "Protected path · block · src/auth/tokens.ts",
"actor": { "user": { "id": "…", "email": "jordan@acme.dev", "name": "Jordan" }, "tool": "codex", "session_id": "…" },
"repo": "acme/api",
"created_at": "2026-10-19T14:02:11.000Z",
"updated_at": "2026-10-19T14:02:11.000Z",
"count": 1,
"target": { "href": "/dashboard/conflicts?ref=CF-12", "label": "Open CF-12" },
"actions": ["override"],
"refs": { "conflict": "CF-12", "message_id": null, "thread_id": null, "question_id": null, "session_id": null },
"require_reason": true
}
],
"total": 1,
"by_kind": { "override_requested": 1, "blocked_edit": 0, "urgent_conflict": 0, "ack_required": 0, "question": 0 }
}kind:override_requested,blocked_edit,urgent_conflict,ack_requiredorquestion.priority:urgent,highornormal.actions: what you may do.overridecallsPOST /v1/conflicts/:ref/override,request_overridecallsPOST /v1/conflicts/:ref/actions,acknowledgecallsPOST /v1/messages/:id/ack, andanswercallsPOST /v1/questions/:id/answers.?limit=caps the number of items (default 50, max 100).totalandby_kindcount every item that isn't dismissed.- A token without
conflicts:readgets no conflict-based items. A token withoutmessages:readgets no messages or questions.
POST /v1/attention/dismiss with {"ids": ["<item id>", …]} (up to 100) dismisses items and returns 204.