nocx

Терминал, который помнит рабочий контекст

Вкладки, напечатанный ими вывод, заметки и ссылки на секреты — всё на месте после перезапуска.

macOS universal · Linux x86_64 AppImage, glibc 2.35+
MIT · v0.3.0, выпущен 2026-08-28 · ранний релиз, без формальной поддержки

Сборка для macOS подписана ad-hoc и не нотаризована — Apple Developer ID у проекта нет, — поэтому первый запуск требует одной команды в терминале. Она целиком в разделе Установка, до того как вы что-либо скачаете.

Транскрипт оболочки exit 0
nocx main
 git log --oneline -3
8422d6f8 Merge pull request #115 from shady2k/fix/resize-vertical-oscillation
165b2f51 chore(beads): close nocx-uus3o
b6f066f4 Merge remote-tracking branch 'origin/main' into pr-115

 go test ./internal/session/ ./internal/settings/
ok    github.com/shady2k/nocx/internal/session   0.155s
ok    github.com/shady2k/nocx/internal/settings  0.006s

 

Настоящий вывод, снятый из этого репозитория, — текст на странице, а не скриншот приложения. Он на английском, потому что таков настоящий вывод: перевести его значило бы его подделать. Запустите обе команды сами и получите то же самое.

01 — Восстановление

Закрыл. Открыл. Работаешь дальше.

Раньше перезапуск стоил всего, что было на экране. Вот что именно его переживает — и единственное, что нет.

ЧтоДо закрытияПосле открытия
Ваши вкладкиоткрытывосстановлены
Напечатанный ими выводна экранепо-прежнему читается
Вкладка, на которой вы быливпередина неё и попадаете
Размер окна, ширина сайдбара, открытая панелькак оставиликак оставили
Программа, работавшая в этот моментвыполняетсяне возобновляется

Последняя строка — самая честная: возвращается то, что программа напечатала, а не сама программа. Хотите начинать с чистого листа? Один переключатель в настройках выключает всё это.

02 — Рабочее пространство

Пять панелей — о машине, на которой ваша вкладка

Вкладки группируются в именованные цветные воркспейсы. Сайдбар следует за активной вкладкой, так что контекст слева — это тот же контекст, в который вы печатаете.

FILES
каталог, в котором вкладка, и он следует за ней — сделайте cd, и дерево переедет само, без клика и без переключения вкладок
GIT
изменённые файлы со счётчиками строк · stage · unstage · коммит · лог — и отказывает там же, где отказывает git, не молча
PORTS
что во вкладке слушает порт, и какие туннели вы пробросили
OPERATIONS
файлы, идущие на машину этой вкладки и обратно — бросьте файл на терминал или возьмите пункт меню в дереве Files · каждую передачу можно отменить отдельно · суммарный прогресс остаётся на панели активности со свёрнутым сайдбаром
NOTES
открывается вкладкой · сохраняется, пока вы думаете · находится потом по любому слову внутри, а не только по заголовку
HISTORY
зашифрована на диске · переживает перезапуск · ограничена сроком хранения, потолком по диску и лимитом вывода на команду

03 — Секреты

Ссылка там, где был ключ

Запустите команду с ключом внутри, и блок предложит его сохранить. Меняется при этом собственная запись nocx об этой команде:

вы набрали
TOKEN=<значение> ./deploy.sh
↓  сохранить в vault
запись nocx
TOKEN=[ссылка на vault] ./deploy.sh
vault
зашифрованное значение
↓  вызвать команду, разблокировать
при запуске
ссылка разрешена

Это утверждение о записи nocx об этой команде и ни о чём шире. Пароли подключений и парольные фразы ключей живут в том же хранилище.

04 — Вопрос

Он действует в скроллбэке, и каждый шаг — строка, которую видно

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

Вы отмечаете

Ничего не прикладывается само. Выделение предлагает отметить блок; то же делает один пункт в меню блока. Отмеченное — это счётчик на одном чипе: его можно открыть, снять отметку построчно и перейти к любому блоку. Вопрос называет эти блоки и не вставляет их текст.

Вы разрешаете

Предложение что-то запустить читается предложением: команда дословно, машина, на которую она пойдёт, и вкладка, в которой это случится. У ответа есть ширина — один раз, эта сессия или всегда, — и каждая кнопка сама говорит, что покрывает.

Вы останавливаете

Stop стоит на живом ходе, там же, где Stop у команды. Пришедший текст остаётся, ход помечается остановленным вами, следующий вопрос работает.

Пока команда выполняется, ⌘/Ctrl+Enter открывает окно вопроса поверх неё — в том числе поверх полноэкранной программы, занявшей весь грид. Экран держит один кадр, пока окно открыто, и программе об этом не сообщают: ни ресайза, ни сигнала, — а ассистент читает тот самый кадр, который видите вы. Escape возвращает программе все клавиши.

nocx поставляет интеграцию, а не модель: endpoint настраиваете вы, и политика хранения — вашего провайдера. Постоянное «да» сохраняется над той самой командой, которую вам показали, а не над их классом, и правило не может оказаться шире окна, которое его предложило. В настройках видно инструкции, которые nocx даёт ассистенту, без подстановок, а завершённый ход умеет показать дословно, что было отправлено и что пришло в ответ. По обычному http nocx ходит исключительно на loopback и приватные адреса, проверяя тот адрес, который реально разрешил и с которым соединился, на каждом запросе и каждом редиректе; учётные данные не переживают смену схемы, хоста или порта.

05 — API

API-клиент, у которого коллекция — файлы в вашей же папке

Откройте экспорт из Postman — .json или целиком .zip — и он станет обычными JSON-файлами, по одному на запрос. Правьте в форме, нажмите Send, читайте ответ. Двое, правящих два запроса, конфликтуют в двух файлах. Без аккаунта, без облака, без входа куда бы то ни было.

Куда он идёт

Запрос уходит с этой машины — или изнутри SSH-соединения, которое у вас уже открыто. Окружение несёт и адрес, и маршрут к нему, так что боевой запрос не обойдёт свой бастион из-за того, что эти двое разъехались.

Что он подставляет

Переменные на трёх уровнях — запрос, папка, окружение, — и правятся там, где вы стоите. Вкладка Variables показывает всю область, под которой запрос уйдёт, и говорит, какой уровень ответил за каждое имя.

Что лежит в файле

Секрет кладётся в любое поле — заголовок, URL, тело, Auth — через замок на самом поле. В файле остаётся непрозрачный идентификатор: ни значения, ни имени, которое вы придумали.

Поэтому коллекция, принятая из чужого пул-реквеста, не дотянется до пароля за SSH-профилем, а импорт чужого экспорта не заводит секрет из того, что в нём случайно оказалось. Ответ читается до 2 MiB; байты, совпавшие с хранимым секретом, удаляются до того, как ответ доедет до окна, а бейдж говорит, что там было.

06 — Строка ввода

Командная строка — это редактор

Построена на CodeMirror 6: подсветка синтаксиса оболочки по мере набора, дополнение команд и путей по Tab, лучший кандидат — призрачным текстом.

Дополнение

  • Tab дополняет команды и пути
  • каталоги дополняются со слэшем на конце
  • ещё один Tab заходит внутрь
  • Right принимает призрачный текст
  • ничего не подошло → панель так и говорит

Сниппеты

  • сохраните фразу один раз, отправляйте куда угодно
  • долетает до программы, читающей stdin прямо сейчас
  • многострочное тело отвергается, если программа не включила bracketed paste, — вместо построчной вставки в то, что этого не переживёт

07 — Границы

Что он принимает — и чего никогда не строит вокруг вас

Импортирует ваши хосты

  • ~/.ssh/config
  • экспорт из Tabby
  • пароли и парольные фразы ключей → в vault

Подключение ссылается на секрет, а не несёт его в себе.

Не является частью nocx

  • аккаунт — регистрироваться негде
  • собственный облачный сервис
  • продуктовая телеметрия
  • облачная синхронизация

Сеть, которой он касается, — это сеть, на которую вы его направили: ваши хосты, настроенный вами endpoint ассистента и проверка собственных обновлений. Аналитики на этой странице тоже нет — GitHub ведёт для неё и для загрузок обычные серверные логи, и они его.

Установка — ранний релиз

Что произойдёт, когда вы его откроете

macOS · universal .dmg

Откройте .dmg, перетащите nocx в Applications. Apple Developer ID у проекта нет, поэтому сборка подписана ad-hoc, а не удостоверенной Apple личностью, и не нотаризована — macOS ставит её в карантин при скачивании. Снимите его один раз:

xattr -dr com.apple.quarantine /Applications/nocx.app

Дальше открывайте как обычно; последующие обновления из приложения карантин не возвращают. Обоснование — в ADR-0003.

Linux · x86_64 AppImage

chmod +x nocx-*-linux-amd64.AppImage
./nocx-*-linux-amd64.AppImage

Он несёт в себе GTK 3 и WebKitGTK и линкуется с glibc 2.35 — порог задан сборкой на Ubuntu 22.04. Это покрывает Ubuntu 22.04+, Debian 12+, Fedora 39+, RHEL 9+ и Arch. Это не «работает везде»: если он не стартует, а ldd --version показывает glibc ниже 2.35, ваш дистрибутив под порогом.

Обновления: nocx проверяет манифест обновления встроенным публичным ключом Ed25519. Это защищает целостность собственного канала обновлений — но это не удостоверение Apple, и сборка не подписана Developer ID и не нотаризована. Команды восстановления — в README.

Из чего собран

Бэкенд
Go — PTY, SSH, сессии, транспорт, настройки
Терминал
xterm.js на WebGL
Строка ввода
CodeMirror 6
Интерфейс
SolidJS
Оболочка
Wails v3
Транспорт
один WebSocket — бинарный канал данных, управляющий JSON-RPC 2.0