feder-cr/AIHawk

Open-source AI browser agent for web automation: a web browsing agent and computer-use agent in plain English. Browser MCP for Claude Code and Gemini CLI.

Агенты⭐ 31 610Pythonпоследний релиз: v0.68.9
Открыть на GitHub ↗Сайт проекта ↗

Что это за инструмент

AIHawk — это open-source AI-агент для браузера, который управляет реальным браузером (Firefox) для выполнения веб-автоматизации на естественном языке.

Зачем нужен

Инструмент позволяет автоматизировать сложные сценарии взаимодействия с веб-страницами, где требуется имитация действий человека (клики, ввод данных, чтение контента), а не просто парсинг API. Он полезен для задач, требующих обхода простых защит и принятия решений на основе визуального контента страницы.

Что можно реализовать

  • Массовая отправка заявок на вакансии через веб-интерфейсы LinkedIn или других карьерных сайтов
  • Мониторинг цен и проверка доступности билетов на авиа- или ж/д сайтах с календарными виджетами
  • Автоматизация заполнения сложных форм и навигация по многостраничным веб-приложениям
  • Сбор данных с сайтов, использующих защиту от ботов, требующую реального взаимодействия с DOM

Ключевые возможности

  • Работа через MCP (Model Context Protocol) для интеграции с Claude Code, Codex, Gemini CLI и другими IDE
  • Использование «поддельного» (stealth) Firefox, который имитирует поведение человека и не вызывает подозрений у антибот-систем
  • Два режима работы: интеграция в IDE через MCP или автономный веб-интерфейс (UI) с подключением к OpenRouter
  • Поддержка прокси, сохранение профиля браузера (cookies, логины) и настройка seed для воспроизводимости сессий
  • Открытый исходный код и независимость от проприетарных облачных сервисов (ключ API можно использовать свой)

👤 Кому подойдёт: Разработчики, использующие AI-ассистентов (Claude, Gemini), исследователи данных, специалисты по автоматизации тестирования и пользователи, нуждающиеся в сложной веб-автоматизации с обходом базовых защит.

Релизы

v0.68.9patch
🕐 2 дн назад · релиз на GitHub ↗

Исправлена логика определения версии пакета для editable-установок и синхронизация с MCP-протоколом.

  • Fixed: Версия теперь корректно определяется: для обычных установок берется из метаданных, для editable — из дерева исходников с добавлением локального сегмента +editable.
  • Fixed: Исправлен баг в handshake MCP, который ранее передавал неверную версию SDK вместо версии самого пакета.
  • Fixed: Устранено дублирование логики определения версии в aihawk.mcp; теперь используется единый источник данных.
  • Fixed: Обновлен тест: вместо проверки наличия строки importlib.metadata теперь проверяется само свойство версии для всего пакета.
v0.68.8major
🕐 3 дн назад · релиз на GitHub ↗

Исправлена критическая ошибка с управлением задачами, приводившая к падению интерфейса при удалении сессии.

  • Fixed: Устранена ошибка, из-за которой удаление стандартной беседы в панели сессий полностью убивало интерфейс.
  • Fixed: Переписана логика владения соединениями: теперь одна задача отвечает за открытие, использование и закрытие, исключая конфликты отмен anyio.
  • Fixed: Улучшена обработка ошибок: теперь сбои при запуске соединения корректно сообщаются, а не заглатываются.
  • Added: Добавлен аудит и проверка модуля mcp/session.py на предмет аналогичных проблем с контекстными менеджерами.
  • Added: Расширен набор тестов для проверки реального сервера через stdio, включая сценарии сбоев и таймаутов.
v0.68.7majorbreaking
🕐 3 дн назад · релиз на GitHub ↗

Обновлён минимальный required-пакет invisible-playwright до 0.22.1 для исправления двойных кликов и добавлена защита от устаревания версии.

  • Breaking: Минимальная требуемая версия пакета invisible-playwright повышена с 0.16.2 до 0.22.1.
  • Fixed: Исправлена проблема с двойными кликами и ложными отказами при нажатии элементов, исчезающих после события.
  • Added: Добавлена система валидации, предотвращающая рассинхрон между заявленной версией и фактическими причинами её выбора.
  • Fixed: Удалены три известные некорректные конфигурации версий, которые ранее приводили к ошибкам.
v0.68.4majorbreaking
🕐 3 дн назад · релиз на GitHub ↗

Исправлена критическая ошибка прокрутки чата: теперь transcript корректно следует за новыми сообщениями без рывков.

  • Fixed: Устранена проблема, из-за которой transcript переставал прокручиваться после первых строк.
  • Fixed: Заменена логика скролла: теперь используется ResizeObserver, работающий после layout, что гарантирует корректное позиционирование.
  • Breaking: Удалены устаревшие переменные, таймеры и latch-механизмы, управлявшие старой прокруткой.
  • Added: Добавлены тесты, эмулирующие реальное поведение браузера и считающие именно вызовы scrollTop.
  • Fixed: Исправлены ложные срабатывания статического анализа кода (scan terms) в комментариях.
v0.68.3patch
🕐 5 дн назад · релиз на GitHub ↗

Исправлена уязвимость: ключ OpenRouter больше не попадает в окружение процесса Firefox, запущенного через aihawk.

  • Fixed: Устранена утечка OPENROUTER_API_KEY в окружение дочернего процесса Firefox, который ранее наследовал его из .env.
  • Fixed: Внедрена функция runner.forget_key для безопасного удаления ключей из живого окружения, покрывая как файлы, так и переменные shell.
  • Fixed: Исправлена работа тестов: теперь корректно восстанавливается os.environ, предотвращая ложные срабатывания и потерю ключей разработчика.
  • Added: Добавлены новые тесты, проверяющие изоляцию окружения между интерфейсом и запущенным сервером Firefox.
v0.68.1majorbreaking
🕐 5 дн назад · релиз на GitHub ↗

Перенос языковой проверки в invisible-core, обновление зависимостей и исправление версионирования.

  • Breaking: Языковой контроль перенесен в модуль invisible_core.english; удален локальный скрипт check_english_only.py.
  • Added: Добавлен явный тест на декларацию зависимостей: invisible-core теперь объявлен как test dependency.
  • Fixed: Синхронизированы версии в pyproject.toml, manifest.json и server.json.
  • Added: Обновлен тест проверки гейта: теперь он работает с модулем ядра, а не с удаленным скриптом.
  • Added: Порог зависимостей повышен до invisible-playwright>=0.16.2.
v0.68.0major
🕐 6 дн назад · релиз на GitHub ↗

Добавлен строгий контроль зависимостей, исправлена логика маршрута /live/frame и очищены ложные предупреждения.

  • Added: Внедрен автоматический аудит импортов для обязательного декларирования всех сторонних зависимостей (mcp, pydantic, httpx).
  • Fixed: Исправлена логика маршрута /live/frame: теперь корректно различаются статусы 204 и 503 на основе схемы валидации.
  • Fixed: Устранена ложная претензия к смешанным концам строк: проверка подтвердила использование только LF во всех файлах.
  • Fixed: Исправлен механизм определения локальных модулей: теперь используется анализ дерева файлов вместо устаревшего ручного списка.
  • Added: Добавлены исключения для опциональных импортов, обернутых в try/except, чтобы избежать ложных срабатываний при отсутствии зависимостей.
v0.66.0patch
🕐 6 дн назад · релиз на GitHub ↗

Исправление дублирования документации в хранилище и улучшение системы контроля версий без изменений поведения.

  • Fixed: Устранено дублирование правил документирования байтов: теперь описание находится там, где оно применяется, а не в функции-обёртке.
  • Fixed: Очищены docstrings от ложных утверждений о правилах, которые функция не выполняет, сохранив при этом корректные контрастные пояснения.
  • Added: Внедрён механизм контроля версий, требующий обоснования для каждого изменения в выпущенном коде.
  • Тестовый прогон Suite 642 прошёл успешно, функциональные изменения отсутствуют.
v0.63.0patch
🕐 6 дн назад · релиз на GitHub ↗

Исправлена критическая ошибка доступности: таймер автоотмены подтверждений удалён, теперь отмена происходит при потере фокуса.

  • Fixed: Устранён баг, из-за которого двухэтапное подтверждение (v0.61.0) самопроизвольно отменялось через 5 секунд, блокируя пользователей скринридеров.
  • Fixed: Механизм отмены изменён: теперь состояние «armed» сбрасывается при потере фокуса элементом, а не по таймеру.
  • Fixed: Исправлена логика кнопки Clear: теперь корректно обрабатываются повторные нажатия и визуальное состояние элемента.
v0.62.0minor
🕐 6 дн назад · релиз на GitHub ↗

Исправления в UI-доступности, логике закрепления экранов, оптимизации обновлений адреса и скрытых вкладок.

  • Fixed: Исправлена доступность для скринридеров: слайдер корректно сообщает о нулевом диапазоне и получает aria-disabled вместо disabled.
  • Fixed: Устранено дублирование значений: атрибут value и floor теперь управляются из одного источника, исключая рассинхронизацию.
  • Added: Изменено поведение закрепленного экрана: он остается видимым в макете, чтобы пользователь не терял контекст при переключении агента.
  • Fixed: Оптимизировано обновление адреса: убран лишний таймер, теперь данные берутся напрямую из основного потока обновлений.
  • Fixed: Удалена перерисовка DOM для скрытых панелей на неактивных вкладках, что предотвращает лишние запросы к серверу.
v0.58.0patch
🕐 6 дн назад · релиз на GitHub ↗

Исправлена логика сохранения и загрузки системных промптов: теперь единая функция said_only() фильтрует и запись, и чтение.

  • Fixed: Устранена рассинхронизация: теперь системный промпт корректно фильтруется как при сохранении, так и при загрузке через единую функцию said_only().
  • Fixed: Исправлены четыре критических бага: нефильтрованная запись сообщений, загрузка старых промптов, сохранение системных сообщений и преждевременное удаление результатов инструментов.
  • Миграция данных не требуется: старые файлы продолжают работать как раньше, а новые записи перестают содержать дубликат системного промпта.
v0.55.0minorbreaking
🕐 6 дн назад · релиз на GitHub ↗

Исправлена логика определения активного браузера, удалён неиспользуемый лимит и упрощена обработка ошибок API.

  • Fixed: Фокус браузера теперь определяется корректно: учитывается реальная роль в Work.acting, проверка на открытость сессии и фиксация роли при запуске.
  • Fixed: Исправлена обработка ошибок: сервер возвращает 503 вместо скрытия ошибки пустым ответом, интерфейс сохраняет текущий вид вместо очистки.
  • Breaking: Удалён неиспользуемый параметр limit из API и упрощена логика сортировки панелей, чтобы избежать мерцания при переключении вкладок.
  • Fixed: Обновлены примеры в документации, удалены устаревшие поля (running) и актуализированы описания инструментов.
v0.53.0majorbreaking
🕐 7 дн назад · релиз на GitHub ↗

Радикальное упрощение жизненного цикла браузера: теперь только declare, wake, look, act, rebuild, remember, close.

  • Breaking: Полная переработка жизненного цикла браузера: удалены сложные состояния, оставлены только ключевые шаги.
  • Added: Введен единый интерфейс `browser_open` для инициализации сессии и чтения профиля.
  • Added: Все действия теперь проходят через единый канал `Work.acting` с автоматической обработкой ошибок браузера.
  • Deprecated: Удалены файлы `registry.py`, части `work.py` и `session.py`, а также старая система управления вкладками.
  • Fixed: Упрощена логика восстановления браузера: при падении сессия очищается и перезапускается как новая.
v0.52.0minor
🕐 7 дн назад · релиз на GitHub ↗

Внедрён контекстный менеджер swallow для безопасного перехвата исключений с логированием; устранены скрытые ошибки и обновлена документация.

  • Added: Добавлен контекстный менеджер swallow, позволяющий безопасно игнорировать исключения с фиксацией причины в логах и возможности отладки.
  • Fixed: Исправлены скрытые ошибки, вызванные использованием пустых блоков except, которые ранее маскировали реальные дефекты.
  • Fixed: Устранены проблемы с блокировкой интерфейса и остановкой захвата данных, возникшие из-за невидимых исключений.
  • Fixed: Обновлена документация: текст описания сессии адаптирован под актуальное количество браузеров.
v0.49.0patch
🕐 7 дн назад · релиз на GitHub ↗

Обновлены SEO-элементы (README, PyPI, описание) для улучшения видимости в поиске, функционал без изменений.

  • Fixed: Оптимизированы мета-данные репозитория и PyPI для повышения позиций по ключевым запросам, таким как anti detect browser.
  • Длина описания GitHub приведена к 155 символам для корректного отображения сниппета в поисковой выдаче.
  • Подтверждено, что функционал работы с капчами не изменился: они не триггерятся и не решаются.
v0.47.0minor
🕐 7 дн назад · релиз на GitHub ↗

Интеграция MCP-клиента, исправление тестов TestClient и уточнение логики browser_list.

  • Added: Реализована архитектура MCP-клиента, обеспечивающая сквозной вызов цепочки инструментов.
  • Fixed: Устранено зависание тестов TestClient из-за конфликта событийных циклов и stdio-потоков.
  • Fixed: Исправлена логика browser_list: теперь он корректно отчитывает существующие браузеры, а не роли.
  • Fixed: Обновлены устаревшие описания в server.json и docstring, ссылавшиеся на удалённый манифест.
v0.45.0minor
🕐 8 дн назад · релиз на GitHub ↗

Релиз v0.45.0: новые манифесты для клиентов, улучшение парсинга инструментов через AST и добавление иконок.

  • Added: Добавлены манифесты для Claude Code, Cursor и Gemini CLI, позволяющие читать репозитории напрямую.
  • Added: В манифесты пакетов добавлены иконки и ссылки на политику конфиденциальности.
  • Fixed: Поиск инструментов в контенте теперь использует AST вместо регулярных выражений, что исправляет ошибки при наличии скобок.
  • Added: Инструменты теперь содержат заголовки и подсказки о правах чтения или разрушительных действиях.
v0.44.0minor
🕐 8 дн назад · релиз на GitHub ↗

Добавлена строгая проверка целостности метаданных инструментов через AST, исправлены ошибки в подсчётах и тестировании.

  • Fixed: Внедрена седьмая проверка контента: пересчёт количества инструментов и символов из исходного кода сервера через AST для исключения расхождений с реестром.
  • Fixed: Уточнена логика валидации: проверка теперь опирается на общее количество символов описания, а не на упоминания числа инструментов в тексте, что исключает ложные срабатывания.
  • Added: Расширен парсер для корректного анализа двух форматов: обычного текста и строк таблиц, чтобы избежать слепых зон при проверке.
  • Fixed: Обновлены модульные тесты: количество мутаций увеличено с 14 до 17, а число чистых кейсов — с 8 до 11.
  • Fixed: Исправлена неточность в документации модуля: удалено устаревшее указание количества проверок, которое не соответствовало реальному числу (было 5, стало 6).
v0.43.0patch
🕐 8 дн назад · релиз на GitHub ↗

Обновление до v0.43.0 для добавления токена в описание пакета и успешной публикации в PyPI.

  • Fixed: Добавлен токен mcp-name в описание README.md для подтверждения владения пакетом io.github.feder-cr/aihawk.
  • Fixed: Исправлена ошибка «Registry validation failed», возникавшая при попытке публикации из-за отсутствия токена в индексе.
  • Added: Токен теперь присутствует в файле METADATA внутри колеса, что позволяет реестру PyPI корректно его считывать.
v0.42.0patch
🕐 8 дн назад · релиз на GitHub ↗

Исправлена проблема с зависанием вспомогательного браузера из-за обрезки описаний инструментов и противоречивых инструкций.

  • Fixed: Устранена ошибка, при которой вспомогательный браузер (support) не закрывался после завершения задач.
  • Fixed: Ограничение длины описаний инструментов API увеличено: теперь browser_open и browser_click_at полностью передаются модели без обрезки.
  • Fixed: Системные инструкции теперь корректно передаются модели в каждом запуске, ранее они отсутствовали в сгенерированном промпте.
  • Fixed: Исправлена логика завершения хода: модель теперь получает четкий приоритет на закрытие браузера перед финальным ответом.
v0.39.0patch
🕐 11 дн назад · релиз на GitHub ↗

Исправлена критическая ошибка, из-за которой пустой запрос запускал лишние процессы Firefox, что снижало производительность интерфейса.

  • Fixed: Устранена проблема, при которой проверка состояния браузера через browser_list некорректно запускала движок, создавая лишние процессы Firefox.
  • Fixed: Внедрен метод registry.peek для безопасной проверки наличия браузера без его запуска, что оптимизировало работу интерфейса.
  • Fixed: Эндпоинт /live/frame теперь корректно обрабатывает отсутствие активных вкладок, возвращая 204 вместо 503, и не запускает лишние процессы.
  • Added: Добавлен тест в tests/mcp_server/test_a_look_starts_nothing.py, гарантирующий, что проверка состояния не приводит к запуску новых сессий.
v0.38.0patch
🕐 11 дн назад · релиз на GitHub ↗

Рефакторинг SSE-фрейминга, исправление CRLF в коде и улучшение тестирования; наблюдаемое поведение не изменилось.

  • Fixed: Исправлены скрытые ошибки форматирования строк (CRLF) в модулах routes, chat и sessions, которые портили трассировки.
  • Added: Централизованная логика фрейминга SSE-событий в функции sse() и улучшена обработка точек возобновления.
  • Added: Добавлен строгий тест wire_format, проверяющий байтовый формат потока и корректность переподключений.
  • Оптимизирован код: сокращено количество строк и вызовов json.dumps, улучшена обработка пустых ответов.
  • Fixed: Исправлена логика обработки маркеров переподключения при обновлении эпохи, ранее не проверявшаяся тестами.
v0.36.0minor
🕐 11 дн назад · релиз на GitHub ↗

Рефакторинг web.py: разделение монолита на модули UI и бэкенда с сохранением обратной совместимости.

  • Fixed: Устранена ошибка экранирования бэкслешей в регулярных выражениях JS, ранее хранившихся в Python-строке.
  • Added: Код интерфейса разделен на отдельные файлы CSS, JS и HTML, улучшающие поддержку редакторами и линтерами.
  • Fixed: Исправлена проблема с кодировкой строк (CRLF/LF), возникшая при извлечении ресурсов из исходного файла.
  • Публичный API aihawk.web сохранен без изменений, обеспечивая полную обратную совместимость.
v0.32.0patch
🕐 11 дн назад · релиз на GitHub ↗

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

  • Fixed: Устранена ошибка, при которой упоминание эмодзи в промпте некорректно разрешало их использование.
  • Fixed: Введен строгий запрет на эмодзи, блокирующий три известных варианта обхода правила.
  • Fixed: Исправлена логика валидации, которая ранее удовлетворяла модели за счет поиска исключений.
v0.27.0major
🕐 12 дн назад · релиз на GitHub ↗

Масштабная переработка интерфейса: улучшена доступность (контраст, размеры), исправлены отступы и логика отображения вкладок.

  • Fixed: Значительно улучшена доступность: изменены цвета текста и границ для соответствия стандартам контрастности WCAG.
  • Fixed: Исправлены размеры элементов интерфейса: увеличены шрифты кнопок и иконок до минимально допустимых 24px.
  • Fixed: Устранены визуальные артефакты: выровнены отступы заголовка и исправлено центрирование изображений в сетке браузеров.
  • Fixed: Оптимизирована логика отображения вкладок Live/Frozen и пустого состояния сцены для ясности интерфейса.
v0.24.0minor
🕐 12 дн назад · релиз на GitHub ↗

Релиз v0.24.0: улучшен стиль ответов (убраны эмодзи и лишнее форматирование) и исправлена доступность переключателя сессий.

  • Added: Изменен промпт генерации ответов: убраны эмодзи, жирные заголовки, списки и вступления, чтобы текст звучал более естественно.
  • Fixed: Исправлена доступность (WCAG 2.5.3) переключателя сессий: удален aria-label, так как текст на кнопке теперь дублирует функцию.
  • Fixed: Устранена ошибка в тестировании доступности, когда скрипт автоматически восстанавливал aria-label при открытии панели.
v0.23.0minor
🕐 12 дн назад · релиз на GitHub ↗

Исправлена ширина колонки чата, шрифты стали относительными, а разделитель панелей теперь настраиваемым.

  • Fixed: Ширина колонки диалога сокращена до 75 символов для соответствия рекомендациям по дизайну и стандартам доступности.
  • Fixed: Размеры шрифтов переведены на относительные единицы, что позволяет корректно отображать текст при изменении настроек браузера.
  • Added: Добавлено межстрочное расстояние в ответах для улучшения читаемости длинных текстов.
  • Added: Разделитель между панелями стал полностью настраиваемым: его можно перетаскивать, менять клавишами со стрелками или сбрасывать двойным кликом.
v0.21.0majorbreaking
🕐 12 дн назад · релиз на GitHub ↗

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

  • Breaking: Удалены кнопки управления браузерами (открытие, закрытие, фокус, пробуждение); теперь всё делается через команды в чате.
  • Added: Визуальные панели теперь работают как закрепление: клик фиксирует вид, повторный клик возвращает управление агенту.
  • Added: Активная панель, которой управляет агент, теперь имеет специальную отметку для наглядности.
  • Added: Колонка сессий скрыта по умолчанию и запоминает последнее действие пользователя с ней.
v0.19.0minor
🕐 12 дн назад · релиз на GitHub ↗

AIHawk v0.19.0: сохранение состояния вкладок браузера и автоматическое восстановление сессий после сбоев.

  • Added: Сохранение URL-адресов вкладок вместе с идентификатором браузера для восстановления контекста.
  • Added: Автоматический запуск браузера и открытие сохранённых вкладок при первом взаимодействии с сессией.
  • Added: Визуальный индикатор загрузки с таймером при запуске движка (7–14 секунд).
  • Fixed: Исправлено восстановление сессий после аварийной остановки: теперь возвращаются не только браузеры, но и их вкладки.
v0.16.1patch
🕐 13 дн назад · релиз на GitHub ↗

Исправлена ошибка, при которой удаление сессии возвращало ложное сообщение об её отсутствии.

  • Fixed: Устранена ошибка в session_forget: метод корректно удалял сессию, но сообщал, что её никогда не существовало.
  • Fixed: Исправлен тест, который не мог поймать ошибку, так как проверял наличие ID в ответе, присутствующем в обоих сценариях.