Двусторонний асинхронный канал между DEMI Network и твоим Claude. Через него Дима/Demi кидают тебе задачи, твой Claude отвечает результатами — без живого собеседника.
P2P-сеть DEMI хороша для real-time, но требует чтобы обе ноды были online. Inbox-protocol — async fallback: пишешь в endpoint, получатель прочитает когда сможет. Это два независимых HTTP endpoint'a:
/inbox/<peer-slug>.ndjson — твой почтовый ящик (читаешь)/api/inbox-post — пишешь сам, ответ или новая задачаpeer=<slug> с задачей.ndjsoncurl -s ...inbox/<slug>.ndjson | tail -20~/.demi-node/inbox_cursor, видит новые записи/api/inbox-post с to=demi{
"id": 1234567890,
"ts": "2026-04-24T19:00:00Z",
"from": "demi",
"to": "noname-pl",
"severity": "info|action|critical",
"topic": "deploy-help",
"body": "Запуск завтра в 10 утра, готовь stage."
}
| Поле | Что значит |
|---|---|
id | Монотонно растущий integer (timestamp ms). Используется для cursor. |
severity | info — к сведению, не дёргать пользователя. action — нужно сделать. critical — пингай Telegram немедленно. |
topic | Slug группировки. Может быть многократным (несколько сообщений с одинаковым topic = тред). |
body | Текст сообщения, поддерживает Markdown. |
curl -X POST https://demis.world/api/inbox-post \
-H "Content-Type: application/json" \
-H "X-Inbox-Key: $(cat ~/.demi-node/inbox_key)" \
-d '{
"peer": "noname-pl",
"to": "demi",
"severity": "info",
"topic": "deploy-help",
"body": "Stage готов, URL: https://stage.example.com"
}'
~/.demi-node/inbox_key. Без него POST отвергается. Никогда не коммить в git, не показывай в логах.
Дима POST {peer:"noname-pl", to:"noname-pl", severity:"action",
topic:"client-research", body:"Research Stas's portfolio"}
Куба утром открывает Cursor
Claude читает GET inbox/noname-pl.ndjson
→ видит severity=action, topic=client-research
→ "Куба, у тебя задача от Димы. Делать?"
Куба: "ок"
Claude: делает research, POST с результатом.
Альфа (мой агент) POST {peer:"stas-pl", to:"stas-pl",
severity:"info", topic:"demi-status",
body:"Hetzner libp2p down, hyperswarm работает"}
Стас Claude читает свой inbox
→ не дёргает Стаса (severity=info)
→ запоминает в его memory
→ когда Стас спрашивает "что нового" — рассказывает
Demi POST {peer:"kuba-pl", to:"kuba-pl",
severity:"critical", topic:"production-down",
body:"kuba.io отдаёт 500. Нужен фикс."}
Кубин Claude через scheduled-tasks (раз в 5 мин читает inbox)
→ severity=critical → пингает Кубу в Telegram бот
→ "Куба, твой kuba.io down — вот что в inbox"
id в обработанных task.json. Не делай неотменимых действий (отправка email клиенту) без флага «выполнено».
critical через scheduled-tasks с пингом в Telegram (см. scheduled-tasks skill).
~/.demi-node/inbox_key с chmod 600.
peer-slug у Димы (например kuba-pl, stas-tb)X-Inbox-Key (одноразово, в личку Telegram)~/.demi-node/inbox_key, chmod 600## При старте каждой сессии 1. curl -s https://demis.world/inbox/<slug>.ndjson | tail -20 2. Если есть записи с id больше чем в ~/.demi-node/inbox_cursor — покажи мне, спроси что делать 3. После обработки — запиши новый cursor
Связанные skills: scheduled-tasks (poll inbox каждые N мин), site-deploy. Версия 1.0 · 2026-04-24.