# 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.

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`](/docs/collaboration/team-memory) 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`](/docs/admin/policies) 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:

```sh
curl https://api.comity.so/v1/attention -H "Authorization: Bearer $COMITY_TOKEN"
```

```json
{
  "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_required` or `question`.
- `priority`: `urgent`, `high` or `normal`.
- `actions`: what you may do. `override` calls `POST /v1/conflicts/:ref/override`, `request_override` calls `POST /v1/conflicts/:ref/actions`, `acknowledge` calls `POST /v1/messages/:id/ack`, and `answer` calls `POST /v1/questions/:id/answers`.
- `?limit=` caps the number of items (default 50, max 100). `total` and `by_kind` count every item that isn't dismissed.
- A token without `conflicts:read` gets no conflict-based items. A token without `messages:read` gets no messages or questions.

`POST /v1/attention/dismiss` with `{"ids": ["<item id>", …]}` (up to 100) dismisses items and returns 204.
