- BrainTools - https://www.braintools.ru -
Хочешь личного агента, который на связи 24/7? Послушного, исполнительного и даже … в меру умного? Он работает за еду (токены) и кров (VPS), учится новому и готов взять на себя любую рутину (связанную с интернетом) если ты его научишь. Он свободен от корпоративных инфраструктур (opensource) и предан только тебе. Он требует дрессировки и воспитания, а затем становится исполнительным секретарём.
Мы живём в удивительное время, когда это стало реальным. Сначала LLMs проникли в веб-поиск — появился “chatgpt”. Проникли в компьютер — “claude code”. Когда настала очередь VPS — появился небезопасный OpenClaw, а вскоре за ним — перспективный Hermes.
Hermes Agent (от Nous Research) — opensource приложение (GitHub [1]) для запуска автономных AI-агентов с самообучением, набором необходимых tools, доступом к огромной базе навыков и интеграцией с Telegram и другими мессенджерами.
В этой статье: подробный разбор архитектуры Hermes, установка и первичная настройка (для чайников), воспитание агента под 4 реальных кейса (в деталях), особенности использования различных LLM (в качестве мозгов) и разбор плюсов, минусов и ограничений Hermes (что он делает легко, а что ему недоступно).
Статья написана человеком, без использования LLM, и отражает реальный жизненный опыт [2].
В статье вы найдёте 4 живых примера использования Hermes Agent:
Системное администрирование и мониторинг VPS
Глубокое исследование темы через Youtube
Мониторинг фриланс-заказов: фильтрация по смыслу + черновик ответа.
Семейный телеграм-бот для списка покупок (мой любимый)
Я специально подобрал разные кейсы, чтобы раскрыть функционал Hermes со всех сторон и показать, на что он вообще способен.
Но начну с основ: что такое Hermes, его установка на VPS и первичная настройка.
По своей сути, Hermes Agent – это такой большой оркестратор для:
мессенджеров (gateways – шлюзы, через которые идёт общение с пользователем, включая SSH-cli и telegram)
инструментов (tools – модули для влияния на внешний мир: вызовы SSH, управление файлами, headless-браузеры, STT, TTS, Cron, умный дом и прочие)
навыков (skills – промпты с критериями активации и заранее прописанной последовательностью действий; могут включать в себя примеры кода, и даже заранее созданные скрипты)
LLM API (большие языковые модели от внешних провайдеров – от флагманов до бюджетных моделей)
Если провести аналогию с человеком, то шлюзы являются ушами агента (слушаться хозяина), tools – глазами и руками, skills – опытом, а LLM – мозгами (с логикой [3] и базовыми знаниями). Эта связка позволяет выполнять большой спектр сценариев решения полезных задач (о них в Части 3).
Пионером в создании автономных агентов стало другое приложение – OpenClaw. Но когда я изучал вопрос, то увидел огромные, критичные уязвимости в безопасности OpenClaw [4]. Это касается и раздутой кодовой базы (400К+ строк), и prompt injection. Ставить на свой сервер приложение, которое ради функционала не заботится о безопасности и приватности я оказался не готов.
Hermes Agent (с точки зрения [5] безопасности) тоже неидеален, но решает этот вопрос на 4+, на уровне архитектуры. Во-первых: у него под капотом стоит сканер возможных prompt injection. Во-вторых: есть возможность запрета влиять на сервер, где он установлен (через docker либо иными способами).
Авторы Hermes вдохновлялись опытом использования локальных агентов: Claude Code, Open Code, Gemini Cli, Qwen Code и пр. (которые были созданы для “вайбкодинга”, но уже “научились” выполнять любые задачи автоматизации с LLM под капотом). Основное отличие локальных агентов – именно в их локальности. Они недоступны 24/7, а значит им неподвластен ряд задач, требующих … доступности. И даже если поставить Claude Code на VPS, его долго придётся допиливать до уровня Hermes Agent.
Ключевая фишка Hermes Agents (помимо того, что он работает “из коробки”) — встроенное самообучение: выполнить задачу в диалоге с пользователем, найти рабочее решение, сохранить это как навык, переиспользовать его в будущих диалогах. И хотя за агентом приходится приглядывать (чтобы не запоминал всякую фигню, особенно с бюджетными мозгами LLM), самообучение оказалась реально рабочим.
Хотя я с интересом [6] смотрю на развитие рынка и мне нравится наблюдать, как AI-гиганты (OpenAI, Anthropic, Google) строят закрытые инфраструктуры для автономных агентов и пытаются подсадить на неё пользователей, я не спешу передавать управление своими данными (и своими привычками) корпорациям.
Да, с точки зрения некоторого бизнеса, использования корпоративных AI-решений может давать реальную выгоду.
Но, с точки зрения создания личного агента (и автоматизации личных/семейных задач), я вижу большую ценность в том, чтобы использовать opensource решение (Hermes Agent). Владеть своей инфраструктурой. И подключать её к множеству LLM через доступные на рынке API.
В этом разделе: выбор VPS, выбор LLM провайдера и модели, установка и базовая настройка Hermes.
Начну с того, что оплата VPS — не самая большая статья расходов: агент потребляет токены, которые также требуют бюджета (об LLM, токенах и ценнобразовании – чуть ниже).
Для комфортного запуска Hermes подходит вполне бюджетный VPS:
1 (v)CPU
2 GB RAM (1GB не хватит)
20 GB NVMe/HDD
Интернет: от 1 Gbps in/out, безлимитный трафик (brandwidth).
Локация: Европа
Мои комментарии к параметрам VPS:
RAM: Я тестировал разные сценарии для Hermes и так и не смог загрузить 2 GB RAM на реальных задачах. 1 инстанс Hermes занимает в памяти [7] ~210Mb. У меня их два. Запуск встроенной STT faster-whisper с моделью base занимает 540MB RAM и довольно быстро выгружается. Переход на бесплатный облачный STT от Groq даёт скорость и делает локальный STT ненужным. Запуск агентом браузера headless-chrome потребляет 600+MB (зависит от веса сайта) — это самый большой потребитель RAM (и токенов:), он не нужен для большинства сценариев, но с ним 1GB не хватит.
NVMe/HDD: Чистая Ubuntu + Hermes со всей обвеской занимает на диске от 10 до 15 GB. Остаётся ~5-10GB. Для нормальной работы Hermes этого абсолютно достаточно, но “не разгуляешься”: иногда приходится следить, чтобы агент не скачивал лишнего, и удалял временные файлы. Если нужно хранить и обрабатывать много данных – потребуется дополнительное место. Мне не потребовалось.
Процессор: 1 vCPU (AMD EPYC) показал себя с хорошей стороны: при запуске тяжелых процессов (headless-chrome / faster-whisper stt) он загружается на 100%, вполне тянет, и быстро возвращается на уровень 1-2% при ожидании.
Тут важно вспомнить, что “бюджетные” VPS-провайдеры часто держат низкие цены (например: $2-$5) за счёт оверселла CPU/RAM: продают больше ресурсов, чем способен потянуть железный сервер (в надежде, клиенты не будут загружать RAM/CPU одновременно). Подселить личного агента в такую коммуналку – так себе идея.
Интернет: Мне нравится быстрый интернет. Возможно, скорость в 10 или 100Mbs будет удовлетворительна для Hermes, но для сценариев доступа к youtube-видео (о них ниже) высокая скорость — это вопрос личного комфорта. Поэтому – гигабитный канал.
Локация: большинство LLM-провайдеров (кроме китайских) недоступны из РФ из-за санкций, а использование российских LLM API (сбер, яндекс) для личных задач – пока непрактично из-за высоких цен и риска утечек. VPS за границей обеспечивает доступ к LLM API, а локация в Европе — географическую близость к РФ, приемлемую скорость и низкий пинг.
Всегда сложно рекомендовать конкретный VPS, поскольку выбор хостера – практически интимная задача, а опыт одного клиента может не совпадать с опытом другого. Могу лишь поделиться своим опытом.
Мой агент работает на VPS во Франции за 7€/мес (с уже предустановленным Hermes) от хостера petrosky. Пока доволен: оплата криптой без KYC, скорость 2Gbps (иногда падает до 1), заявляют что никакого оверселла RAM/vCPU (похоже на правду, всё летает). Не принимают оплату ру-картами, это можно расценивать как минус или как плюс:) С поддержкой не связывался: за месяц ничего не отваливалось и не перезагружалось (что крайне приятно, относительно моего прошлого опыта с бюджетными vps)
Профи смогут выбрать VPS самостоятельно, а для остальных оставляю инструкцию: как делал сам.
Форма заказа: https://client.petrosky.io/order/vps/small [8]
Тариф Мини (€6.99) – для знакомства с Hermes этого абсолютно хватает; если понадобится – доступен upgrade.
Additional IPv4 addresses: 0 (нам хватит основного IP)
Automatic Backup: Disable
System Image -> Application -> Hermes Agent (сразу берём предустановленный Hermes, он внизу списка)
Network Speed: 2Gbps (можно доплатить за 10Gbps, но нам это излишне)
Server Location: Europe (по факту это Франция. Также есть вариант взять сервер в Канаде)
Additional storage space: 0 (если место на диске кончится – можно докупить потом)
С такими настройками на VPS устанавливается Ubuntu 24.04 сразу вместе с Hermes Agent. Оплата: криптой, картой (через Stripe) либо PayPal. После оплаты на почту приходит письмо с IP(Франция), логином(root) и паролем от SSH.
Чтобы выбрать LLM-провайдера для агента, нужно учесть два факта:
Агент жрёт токены. Особенно это видно на длинных диалогах: весь контекст диалога, включая множественные вызовы инструментов, отправляется в LLM. Если для решения задачи агенту нужно вызывать 5 инструментов – то весь контекст диалога будет отправлен в LLM API 5 раз.
Бюджетные LLM подходят лишь для узкого круга задач (примеры будут далее), а для ряда сценариев нужны качественные LLM уровня “флагманов”.
1 – Просто выделять бюджет на топовые модели. Например, использовать Claude Sonnet как рабочую лошадку, иногда переключаясь на Claude Opus. Стоит напомнить, что Anthropic (автор Claude LLMs) больше не позволяет использовать агентов по своей “подписке”, но позволяет оплачивать токены через API.
Сколько денег на это уйдёт – от десятков до тысяч usd в месяц – зависит от сценариев использования. Наилучший опыт общения с агентом я получил с Sonnet “под капотом”, но это требует денег.
2 – Покупать подписку на API у китайцев. Самый рациональный вариант. На сегодняшний день есть возможность купить подписку на API с адекватными дневными лимитами (как минимум) у этих трёх компаний:
z-ai/glm-5.1 — от $18/мес — https://z.ai/subscribe [9]
minimax/minimax-m2.7 — от $10/мес — https://platform.minimax.io/subscribe/token-plan [10]
moonshotai/kimi-k2.6 — от $19/мес — https://www.kimi.com/membership/pricing [11]
Я пробовал использовать Hermes со всеми тремя моделями – они справляются. Мой личный субъективный выбор – GLM-5.1. Да, для первых экспериментов с Hermes, подписка может быть излишней, но как рабочий вариант – самое то. Добавлю, что эти же подписки можно использовать одновременно и для агента, и для “вайбкодинга”.
Третья стратегия – использовать бесплатные LLM. У бесплатных есть пять минусов и два плюса:
Минусы:
как правило, они медленные: им снижают скорость генерации ответа, что влияет на удовольствие от общения с агентом – он становится тормозным.
как правило, у них низкие лимиты (кол-во бесплатных запросов в день), что может потребовать жонглирования разными бесплатными провайдерами в течение дня.
как правило, нет приватности: многие бесплатные модели декларируют право использовать полученные данные для самообучения
как правило, бесплатные модели часто меняются: что было бесплатным сегодня – перестаёт работать завтра (приходится перенастраивать)
как правило, бесплатными делают бюджетные модели, а не флагманы (хотя бывают и исключения)
Плюсы:
не считают токены, есть лимиты только на количество запросов.
бесплатны:)
Назову три источника бесплатных API: (на самом деле их больше)
OpenRouter [12] – главный хаб планеты для продажи доступа к LLM API. Бесплатный аккаунт OpenRouter даёт 50 API-запросов в день к “бесплатным” LLM (с суффиксом :free). Аккаунт, на котором есть $10 и более — позволяет делать уже 1000 запросов в день к бесплатным моделям.
Бесплатная подписка от Nous Research [13] (авторов Hermes Agent) . Это именно “бесплатная подписка” – нужно привязать зарубежную карту с оплатой $0 – что даёт доступ как минимум к одной бесплатной LLM, которая периодически меняется (настраивается через интерфейс Hermes). В разные дни это может быть флагман, либо бюджетная модель.
Бесплатные лимиты от Google Gemini [14]. Подходит для тестирования, не подходит для рабочих сценариев: слишком медленно (по сравнению с платным API) и выдаёт регулярные таймауты (“сервис перегружен”).
Четвертая стратегия — компромиссный вариант: платить за токены приемлемого качества по приемлемой цене. Например: MiniMax M2.7 или Gemini 3 Flash (но не Lite). Оплачивать можно напрямую провайдеру, либо – что крайне удобно – через OpenRouter.
В мае 2026 года DeepSeek предоставляет 75% скидки на deepseek-v4-pro, что также делает её выгодной LLM для агента по соотношению цена/качество.
Пятая стратегия — оплачивать только бюджетные API ( deepseek-v4-flash, gemini-v3.1-flash-lite, gpt-5-nano, step-3.5-flash), не ожидать от агента высокого интеллекта [15], прощать возможные ошибки [16] и заниматься чёткой и понятной постановкой задач.
Моё мнение: Для экспериментов с агентом вполне подходят стратегии 3+4, для повседневной работы: 2+4 (подписка + fallback на платный API если лимиты закончились).
Итак, у вас есть доступ на VPS, а также API-ключ от LLM-провайдера.
Можно приступать к оживлению агента.
Первичная настройка Hermes Agent состоит всего из 3х шагов:
Установить последнюю версию на VPS
Настроить LLM (API-ключ + LLM-model)
Настроить Telegram-шлюз.
2.3.1 – Установить последнюю версию Hermes
Сначала нужно залогиниться на сервер в терминале через SSH:
ssh root@111.111.111.111 (поменять на свой IP, затем вставить свой пароль)
Если вы покупали сервер с предустановленным Hermes Agent по моей предыдущей инструкции – установка агента запустится автоматически и займёт около 20 минут (на более мощных серверах – быстрее).
Если у вас чистый VPS c любым Linux, то установка запускается одной командой.
Специально не дублирую команду в статье – рекомендую всегда смотреть подобное в официальном репозитории проекта: https://github.com/NousResearch/hermes-agent#quick-install [17]
Процесс установки происходит автоматически, надо лишь дождаться завершения.
2.3.2 – Настроить LLM-провайдера для Hermes
Шаг 1: набрать в консоли на сервере hermes setup – появится диалог. В будущих версиях этот диалог может поменяться, но – вероятно – суть останется.
Шаг 2: выбрать quick setup
Шаг 3: выбрать LLM-провайдера (от которого у вас уже есть API-ключ)
Например, если выбрать “OpenRouter” – он предложит ввести API-ключ, а затем выбрать LLM-модель.
Тут важно сказать, что диалог для OpenRouter показывает около 20 моделей в списке, хотя их в разы больше. Если нужной модели нет в списке, то предпоследним пунктом идёт “Enter custom model name”, после чего можно вставить точное название модели, скопированное из карточки модели с OpenRouter: например
moonshotai/kimi-k2.6,anthropic/claude-sonnet-4.6илиdeepseek/deepseek-v4-pro
2.3.3 – Настроить Telegram-шлюз для Hermes
Шаг 4: далее в диалоге настройки Hermes идёт около 10 несущественных вопросов, на которые можно отвечать нажатием Enter – до тех пор, пока не появится меню “Set up messaging now“
Шаг 5: По умолчанию, Telegram в списке не выбран. Его нужно выбрать (пробел) и нестроить (Enter)
Чтобы настроить Телеграм-бота для связи Hermes – нужны две строки:
токен свежесозданного бота (получите токен бота внутри телеги через @botfather)
свой телеграм-user-id (можно узнать, например, через @userinfobot)
Итак, Hermes задаст 3 вопроса:
token: из botfather
user id: список tg-user-id (один, либо несколько через запятую) — это пользователи, которым hermes-bot будет отвечать через телегу (остальных будет игнорить)
home channel: свой tg-user-id — это кому бот будет писать по своей инициативе
Шаг 6: Hermes спросит: Install the gateway as a systemd service? -> ответить Y -> выбрать System service
Шаг 7: Поскольку у Hermes нет sudo-прав, он не может установить свой сервис. Согласно его подсказкам, нужно вручную запустить две команды:
sudo hermes gateway install --system --run-as-user hermessudo hermes gateway start --system
Всё! Это было самое сложное.
Остальное системное администрирование возьмёт на себя агент (см главу 3.1)
Теперь с агентом можно общаться через два шлюза:
Либо в телеграм-боте
Либо в терминале набрать hermes – откроется псевдографический интерфейс
Hermes активно развивается и обновляется по несколько раз в день, чтобы обновиться – достаточно набрать hermes update
Hermes установлен в директории /home/hermes/.hermes/
Все ключи (LLM_API_keys, tg_bot_tokens) хранятся в файле /home/hermes/.hermes/.env
Теоретически, у Hermes есть доступ к этому файлу, что ставит безопасность под вопрос (хотя он сам туда без спроса не лезет, ключи пытается маскировать при выдачи их через чат, а под капотом у него есть сканер на промпт-инъекции из внешних скилов).
Поэтому есть две взаимно-исключающие задачи:
либо агент имеет доступ к системному администрированию своего сервера, что оставляет риски безопасности vps
либо его terminal-tool заворачивается docker – что обеспечивает безопасность, но не даёт возможность влиять на своё окружение.
Чтобы реализовать вариант 2 – достаточно выполнить команду hermes config set terminal.backend docker – но на этапе знакомства рекомендую этого не делать, чтобы изучить возможности системного администрирования (руками агента).
Прежде чем переходить к реальным кейсам, расскажу об основной фиче Hermes: о навыках и самообучении.
Существует 5 источников навыков:
Предустановленные (сейчас их 89, в будущем наверняка будет больше). Чтобы узнать об установленных навыках, можно просто спросить агента в чате “какие у тебя есть навыки”. О некоторых из них я расскажу ниже.
Официальные “опциональные” навыки (сейчас их 62) – их можно установить через cli-команду hermes skills browse, либо также через чат.
Скилы от сообщества [18] сейчас их 521. Команда hermes skills search <запрос>. В эту кроличью нору я ещё не лазил.
Скилы из внешних источников: их можно установить через hermes skills install https://example.com/SKILL.md [19], либо скинуть файл SKILL.md [20] в телеграм-чат и попросить сохранить. (формат файла должен соответствовать требованиям из документации [21]).
Потенциально сюда можно отнести все навыки от OpenClaw.
Самостоятельно созданные скиллы. У агента есть встроенный “навык по созданию навыков”. После решения сложной задачи – он сам может инициировать создание+сохранение нового навыка, где опишет рабочий процесс. Альтернативно – можно прямо попросить в чате “создай такой-то навык и запиши в него 1,2,3”
Все навыки хранятся в директории /home/hermes/.hermes/skills/
Раньше администрирование VPS было головной болью [22]. Сейчас это делает агент. Он может установить на сервер, настроить, удалить любой софт. Дать отчёт, посмотреть логи, найти решение проблемы и тут же воплотить его в жизнь. Администрировать и свой сервер, и другие через SSH.
Да, есть риски глюков и ошибок остаются. Но: в умелых руках сисадмина, агент будет точным инструментом. А в неумелых – очень хорошим помощником, который снизит риски и сделает любую работу более точной и быстрой.
Главное правило: не подсовывать агенту-сисадмину совсем уж бюджетные LLM (вроде deepseek-v4-flash) вместо мозгов, иначе будет тупить и ошибаться.
Агента можно попросить:
настроить firewall, открыть/закрыть порты, установить правила
настроить авторизацию по SSH-ключам
установить Xray и WARP, настроить конфиг, выдать ключи и проверить логи
настроить на сервере Git-репозиторий
настроить Nginx со своим доменом
дать отчёт и рекомендации по загрузке сервера — и всё это – в форме обычного диалога в телеграм-чате.
Несколько личных примеров:
Попросил сделать отчёт по загрузке сервера, высказал пожелания по формату (“нужны: проценты, списки top-5, рекомендации в конце”), попросил сохранить как навык. Теперь выдаёт отчёт в нужном формате по запросу.
Дважды за месяц не мог подключиться к VPS по SSH – спросил в телеге в чём дело – он оба раза нашёл проблему и исправил (первый раз был криво настроенный warp, второй – блокировка моего IP со стороны моего UFW)
Настраивал второй сервер — дал агенту SSH-доступ с паролем, сделал его “руками” всё что нужно, затем поменял пароль на удалённом сервере.
На Хабре уже были статьи: как настроить безопасный VPS (например: гайд по первоначальной настройке VPS [23]). Даже эти задачи можно делать руками агента. Либо своими руками, но с его рекомендациями (у агента нет sudo-доступа, поэтому некоторые команды придётся набирать самому).
Этот кейс родился во время моих экспериментов совершенно случайно, и он классно раскрывает возможности Hermes по связи с внешним миром.
Я изучал англоязычные источники на тему “создания личной стратегии” (психология – моя основная профессия), и решил задействовать агента.
У Hermes есть встроенный навык youtube-content, который позволяет скачать субтитры для видео.
Если субтитры для видео недоступны (иногда их нет) – есть обходной манёвр: можно установить связку yt-dlp + deno , с их помощью скачать аудио, а потом превратить аудио в текст с помощью утилиты faster-whisper (модель base), либо внешнего сервиса Groq (нужен бесплатный API-ключ). Агент сам справляется и с установкой, и с запуском.
У Hermes есть встроенный инструмент – браузер (headless chrome), с помощью которого он может заходить на сайты и (в данном случае) запустить поиск по ключевым словам на youtube с сортировкой по количеству просмотров.
Далее я попросил агента: найти 3 англоязычных видео по теме с наибольшим количеством просмотров, скачать субтитры (первым или вторым способом) выделить 5 ключевых идей – и описать их одним абзацем каждая. Затем сравнить между собой: что общего, в чем различия. И, наконец, упаковать этот отчёт в PDF.
Я не привожу полный текст переписки с агентом по двум причинам: это скучно читать, плюс – для разных LLM “под капотом” – диалоги будут немного разными. Поэтому просто описал вехи диалога
В итоге я получил навык youtube-topic-report – который я активно переиспользую: набираю в чате “personal-list-manager название новой темы” и через несколько минут получаю pdf.
Когда я учил агента – он справился с отчётом не с первого раза, пришлось воспитывать и говорить как надо. Но после сохранения навыка – работает как часы.
---
name: youtube-topic-report
description: >
По заданной теме найти 3 популярных англоязычных видео на YouTube,
скачать субтитры, сделать конспекты (5 ключевых идей на видео),
сравнительный анализ и собрать всё в итоговый PDF-отчёт на русском языке.
tags: [youtube, research, pdf, report]
---
# YouTube Topic Report
## Языковые правила
- **Видео** — строго английский язык. Если в результатах поиска нет английских видео — перебирать ниже по списку, пока не наберётся 3.
- **Все текстовые выходы** (конспекты, анализ, PDF) — строго на русском языке.
- **Субтитры** — сохраняются как есть (английские), не переводятся.
## Вход
Тема (строка).
## Выход
PDF-отчёт в папке `~/youtube-sub/`:
1. Титульный лист (тема, 3 видео с лайками, дата, прямые ссылки на видео)
2–4. Конспекты (5 ключевых идей × 3 видео)
2. Сравнительный анализ (общее / различия)
3. Итоговый вывод
## Шаги
### 1. Поиск видео
Открыть YouTube через браузер:
```
https://www.youtube.com/results?search_query={тема}&sp=CAMSAhAB
```
`sp=CAMSAhAB` — сортировка по просмотрам.
Выбрать **3 англоязычных** видео с наибольшим количеством просмотров (лайки не обязательны — views из поиска достаточно для выбора).
**Эффективное извлечение ID видео** — не кликать по каждому видео, а выполнить в консоли браузера:
```javascript
JSON.stringify([...document.querySelectorAll('a#video-title')].slice(0,10).map(a => ({title: a.title, href: a.href, text: a.textContent.trim()})), null, 2)
```
Это даст названия, ссылки и video_id для первых 10 результатов за один шаг.
**Проверка языка**: по названию и каналу очевидно, английское ли видео. Если есть сомнения — открыть видео и проверить язык.
```javascript
Array.from(document.querySelectorAll('a#video-title')).slice(0, 5).map(a => ({title: a.textContent.trim(), href: a.href}))
```
Это вернёт заголовки и ссылки, из которых легко извлечь video ID (параметр `v=`).
Для получения лайков — перейти на страницу каждого видео и выполнить в консоли:
```javascript
document.querySelector('button[aria-label*="like this video"]')?.getAttribute('aria-label')
```
Вернёт строку вида `"like this video along with 32,070 other people"` — число лайков извлекается из неё.
Выбрать **3 англоязычных** видео с наибольшим количеством просмотров.
### 2. Скачивание субтитров
#### Метод А: Deno (Рекомендуется)
Позволяет получить субтитры программно через JS-рантайм DENO, что часто обходит базовые блокировки.
```bash
export DENO_INSTALL="$HOME/.deno" && export PATH="$DENO_INSTALL/bin:$PATH"
deno run --allow-net scripts/get_transcript.ts "VIDEO_ID"
```
#### Метод Б: Whisper (Тяжелый фоллбэк)
Если метод А выдает "Transcript is disabled", использовать `yt-dlp` + `faster-whisper`:
```bash
yt-dlp -x --audio-format mp3 -o "/tmp/{VIDEO_ID}.%(ext)s" "URL"
# Далее транскрипция через faster-whisper в Python
```
### 3. Сборка PDF (fpdf2)
Использовать шрифт DejaVu для кириллицы. **Критически важно:** при использовании `multi_cell` всегда вызывать `pdf.set_x(15)` перед каждым вызовом и использовать фиксированную ширину `W=180`, иначе текст на мобильных устройствах может отображаться некорректно.
## Питфоллы
- **Hallucinated URLs**: Никогда не пишите ID видео по памяти. Всегда копируйте их из вывода терминала/поиска.
- **Transcript Disabled**: Многие экспертные видео намеренно блокируют экспорт сабов. Whisper — единственный надежный способ для них.
- **Telegram Truncation**: Telegram обрезает превью и цитаты до ~250 символов. Всегда доставляйте полный отчет файлом (MEDIA:/path).
- **Likes extraction**: Не пытайтесь парсить лайки из snapshot DOM — используйте JS-консоль с `document.querySelector('button[aria-label*="like this video"]')?.getAttribute('aria-label')`. Snapshot может не содержать кнопку like или содержать её в нечитаемом виде.
- **Video ID extraction**: После поиска на YouTube используйте JS-консоль для извлечения ссылок (`a#video-title`), а не пытайтесь парсить snapshot — это быстрее и надёжнее.
## Связанные файлы
- `scripts/get_transcript.ts`: Скрипт для Deno по извлечению субтитров.
Я решил создать proof-of-concept: сможет ли агент быть посредником на фриланс-бирже и экономить время на просмотре заказов и написании черновиков ответов?
Hermes справился, но был на грани фола.
Получилась почти детективная история. Этот кейс показывает границы Hermes: что агент уже делает хорошо, а где нужно серьёзная дрессировка.
Пункт первый: где брать тексты новых заказов? Заставлять агента регулярно заходить на сайт биржи и парсить контент? Практика показала, что антибот-защита существует, и не любую captcha он в состоянии обойти (yandex-smartcaptcha оказалась не по зубам).
Я нашёл обходное решение: старый добрый RSS (пример: https://www.fl.ru/rss/?category=31 [25]). Но если RSS на бирже отсутствует – то агента придётся клонировать на домашний комп и давать ему управлять мышкой на своём браузере (этот сценарий я здесь не рассматриваю, статья про автономного агента на VPS)
Пункт второй: Для работы с RSS-лентой существует навык blogwatcher (с утилитой blogwatcher-cli под капотом). Он позволяет:
добавлять новые “блоги/rss-ленты” для отслеживания
получать список “непрочитанных” сообщений
помечать их как прочитанные.
Я попросил агента добавить RSS:https://www.fl.ru/rss/?category=31 в отслеживание, и довольно быстро согласовал с ним детали навыка по теме: “Каждые 30 минут проверяй новые заказы на fl.ru и отправляй в Telegram только те, которые связаны с созданием или улучшением автономных ИИ-агентов.“
## Задача
Каждые 30 минут проверяй новые заказы на FL.ru и отправляй в Telegram только те, которые связаны с созданием или улучшением автономных ИИ-агентов.
## Шаги
### 1. Получи новые заказы
```
blogwatcher-cli scan --blog "FL.ru AI заказы"
blogwatcher-cli articles --blog "FL.ru AI заказы"
```
Если список пуст — заверши работу молча, ничего не отправляй.
### 2. Оцени каждый заказ по критерию
Критерий: **"Заказчик хочет создать или улучшить автономного ИИ-агента?"**
Определение: автономный ИИ-агент — это система, которая самостоятельно принимает решения, выполняет последовательности действий, использует инструменты (браузер, API, код) и/или взаимодействует с окружающей средой для достижения цели без постоянного участия человека. Примеры: AI-агент для автоматизации задач, мультиагентная система, чат-бот с инструментами, RAG-система с actions, агент на n8n/Make с LLM-логикой.
Оцени каждый заказ независимо по шкале 0–10:
- 9–10: явно про автономного агента (прямо написано "агент", "автономная система", "agent")
- 7–8: вероятно про агента — есть признаки автономности, инструментов, многошаговой логики
- 4–6: смежная тема (просто LLM, чат-бот без инструментов, автоматизация без ИИ-логики)
- 0–3: не про агента (генерация изображений, видео, аватары, переводы, SEO и т.п.)
Оценивай строго. Не завышай оценки из-за слов "ИИ" или "автоматизация" — они не достаточны.
### 3. Запиши лог для ВСЕХ статей
В файл `~/.hermes/logs/freelance-ai-agents.log` добавь по одной строке на КАЖДУЮ статью из списка — не пропускай ни одну:
```
[YYYY-MM-DD HH:MM] 9/10 | SENT | Заголовок | URL
[YYYY-MM-DD HH:MM] 3/10 | skip | Заголовок | URL
```
Используй `SENT` если оценка 7 и выше, `skip` если ниже 7.
Не переходи к следующему шагу, пока не записаны все статьи.
### 4. Отправь в Telegram заказы с оценкой 7 и выше
Для каждого заказа с оценкой 7 и выше вызови инструмент send_message со следующими параметрами:
- action="send"
- target="telegram:1319060463"
- message="🤖 [Заголовок заказа](ссылка)n📅 Дата публикации | ⭐ Оценка/10n📝 Описание из RSS"
Каждый заказ — отдельный вызов инструмента send_message.
НЕ включай подходящие заказы в свой финальный текстовый ответ — только вызывай инструмент.
### 5. Пометь все как прочитанные
```
blogwatcher-cli read-all --blog "FL.ru AI заказы" --yes
```
Выполни это всегда в конце, даже если не было подходящих заказов.
Это был провал.
Навык не работал. Выдавал всякую чушь. Даже с топовой Opus 4.7 “под капотом”.
Проблема оказалась в архитектуре.
Если в чате с chatgpt написать “сделай клон фейсбука” (одним промптом) – на результат нельзя будет смотреть без слёз. А я делал буквально то же самое.
Пришлось резать слона (задачу) на кусочки.
В этой задаче оказалось 6 различных шагов
извлечь из списка следующий непрочитанный RSS узел
получить его полный текст (RSS не всегда содержит весь текст)
оценить текст по критерию по шкале от 0 до 10
отправить в чат только тот, где оценка >5
для него сгенерить черновик ответа (по установленным правилам)
отметить узел как прочитанный
А если агент обращается к blogwatcher-cli и получает список из 10 новых узлов, но перед ним стоит задача: в правильной последовательности выполнить 10×6=60 шагов, и ни разу не заглючить — не каждый человек справится. Hermes Agent не справился.
Пришлось – прямо в чате телеграм – с помощью агента навайбкодить скрипт.
скрипт дёргает blogwatcher-cli и обновляет его sqlite-базу
берёт из базы массив непрочитанных узлов и запускает по ним цикл
(Далее для каждого узла)
запускает инстанс hermes с одним запросом: “Извлеки описание задачи…, вот url ).
запускает инстанс hermes с одним запросом “оцени текст по критериям, верни число от 0 до 10”. Для этой простой задачи подходит бюджетная deepseek-v4-flash
если оценка выше 5, запускает инстанс hermes с одним запросом “отправь этот текст в телеграм”.
пометить узел прочитанным.
Генерацию черновика ответа я вынес в отдельный навык, чтобы не загружать скрипт. Для генерации ответа нагуглил отдельный промпт [26].
#!/usr/bin/env python3
"""
FL.ru scanner: scan fl-ru-31 feed, extract unread articles,
fetch content via Hermes (default model), score with LLM,
send to Telegram, then mark as read.
"""
import sqlite3
import os
import subprocess
import re
HERMES_BIN = "/root/.hermes/hermes-agent/venv/bin/hermes"
DB_PATH = os.path.expanduser("~/.blogwatcher-cli/blogwatcher-cli.db")
BLOG_ID = 2 # fl-ru-31
MODEL_SEND = "deepseek/deepseek-v4-flash"
PROVIDER_SEND = "openrouter"
SCORE_MODEL = "deepseek/deepseek-v4-flash"
SCORE_PROVIDER = "openrouter"
BLOG_NAME = "fl-ru-31"
def hermes_call(prompt, model=None, provider=None, timeout=60):
"""Call hermes CLI and return stdout. Checks exit code; returns None on failure."""
args = [HERMES_BIN, "-z", prompt, "--yolo"]
if model:
args.extend(["--model", model])
if provider:
args.extend(["--provider", provider])
r = subprocess.run(args, capture_output=True, text=True, timeout=timeout)
if r.returncode != 0:
print(f" [hermes] ERROR: exit {r.returncode}")
print(f" [hermes] stderr: {r.stderr.strip()[:200]}")
return None
return r.stdout.strip()
def scan_feed():
"""Run blogwatcher-cli scan for fl-ru-31."""
print(f"[scan] Scanning '{BLOG_NAME}'...")
r = subprocess.run(
["blogwatcher-cli", "scan", BLOG_NAME],
capture_output=True, text=True, timeout=120
)
out = r.stdout.strip()
if out:
for line in out.splitlines():
print(f" {line}")
print("[scan] Done.")
def get_unread_articles():
"""Fetch unread articles for fl-ru-31 from SQLite."""
conn = sqlite3.connect(DB_PATH)
rows = conn.execute(
"SELECT id, title, url, published_date, categories "
"FROM articles WHERE blog_id=? AND is_read=0 "
"ORDER BY published_date DESC",
(BLOG_ID,)
).fetchall()
conn.close()
print(f"[db] Found {len(rows)} unread article(s).")
return rows
def fetch_article_text(url):
"""Fetch article via Hermes; returns text or None on failure."""
prompt = (
"Извлеки ТОЛЬКО описание задачи/проекта — основной текст заказа.n"
"Всё остальное со страницы — отбрось.nn"
"ДОПУСТИМО: текст ТЗ, название проекта, бюджет, сроки.n"
"ЗАПРЕЩЕНО: 'Вот полный текст', 'Заказчик', 'Верифицированный',n"
"'Статистика откликов', 'Опубликовано', 'Категория',n"
"любые meta/sidebar/header блоки.nn"
"На странице найди основной блок описания и верни ТОЛЬКО его текст.n"
"Никаких комментариев, вступлений, заключений.nn"
"curl — предпочтительный инструмент для извлечения текста.nn"
"URL: " + url
)
text = hermes_call(prompt, timeout=300)
return text if text else None
def score_article(text):
"""Score article via LLM; returns int 1-10 or None on failure."""
prompt = (
"Оцени текст задачи по критерию: 'Заказчик хочет создать или улучшить автономного ИИ-агента?'n"
"Шкала от 1 до 10:n"
" 1-3 — задача не об ИИ-агентах, или агент mentioned вскользьn"
" 4-6 — агент упоминается, но не как основная цельn"
" 7-9 — основная цель — создание/улучшение автономного агентаn"
" 10 — явно про Orchestration агентов, оркестр, мультиагентные системыnn"
"Верни ТОЛЬКО число от 1 до 10. Никаких слэшей, точек, единиц измерения, комментариев.n"
"Пример правильного ответа: 7n"
"Пример неправильного: '7/10', '7 из 10', '7 stars'nn"
"Текст задачи:n" + text
)
raw = hermes_call(prompt, model=SCORE_MODEL, provider=SCORE_PROVIDER, timeout=60)
if not raw:
return None
# Validate: extract first integer 1-10
match = re.search(r'b([1-9]|10)b', raw)
if match:
score = int(match.group(1))
print(f" [score] validated: {score}")
return score
else:
print(f" [score] WARNING: could not parse '{raw}', skipping score")
return None
def send_to_telegram(title, url, pub_date, categories, text, score=None):
"""Send to Telegram via Hermes; returns True on success."""
header_lines = [f"[{title}]({url})"]
if pub_date:
header_lines.append(f"📅 {pub_date}")
if categories:
header_lines.append(f"🏷 {categories}")
if score is not None:
header_lines.append(f"🤖 AI-агент: {score}/10")
header = "n".join(header_lines)
instruction = (
f"Отправь в telegram это сообщение **точно как показано ниже**.n"
f"НЕ сокращай, НЕ перефразируй, НЕ редактируй, НЕ добавляй от себя.nn"
f"{header}nn"
f"{text}"
)
result = hermes_call(
instruction,
model=MODEL_SEND,
provider=PROVIDER_SEND,
timeout=300
)
if result is None:
print(f" [send] FAILED to send: '{title}'")
return False
print(f" [send] Sent: '{title}'")
return True
def mark_read(art_id):
"""Mark article as read in SQLite."""
conn = sqlite3.connect(DB_PATH)
conn.execute("UPDATE articles SET is_read=1 WHERE id=?", (art_id,))
conn.commit()
conn.close()
def main():
scan_feed()
articles = get_unread_articles()
if not articles:
print("[done] No unread articles. Exiting.")
return
for i, (art_id, title, url, pub_date, categories) in enumerate(articles, 1):
n = len(articles)
print(f"n--- [{i}/{n}] {title} ---")
print(f" URL: {url}")
ok = True
# Step 1: fetch
print(f" [fetch] Extracting text...")
text = fetch_article_text(url)
if not text:
print(f" [fetch] ERROR: empty/failed, skipping.")
continue
print(f" [fetch] Got {len(text)} chars.")
# Step 2: score
print(f" [score] Scoring...")
score = score_article(text)
# Step 3: skip if score < 5
if score is not None and score < 5:
print(f" [filter] score={score} < 5, skipping.")
mark_read(art_id)
continue
# Step 4: send — mark read ONLY on success
print(f" [send] Sending...")
if not send_to_telegram(title, url, pub_date, categories, text, score):
print(f" [send] ERROR: skipping mark-read for this article.")
continue
# Step 4: mark read (only after confirmed send)
print(f" [read] Marking as read...")
mark_read(art_id)
print(f" [read] Done.")
print(f"n[done] Processed {len(articles)} article(s).")
if __name__ == "__main__":
main()
Наконец, попросил агента запускать этот скрипт каждые 30 минут – и вся система заработала как часы.
Меня не покидает чувство, что это решение можно было получить более изящным путём – но я его не нашёл.
В итоге: Hermes легко создаёт и запускает скрипты, но обработка конвейера задач / pipeline (как это делает n8n) “из коробки” отсутствует. Приходится костылить, но это легко.
Мне кажется, что Hermes буквально создан для этого кейса: голосовое управление списком покупок через телеграм-бота для нескольких человек.
Бот реагирует на голосовые и текстовые команды: покажи список, купи хлеб (добавляет), купи клей в хозяйственном (добавляет в раздел). Перемести, переименуй, удали, купил “a,b,c”. Адекватно реагирует на повторы (не добавляет, предупреждает).
Идеально работает на бюджетной LLM: gemini-3.1-flash-lite.
10 минут на настройку. 15 – на воспитание агента (на создание навыка). Бесценный результат.
Настройка:
1 – hermes profile add elf — создать отдельный профиль для субагента, который будет отвечать только за список покупок
2 – elf setup – запустить настройку:
подключить gemini-3.1-flash-lite (от OpenRouter либо напрямую от гугла)
настроить ещё один тг-бот (установить бот-токен и список пользователей через запятую),
3 – elf gateway install, затем elf gateway start – чтобы оживить бота.
4 – перевести голосовые сообщения с внутреннего движка faster-whisper на внешний бесплатны whisper от Groq: сначала получить бесплатный API-ключ от Groq [27], затем попросить агента: “смени настройки для stt на groq”.
Воспитание:
В диалоге с агентом – объяснять ему как он должен себя вести:
хранить список в локальном .md файле
добавлять товар в список, когда я об этом прошу
редактировать список, когда прошу
после каждого редактирования – выводить новый список в телеграм в формате “моно”
и т. д. В конце – попросить его сохранить этот навык.
Если во время работы будет тупить – требовать его делать правильно, требовать запомнить детали.
---
name: personal-list-manager
description: Управление личными списками в Markdown с категориями и автоудалением
trigger: "мне нужно купить (.*) (?:в|в категории) (.*) | я купил (.*)"
---
# Управление личными списками
Этот навык управляет списками в `/home/alf/lists/`, поддерживая категории.
См. `references/list_conventions.md` для форматирования.
1. "мне нужно купить [товар] в [категория]": добавить товар в категорию, затем показать обновлённый список.
- "я купил [товар1] и [товар2]": найти и удалить строку с каждым из товаров, затем показать обновлённый список.
- Если купленный товар в категории, удаляется только товар, но не заголовок категории.
- Если после удаления категории она стала пустой, заголовок (## Category) должен быть удален для поддержания чистоты.
3. "отсортируй список": сортировка элементов внутри каждой категории (исключая заголовок).
4. "в [категория] (нужно) купить [товар]" (например, "В Мунмилке купить гречку"): добавить товар в конкретную категорию (удобно, когда категория уже существует).
### Sorting logic
- If user requests sorting, sort items alphabetically WITHIN each category header block only. Do not reorder the categories themselves.
- Use `- ` for list items (do not use `- [ ]`).
- Items purchased/completed should be removed entirely from the file.
- If the store name is provided (e.g., "в [магазин] (нужно) купить [товар]"), use that store as the Markdown header.
- If multiple items are added to a category, ensure they are sorted alphabetically.
- **Important:** If a category becomes empty after deleting an item, you MUST remove the category header line entirely (e.g., remove `## StoreName`).
- Always display the list in a clean Markdown code block after any modification.
- Store the primary shopping list at `/home/alf/lists/shopping_list.md`. Persistent memory can be used to confirm this location.
### Workflow: Shopping List Management
- Automatically categorize items with location headers (e.g., `## StoreName`).
- When a user requests their list, display it in a Markdown code block.
- **Persistent storage:** The master file is defined at `/home/alf/lists/shopping_list.md`. Always check this path first.
### Pitfalls
- Do not add `- [ ]` checkboxes unless requested. Use `- ` bullet points.
- Purchase completion = complete removal of the item line.
- **Clarification:** Do not interpret user input creatively or "fix" product names (e.g., "носки без сок") unless explicitly instructed to perform a semantic correction; treat stated brand/product names exactly as provided by the user.
- Always provide currency rates of the Bank of Russia when requested, specifying the exact date and currency denomination (e.g., 10 000 VND), as the user values accuracy and official source verification.
Мой навык заточен под gemini-3.1-flash-lite, с другими моделями он может вести себя иначе и требовать дополнительной дрессировки и обучения [28] агента.
С точки зрения промпта, навык получился неоптимальным: при желании поиграть в перфекционизм, его можно сократить в 2-3 раза. Но он точно оптимален с точки зрения трудозатрат и полученного результата.
Несколько идей, которым не нашлось места в статье.
Агент может:
Скачать видео с youtube с помощью yt-dlp и отправить файл в телегу. А если файл больше 50мб – то дать временную https-ссылку на скачивание.
Мониторить избранные youtube-каналы, создавать summary новых видео (темы, теги, ключевые идеи), и раз в неделю присылать pdf-отчёт с обзором.
Настроить Git для хранения локальной копии Obsidian-репозитория на VPS, и работать в качестве второго мозга [29] – индексировать, искать, генерировать идеи и связи (это отдельная большая тема, скажу лишь основной принцип: не позволять агенту писать текст заметок за себя, позволять ему создавать лишь надстройку над заметками, написанными человеком)
автоматическая генерация summary из интересных телеграм-чатов, на чтение которых не хватает времени
ролевые игры: в отдельном чате отыгрывать заранее определённую роль (кстати, в hermes уже встроено несколько персон по-умолчанию, и можно попросить в чате показать список (“какие персоны у тебя есть?”) и переключиться на них.
отдельный бот-секретарь, который получает поток мыслей в виде голосовых сообщений, причёсывает их, сохраняет в виде заметок и обеспечивает поиск.
Главным недостатком Hermes для меня стал его модуль памяти: он пытается запомнить всякую фигню, к месту и не к месту. Дошло до того, что я запретил ему запоминать что-либо без согласования со мной. Кстати помогло… но бюджетные LLM всё равно могут проигнорировать это правило:).
Hermes – молодой проект, и в нём встречаются баги. Так, например, у меня не всегда получалось переключать LLM-модель “на лету” из чата, приходилось возвращаться в консоль и набирать hermes setupБаги были, баги будут.
Hermes – не особо подходит для работы в production для коммерческих сервисов. Это скорее не бизнес-инструмент, а личная игрушка с огромным потенциалом. При этом автоматизировать многие личные процессы он уже может “из коробки”.
Hermes не поддерживает pipeline (конвейер операций) “из коробки” (см. главу 3.3). Приходится костылить.
Hermes жрёт токены – на оплату LLM нужен бюджет. Хотя бы $10-20 на подписку на китайцев (подробности были в главе 2.2).
Hermes не очень хорош на бюджетных LLM: если запустить условную LLM gemma4 на своём ПК – он будет тупить.
Однако, я считаю, что автономный агент (на VPS 24/7) – это тихая революция. Новая реальность: просто у “человеков” ещё нет наработанных нейронных связей и привычек думать и действовать в паре с личным послушным помощником. Но это ненадолго.
В бизнес-консалтинге существует понятие “реинжериринга” бизнес-процессов.
Ещё в 1990 году Майкл Хаммер опубликовал свою знаменитую статью “Don’t Automate, Obliterate [30]” (не автоматизируйте, уничтожайте), которая стала манифестом “реинжениринга”.
Ключевая идея, высказанная в конце прошлого века: компаниям не стоит “автоматизировать” свои бизнес-процессы. Чаще всего их стоит выбросить как устаревшие, провести “реинжиниринг”, и создать новые – специально заточенные по автоматизацию.
Примерно то же самый принцип применим и для личных агентов: автоматизировать с их помощью существующие привычки — это может быть низкоэффективно, неинтересно и иногда даже вредно. Скорее всего нам предстоит изобрести новые. И кейсы из этой статьи — лишь видимая верхушка айсберга.
В своё время компьютер был новинкой для многих людей. Потом интернет и Гугл. Потом соцсети. Мы встроили их в свою жизнь. Сейчас встраиваем чатоботов (chatgpt, gemini, claude) – они открывают новые возможности и требуют новых привычек.
Автономные личные агенты (именно личные, независимые от инфрастуктуры корпораций) – ещё одна новая тема. И нам лишь предстоит узнать, какие новые привычки они с собой принесут и как послужат человечеству в целом, и людям в частности. Мы живём в интересное время:)
Автор: neodavinchi
Источник [31]
Сайт-источник BrainTools: https://www.braintools.ru
Путь до страницы источника: https://www.braintools.ru/article/29956
URLs in this post:
[1] GitHub: https://github.com/nousresearch/hermes-agent
[2] опыт: http://www.braintools.ru/article/6952
[3] логикой: http://www.braintools.ru/article/7640
[4] критичные уязвимости в безопасности OpenClaw: https://www.sangfor.com/blog/cybersecurity/openclaw-ai-agent-security-risks-2026
[5] зрения: http://www.braintools.ru/article/6238
[6] интересом: http://www.braintools.ru/article/4220
[7] памяти: http://www.braintools.ru/article/4140
[8] https://client.petrosky.io/order/vps/small: https://client.petrosky.io/order/vps/small
[9] https://z.ai/subscribe: https://z.ai/subscribe)%EF%BF%BC
[10] https://platform.minimax.io/subscribe/token-plan: https://platform.minimax.io/subscribe/token-plan)%EF%BF%BC
[11] https://www.kimi.com/membership/pricing: https://www.kimi.com/membership/pricing)%EF%BF%BC
[12] OpenRouter: https://OpenRouter.ai/models?q=free
[13] Бесплатная подписка от Nous Research: https://portal.nousresearch.com/manage-subscription
[14] Бесплатные лимиты от Google Gemini: https://aistudio.google.com/app/api-keys
[15] интеллекта: http://www.braintools.ru/article/7605
[16] ошибки: http://www.braintools.ru/article/4192
[17] https://github.com/NousResearch/hermes-agent#quick-install: https://github.com/NousResearch/hermes-agent#quick-install
[18] Скилы от сообщества: https://hermes-agent.nousresearch.com/docs/skills/
[19] https://example.com/SKILL.md: https://example.com/SKILL.md
[20] SKILL.md: http://SKILL.md
[21] требованиям из документации: https://hermes-agent.nousresearch.com/docs/user-guide/features/skills#skiLLMd-format
[22] болью: http://www.braintools.ru/article/9901
[23] гайд по первоначальной настройке VPS: https://habr.com/ru/articles/982512/
[24] https://disk.yandex.ru/d/bHPoa72i4pPkzA: https://disk.yandex.ru/d/bHPoa72i4pPkzA
[25] https://www.fl.ru/rss/?category=31: https://www.fl.ru/rss/?category=31
[26] промпт: https://ashexplained.com/chatgpt-upwork-proposal-writer-prompt/
[27] бесплатный API-ключ от Groq: https://console.groq.com/home
[28] обучения: http://www.braintools.ru/article/5125
[29] мозга: http://www.braintools.ru/parts-of-the-brain
[30] Don’t Automate, Obliterate: https://en.wikipedia.org/wiki/Business_process_re-engineering#Reengineering_Work:_Don
[31] Источник: https://habr.com/ru/articles/1032656/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1032656
Нажмите здесь для печати.