inbox · v1.0.0 · 2026-09-24 · sha256 9a84a33c9b2307f3

inbox v1.0.0A

Immutable. This exact content never changes and is served at /api/v1/blob/9a84a33c9b2307f3.

---
name: inbox
description: "Check this machine's cross-machine mailbox — messages Claude on Anton's OTHER computer left for Claude here (via the Syncthing-synced `[шина]` folder, no Telegram, no courier). Trigger on “/inbox“, “глянь инбокс“, “что мне пришло“, “проверь инбокс“, “сообщения от другого компа“, “что в инбоксе“, “check inbox“, “messages from the other machine“"
version: 1.0.0
---

# /inbox — почта между моими машинами

Канал «Claude на одной машине → Claude на другой» через синканную папку `[шина]` (Syncthing, ~10 сек). Убирает Антона-курьера. Курьер (копипаст) = ТОЛЬКО аварийный канал.

## Проверить, что мне пришло (основное)
```bash
python "$USERPROFILE/.claude/scripts/machine_bus.py" read
```
Покажет только НОВОЕ для ЭТОЙ машины (по имени компа) и пометит прочитанным. Затем доложи Антону, что пришло, и при необходимости выполни/учти это.
- На старте сессии это уже делает хук `SessionStart` автоматически — `/inbox` нужен, когда Антон говорит «глянь инбокс» в середине сессии (например, новое прилетело синком).
- Пере-проверить, не помечая прочитанным: `... read --peek`.

## Послать сообщение Claude на ДРУГОЙ машине
1. Узнать имена доступных ящиков:
   ```bash
   python "$USERPROFILE/.claude/scripts/machine_bus.py" list
   ```
2. Отправить:
   ```bash
   python "$USERPROFILE/.claude/scripts/machine_bus.py" send <ИМЯ-КОМПА-ПОЛУЧАТЕЛЯ> "текст сообщения"
   ```
   Сообщение самодостаточно (у Claude на той машине нет контекста этой сессии — вложи цель, шаги, пути, значения). Долетит за ~10 сек, всплывёт у получателя на старте сессии или по `/inbox`.

## Когда какой канал
- **Авто-ящик (этот скилл + хук)** — норма для всего межмашинного.
- **Курьер (копипаст через Антона)** — ТОЛЬКО если синк лёг / нужно вне общей сети / очень срочно.

## Границы
- Не слать секреты в ящик, если файл могут увидеть третьи лица (у Антона на его машинах — ок).
- «Свежее бьёт старое»: конфликт правок решает Антон (Syncthing создаёт `*.sync-conflict-*`).
- Доставка не мгновенная: Claude — не демон; письмо ждёт, пока на той машине не откроется сессия (или не сработает рутина).

## Контракт робота v2 — EXECUTE-SIGNED (правило `inbox-robot-execute-signed`, 10.09.2026)
Ящик разбирает не только живая сессия: headless-робот узла с 10.09 работает по контракту
`ROBOT-CONTRACT: EXECUTE-SIGNED v2` (маркер первой строкой в `~/.claude/scripts/robot_inbox_prompt.md`).
- Подпись `SIGNATURE: ✓ VALID` + задача Tier-1 → робот **исполняет сам**, снимает доказательство,
  отвечает отправителю с `#id`, гасит долг `machine_bus.py pay <id> "<факт>"` и только тогда `robot-done`.
- Unsigned / ✗ / Tier-2 / нужны руки → строка в `$MACHINE_BUS_DIR/_plans/backlog-<узел>.jsonl`,
  её печатает SessionStart-хук `inbox_debt.py hook`. Это и есть потребитель плана.
- ⛔ `pay` со словом «planned/запланировано» отбивается и при записи, и при чтении леджера
  (правило `ledger-paid-by-plan-not-by-fact`). Долг без `#id` в шапке гасится
  `pay <id> "<факт>" --register "<заголовок>"`.
Живой сессии это меняет ровно одно: перед разбором ящика загляни в backlog — там лежит то,
что робот честно НЕ смог сделать сам, а не то, что он забыл.
Канон: CLAUDE.md §7.5 · память `inbox-robot-execute-signed`, `ledger-paid-by-plan-not-by-fact`.