v0.1.0 Alpha Core 8 мин 18 сентября 2026, 13:00 — 14:40

Акт I: Нулевой километр и архитектурный манифест

От чистой папки до 105 зеленых тестов за два часа: почему отсекли TermIt, как режим /grill-me спас проект от монолита и как 4 субагента работали параллельно.

BUG-001 BUG-002 BUG-003 #architecture #grill-me #vault #argon2id #parallel-agents
Стенограмма интервью /grill-me: Старт параллельного роя
18 сентября 2026, 08:28
Развернуть
Архитектор
/grill-me
Antigravity
Провожу опрос по архитектуре. Предлагаю разбить проект на 5 изолированных пакетов (core_foundation, storage_vault, ssh_network_core, terminal_ui, desktop_plugin_sdk). Никаких монолитных связей. Готовы?
Архитектор
ты сразу запустишь несколько агентов?
Antigravity
Да, поднимаем 4 субагента в параллель: Агент 1 (Drift/Argon2id), Агент 2 (dartssh2), Агент 3 (xterm.dart UI), Агент 4 (Plugin SDK). Каждый работает в изолированном пакете со своим набором тестов.
Архитектор
да! подтверждаю
Контекст акта: Честный вайб-кодинг без ручной набивки синтаксиса классов. В этом акте закладывается философия независимого SSH-клиента, отсекаются неудачные нейминги через режим въедливого интервью /grill-me, монорепозиторий делится на 5 изолированных пакетов, а параллельный рой из 4 субагентов поднимает ядро за рекордные два часа.

Запись 00. Как родилась идея и почему не подошел просто Termius

⏱️ Время: 18 сентября 2026, 13:00 — 13:25 (~25 минут)

Честно скажу: я не программист и не трачу время на ручную набивку кода со скобочками и классами — мой фокус лежит в системной архитектуре, пользовательских сценариях и логике продукта.

Поэтому, когда появились мощные современные нейросети, способные по четкому техническому описанию проектировать архитектуру и писать надежный софт, для меня это стало настоящим прорывом. Барьер между хорошей идеей в голове и готовым приложением на экране наконец-то растворился. Главное — мыслить системно: четко понимать логику, структуру данных, сценарии пользователей и направлять процесс как продуктовый архитектор.

Идея сделать собственный SSH-клиент назрела по вполне житейской причине. Каждый, кто администрирует серверы, держит домашнюю лабораторию или настраивает VPS, неизбежно сталкивается с выбором рабочего инструмента.

Я долго смотрел на популярный Termius и похожие утилиты. Продукт симпатичный, спору нет. Но при регулярной работе быстро бросаются в глаза слабые места:

  1. Слепые карточки хостов: Открываешь список из пары десятков серверов — и они все одинаково статичные. Сервер лежит? Пинг просел? Ошибся ли ты и зашел на боевой прод вместо тестовой виртуалки? Никакой внятной индикации.
  2. Ограниченность подходов: Либо плоская плитка, либо ничего. Когда хостов становится за 50+, скроллить эти карточки — сомнительное удовольствие. Нужна компактная таблица и дерево папок.
  3. Закрытость: Никаких сторонних расширений или плагинов. Нужен тебе простой монитор Docker-контейнеров в боковой панели — переключайся в консоль руками и пиши docker ps.

В итоге я сел, набросал логику, выделил ключевые эргономические плюсы (сайдбар, удобный ввод, карточки) и сразу отсек слепое копирование. Так родилось видение будущего продукта: самостоятельный, быстрый инструмент с живой телеметрией доступности прямо на плитке, защитой от случайного ввода команд на проде, матричными сплитами экранов, командной палитрой Ctrl+K и открытыми плагинами на десктопе.


Запись 01. Почему мы начали с правил, а не побежали сразу кодить

⏱️ Время: 18 сентября 2026, 13:25 — 13:45 (~20 минут)

Самый большой соблазн при работе с ИИ — сразу сказать: “Сделай мне красивый терминал!” Результат такого подхода всегда один: монолитная простыня кода на две тысячи строк, в которой через три дня путается даже сама нейросеть, а при попытке прикрутить базу данных всё приложение начинает рассыпаться.

Чтобы этого не произошло, мы сегодня заложили фундамент:

  • Разбили проект на изолированные пакеты: Хранилище с шифрованием отдельно (storage_vault), сетевой стек SSH отдельно (ssh_network_core), терминальный интерфейс отдельно (terminal_ui), плагины отдельно (desktop_plugin_sdk).
  • Связали всё через абстрактный слой контрактов (core_foundation): Теперь над проектом могут параллельно трудиться разные специализированные субагенты. Сетевик не сломает базу данных, а верстальщик терминала не уронит шифрование AES-256.
  • Развернули живой трекер багов и банк идей: Ни одна найденная нестыковка не замнется, а хорошие задумки не потеряются в переписке.

Все регламенты и контракты готовы. Дальше переходим к сборке первого пакета core_foundation и запуску параллельных модулей.


Запись 02. Итоги большого интервью (/grill-me) и кристаллизация архитектуры Shellit

⏱️ Время: 18 сентября 2026, 13:45 — 14:15 (~30 минут)

1. Повод: когда нейросети задают неудобные вопросы

Прежде чем бросаться писать код модулей, мы решили устроить проекту хорошую проверку на прочность. В вайб-кодинге есть опасная ловушка: кажется, что задумка в голове выглядит стройно, а начни реализовывать — всплывут десятки серых зон и архитектурных тупиков. Поэтому я запустил режим дотошного интервью /grill-me, чтобы ИИ выступил не услужливым исполнителем, а въедливым системным архитектором и продуктовым скептиком.

Мы по косточкам разобрали ключевые пользовательские сценарии, эргономику интерфейса и даже само позиционирование проекта.

2. Подводные камни: муки нейминга и медицинские ассоциации

Первый серьезный вопрос возник вокруг имени. Изначальный рабочий вариант «TermIt» казался понятным и лаконичным, но при проверке репозиториев пакетов выяснилось, что в мире Linux уже больше десяти лет существует легковесный VTE-терминал termit, давно прописавшийся в официальных репозиториях Debian и Ubuntu. Создавать коллизии с чужим пакетом и ломать поисковую выдачу с первого же дня — затея сомнительная.

Латинский termes сразу уводил мысль к биологическим термитам и древоточцам, а греческий корень termitis и вовсе отдавал медицинским привкусом воспалений и диагнозов. В итоге вышли на имя, которое легло как влитое — Shellit (причем именно со строчной ‘i’). Это плотное, звонкое слово и одновременно прямой призыв к действию («Shell it!» — «Запусти в шелле!»).

3. Логика решений с ИИ: разбираем спорные развилки

В ходе интервью мы прошлись по тем местам, где чаще всего срезаются опенсорсные терминалы, и довели логику интерфейса до ума:

  • Двухпанельный SFTP в отдельной вкладке: SFTP открывается в самостоятельной вкладке с двумя полноценными панелями (локальная файловая система слева, удаленный сервер справа), поддержкой drag-and-drop, очередью передачи и встроенным редактором конфигурационных файлов.
  • Матричные сплиты 2x2 и Broadcast-ввод: Сетка сплитов вплоть до матрицы 2x2 и режим синхронного ввода (Broadcast), когда команды с клавиатуры параллельно транслируются сразу во все открытые консоли. Незаменимая вещь для кластеров.
  • Живой RTT-пинг на карточках хостов: Фоновый легковесный пинг замеряет round-trip time, отображая живую задержку в миллисекундах и аккуратный пульсирующий статус (зеленый, желтый или оффлайн) прямо в каталоге.
  • Production Safety — защита от «rm -rf»: Если сервер помечен тегом PROD, терминальная вкладка получает акцентную красную статусную рамку по периметру, а деструктивные команды перехватываются подтверждением.

4. Итог: команда в строю

  1. Foundation & Vault Agent — защищенное локальное хранилище Drift/SQLCipher и контракты ядра.
  2. SSH Network Core Agent — сетевой стек, стримы PTY, SFTP и туннелирование на dartssh2.
  3. Terminal UI Agent — эргономика интерфейса Flutter, мультиплексор сплитов, вкладки и темы.
  4. Desktop Plugin SDK Agent — платформа расширений и изолированный IPC для десктопа.

Запись 03. Триумф параллельной разработки: Ядро, Хранилище, Сеть и Плагины готовы (105 тестов из 105)

⏱️ Время: 18 сентября 2026, 14:15 — 14:40 (~25 минут)

1. Повод: проверка боем для параллельного роя

В классической разработке модули делаются последовательно: сначала неделями пишут базу данных, потом сеть, потом мучительно сращивают их вместе. Я решил проверить другой подход: запустить специализированных агентов параллельно, дав каждому четко очерченную зону ответственности.

  • Пока один субагент в storage_vault шлифовал шифрование Drift/SQLCipher, прикручивал KDF на Argon2id и настраивал затирание оперативной памяти (zeroize) после работы с секретами;
  • Второй в ssh_network_core на лету препарировал бинарные форматы ключей OpenSSH, потоки PTY и двухсторонний обмен по SFTP;
  • Третий в desktop_plugin_sdk изолировал песочницу плагинов и жестко отсекал уязвимость Zip Slip.

2. Подводные камни: три бага, пойманных на месте

  • BUG-001 (Нюансы архивов в desktop_plugin_sdk): При реализации распаковщика пакетов .shell-plugin свежая версия пакета archive внезапно не имела геттера entry.isDirectory. Оказалось, в библиотеке каталог определяется исключительно инверсией !entry.isFile. Поправили логику на лету.
  • BUG-002 (Неизменяемая память в storage_vault): Безопасность требует, чтобы приватные ключи и мастер-пароли не болтались в оперативной памяти после расшифровки. Метод extractBytes() в библиотеке cryptography возвращал защищенное представление UnmodifiableUint8ListView, которое среда выполнения модифицировать напрямую запрещает. Перехватили исключение и занулили только честно выделенные мутабельные буферы.
  • BUG-003 (Привередливость dartssh2 и магия ECDSA): Библиотека dartssh2 категорически отказывалась принимать приватные ключи без пароля при передаче пустой строки — требовался строгий null. А ключи формата OpenSSH для алгоритма ECDSA прятали тип кривой глубоко внутри wire-формата. Прикрутили чтение 4-байтных заголовков OpenSSH.

3. Итог: 105 из 105

  • 105 юнит-тестов во всех пакетах ядра проходят со 100% успехом.
  • Статический анализатор dart analyze выдает образцовые 0 warnings, 0 errors.
  • Архитектура доказала полную жизнеспособность монорепозитория. Переходим к визуализации UI!
📖 Типографика статьи выровнена по алгоритму Кнута — Пласса с помощью mcp-typography-server на базе Justif.
Knuth-Plass • TeX Style