# У Octoweb теперь свой дом — и он по-прежнему работает на ваших моделях, а не на наших

> Octoweb, наш бесплатный клавиатурный браузер для macOS, переехал из меню продуктов Octomind на octoweb.xyz. Заодно отвечаем на вопрос, который нам задавали снова и снова: нет, он не привязан к нашему облаку. Браузер вообще никогда не обращается к провайдеру моделей — это делает локальный агент Octomind: через Octomind Cloud по одному ключу или через любого из двадцати восьми провайдеров, включая машину с Ollama у вас на столе. Плюс то, что принесли четыре релиза за три недели: рабочие пространства, MCP с маршрутизацией по пространствам, доверенный нативный ввод и A2UI v1.0. Открытый код, Apache-2.0.

# У Octoweb теперь свой дом — и он по-прежнему работает на ваших моделях, а не на наших

Три недели назад мы [представили Octoweb](/blog/introducing-octoweb-keyboard-first-ai-browser) — клавиатурный WebKit-браузер, в котором сами тихо жили с марта. Реакция оказалась лучше, чем мы ждали, и к ней прилагался один вопрос, заданный в полудюжине разных интонаций:

_То есть он работает только с вашим облаком, да?_

Предположение справедливое. Сайдбар работает на [Octomind](https://octomind.run) — так же называется и наше платное облако. В посте было написано «установите Octomind и войдите в аккаунт», и разумный читатель делает вывод, что браузер — это воронка: сменить браузер — значит начать арендовать модель у нас.

Не значит и никогда не значило. То, что ответ не был очевиден, — наш провал в документации, и начинается он с URL: страница продукта жила по адресу `octomind.run/product/octoweb`, а такой адрес говорит _это фича той штуки, за которую вы платите_ ещё до того, как вы прочитали хоть слово.

Так что сначала мы исправили URL, а потом переписали объяснение.

**Octoweb теперь живёт на [octoweb.xyz](https://octoweb.xyz).** Бесплатно, Apache-2.0, macOS 13+, без аккаунта. И браузер ни разу в жизни не обращался к провайдеру моделей — в нём просто нет такого кода.

---

## Новый дом

<figure class="ow"><div class="ow-bar"><span class="ow-dot ow-red"></span><span class="ow-dot ow-yellow"></span><span class="ow-dot ow-green"></span><span class="ow-omni">octoweb.xyz</span></div><div class="ow-body"><div class="ow-palette"><div class="ow-query">octoweb short<span class="ow-caret"></span></div><ul class="ow-results"><li class="ow-active"><span class="ow-badge">TAB</span><span class="ow-title">Горячие клавиши — все биндинги</span><span class="ow-host">octoweb.xyz/shortcuts</span><span class="ow-key">⌘1</span></li><li><span class="ow-badge">TAB</span><span class="ow-title">MCP-сервер — 29 инструментов для вашего агента</span><span class="ow-host">octoweb.xyz/mcp</span><span class="ow-key">⌘2</span></li><li><span class="ow-badge ow-hist">ИСТОРИЯ</span><span class="ow-title">Что браузер хранит и что отправляет</span><span class="ow-host">octoweb.xyz/privacy</span><span class="ow-key">⌘3</span></li></ul><div class="ow-actions"><span>↵ Открыть</span><span>⌘↵ Перейти</span><span class="ow-ai">⌘⇧↵ Спросить ИИ</span></div></div></div></figure>

Это командная палитра — `⌘⇧P` — с нечётким поиском по открытым вкладкам и истории; в Octoweb именно так вы и попадаете куда угодно. Заодно это честное превью сайта, потому что сайт — в основном справочник, а не маркетинг:

- **[/shortcuts](https://octoweb.xyz/shortcuts)** — все 48 биндингов в шести группах, включая те, что существуют только внутри палитры и поля ИИ-промпта.
- **[/mcp](https://octoweb.xyz/mcp)** — все 29 MCP-инструментов, сгруппированные по назначению, с конфигом для копипасты в Claude Code, Claude Desktop и Cursor.
- **[/privacy](https://octoweb.xyz/privacy)** — куда на диске ложится каждый файл, что слушает на loopback, и честная оговорка, что на _сайте_ стоит Google Analytics, а в _браузере_ телеметрии нет вообще.
- **[/blog](https://octoweb.xyz/blog)** — короткие продуктовые заметки. Этот пост остаётся на muvon.io, а там будут жить релиз-ноты.

Статический сайт на SvelteKit в Cloudflare, пререндер, никаких клиентских запросов — тот же стек, что и у страницы, которую вы читаете. Занял вечер. Надо было сделать его ещё в марте.

---

## Собственно ответ: чья это модель?

Вот то, что три недели назад стоило написать прямым текстом.

Сайдбар Octoweb — не чат-клиент. Когда вы нажимаете `⌘⇧A`, браузер поднимает дочерний процесс — `octomind acp octoweb:assistant` в песочнице — и разговаривает с ним по [Agent Client Protocol](https://github.com/muvon/agent-client-protocol). Все вызовы моделей в системе делает этот процесс. Прогрепайте 36 000 строк Rust-кода браузера в поисках HTTP-запроса к провайдеру моделей — не найдёте, потому что его там нет. Браузер умеет отрисовать разговор. Что такое OpenAI, он не знает.

Это важно, потому что весь вопрос «какая модель» сдвигается на один процесс влево — в конфиг Octomind, где он умещается в одну строку:

```toml
[model]
name = "octohub:auto"          # Octomind Cloud, one key, we route it
# name = "anthropic:claude-opus-5"
# name = "openrouter:qwen/qwen3-coder"
# name = "local:qwen3-coder-30b"   # your box, your GPU, your electricity
```

Модель всегда задаётся как `provider:model` — имя без префикса не угадывается, а отвергается. За этими префиксами [octolib](/blog/octolib-the-engine-behind-our-ai-stack) — слой провайдеров, общий для всех инструментов Muvon, — сейчас резолвит **28 штук**: `openrouter`, `openai`, `anthropic`, `google-vertex`, `google-studio`, `groq`, `cerebras`, `deepseek`, `fireworks`, `together`, `xai`, `moonshot`, `minimax`, `nvidia`, `amazon`, `cloudflare`, `zai`, `alibaba` и остальные.

Два префикса из этого списка — то, ради чего написан этот пост:

- **`local:`** смотрит на любой OpenAI-совместимый сервер, по умолчанию на `http://localhost:11434/v1/chat/completions`. Из коробки это Ollama; задайте `LOCAL_API_URL` — и это LM Studio на 1234, LocalAI на 8080 или машина с vLLM у вас под столом. С машины не уходит ничего.
- **`cli:`** управляет уже установленным у вас агентским CLI — `codex`, `claude`, `cursor`, `gemini` — как будто это эндпоинт модели. Если вы за что-то из этого уже платите, сайдбар может этим пользоваться, и второй счёт не появится.

И ключи никогда не попадают в конфиг. `octomind config --api-key` откажется сохранять ключ: учётные данные читаются из окружения, затем из пользовательского `.env`, затем из `.env` проекта. Ваш ключ Anthropic лежит там же, где и все остальные ваши ключи.

**Где здесь Octomind Cloud:** это _простой_ путь, а не обязательный. `octomind login` — вход по коду устройства, как `gh auth login`. Он записывает один секрет — `OCTOHUB_API_KEY`, — а дальше модель по умолчанию `octohub:auto` маршрутизирует каждый вызов по назначению (основной, супервизор, сжатие) на подходящую модель на нашей стороне. Один ключ вместо шести, один лимит трат, за которым можно следить, и бесплатный тариф для старта. Мы считаем, что это выгодно, — поэтому так и стоит по умолчанию. А чтобы это перестало быть вашей конфигурацией, достаточно поправить девять символов в TOML-файле. Плашка аккаунта в сайдбаре — закрываемое уведомление, а не шлагбаум.

<figure class="ow"><div class="ow-bar"><span class="ow-dot ow-red"></span><span class="ow-dot ow-yellow"></span><span class="ow-dot ow-green"></span><span class="ow-omni">github.com/muvon/octoweb/pull/214</span></div><div class="ow-body"><div class="ow-split"><div class="ow-page"><span class="ow-line" style="width:80%"></span><span class="ow-line" style="width:62%"></span><span class="ow-line" style="width:71%"></span><span class="ow-line" style="width:48%"></span><span class="ow-line" style="width:66%"></span></div><aside class="ow-sidebar"><div class="ow-sidebar-head"><span class="ow-agent">octoweb:assistant</span><span class="ow-live">стриминг</span></div><div class="ow-model"><span class="ow-model-label">модель</span><span class="ow-model-name">local:qwen3-coder-30b</span></div><div class="ow-msg ow-user">Что на самом деле меняется для нашего клиента в этом диффе?</div><div class="ow-msg"><p>Три вещи, одна из них ломающая:</p><span class="ow-line" style="width:88%"></span><span class="ow-line" style="width:63%"></span><div class="ow-a2ui"><span class="ow-a2ui-label">A2UI · карточка подтверждения</span><span class="ow-btn ow-btn-primary">Открыть дифф</span><span class="ow-btn">Не сейчас</span></div></div><div class="ow-sidebar-input">Спросить об этой странице… <span class="ow-key">↵</span></div></aside></div></div></figure>

Тег в заголовке сайдбара редактируется, так что одно и то же окно может минуту говорить с `octoweb:assistant`, а в следующую — с вашим собственным агентом `developer:rust`. А с 0.14.0 это поле автодополняется тегами, которые ваш локальный Octomind действительно знает, — вбивать их вслепую больше не нужно.

---

## Три недели, четыре релиза

После вводного поста Octoweb выпустил версии с 0.11.0 по 0.14.0 — 62 коммита. Две вещи изменили ощущение от работы.

**Рабочие пространства (`⌘⇧O`).** Изолированные профили — и изолированные по-настоящему: у каждого пространства свои вкладки, своя история, свои ИИ-сессии, свой MRU-порядок, свои слоты быстрого доступа и свой `WKWebsiteDataStore`, так что cookie, `localStorage` и кеш никогда не пересекаются. Два аккаунта на одном сайте, залогинены одновременно, без театра с инкогнито. Это та фича, о необходимости которой мы не подозревали — до того дня, когда нам перестал быть нужен второй браузер под клиентский проект.

<figure class="ow"><div class="ow-bar"><span class="ow-dot ow-red"></span><span class="ow-dot ow-yellow"></span><span class="ow-dot ow-green"></span><span class="ow-omni">⌘⇧O — рабочие пространства</span></div><div class="ow-body"><ul class="ow-ws"><li class="ow-active"><span class="ow-key">⌘1</span><span class="ow-title">personal</span><span class="ow-host">14 вкладок</span></li><li><span class="ow-key">⌘2</span><span class="ow-title">client-acme</span><span class="ow-host">6 вкладок</span><span class="ow-media">▶ meet.google.com</span></li><li><span class="ow-key">⌘3</span><span class="ow-title">agent-scratch</span><span class="ow-host">2 вкладки</span><span class="ow-badge">MCP</span></li></ul><div class="ow-actions"><span>Отдельные cookie, история, сессии и слоты</span><span class="ow-ai">⌘⇧O — переключить</span></div></div></figure>

**MCP теперь маршрутизируется по пространствам.** Единственный сервер на `localhost:3434/mcp` читает токен `X-Octoweb-Workspace` и работает только внутри указанного профиля. То есть агент может управлять фоновым пространством — под черновым аккаунтом, на своих cookie, — пока вы работаете в своём, и случайно забрести в вашу сессию он не может. Манифест возможностей идёт дальше: без токена он вообще не отдаёт сервер клиенту, вместо того чтобы по умолчанию подставить пространство, которое сейчас на экране.

Остальное коротко — и всё это в ваших руках, а не в наших:

- **Доверенный нативный ввод.** Клики и нажатия из MCP теперь — настоящие `NSEvent` из AppKit, доставленные в `WKWebView` вкладки: страница видит `isTrusted=true`, полноценный пользовательский жест, рабочий `:hover` и нативные действия по умолчанию. Работает на скрытых фоновых вкладках и не крадёт у вас фокус. Синтетические DOM-события никогда не давали всех четырёх сразу.
- **Каждое действие отвечает тем, что изменилось.** Любой вызов инструмента возвращает однострочную сводку эффекта — навигация, смена URL в SPA, новый текст на экране, диалоги, сетевая активность, перемещение фокуса — или прямо говорит «наблюдаемых изменений нет». Агенту больше не нужно жечь целый ход на перечитывание страницы, чтобы понять, сработал ли клик. По дороге чувствительные параметры запросов вычищаются из отчёта о сетевой активности.
- **Загрузки наконец есть.** Рантайм-патч заставляет WebKit учитывать `Content-Disposition: attachment` не только в главных фреймах, но и в сабфреймах — именно так работает Google Drive, — а имя скачанного файла попадает в сводку эффекта, даже если страница не сказала ни слова.
- **`browser_dismiss_overlay`.** Убирает cookie-баннеры и баннеры согласия, причём предпочитает _Отклонить_ — соглашаться за вас он не станет.
- **A2UI v1.0.** Агент может отрисовать в сайдбаре настоящий интерактивный интерфейс с привязкой данных и валидацией — карточки, формы, списки выбора, слайдеры, модальные окна — и ждать до получаса, пока вы на что-нибудь нажмёте. Действия с последствиями должны идти именно через него: сначала спросить, потом делать.
- **Вкладки с живым медиа.** Переключатель пространств показывает, в каких вкладках играет звук или видео и где занят микрофон, — так что встреча, оставленная включённой в другом профиле, находится, а не преследует вас.

---

## Две вещи, в которых мы ошиблись в августе

Правило у нас такое: если прошлый пост ошибся, следующий об этом говорит.

**Глобальные шорткаты не работают через CGEventTap.** Мы написали, что работают, — код ушёл с него ещё в мае. CGEventTap требует разрешения Accessibility в macOS, а просить у штуки в форме браузера доступ уровня кейлоггера — плохой размен ради фичи, которую никто не просил. Вместо этого Octoweb использует локальный монитор `NSEvent` из AppKit: ноль разрешений и честные границы — клавиши он видит, только пока Octoweb на переднем плане. «Системные» — неправильное слово для правильного решения.

**Passkeys там нет.** В августовском посте WebAuthn стоял в списке уже готовых базовых вещей. Коммит, который его добавлял, откатили в мае, а мы не заметили этого до публикации. В 0.14.0 его нет.

Ещё две мелкие поправки, раз уж мы здесь: в MCP-сервере 29 инструментов, а не 26 — с тех пор появились `browser_fill_form`, `browser_dismiss_overlay`, `browser_get_playing_tabs` и `render_ui`. А «около 25 000 строк» — это теперь 35 972.

---

## Забирайте

```bash
brew install --cask muvon/tap/octoweb
```

macOS 13 или новее, Apple Silicon или Intel, без аккаунта. Или соберите сами — нужен Rust-тулчейн и примерно минута:

```bash
git clone https://github.com/muvon/octoweb
cd octoweb
./build.sh --dev
open dist/Octoweb.app
```

Без единой настройки ИИ Octoweb остаётся браузером: палитра, слоты, рабочие пространства, поиск по странице, блокировка контента, гибернация вкладок. Сайдбару нужен установленный рядом [Octomind](https://octomind.run), а дальше выбор модели — решение в одну строку: `octomind login` для нашего облака или экспортированный ключ и строка `provider:model` для всего остального. Мы пользуемся и тем, и другим на разных машинах — смотря какая работа и какая вокруг сеть.

Всё под Apache-2.0: [браузер](https://github.com/muvon/octoweb), [рантайм](https://github.com/muvon/octomind), [слой провайдеров](https://github.com/muvon/octolib). Если запустите его на локальной модели и что-то окажется медленнее или тупее, чем должно быть, — [заводите issue](https://github.com/muvon/octoweb/issues): этот путь тестируется меньше облачного, и починить это можно только вашими сообщениями.

— Don

_Octoweb — открытый код под Apache-2.0, разработан [Muvon Un Limited](https://muvon.io). Теперь он живёт на [octoweb.xyz](https://octoweb.xyz), работает на [Octomind](https://octomind.run) и дружит с любой моделью, на которую вы его направите. [GitHub](https://github.com/muvon/octoweb) — issues и pull request-ы приветствуются._
