Браузеры для ИИ-агентов: ego lite, Aside и BrowserOS neo

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

Я пожил с тремя такими браузерами: ego lite, Aside и BrowserOS neo. Ego lite мне понравился больше, Aside держу запасным, BrowserOS neo гонял, но минимально. Ниже — чем они различаются по сути, а не по рекламным обещаниям.

Коротко

  • ego lite — самый простой и самый удобный для внешнего агента. Своего ИИ внутри нет: агент (Claude Code, Codex, Cursor) пишет кусок JavaScript, ego выполняет его на странице за один проход. У каждой задачи своё пространство вкладок, мои вкладки агент не трогает. Бесплатно, только macOS.
  • Aside — самый «взрослый» как браузер для человека: похож на Arc, есть свой агент, менеджер паролей для агентов, подтверждение платежей. Внешний агент может и работать сам, и отдать задачу внутреннему агенту Aside. Встроенный агент тратит кредиты. macOS и Windows.
  • BrowserOS neo — второй браузер рядом с Chrome специально под внешних агентов: подключается по MCP в один клик, пишет видео каждого прогона. Своего агента нет. Открытый код, бесплатно, есть даже сборка под Linux. Как браузер для человека — самый бедный.

Сводная таблица

ego lite Aside BrowserOS neo
Системы macOS (Apple Silicon и Intel); Windows в закрытой бете скоро, Linux в планах macOS 15+ и Windows x64 macOS 12+, Windows x64, Linux x64 (AppImage, DEB)
Свой ИИ-агент нет есть, со своими моделями или с вашей подпиской ChatGPT, Claude, Copilot или API-ключом нет (у классического BrowserOS есть)
Как подключается внешний агент скилл ego-browser: агент присылает JS-код CLI, MCP, REPL на Playwright MCP-сервер на 127.0.0.1:9200
Можно отдать задачу внутреннему агенту нет да, aside exec нет
Где работает агент в отдельном пространстве (Space) на задачу в обычном профиле или в инкогнито, вкладки агента — в окне пользователя в своей цветной группе вкладок на сессию
Логины и сессии живые, общие с пользователем живые, общие с пользователем импорт из Chrome одной кнопкой, то есть копия
Пароли для агента особой защиты нет Aside Vault: агент не видит пароль, подставляет его браузер особой защиты нет
Запись прогона нет нет видео с таймлайном действий
Интерфейс обычный Chrome боковая панель в духе Arc боковая панель, без пространств и синхронизации
Цена бесплатно Free 500 кредитов в месяц, Pro 20 $, Max 200 $ бесплатно
Код браузер закрытый, скилл под MIT закрытый AGPL-3.0

Два способа работать с агентом

Здесь главное различие, о котором редко пишут прямо. Внешний агент — это тот, что живёт у вас в терминале или на сервере: Claude Code, Codex, Cursor. С браузером он может работать двумя способами.

Внешний агент делает всё сам. Он сам решает, куда перейти и что нажать, а браузер только исполняет команды. Так устроены ego lite и BrowserOS neo: своего агента у них нет, браузер — руки, голова — снаружи. Плюс в том, что вы платите одному агенту и держите весь контекст в одном месте. Минус в том, что каждый шаг тратит токены вашей модели.

Внешний агент даёт задание внутреннему. Цепочка такая: человек пишет внешнему агенту, тот формулирует задание внутреннему агенту браузера, внутренний делает работу на сайтах и возвращает результат внешнему, а внешний его обрабатывает и отдаёт человеку. Можно и короче: человек пишет внутреннему агенту прямо в браузере и там же получает результат. Так умеет Aside: команда aside «задача» или aside exec запускает его собственного агента. Удобно для длинных рутинных задач, но это отдельные кредиты подписки Aside, и вы зависите от того, насколько хорош его агент на вашем сайте.

У Aside есть и первый путь: REPL и MCP дают внешнему агенту управлять страницей напрямую, без посредника. Я в основном пользовался именно им — он быстрый и бесплатный.

Все три способа на одной схеме

Обвязка и Jev

Между агентом и браузером всегда есть прослойка — обвязка. У ego это скилл ego-browser: набор функций для страницы (снимок, клик, ввод, ожидание, переход), из которых агент собирает скрипт. У Aside — CLI и MCP. У BrowserOS neo — MCP-сервер, который отдаёт страницу агенту сжатым снимком, чтобы экономить токены.

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

Отдельная история — Jev от TypeSafe. Это не чат-модель, а модель решений: она не пишет текст, а выбирает один вариант из нескольких, отвечает «да или нет» или ставит оценку. Стоит копейки — около 0,04 $ за миллион входных токенов, выход бесплатный. Поверх неё делают браузерных навигаторов: на каждом шаге Jev смотрит на снимок страницы и выбирает, куда нажать. Так устроен, например, IronBee Express.

Я прикрутил Jev поверх ego для разведки незнакомых сайтов: прошёл маршрут из шести переходов за 19,5 секунды и 0,0002 $. Готовый скрипт с прямыми адресами прошёл тот же маршрут за 8 секунд — так что для известных сценариев Jev не нужен, а для «найди, где тут это лежит» — очень дёшев. Общая идея всех таких проектов: дешёвый навигатор на рутине, большая модель — только там, где надо подумать.

MCP, скрипт и Jev: сколько раз агенту приходится ходить к модели

Пространство пользователя, пароли и сессии

Тут три браузера расходятся сильнее всего.

Как каждый браузер делит место между вами и агентом

ego lite при первом запуске предлагает забрать из Chrome логины, cookies, расширения и закладки. Дальше агент работает с вашими живыми сессиями: если вы залогинены в кабинете, залогинен и агент. При этом под каждую задачу создаётся отдельное пространство (Space), и вкладки агента не смешиваются с вашими. Видно, в каком пространстве сейчас работает агент, его можно остановить или перехватить управление. Данные хранятся локально. Отдельной защиты паролей от агента нет: что есть в профиле, то агенту и доступно.

Слева Codex получил задачу, справа ego lite открыл X в отдельном пространстве агента. Внизу плашка «ego is browsing» с кнопками «Take over» и «Stop». Кадр из официального демо ego lite

Aside тоже импортирует историю, cookies и закладки из вашего браузера. Задачи идут либо в обычном профиле со всеми логинами, либо в инкогнито без них. Зато у Aside самая продуманная работа с паролями: в его хранилище Aside Vault агент никогда не получает пароль в открытом виде — браузер подставляет его сам, с поддержкой passkey и одноразовых кодов, разблокировка по Touch ID. Платежи, публикации и сообщения ждут подтверждения человека. Есть режимы прав: только чтение, «под присмотром» и полный доступ. Обратная сторона: вкладки агента открываются в вашем окне и становятся активными, отдельного фонового пространства, как у ego, нет — агент буквально работает у вас перед глазами.

BrowserOS neo задуман как второй браузер рядом с Chrome. Логины, закладки и пароли переносятся из Chrome одной кнопкой — но это копия. Перелогинились в основном браузере — в neo сессия осталась старой, и на сайтах, где вход часто слетает, это неудобно. Каждый агент получает свою цветную группу вкладок, и ему прямо сообщают, какие вкладки ваши. Закрыли сессию — закрылась её группа. Данные локально, анонимная телеметрия включена по умолчанию, её можно выключить.

Как они выглядят и удобны ли людям

ego lite — обычный Chrome-подобный браузер. Ничего особенного: вкладки сверху, адресная строка, всё привычно. Это скорее плюс — переучиваться не надо.

Официальное демо ego lite: Codex собирает посты из X, пока пользователь работает в своём пространстве

Aside близок к Arc: слева боковая панель, но в ней не открытые вкладки, как в Arc, а закладки, чаты с агентом и отдельная папка «Agent tabs». На новой вкладке — строка «Ask» с выбором модели, режима (локально или в облаке) и прав. Из трёх это самый приятный браузер для человека.

Новая вкладка Aside: слева закладки, чаты и вкладки агента, по центру поле задачи и недавние задачи. Скриншот с сайта Aside
Агент Aside отменяет подписки: вход в банк по passkey из хранилища, параллельные подагенты на разных моделях. Скриншот с сайта Aside
Видео: Introducing Aside на официальном канале

BrowserOS neo — тоже браузер с боковой панелью, но в плане удобства самый бедный: нет пространств, нет синхронизации. Видно, что его делали для агентов, а не для людей. Главный экран — не стартовая страница, а пульт: что сейчас делают ваши агенты. И у него есть то, чего нет у двух других, — запись каждого прогона видео с таймлайном действий. Для разбора, почему агент ошибся, это очень полезно.

Пульт BrowserOS neo: недавние сессии Codex с числом шагов и временем. Скриншот из репозитория BrowserOS
Запись прогона: видео слева, таймлайн действий агента справа
Видео: BrowserClaw: A missing Browser for Claude and Codex — так neo назывался до релиза

А если просто поставить расширение

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

  • Claude in Chrome от Anthropic — на всех платных тарифах Claude, только в Google Chrome. Работает в паре с Claude Code, умеет брать логины из 1Password, перед рискованными действиями спрашивает.
  • Расширение Codex от OpenAI — работает из десктопного приложения ChatGPT с Chrome, Edge, Brave, Opera и Vivaldi. Использует ваш профиль, задачи ведёт в фоновых группах вкладок, на каждом новом сайте спрашивает разрешение.
  • Gemini в Chrome с режимом auto browse — для подписчиков Google AI Pro и Ultra, пока в США. Берёт пароли из менеджера Google, перед покупками и публикациями останавливается.
Страница Claude in Chrome

Плюс расширений — ваш настоящий браузер со всеми логинами. Минусы — агент работает в вашем же окне, и такое расширение рассчитано на агента на этом же компьютере, а не на сервер за SSH. И это самый уязвимый вариант: в сентябре описали атаку BragJack, где вредоносное расширение перехватывает браузерного агента. На Reddit на вопрос о безопасности ИИ-расширений в основном профиле отвечают коротко: «adding an AI agent is just asking for trouble».

Другие инструменты для той же задачи

Это не браузеры, а способы управлять браузером. Задачу решают ту же, но иначе.

  • agent-browser от Vercel — CLI на Rust, самый популярный в этой нише (около 44 тысяч звёзд на GitHub). Сам скачивает Chrome для тестов и по умолчанию работает без окна, то есть с чистым браузером без ваших логинов. На Reddit его называют «просто обёрткой над Playwright».
  • Playwright CLI и Playwright MCP от Microsoft — классика автоматизации, теперь с навыками для агентов. CLI Microsoft прямо продвигает как более экономный по токенам, чем MCP.
  • chrome-devtools-mcp — MCP от команды Chrome DevTools. Управляет живым Chrome, но заточен под отладку и замеры производительности.
  • browser-harness от browser-use — тонкий слой над вашим настоящим Chrome через отладочный порт. Агент сам дописывает недостающие функции прямо по ходу задачи.
Документация agent-browser

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

Что выбрал я

Для моей схемы — агент на сервере, браузер дома с моими логинами — ego lite. Только у него одновременно живые общие логины, отдельное пространство под каждую задачу и подключение по простому SSH без туннелей. Aside держу запасным: он лучше как браузер для человека и единственный умеет принимать задачу целиком, но агент в нём толкается в моём окне, а встроенный агент платный. BrowserOS neo — интересный, если нужны стандартный MCP для разных агентов, запись прогонов или Linux, но копия сессий вместо живого профиля для меня перевешивает.

Полезные ссылки

Скриншоты в статье — с официальных сайтов и из репозиториев разработчиков, ссылки в подписях.

Что случилось с расширением «Исполняется» на Apple Watch и как вернуть управление плеером

Так это выглядит, когда всё работает

На прежних часах у меня на циферблате стояло расширение «Исполняется» (Now Playing): одно касание — и управление тем, что играет на iPhone. На новых Apple Watch его нет, вместо него «Исполняется → Предложено» (Suggested). Нажатие на него не открывает плеер, а может запустить рекомендованную музыку или подкаст поверх того, что уже играет.

Почему так

Дело не в модели часов, а в watchOS. Apple переделала расширение в watchOS 11, в watchOS 26 так и осталось: в крупных слотах вместо Now Playing теперь карточка рекомендаций.

«Предложено» в центре Modular: подкасты вместо текущего трека. Скриншот u/Alexmerm из r/AppleWatch

Что сработало: автозапуск плеера

Раз с циферблата до плеера не дойти, пусть он открывается на часах сам, как только на iPhone началось воспроизведение.

Этот экран должен появляться сам. Скриншот u/nezia из r/watchos

На часах: «Настройки» → «Смарт-стопка» → Live Activities:

  • «Разрешить Live Activities» — вкл.;
  • «Автозапуск Live Activities» — вкл.;
  • «Показывать при опущенном запястье» — вкл.;
  • «Медиаприложения»: «Разрешить Live Activities» — вкл., «Автозапуск» — «Приложение».

Затем на iPhone, в приложении Watch → «Смарт-стопка» → Live Activities → «Медиаприложения»: поставить «Автозапуск» в «Выкл.», выйти, вернуться и снова выбрать «Приложение». Без этого переключения туда-обратно у меня не заработало.

Теперь заиграла музыка — поднял руку, и пауза, треки и громкость колёсиком уже на экране.

Где старое «Исполняется» осталось

Обычный Now Playing (без подписи «Предложено») есть не во всех слотах. По списку из r/AppleWatch:

  • Activity Analog, Utility, Breathe, Nike Digital — нижний слот;
  • California, Nike Hybrid — верхний средний;
  • Solar Graph, Astronomy, Motion, Kaleidoscope, Memoji, Mickey/Minnie Mouse, Pride Digital, Timelapse.

В Modular и X-Large — только «Предложено». Проверяйте конкретный слот: если под названием написано «Предложено» — не тот.

Сторонний Now Playing Plus часто советуют, но у меня он на часах так и не появился.

Helium обзавёлся вертикальными вкладками

Manus прошерстила новости браузеров — и нашла кое-что интересное.

Helium, тот самый минималистичный браузер на базе Chromium, обновился и обзавёлся кое-чем крутым. Хотя минимализм в браузере — это уже само по себе круто, правда, Яндекс Браузер?

Новая фишка — вертикальные вкладки. Те самые, что Arc Browser превратил в моду. Теперь Helium предлагает три варианта раскладки: классическую, компактную и вертикальную — переключаются правым кликом по рамке окна. Справедливости ради: вертикальные вкладки — это встроенная фича самого Chromium, которую команда Helium бэкпортировала в браузер. То есть не велосипед изобрели, но сделали это раньше многих и органично вписали в свой минималистичный интерфейс.

Пространств я пока не нашёл. Можно пользоваться стопкой вкладок и закреплять нужные. Функция пока экспериментальная — так что всё серьёзно, но осторожно.
​
Хороший задел. Ждём, что закончится он хорошо организованными пространствами и синхронизацией их содержимого!

Баннер Яндекса

«Установите Яндекс Браузер с нейросетями, чтобы кривые баннеры Яндекс Браузера выглядели прямее.»

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

Т-Банк и верификация: испытание паранойей вместо сервиса

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

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

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

Боюсь представить, что будет, если куплю булочку в супермаркете или оплачу подписку.

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

Зачем это здесь? А потому что вместо людей в техподдержке Т-Банка читают глупые роботы.

У края бездны (2024)

Мне кажется важно упомянуть этот фильм, наверное, он один из самых важных — среди всего того, что вышло на наши экраны за последние 35 лет.

Где посмотреть? Есть почти на всех видео-платформах, но рекламировать их (платформы) мне не хочется. Даю ссылку на авторов, там всё есть: https://vk.com/realdocproductions

Наушники Huawei Freebuds 5i стали тише звучать!

Короче, у меня есть наушники и Huawei Freebuds 5i и телефон Poco X6 5G на HyperOS. Уже через пару дней наушники потеряли 50% громкости — без причины. Что я только не пробовал — сбрасывал, удалял, забывал наушники, перелопатил десятки различных настроек — в системе, в продвинутых настройках системы, в настройках AI Life — ничего никогда не помогало.

Есть всего три способа решить проблему:

  • Избавиться от HyperOS или MIUI. Я вспомнил молодость и сменил китайскую ось на crDroid как в далеком 2017-м. Забыл о проблеме совсем.
  • Установить Volume Booster GOODEV: https://4pda.to/forum/index.php?showtopic=836669. Это точно поможет, но иногда усиление будет чересчур сильным и уведомления будут вас неожиданно тревожить.
  • Отличный способ, который встретился в одном из комментариев на реддите. Он помогает на все 100%, вы получаете полностью работающие наушники с «родной» мощностью, но есть минус — это временно и через недельку другую придется процедуру повторить.

Итак,

  1. Наушники достаем из кейса и в настройках Андроида удаляем/забываем наушники
  2. Подключем их к любому ноутбуку или ПК как bluetooth-наушники
  3. Выкручиваем системную громкость на 100% и на всякий врубаем музло (пожалейте уши и отложите наушники)
  4. Насладитесь тем, что ваши наушники звучат как прежде. Теперь просто подключитесь к своему телефону снова и пользуйтесь — уровень звука Freebuds 5i восстановлен!

Техподдержка Labrika.ru

Если техподдержка Лабрики очень занята, она посмотрит ваш запрос вечерком, под пивко, наверное.

P.S.: Более чем вменяемый сервис мониторинга позиций оказался с нерабочей ТП.
P.P.S.: Я узнал, что keys.so работают над своим мониторингом, есть некоторые надежды, что они поработают над UX, которого нет на нашем рынке

Как в Эгее создать статичную страницу

Как известно, в Эгее нет простого способа создать статичную страницу, например, с отдельным дизайном. Точнее есть — можно создать папку внутри сайта и поместить в нее свой HTML-файл. Однако страница будет открываться по адресу: site.ru/folder/file.html

Мне так не нравится, мне нравится, когда статичные страницы открываются так — site.ru/folder/, и потому я пытался редактировать .htaccess, однако выяснился досадный факт: если Эгея CMS замечает изменения в этом файле, то сбрасывает его.

Объяснения этому я не добился ни от автора Эгеи, ни в Telegram-сообществе https://t.me/aegea_community.

Короче, вместе с ChatGPT решение нашлось и оно такое:

  1. Как уже писал выше нужно создать папку внутри папки с сайтом (я создал, к примеру, папку wh)
  2. В нее нужно поместить index.html, а также все файлы, которые пригодятся для этой страницы
  3. В этой же папке создаем .htaccess, в котором размещаем следующий код:
RewriteEngine On
RewriteBase /wh/
RewriteCond %{REQUEST_URI} !/index\.html$
RewriteRule ^(.*)$ /wh/index.html [L]

Вместо wh впишите название своей папки.

В результате вы получаете отдельную статичную страницу с отдельным контентом и стилем. Я таким образом оформил

Alfred для macOS: пара автоматизаций

Две небольших автоматизации для Alfred, которые позволяют получать favicon из url, а также копировать id видео из адреса видео в Youtube.

Иногда нам страсть как нужна автоматизация простых действий: для этого на mac как никто другой подойдет Alfred: мощный инструмент для автоматизации задач и управления файлами на macOS. Кстати, для Windows рекомендую Listary.

Отделение id от адреса видео Youtube

Иными словами, нам нужно превратить https://www.youtube.com/watch?v=h9DuoJ6Tcrk в h9DuoJ6Tcrk.

Работать это будет так: пользователь вызывает Alfred (option + пробел), пишет команду cu https://www.youtube.com/watch?v=h9DuoJ6Tcrk, нажимает Ввод и в буфере получает id.

Примерно так выглядит процесс в Alfred

Создайте новый рабочий поток:

  1. Откройте настройки Alfred и перейдите в раздел “Workflows”.
  • Нажмите на “+” в нижнем левом углу, чтобы добавить новый рабочий поток.
  1. Добавьте “Input” (Ввод):
  • Выберите “Inputs” (Ввод) в левом боковом меню и добавьте “Keyword” (Ключевое слово).
  • Назовите ключевое слово, например, “cu” (что означает “YouTube Code”).
  1. Добавьте “Run Script” (Запустить сценарий):
  • Выберите “Actions” (Действия) в левом боковом меню и добавьте “Run Script” (Запустить сценарий).
  • В разделе “Script” выберите “Bash Script” (Сценарий на Bash).
  • Введите следующий скрипт на Bash:
url=$1
videoID=$(echo $url | awk -F '[=&]' '/watch\?/{print $2}')
echo $videoID | tr -d '\n' | pbcopy

Этот скрипт извлекает идентификатор видео из URL YouTube и копирует его в буфер обмена.

А вот так в Alfred можно добавить две команды на вызов в обеих раскладках

Получение favicon по URL-сайта

Более сложная задача, которая потребует установки Python, но, насколько я помню, в macOS он устанавлен по умолчанию.

В чем заключается задача: пользователь вызывает Alfred и в поисковой строке пишет команду: fav https://n-ber.ru, в ответ скрипт открывает в новой вкладке браузера фавиконку сайта.

Поиск фавиконок — та еще задача, поэтому я решил подключить библиотеку favicon: pip install favicon. В процессе неизбежны ошибки, поэтому скрипт должен о них сообщать — там же, в браузере.

  1. Создайте новый рабочий поток:
  • Откройте настройки Alfred и перейдите в раздел “Workflows”.
  • Нажмите на “+” в нижнем левом углу, чтобы добавить новый рабочий поток.
  1. Добавьте “Input” (Ввод):
  • Выберите “Inputs” (Ввод) в левом боковом меню и добавьте “Keyword” (Ключевое слово).
  • Назовите ключевое слово, например, “fav” (от “favicon”).
  1. Добавьте “Run Script” (Запустить сценарий):
  • Выберите “Actions” (Действия) в левом боковом меню и добавьте “Run Script” (Запустить сценарий).
  • В разделе “Script” выберите “Language: /usr/bin/python3” и вставьте код на Python.
  1. Сохраните и настройте триггер:
  • Нажмите “Save” (Сохранить) в верхнем правом углу.
  • Присвойте триггер (комбинацию клавиш или ключевое слово) для активации этого рабочего потока.

А вот и скрипт:

import sys
from favicon import get
import webbrowser

url = sys.argv[1]
user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36'
headers = {'User-Agent': user_agent}

try:
    icons = get(url, headers=headers, timeout=2)
    if icons:
        icon_url = icons[0].url
        print(f"Открываю фавикон: {icon_url}")
        sys.stdout.flush()
        webbrowser.open(icon_url)
    else:
        error_message = f"Favicon not found for the site: {url}. " \
                        f"Open <a target='_blank' href='view-source:{url}'>site's source code</a> manually."
        webbrowser.open(f"data:text/html,{error_message}")
except Exception as e:
    error_message = f"An error occurred: {e}. " \
                    f"Open <a target='_blank' href='view-source:{url}'>site's source code</a> manually."
    webbrowser.open(f"data:text/html,{error_message}")

Вот такие очень узкоспециализированные скрипта для Alfred, но на то он и Alfred, чтобы помогать в прикладных задачах :-)

Ранее Ctrl + ↓