Знакомьтесь, Octoweb: клавиатурный браузер, где ИИ — полноправный гражданин, а не расширение

Внезапно ИИ появился в каждом браузере. И все сделали это одинаково: взять Chrome, привинтить сбоку чат-панель, назвать это ИИ-браузером. Браузер не знает о существовании агента. Агент не может дотронуться до браузера. Два незнакомца, делящие одно окно.

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

И мы его построили — для себя, так, как строят инструмент, в котором собираются жить. Octoweb — это WebKit-браузер на Rust — без Electron, без Chromium, около 25 000 строк — для двух пересекающихся аудиторий: тех, кто живёт на клавиатуре, и тех, кто целыми днями работает с агентами. Мы — и то, и другое, и пять месяцев спустя это браузер, в котором мы начинаем каждое утро: читаем документацию, отлаживаем собственные веб-приложения, отдаём скучные браузерные дела Octomind, пока сами продолжаем читать. Сегодня он достиг версии 0.10.0 — и пора о нём рассказать.


Сначала гиковская часть: мышь не нужна

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

В центре всего — командная палитра (⌘⇧P): наберите URL, поисковый запрос или любой фрагмент страницы, где вы уже бывали, и она найдёт его нечётким поиском по открытым вкладкам и истории, ранжируя по качеству совпадения и частоте посещений. Ещё одно нажатие — и страница открывается, переключается или ищется. А поскольку мышечная память священна, палитра говорит на readline: ⌃A/⌃E — прыжок, ⌃K/⌃U — вырезать, ⌃N/⌃P — перемещение. Если ваши пальцы знают Emacs или шелл, они уже знают Octoweb.

Остальной словарь:

  • Слоты быстрого доступа⌘⇧1⌘⇧0 закрепляет текущую страницу за номерным слотом; ⌘1⌘0 мгновенно возвращает к ней откуда угодно. Десять страниц, по одному нажатию на каждую, переживают перезапуск. Это браузерный эквивалент меток Vim. Новое в 0.10.0: ⌘⇧N закрепляет текущую страницу за первым свободным слотом — а если она уже закреплена, открепляет её.
  • Переключение вкладок в порядке MRU⌃N/⌃P перебирает вкладки в порядке последнего использования — так, как вы реально переключаетесь между двумя страницами, а не в том порядке, в котором они случайно стоят в панели вкладок.
  • Прокрутка в стиле Vim⌃D/⌃U — полстраницы, ⌃T/⌃B — в начало и в конец.
  • Скриншоты в буфер обмена⌘S — видимая область, ⌘⇧S — вся страница. Без диалога сохранения, без файла, который потом надо убирать.
  • ⌃R в поле ИИ-промпта — обратный инкрементальный поиск по истории ваших промптов. Да: мы встроили readline-поиск по истории в ИИ-ввод браузера, потому что стоит однажды получить его в шелле — и хочется его везде.

Глобальные шорткаты работают через CGEventTap — нативно для macOS и настраиваемо. Именно поэтому Octoweb пока только для macOS: он опирается на платформу (WKWebView, AppKit, CGEventTap), вместо того чтобы поставлять вторую операционную систему в zip-архиве. Поэтому же весь браузер — один поджарый бинарник, а не 300-мегабайтное Electron-приложение.


Агент в сайдбаре — работает на Octomind

Нажмите ⌘⇧A — и поверх страницы выезжает агент. Не iframe с чат-сайтом внутри — настоящий процесс агента, работающий локально и подключённый по Agent Client Protocol.

Агент — это Octomind, наш plug-and-play рантайм для агентов — тот же, что стоит за нашими терминальными сессиями и CI-ревью. А вот запускать его вам не придётся: Octoweb сам поднимает octomind acp octoweb:assistant — сабпроцесс в песочнице, свой на каждую сессию; умрёт — перезапустится, а при следующем запуске возобновится с вашим разговором в целости. Установите Octomind один раз — дальше сайдбар всё берёт на себя.

Тег octoweb:assistant — это манифест из реестра community tap: модель, системный промпт и инструменты, скачиваемые и собираемые автоматически. Ни одного конфига, написанного руками. А дальше можно спрашивать о странице, которую вы читаете, просить объяснить код на ней или пересказать тред, на который нет времени: ответы стримятся, сессии сохраняются и возобновляются, а слэш-команды выдают богатые карточки вывода.

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

Три детали, над которыми мы попотели:

  • Тег агента редактируется. В заголовке сайдбара по умолчанию стоит octoweb:assistant, но впишите любой тег, который знает ваш Octomind — developer:rust, вашего собственного агента — и сайдбар тут же переподключится к нему. Браузеру всё равно, с каким мозгом он разговаривает.
  • Браузер никогда не обращается к ИИ-провайдеру. Каждый вызов модели делает Octomind, вне процесса браузера, а доступ агента к файловой системе ограничен песочницей его рабочей папки. Данные не покидают вашу машину, пока агент сам куда-то их не отправит — а какой это агент и с каким провайдером, решаете только вы.
  • Сессия — улица с двусторонним движением. Начиная с 0.10.0 сообщения, которые инжектирует рантайм Octomind — ответ специалиста из tap, завершившаяся запланированная задача, сработавший вебхук — появляются в сайдбаре отдельными подписанными пузырями прямо посреди разговора. Ваш браузер становится местом, куда агенты приходят с отчётом.

Есть и дверь поменьше: выделите текст на любой странице, нажмите ⌘⇧E — и модальное окно инлайн-редактирования преобразует выделение: переписать, суммировать, перевести. Он запускает собственного выделенного агента из того же tap — octoweb:editor — со своей историей промптов, ⌃R и всем прочим.


Браузер как инструмент: MCP изнутри

Это направление, в котором не строит больше никто, и наша любимая часть. Octoweb запускает MCP-сервер внутри браузераlocalhost:3434/mcp. Любой MCP-клиент — Claude Desktop, сессия Octomind, ваш собственный скрипт — может подключиться и управлять им: двадцать шесть инструментов, покрывающих навигацию, вкладки, клики, ввод текста, прокрутку, скриншоты, извлечение контента, вывод консоли и сетевую активность.

Автоматизацию браузера вы видели и раньше. Разница в том, что здесь агент не гоняет headless Chromium в датацентре — без cookie и с мишенью бот-детекции на спине. Он управляет вашим браузером — вашими сессиями, вашими логинами, вашими вкладками — у вас на глазах. И дизайн инструментов относится к этому «у вас на глазах» всерьёз:

  • Навигация никогда не крадёт фокус. browser_navigate всегда открывает страницы в фоне. Ровно одному инструменту — browser_switch_tab — позволено менять то, на что вы смотрите. Агент может исследовать в десяти вкладках за вашей спиной, ни разу не выдернув страницу у вас из-под курсора. Он браузит рядом с вами, а не вместо вас.
  • Клики, которые не врут. browser_click повторяет попытки, пока элемент не появится, не стабилизируется и не освободится от перекрытий — а если его что-то закрывает, ошибка говорит, что именно. browser_snapshot возвращает карту интерактивных элементов со стабильными ссылками @N, пробивающую iframe-ы, shadow DOM и кликабельные элементы, у которых есть только слушатели событий. browser_wait понимает готовность SPA, а не только загрузку страницы.
  • Глаза в комплекте. browser_console_messages и browser_network_requests дают агенту ошибки консоли страницы и активность fetch/XHR со статусами и таймингами — те две вещи, ради которых вы открыли бы DevTools, в виде инструментов.
  • Ограждение на границе. Текст, уходящий наружу через снапшоты и контент страниц, проходит через санитайзер — номера карт вымарываются до того, как попадут в промпт.
  • Токены — это бюджет. Каждый ответ инструмента сформирован для модели, а не для дебаггера: browser_snapshot возвращает компактную карту элементов вместо сырого HTML (инструмент get_html мы удалили намеренно), логи консоли и сети приходят ограниченными и фильтруемыми, а ссылки @N означают, что агент никогда не сжигает полконтекста, угадывая CSS-селекторы. Ход агента оплачивается токенами, и браузер с этим считается.

А если ваш рантайм агентов — Octomind, подключение — одна строка внутри сессии:

/mcp add octoweb http://localhost:3434/mcp

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


Браузер, который учится вместе с вами

Ещё один эксперимент: проактивное обучение. По интервалу — по умолчанию раз в 30 минут — Octoweb будит второго, полностью независимого агента, тег octoweb:learning: тот смотрит на открытые вкладки и свежую историю и дистиллирует то, над чем вы работаете, в память Octomind. В следующей сессии ассистент в сайдбаре уже знает документацию, вокруг которой вы кружите третий день.

Оно включено по умолчанию — выключается одним переключателем в настройках, — работает локально, интервал задаёте вы, а два агента полностью независимы: запускайте любой без другого. Мы считаем, что фоновая память — это то место, где браузерный ИИ становится по-настоящему интересным, и предпочитаем выпустить её честную v1, а не демо.


Да, это ещё и просто хороший браузер

Всё это не имеет значения, если сам браузинг хуже того, от чего вы ушли. База на месте, а кое-что даже лучше, чем на месте:

  • Умная гибернация вкладок — фоновые вкладки замораживаются при нехватке памяти, с порогами, учитывающими объём RAM. Пятьдесят вкладок — это стиль жизни, а не утечка. А с 0.10.0 есть лимит открытых вкладок (по умолчанию 500, настраивается), который сверх лимита тихо закрывает самые давно не использовавшиеся — подушка безопасности для коллекционеров вкладок.
  • Встроенная блокировка контента — трекеры и реклама через нативные списки правил WebKit, расширение не нужно.
  • Холодный старт остаётся холодным — фавиконки кешируются как data-URI, так что запуск браузера не делает ни одного сетевого запроса, пока его не сделаете вы.
  • Восстановление сессии, passkeys WebAuthn, просмотр PDF и DOCX, поиск по странице на CSS Custom Highlight API, нативный полноэкранный режим, корректная работа с попап-окнами.

Что с расширениями? Честный статус: интеграция Safari Web Extensions (для 1Password, Bitwarden и компании) полностью реализована в коде — и упирается в entitlement Apple com.apple.developer.web-browser — одобрение, которое может выдать только Apple. Пока его не выдадут, контент-скрипты не инжектятся. Мы предпочитаем сказать вам это, а не делать вид, что расширения — пункт роадмапа.


Пять месяцев, от 0.1.0 до 0.10.0

Octoweb начался в конце марта как эксперимент: можно ли за неделю сделать пригодный клавиатурный браузер с ACP-сайдбаром? К 0.6.0 у него были гибернация вкладок и первые MCP-инструменты автоматизации. 0.7.0 принесла персистентные чат-сессии, passkeys и слэш-команды. 0.8.0 стала большой — обвязка actionability, e2e-набор, тестирующий браузер через его же MCP-сервер, песочница для агента, настраиваемые биндинги клавиш, поверхности A2UI. 0.9.0, выпущенная в конце июля, перешла на ACP v1.2.0 с аутентификацией аккаунтов и длинным хвостом работы над стабильностью. А сегодняшняя 0.10.0 — это то, что ежедневное использование делает с роадмапом: закрепление вкладок, лимит открытых вкладок, статус квоты аккаунта, обновляющийся сам, сообщения специалистов, прилетающие в сайдбар, — плюс исправления утечки памяти и осиротевших процессов агента: такое находишь, только оставив браузер работать неделями.

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


Забирайте

Одна строка на любом Mac, Apple Silicon или Intel:

brew install --cask muvon/tap/octoweb

Или возьмите готовый архив из GitHub Releases, или соберите из исходников с Rust-тулчейном:

git clone https://github.com/muvon/octoweb
cd octoweb
./build.sh --dev        # ad-hoc signed, no cert needed
open dist/Octoweb.app

Для сайдбара установите Octomind и войдите в аккаунт:

curl -fsSL https://raw.githubusercontent.com/muvon/octomind/master/install.sh | bash
octomind login

octomind login — это вход в Octomind Cloud по коду устройства: подписка уже включает доступ к моделям, так что настраивать больше нечего, а сайдбар показывает ваш аккаунт и остаток квоты. Предпочитаете свои ключи? Пропустите вход и экспортируйте ключ любого провайдера (OPENROUTER_API_KEY, ANTHROPIC_API_KEY, …) — BYOK здесь полноценный путь, а не запасной. В любом случае это вся настройка: запустите Octoweb, нажмите ⌘⇧A и поздоровайтесь — браузер сам запускает процесс агента и сам им управляет. Конфигурация — один TOML-файл по пути ~/Library/Application Support/octoweb/config.toml; настройки — ⌘,.

Octoweb лежит на GitHub под Apache-2.0, как и всё остальное, что мы выпускаем. Если вы живёте на клавиатуре — или ваши агенты заслуживают настоящий браузер вместо headless — попробуйте и расскажите нам, чего не хватает. Именно фичи, запрошенные первыми пользователями, — причина того, что 0.10.0 совсем не похожа на 0.1.0.

— Don

Octoweb — открытый код под Apache-2.0, разработан Muvon Un Limited. Он работает на Octomind, нашем plug-and-play рантайме для ИИ-агентов. Берите на GitHub — issues и pull request-ы приветствуются.