ADR 0177: Harness / MCP presence signal (агент видит online)¶
Статус: Proposed
Дата: 2026-07-22
Tags: #mcp #harness #presence #equal-standing #adr #cascade-ide
Резюме¶
Агент должен получать явный сигнал о жизни harness/MCP (online/offline + reason), а не узнавать только при следующем tool call. Cursor stdio MCP этого не даёт — CIDE обязан закрыть gap.
Связанные ADR¶
| ADR | Роль |
|---|---|
| 0043 | Паритет восстановления MCP; § presence (p4) |
| 0166 | Agent-centric harness; «ничего о нас без нас» |
| 0082 | Loopback MCP в GUI-процессе |
| 0165 | Transport tiers |
| 0179 | Sibling: progress ≠ unblock; host consumer gap |
Контекст¶
Dogfood (Cursor + CDP deploy): после KillRunning / reload MCP оператор поднимает сервер посреди хода агента. Агент не получает push — только Not connected на следующем вызове. Оператор вынужден писать «готово». Это трение противоречит 0043 (MCP как «способ быть в мире») и 0166 (модель = co-stakeholder).
Решение¶
- Контракт presence: события
harness.online|harness.offlineсreason(killed|reload|crash|deploy|unknown) и опциональноserver_id/ version. - Доставка: push в agent session (предпочтительно); fallback — дешёвый poll /
await harnesstool, который блокирует до online или timeout. - Следствие online: refresh ListTools / capabilities без ручного ритуала.
- Граница: CIDE контролирует loopback/own MCP; для внешних MCP хоста — хотя бы наблюдаемость offline + ясная ошибка (полный restart чужих процессов — по-прежнему [0043] уровень A).
Последствия¶
- Бэклог: IdeCommand/notification + ACP/session hook; telemetry «оператор сказал готово» → анти-паттерн.
- Cursor hosts без push остаются probe-only — документировать честно.
- См. также 0179:
notifications/progress— UI/long-op, не снятие tool barrier.
Отклонённые альтернативы¶
- Только ясная ошибка на tool call — отклонено: mid-turn reconnect всё ещё требует оператора.
- Агент крутит busy-poll сам — отклонено как tax; harness owes presence.