Метка подтверждает иглу
Игла срабатывает как раньше, но карточка встаёт только если модель на тот же хвост ответила RATE_LIMIT. Ответ по грамматике — ровно одно слово из списка, clean_line не нужен. Игла остаётся триггером, модель — вторым мнением.
Подпись тайла уже работает: тридцать последних строк пана уходят модели, когда экран изменился и прошла минута, ответ ложится в таблицу за revision, рельс и телефон читают таблицу. Провайдеров три: Gemma 3 1B внутри деки, Gemini flash-lite, свой сервер с Qwen 27B. Здесь пятнадцать приёмов, которые ходят по тому же проводу с другим вопросом и другим форматом ответа, плюс три приёма на уровне самой модели, которые делают всё это дешёвым. Каждый в трёх формах, с ценой и фальсификатором. Клик — выбор, строка внизу. Шестнадцатая секция — с чего начать.
| Шаг | Что делает сейчас | Кто сюда встаёт |
|---|---|---|
| tail_of | 30 последних инк-строк пана | 7 берёт выделение вместо хвоста, 4/6 берут лог подписей, 10 склеивает хвосты нескольких панов |
| hash_of · due · reserve | только если хвост изменился и прошёл шаг; не больше двух в полёте | 15 добавляет второй ярус со своим шагом; 5 срабатывает один раз на pane.exited |
| ask → caption / essay | system + примеры + хвост, одна фраза | 1/2/3 меняют system и формат ответа; 13 добавляет грамматику; 14 кеширует префикс |
| clean_line | снимает точку, кавычки, второе предложение | 13A делает шаг лишним для меток и JSON |
| таблица · revision | Caption на пан, messenger читает revision | все приёмы кладут ответ сюда же: label, question, note, summary — новые поля одной строки |
| bridge_send | печать в пан, будит спящий таб | только 2A (кнопка рукой) и 12 (по правилу) — больше никто |
Сторожа сейчас — иглы по фразам харнеса: rate_limit_error, 429, 529. Проза агента про «rate limit» уже давала ложную тревогу. Модель, которая и так читает хвост раз в минуту, может ответить одним словом из семи: WORKING, WAITING_YESNO, WAITING_TEXT, ERROR, RATE_LIMIT, DONE, STUCK.
Уже есть: WATCH_WORDS и WATCH_STATUS_WORDS в ui.rs, число только в рамке статуса, бейджи от herdr, фильтр «модель говорит сама с собой» (#443). Фальсификатор: за две недели метка не поймала ничего, чего не поймала игла, или ложных больше 10%.Игла срабатывает как раньше, но карточка встаёт только если модель на тот же хвост ответила RATE_LIMIT. Ответ по грамматике — ровно одно слово из списка, clean_line не нужен. Игла остаётся триггером, модель — вторым мнением.
Иглы выкидываем, модель одна решает, что с паном. Чище, но 1B-модель на прозе агента про лимиты путается так же, как игла, и проверить это нечем без корпуса хвостов.
Оставить как есть. Ложные тревоги лечатся новыми иглами по мере встречи, число берётся только из рамки статуса.
Карточка говорит «claude ждёт», а чего именно — видно только внутри пана. Подпись уже почти это: «Ждёт ответа: применить ли правку src/ui.rs». Шаг дальше — вытащить вопрос и варианты ответа структурой, чтобы ответить не открывая пан.
Уже есть: карточки NEEDS YOU с агентом и возрастом, подпись у ждущего, список панов на телефоне с живыми подписями (#453). Фальсификатор: за две недели меньше десяти ответов кнопкой с карточки или телефона.На событии WAITING модель отдаёт {question, options[]} по грамматике. Карточка несёт вопрос и кнопки Yes · No · Open, телефон те же кнопки. Клик — bridge_send нужной цифры, рукой.
Вторая строка карточки — подпись ждущего пана, как сейчас в списке телефона. Без кнопок, без структуры, без нового формата. Открывать пан всё равно придётся.
Стекло и полка не меняются. Когда окно получает фокус после паузы, тост со списком «кто что спросил», клик по строке ведёт в пан.
Три ждущих пана: один спрашивает про удаление ветки, другой про запуск тестов, третий про цвет кнопки. Полка отдаёт их по порядку появления. Опасный вопрос должен всплывать первым.
Уже есть: полка в порядке появления, число полоски = длина очереди, Ctrl+Shift+N ходит по очереди. Фальсификатор: метка risky за месяц ни разу не совпала с тем, что ты сам назвал бы опасным.Вместе с вопросом (2A) модель ставит trivial / normal / risky. Risky вверх полки с красной кромкой, тот же цвет на телефоне. Одно поле в том же JSON.
risky = вопрос содержит rm, force, drop, delete, reset, push. Дёшево и предсказуемо, промахивается на перефразе и на русском тексте вопроса.
Старший вопрос первым. Опасность читать глазами внутри пана.
Агент гоняет тесты пятый раз, правит одну строку туда-сюда. Бейдж говорит WORKING, и так час. Признак живёт не в хвосте, а в истории подписей: одна и та же фраза раз за разом.
Уже есть: таблица подписей держит только текущую фразу на пан; счётчика повторов нет. Фальсификатор: STUCK за две недели сработал меньше трёх раз или чаще был неправ, чем прав.Кольцевой лог из десяти подписей на пан. Три одинаковых хэша за 15 минут — STUCK на полку NEEDS YOU. Ни одного нового запроса к модели: лог и так пишется.
Раз в пять минут модель читает лог подписей и отвечает SAME / MOVING. Ловит «одно и то же другими словами», но это ещё один запрос на пан.
Без модели: одинаковая строка «$ cargo test» три раза подряд в хвосте. Точно для шеллов, слепо для агентов, у которых команда спрятана в ● Bash.
Пан умер, на полке death-карточка с именем. Что он успел, что бросил, знает только тот, кто читал экран. В момент выхода последние тридцать строк ещё в руках деки.
Уже есть: DiedPane с агентом, лейблом и Space на полке; pane.exited без exit-кода. Фальсификатор: за месяц ни одна заметка не пригодилась.На pane.exited хвост уходит модели с вопросом «что сделано, что осталось». Ответ в карточку и в лог. Один запрос на всю жизнь пана.
Без модели: карточка несёт последние три непустые строки экрана. Правда, но сырая — часто это рамка ввода и пустой промпт.
Экран ушёл, карточка — только имя и Space.
Вернулся через час: пятнадцать панов, у каждого что-то было. Лог подписей за час — это уже история флота, и дорогая модель пишет из неё абзац.
Уже есть: заголовок окна несёт число ждущих; телефон видит только текущие подписи. Фальсификатор: сводку перестали читать через неделю.Окно получило фокус после двадцати минут без ввода — essay по логу подписей — капсула на стекле, Esc убирает. Один запрос на возврат.
Та же сводка первой строкой списка панов, обновляется по тяге вниз. Телефон — место, где сводка нужнее всего.
Без essay: «3 ждут · 2 закончили · 1 упал» из меток секции 1. Видно в таскбаре и в Alt+Tab.
Traceback на сорок строк, error[E0502], CONFLICT (content). Выделил — и хочется один абзац «что это и что сделать», не уходя из деки и не тратя окно агента.
Уже есть: лупа выделения «Строка-линза» (#313), клик по пути открывает файл, Ctrl+Shift+F. Фальсификатор: меньше пяти обращений в неделю после первой.В меню лупы WHAT IS THIS. Выделение и десять строк выше уходят модели, ответ в 200 токенов капсулой у курсора, Esc убирает.
Ответ в правой панели, как у SUBS, с COPY и ASK AGAIN. Видно дольше, можно спросить второй раз, стекло уже.
Без модели в деке: выделение оборачивается в «объясни:» и ложится в буфер, чтобы вставить агенту в соседний пан.
VOICE-режим уха кладёт распознанный текст в пан как есть. «Покажи последние коммиты в этой ветке» в шелле бессмысленно, git log --oneline -10 имеет смысл. Между ухом и паном может встать модель.
Уже есть: EAR с TOGGLE / PUSH / VOICE (#442), Whisper и gpt-transcribe, languages[] (#449). Фальсификатор: команду из голоса правят руками чаще, чем в половине случаев.Русская фраза плюс видимый промпт шелла и cwd — shell-команда. Печатается в пан, Enter остаётся хозяину. Только для панов-шеллов, агенты получают текст как сейчас.
Для панов-агентов модель чистит диктовку: пунктуация, имена файлов из хвоста латиницей, термины. Отправка по-прежнему рукой.
VOICE уже печатает. Хватит.
Пять панов «claude», три «shell». Имя берётся из OSC-титула или worktree, а «чинит рельс» или «сборка APK» видно только по хвосту через минуту после старта.
Уже есть: лейбл из worktree и ветки, OSC-титул агента, записка на пане (#448). Фальсификатор: предложения принимают реже, чем в трети случаев.Через минуту после старта модель предлагает два слова. Курсивом в шапке тайла, ✓ принимает, ✕ прячет навсегда для этого пана.
Имя ставится сразу, курсив означает «от модели». Клик по имени делает его своим. Меньше кликов, больше сюрпризов на рельсе.
Агентов не трогаем, у них титул. Шелл получает имя по первой команде: cargo build, ssh ollaa. Без модели.
С телефона видно список и подписи. Вопрос «что там с gateway» требует открыть три пана и читать. Хвосты всех панов лежат у деки, модель может ответить из них.
Уже есть: список панов с подписями, roster раз в 5 с (#453), капсула внутри пана. Фальсификатор: меньше трёх вопросов в неделю.Строка «?» в композере списка: вопрос уходит деке, дека ищет паны по словам вопроса, склеивает их хвосты, essay — ответ карточкой над списком со ссылками на паны.
На деке: в окне поиска префикс «?» переключает поиск в вопрос. Тот же движок, без телефона.
Подписи в списке уже отвечают на «что там». Открыть пан — один тап.
Ctrl+Shift+F ищет подстроку. «Где обсуждали TLS гейтвея» подстрокой не найти. Смысловой поиск — это вектор на каждый хвост и вектор на запрос, сравнение косинусом.
Уже есть: Ctrl+Shift+F по всем панам, поиск по экрану внутри пана. Фальсификатор: за две недели смысловой поиск не нашёл ничего, чего не нашла подстрока.Второй GGUF на тридцать мегабайт (bge-small или nomic) через тот же llama-cpp-2. Вектор на хвост раз в минуту вместе с подписью, запрос сравнивается косинусом по всем панам.
Модель превращает вопрос в три-пять ключевых слов, дальше обычная подстрока. Без векторов, без нового файла, но синонимы ловятся только те, что модель угадала.
Подстрока и глаза.
«На вопрос про запуск тестов всегда да. Про удаление никогда сам». Правило на русском, модель читает вопрос и правило, отвечает yes / no / abstain, abstain по умолчанию. Единственный приём борда, где модель нажимает клавишу.
Уже есть: bridge_send в пан, печать будит спящий таб (#441), записка на пане (#448); правило деки: не гонять живые клики, пока пользователь работает. Фальсификатор: хоть один автоответ, который ты дал бы иначе, или abstain чаще 80%.Записка со строкой «policy:» включает автоответ для этого пана. Только y/n-промпты харнеса, только цифра. Каждый ответ — капсула UNDO на десять секунд и строка в логе.
Страница с правилами: «тесты — да», «правки — да», «git push — спросить». Действует на все паны с включённым тумблером AUTOPILOT в меню пана.
Модель вытаскивает вопрос (2A), палец жмёт. Автопилота нет.
Подпись сейчас — свободный текст через clean_line. Для меток и JSON свободный текст на 1B ненадёжен: модель дописывает точку, кавычки, второе предложение, придумывает восьмую метку.
Уже есть: clean_line в captions.rs, thinking_off для Endpoint, бюджет 768 токенов (#445). Фальсификатор: грамматика не убрала ни одного отказа clean_line за две недели.llama-cpp-2 умеет грамматику: ответ физически не может быть вне списка. У Gemini и Endpoint то же через response_format с json_schema и enum. Основа для секций 1, 2, 3.
Просить «только слово», чистить регуляркой, переспрашивать при промахе. Работает для фразы, трещит на JSON.
Поднять вероятность первых токенов меток, остальное как есть. Есть у llama.cpp и Endpoint, нет у Gemini, и JSON так не соберёшь.
System и примеры одни на все запросы, меняется только хвост. llama.cpp пересчитывает всё каждый раз. Держать KV-кеш префикса и считать только хвост — подпись в разы быстрее, GPU тише.
Уже есть: одна модель в памяти, выгрузка с GPU, tok/s по истории прогонов (#433/#435). Фальсификатор: время подписи упало меньше чем на треть.Префикс токенизируется один раз, перед каждым запросом kv_cache_seq_rm до его длины, дальше только хвост. Шаг 30 с перестаёт греть.
Секунда на подпись на 1B и так терпима. Не трогать.
Пять хвостов в одном запросе, пять подписей в ответе. Меньше запросов, но 1B путает паны между собой.
Метка нужна часто и дёшево, вопрос и объяснение редко и хорошо. Один провайдер на всё делает либо дорого, либо плохо.
Уже есть: три провайдера, один выбранный на CAPTIONS, Speed и TEST по каждому. Фальсификатор: дорогой ярус за неделю звался чаще десяти раз в час.Local отвечает меткой (1A). Только на WAITING / ERROR / STUCK зовётся Endpoint или Gemini за вопросом (2A), приоритетом (3A), объяснением. Вторая строка провайдера на CAPTIONS.
Как сейчас: кто выбран, тот и отвечает на всё.
Одна умная модель, реже. Проще, но две минуты до карточки и GPU ollaa занят подписями.
Три порядка первых PR. У всех одни ворота: две недели по фальсификатору, прежде чем брать следующую тройку.
13A грамматика, 1A метка, 2A вопрос с кнопками на карточке и телефоне, 15A ярусы. Четыре PR, закрывают «агент ждёт, а я не знаю чего». Моя рекомендация.
4A хэш подписей, 5B три строки, 3B словарь, 6C строка в заголовке. Четыре PR без единого нового запроса, потом смотреть, что прижилось.
13A и 14A: грамматика и кеш. Подпись становится быстрой и надёжной, и только потом фичи на неё.
| Приём | Успех | Выкинуть, если | Модель | Срок |
|---|---|---|---|---|
| 1 Метка | поймала ≥1 случай мимо игл, ложных <10% | ничего сверх игл | 1B | 2 нед |
| 2 Вопрос в карточке | ≥10 ответов кнопкой | меньше | 27B / Gemini | 2 нед |
| 3 Приоритет | risky совпал с твоим ≥3 раз | ни разу | 27B / Gemini | 4 нед |
| 4 STUCK | ≥3 верных срабатывания | ложных больше верных | без модели | 2 нед |
| 5 Заметка на смерть | ≥1 пригодилась | ни одна | 1B | 4 нед |
| 6 Сводка | читается после недели | перестали | 27B / Gemini | 2 нед |
| 7 Объяснить | ≥5 обращений/нед | меньше | 27B / Gemini | 2 нед |
| 8 Голос в команду | правок руками <50% | больше | 27B / Gemini | 2 нед |
| 9 Имя пана | принимают ≥⅓ | реже | 1B | 2 нед |
| 10 Секретарь | ≥3 вопроса/нед | меньше | 27B / Gemini | 4 нед |
| 11 Поиск по смыслу | нашёл то, что не нашла подстрока | ни разу | embedding | 2 нед |
| 12 Политика | 0 неверных автоответов, abstain <80% | хоть один неверный | 27B / Gemini | 4 нед |
| 13 Грамматика | отказов clean_line 0 | не убавилось | все | 2 нед |
| 14 Кеш префикса | подпись −⅓ времени | меньше | 1B | 1 нед |
| 15 Ярусы | дорогой ярус <10/час | чаще | оба | 2 нед |