Мобильный компаньон деки: стена внимания + точечные действия, без эмулятора терминала. Телефон сам вступает в tailnet (встроенный userspace Tailscale) — один скан QR = подключён. Дизайн прогнан через /grill-ai (codex · gpt-5.6-sol · ultra): 10 решений, лог внизу. ★ — выбор гриля; отвечать можно строкой вида 2A 3A 4B 5A 6C 7A 8A 9A.
Что это за приложение. Гриль выбрал 1A: видно весь флот, действия точечные, ограничение herdr «один мост на пан» не нарушается — чтение идёт снапшотами экрана, не attach'ем.
Стена статусов агентов (снапшоты экранов через шлюз перед herdr-сокетом) + несколько ценных действий на пан: approve/deny, промпт, рестарт. Никакого терминала-эмулятора.
Настоящий эмулятор с клавиатурой и скроллбеком — дека, пересобранная под тач. Дорого, дерётся за мост с декой, на телефоне почти не нужно.
Только событийный инбокс с кнопками; экраны панов — вторичны. Слишком слепо: не видно, чем флот занят.
Четыре радикально разных ментальных модели «рулить флотом с телефона» — не вариации списка, а разные метафоры. Любая может заменить attention stream целиком или жить рядом с ним режимом. Переключай и выбирай: П1 Экипаж · П2 Пульт · П3 Нуль-экран · П4 Котодек.
Метафора: флот = чаты в мессенджере; каждый пан — контакт, которому отвечаешь как человеку. Промпт агенту — первоклассное действие: клавиатура уже под пальцем, история решений читается как переписка.
Пуш «claude просит разрешение» → тап → чат на пузыре с запросом → чип [y] или ответ текстом → галочка «доставлено», чат уходит вниз.
Свайп по чату вправо = мгновенный approve; long-press по аватару = peek-снапшот; pull-down в чате = обновить «фото».
Метафора: флот = каналы аппаратного микшера; ты — звукорежиссёр деки. Весь флот одним взглядом, без скролла и очереди; mute/solo = управление приоритетом внимания.
Глянул → P3 горит янтарным, по ЖК бежит «git push origin main» → нажал мигающий [y?] → лампа зелёная, VU ожил, панель снова вся зелёная.
Короткое нажатие [y?] = approve с haptic-щелчком; долгое удержание с прогресс-кольцом = deny; тап по ЖК-полоске = полный текст запроса.
[SOLO] = полноэкранный монитор пана; фейдер вниз = «этот пан меня сегодня не дёргает».
Метафора: приложения нет — флот живёт слоем поверх ОС: лок-скрин, виджеты, Live Activity, часы. Открыть полный app = провал парадигмы. Время реакции ~2 секунды из кармана.
Телефон в кармане → фирменный haptic-ритм пана 3 (два коротких = claude) → поднял, не разблокируя → баннер на локе → тап [Разрешить] → «✓ y отправлен», пилюля стала «6▶ 0⏳».
Каждому пану свой вибро-паттерн — узнаёшь, кто зовёт, не доставая телефон.
Метафора: агенты = 8-битные коты-питомцы на полке; состояние флота читается позами зверей. Родная эстетика деки (кот-лапа, ZX, CRT) — приложение ощущается частью tm2027, а не дженерик-дашбордом.
Кот с поднятой лапой → тап → облачко раскрылось в полный запрос + 6 строк контекста → погладил свайпом → мурчание (haptic), лапа опустилась, кот вернулся к клавиатуре.
Поглаживание = y (сердечко-пиксель); флик облачка прочь = n (кот отворачивается). Опасные команды — красная рамка, поглаживание в два прохода.
Pinch-zoom на кота = «взгляд его глазами» — полноэкранный снапшот пана в CRT-рамке.
Дека минтит одноразовый pre-auth ключ (TTL 10 мин, tag:mobile) через Tailscale API и показывает QR = {authkey, gateway, nonce}. Телефон сканирует → встроенный Tailscale вступает в tailnet → шлюз меняет nonce на долгоживущий device-token (Keychain/Keystore) и сразу отзывает ключ. VPN-профиль не нужен, официальное приложение Tailscale не нужно.
Флоу выше: скан → всё остальное само. Утечка QR ограничена одним заходом в 10-минутном окне, ключ отзывается сразу после обмена nonce.
После вступления в tailnet дека показывает «новое устройство?» с emoji-хешем, совпадающим с экраном телефона. Сильнее против перехвата QR, на один шаг длиннее.
Не вариант, а дополнение: под сканером «Ввести код вручную» — короткий код с деки, когда камера/экран недоступны. Дешёвый страховочный трос к 2A.
Гриль выбрал 3A — attention stream: дом показывает только то, что требует руки; весь флот — второй таб. Ниже 3A в обоих нативных скинах (iOS / Material You) + альтернативы 3B/3C.
Минимальное время до действия; пустое состояние явно ведёт во флот.
Один ряд на агента, свайп-действия. Не пропал: это вид таба «Флот».
Мини-снапшоты плиткой. Тоже жив — второй вид таба «Флот» (переключатель списка/сетки).
Анатомия главного элемента attention stream. Вопрос: сколько контекста класть в карточку.
Вопрос + две кнопки. Быстро, но решение вслепую.
3 последние строки терминала в mono — видно, что привело к вопросу. «Экран» — в полный снапшот.
Бейдж риска от шлюза + автоотказ по таймеру. Хорош как слой поверх 4B для high-risk.
Точный monospace-рендер экрана пана (обновление ~1 c, пока открыт), пинч-зум кегля, снизу панель действий. Read-only — мост деки не отнимаем. Варианты — про «хром» вокруг терминала.
Шлюз шлёт минимальные «опаковые» пуши напрямую в APNs/FCM (без посредников; данные агента не покидают tailnet — детали приложение забирает уже внутри). Гриль выбрал 6C — двухуровневый approve: кнопки прямо в пуше только для allowlist-действий с шлюза, остальное — deep-link в контекстный шит.
Approve/Deny в каждом пуше. Быстрее всего — и опаснее всего: слепой allow на rm -rf.
Любой пуш только открывает контекст. Безопасно, но рутинные «git push» начинают раздражать.
Кнопки в пуше — только для allowlist-действий (правится на шлюзе); остальное — шит. Риск: allowlist становится security-critical — держать его коротким и явным.
Гриль выбрал 7A — master-detail: слева attention + флот одной колонкой, справа живой снапшот. NavigationSplitView / ListDetailPaneScaffold — складной телефон получает стековую навигацию бесплатно.
Развёрнутая книжка = тот же master-detail (шов уходит в границу колонок). Полусложенный tabletop — своя поза: экран сверху, руки снизу.
Гриль выбрал 9A: структура и контролы — нативные (дневная читаемость, привычные жесты), душа деки — в акцентах: глифы статусов ▶ ✔ ✖ ⚠, пиксельный кот в пустых состояниях, DONE-вспышка, ZX-лента в онбординге, терминал внутри снапшота.
Гриль имена не выбирал — это твой вкус. Мой фаворит — Deckhand.
«матрос при деке» — компаньон, а не замена. Читается на обоих языках.
Прямая принадлежность экосистеме herdr.
«поводок для флота» — дерзко и коротко.
Про суть — «глянул и действовал», но слишком generic.
| # | Решение | Выбор | Почему (одной строкой) |
|---|---|---|---|
| 1 | Концепция | Fleet glance + steer | видно флот + действия, без нарушения «один мост на пан» |
| 2 | Связность | Встроенный userspace Tailscale (libtailscale) | единственный путь к «скан → подключён» без чужого VPN-слота |
| 3 | Ключ и пейринг | Одноразовый ключ TTL 10 мин + nonce → device-token | утечка QR ограничена одним заходом; ключ отзывается сразу |
| 4 | Стек | Go-ядро (gomobile) + SwiftUI и Compose оболочки | рискованное (VPN, сеть) — общее; UI — нативный и маленький |
| 5 | Дом телефона | Attention stream + таб «Флот» | минимум времени до действия; «всё тихо» ведёт во флот |
| 6 | Экран пана | Snapshot viewer + панель действий | честный экран TUI без brittle-парсинга и без attach |
| 7 | Большие экраны | Master-detail split | внимание-первым + место для живого снапшота |
| 8 | Уведомления | Свой вариант: шлюз → APNs/FCM напрямую, пуш «опаковый» | надёжный фон без третьих сервисов; данные — только в tailnet |
| 9 | Approve с пуша | Двухуровневый: кнопки для allowlist, шит для остального | скорость для рутины, контекст для опасного; allowlist = security-critical |
| 10 | Визуальный язык | Native chrome, 8-bit soul | дневная читаемость + язык статусов деки там, где он несёт смысл |