惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 三生石上(FineUI控件)
雷峰网
雷峰网
爱范儿
爱范儿
P
Proofpoint News Feed
Security Archives - TechRepublic
Security Archives - TechRepublic
Latest news
Latest news
The Hacker News
The Hacker News
Cyberwarzone
Cyberwarzone
博客园 - 【当耐特】
Project Zero
Project Zero
小众软件
小众软件
T
Tailwind CSS Blog
量子位
博客园 - 聂微东
I
Intezer
美团技术团队
S
SegmentFault 最新的问题
T
Tor Project blog
Spread Privacy
Spread Privacy
V
Vulnerabilities – Threatpost
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Jina AI
Jina AI
罗磊的独立博客
B
Blog RSS Feed
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
T
Troy Hunt's Blog
有赞技术团队
有赞技术团队
Google DeepMind News
Google DeepMind News
宝玉的分享
宝玉的分享
C
Cisco Blogs
L
LINUX DO - 热门话题
Last Week in AI
Last Week in AI
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
AI
AI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Microsoft Azure Blog
Microsoft Azure Blog
L
LINUX DO - 最新话题
Know Your Adversary
Know Your Adversary
GbyAI
GbyAI
Engineering at Meta
Engineering at Meta
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Recent Commits to openclaw:main
Recent Commits to openclaw:main
L
Lohrmann on Cybersecurity
The Register - Security
The Register - Security
L
LangChain Blog
博客园 - 叶小钗
T
Tenable Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Как я «переезжал» своего ИИ-агента с OpenClaw на Hermes и собрал все грабли (чтобы Вы не собирали)
Андрей Анатольевич Малицкий · 2026-06-07 · via Все публикации подряд на Хабре

Средний

9 мин

4.6K

Формат: туториал + личный опыт. Сложность: средняя. Время чтения: ~15 минут.

Кот-космонавт, нарисованный ботом

Кота-космонавта в стиле акварели нарисовал сам бот через gpt-image-2 — уже после переезда


У меня есть личный ИИ-агент — зовут его Паспарту. Не «ассистент в облаке, который вежливо извиняется», а свой: живёт на моём сервере, отвечает в Telegram, помнит проекты, ходит в интернет, шлёт письма, ведёт календарь. Полтора года Паспарту работал на OpenClaw. А недавно я решил переехать на Hermes Agent от Nous Research — он опенсорсный (MIT), self-hosted, умеет приносить свои скиллы со временем и, главное, не привязан к одному вендору модели.

Звучало как «ну, вечерок». На деле — почти полноценный день, пятнадцать граблей и один кот-космонавт. Дальше — честный рассказ + рабочий гайд, по которому вы повторите переезд за пару часов и без половины моих синяков.

Зачем вообще переезжать

Если коротко — три причины:

  1. Bring-your-own-model. Hermes работает с любым OpenAI-совместимым эндпоинтом: OpenAI, Anthropic, OpenRouter или вообще локальная модель. Я остаюсь на дешёвом OpenAI-конфиге, но дверь к локалке открыта.

  2. Растёт со временем. Персистентная память + авто-генерация скиллов. Чем дольше работает — тем больше умеет.

  3. Веб-дашборд + 20 платформ. Telegram, Discord, Slack, WhatsApp, Signal, e-mail, CLI. Начал в одном — продолжил в другом.

Архитектурно Hermes и OpenClaw до неприличия похожи: и там, и там скиллы — это папки с SKILL.md, память — Markdown, конфиг — один файл. Поэтому я наивно решил, что «всё перельётся само».

Схема переезда OpenClaw → Hermes

Было → стало: переезд OpenClaw → Hermes на отдельный сервер

Главное правило переезда

Старый сервер не выключаем, пока новый не примем. OpenClaw оставляем как страховку: если Hermes закапризничает — одной командой возвращаемся. Никаких «снёс старое — поднимаю новое в проде».

Теперь поехали по шагам. Я специально оставил рядом с каждым шагом грабли, на которые наступил, — они выделены 🔴.


Шаг 1. Новый сервер и базовая подготовка

Берём чистый дроплет: Ubuntu 24.04, 4 vCPU / 8 ГБ. Отдельный сервер — это сразу снимает риск, что два «жирных» агента подерутся за память.

apt update && apt -y full-upgrade
apt -y install curl git rsync jq ufw ca-certificates ffmpeg build-essential
# firewall: OpenSSH РАЗРЕШАЕМ ДО включения, иначе закроем себе дверь
ufw allow OpenSSH && ufw allow 80 && ufw allow 443 && ufw --force enable
# swap на всякий случай
fallocate -l 4G /swapfile && chmod 600 /swapfile && mkswap /swapfile && swapon /swapfile
echo '/swapfile none swap sw 0 0' >> /etc/fstab
reboot   # после full-upgrade приехало новое ядро

🔴 Грабля №1. ufw --force enable без предварительного ufw allow OpenSSH — это классика «запер себя снаружи». Сначала SSH, потом enable.

🔴 Грабля №2. apt full-upgrade обновляет ядро, но не перезагружается сам. Если не ребутнуть — половина диагностик будет показывать «pending kernel». Ребут.


Шаг 2. Ставим Hermes (и привет, Ubuntu 24.04)

apt-get install -y python3-pip pipx python3-venv
pipx install hermes-agent
export PATH=$PATH:/root/.local/bin
hermes postinstall          # доставит uv, node, ripgrep, ffmpeg
hermes --version

🔴 Грабля №3 — PEP 668. На Ubuntu 24.04 системный pip install ругается «externally-managed-environment». Для самого Hermes — pipx. Для отдельных библиотек дальше — pip install --break-system-packages. Не пытайтесь воевать с системным pip, просто примите правила.


Шаг 3. Модель: и вот тут начинается боль

У меня в .env лежит OpenAI-ключ. Я выставил модель и… бот в Telegram ответил гениальной фразой:

⚠️ Provider authentication failed.

В логах — HTTP 401: Missing Authentication header, провайдер — openrouter. Стоп. Какой openrouter, у меня OpenAI-ключ?

А вот какой. Hermes по умолчанию роутит модель через OpenRouter. И строку openai/gpt-5.4-mini он понимает не как «OpenAI, модель gpt-5.4-mini», а как «openrouter, модель openai/gpt-5.4-mini». Ключа от OpenRouter у меня нет → 401.

Лечится двумя командами:

hermes config set model.default gpt-5.4-mini                 # без префикса openai/
hermes config set model.base_url https://api.openai.com/v1   # идём напрямую в OpenAI
# проверка без всякого Telegram:
hermes -z "Reply with exactly: PONG"

Когда hermes -z вернул PONG — выдохнул.

🔴 Грабля №4. base_url решает. Когда он задан — Hermes стучится прямо на этот эндпоинт и авторизуется через OPENAI_API_KEY. Без него — добро пожаловать в OpenRouter и 401.


Шаг 4. Переносим данные OpenClaw

Тут всё прозаично — rsync каталога ~/.openclaw со старого сервера на новый. Оба дроплета в одном дата-центре, так что летит быстро.

# на новом сервере тянем со старого (ключ тот же digocean)
rsync -a -e "ssh -o StrictHostKeyChecking=accept-new" \
  root@OLD_IP:/home/openclaw/.openclaw/ /root/openclaw-src/
# ⚠️ ключи живут ОТДЕЛЬНО:
rsync -a root@OLD_IP:/opt/openclaw.env /root/openclaw-src/.env

🔴 Грабля №5. Боевые ключи (OpenAI, Telegram) лежали не в ~/.openclaw, а в /opt/openclaw.env (его systemd подсовывает как EnvironmentFile). Если забыть его скопировать — миграция секретов не найдёт ни одного ключа, и вы будете долго удивляться.

И перед копированием — останавливаем бота на старом сервере:

systemctl stop openclaw

🔴 Грабля №6 — конфликт токена. У Telegram на один токен бота может работать только один «слушатель». Если старый OpenClaw и новый Hermes одновременно опрашивают одного бота — Telegram отдаёт 409 Conflict, и сообщения начинают рваться пополам. Поэтому: остановили старого → токен свободен → его займёт новый. Сервис при этом оставляем enabled — вернётся одной командой, если что.


Шаг 5. Нативная миграция

У Hermes есть встроенная команда hermes claw migrate — переносит память, persona, скиллы, провайдеров, MCP, TTS, allowlist и токены платформ.

hermes claw migrate --preset full --migrate-secrets --skill-conflict rename --overwrite --yes \
  --source /root/openclaw-src \
  --workspace-target /root/hermes-workspace

🔴 Грабля №7. Без --workspace-target файл AGENTS.md (инструкции воркспейса) молча не переедет. Молча — это самое противное. Указывайте путь всегда.

🔴 Грабля №8. Ключ Perplexity (поиск по интернету) не входит в allowlist миграции секретов — его придётся вписать руками, вытащив из старого конфига:

PK=$(jq -r '.tools.web.search.apiKey // empty' /root/openclaw-src/openclaw.json)
echo "PERPLEXITY_API_KEY=$PK" >> /root/.hermes/.env

После миграции я проверил ~/.hermes/.env (OpenAI, Telegram на месте), SOUL.md (характер бота), память и скиллы. Поиск Perplexity протестировал в одну строку — вернул свежие новости со ссылками. Живой.


Шаг 6. История переписки (это отдельный квест)

claw migrate переносит всё, кроме истории чатов. А мне хотелось сохранить полтора года диалогов с реальными датами.

OpenClaw хранит сессии как .jsonl-логи (по событию на строку). Hermes — в SQLite (~/.hermes/state.db) с полнотекстовым поиском. Форматы разные → нужна конвертация. Написал маленький скрипт, который:

  • парсит каждый .jsonl (первая строка — session, дальше message/toolResult);

  • пропускает служебные события и *.checkpoint.*;

  • делает прямой INSERT в state.db, сохраняя реальные epoch-таймстемпы (а не now());

  • полнотекстовые триггеры синхронизируются сами.

Прогнал сначала на копии базы, проверил PRAGMA integrity_check, и только потом — на боевой, при остановленном gateway. Итог: 16 сессий, 9 315 сообщений, реальные даты, поиск работает.


Шаг 7. Запускаем бота (и снова интерактив против нас)

hermes gateway install --system --run-as-user root
systemctl enable --now hermes-gateway
hermes gateway status

🔴 Грабля №9. hermes gateway install под root отказывается ставить системный сервис без флага --run-as-user root. А ещё установщик задаёт несколько Y/N-вопросов подряд — а я гонял команды не из TTY. Решение: либо yes | hermes gateway install ..., либо поставить юнит и поднять его напрямую через systemctl enable --now hermes-gateway.

И вот он — первый ответ нового бота в Telegram. Персонаж жив, память на месте. Можно выдыхать… но мы же ещё не подключили половину фишек.


Шаг 8. Голос

Голосовые я слушаю локальным faster-whisper. Он доустанавливается сам при первом голосовом. Один нюанс:

hermes config set stt.local.language ru   # фиксируем язык — не тратим время на авто-детект

🔴 Грабля №10. Первое голосовое обрабатывается ощутимо дольше — модель качается и грузится. Это разово. А фиксация языка убирает лишние полторы секунды на каждом сообщении.


Шаг 9. Google: почта, календарь, диск

Самая интерактивная часть — OAuth. Здесь Hermes молодец: есть встроенный скилл google-workspace. Но Google в 2026-м подкинул сюрпризов.

pip install --break-system-packages google-api-python-client google-auth-oauthlib google-auth-httplib2
GW=~/.hermes/skills/productivity/google-workspace
python3 $GW/scripts/setup.py --client-secret /root/.hermes/google_client_secret.json
python3 $GW/scripts/setup.py --auth-url          # ссылку открываем в браузере, даём согласие
python3 $GW/scripts/setup.py --auth-code '4/0A...'
python3 $GW/scripts/setup.py --check             # AUTHENTICATED

🔴 Грабля №11 — Google образца 2026:

  • Cloud Console заблокирован, пока на аккаунте бота не включена двухэтапная аутентификация (2SV). Включается только вручную, с телефоном.

  • Client secret больше нельзя скачать или посмотреть повторно. На Desktop-клиенте жмёшь «+ Add secret», копируешь сразу (показывается один раз) и собираешь client_secret.json руками.

  • Drive API включается отдельно. Gmail и Calendar у меня уже были включены, а Drive — нет, и он отвечал 403 accessNotConfigured, пока я не включил его в библиотеке API.

  • Аккаунт бота должен быть в Test users, иначе согласие не пройдёт.

  • После согласия браузер уйдёт на http://localhost:1 и не загрузится — это нормально, забираем code из адресной строки.

Проверка, что всё ожило:

python3 $GW/scripts/google_api.py gmail search "in:inbox" --max 2
python3 $GW/scripts/google_api.py calendar list
python3 $GW/scripts/google_api.py drive search "" --max 5

Почта вернула реальные письма, календарь и диск — ответили. Победа.


Шаг 10. Картинки: генерация и анализ

Хотел, чтобы бот и рисовал, и понимал фото. С пониманием фото оказалось проще всего — основная модель gpt-5.4-mini мультимодальная, фото она видит из коробки. А вот генерация…

hermes plugins enable image_gen/openai
hermes tools enable image_gen
hermes config set image_gen.provider openai      # ← без этого «backend не настроен»
hermes config set image_gen.model gpt-image-2

🔴 Грабля №12. Включить плагин мало — Hermes по умолчанию ждёт ключ FAL. Нужно явно назначить активного провайдера: image_gen.provider openai.

Попросил бота: «нарисуй кота-космонавта в стиле акварели». Бот гордо ответил «Вот оно:» — и не прислал ничего. Сгенерировал, но не доставил.

🔴 Грабля №13 — самая коварная. gpt-image-2 сохраняет картинку в /root/.hermes/cache/images/. А Telegram-адаптер по умолчанию не имеет этот каталог в белом списке доставки файлов (там есть cache/videos, cache/documents, screenshots, но не images). В логах честно: Skipping unsafe local file path outside allowed roots. Лечится одной строкой в .env:

echo 'HERMES_MEDIA_ALLOW_DIRS=/root/.hermes/cache/images:/root/hermes-workspace' >> /root/.hermes/.env

После этого кот-космонавт долетел. И, не скрою, вышел шикарный (он же — КДПВ в начале статьи).

Бонусом я добавил в AGENTS.md правило авто-улучшения промта: когда просишь «нарисуй кота» — бот молча превращает это в детальный английский промпт (стиль, свет, композиция, аспект) и уже им генерирует. Качество подскочило заметно.


Шаг 11. Файлы: PDF, DOCX, XLSX и все остальные

У Hermes есть встроенные скиллы file, nano-pdf, ocr-and-documents, но без библиотек и конвертеров с документами всерьёз не поработаешь. Поставил полный тулчейн:

DEBIAN_FRONTEND=noninteractive apt-get install -y \
  poppler-utils tesseract-ocr tesseract-ocr-rus pandoc antiword catdoc unrtf \
  libreoffice-writer libreoffice-calc libreoffice-impress
pip install --break-system-packages pypdf pdfplumber python-docx openpyxl pandas \
  python-pptx markdown beautifulsoup4 tabulate lxml xlrd Pillow

После этого агент уверенно работает с:

  • PDF — чтение (pdftotext/pdfplumber/pypdf), сканы → текст через OCR (tesseract);

  • DOCX/DOCpython-docx, antiword, конвертация через LibreOffice;

  • XLSX/XLS/CSV/таблицыpandas + openpyxl;

  • PPTXpython-pptx; HTMLbs4; любая конвертация — pandoc или soffice --headless.

Перезапуск не нужен — агент берёт библиотеки сразу.


Шаг 12. Сайт-витрина (бонус)

У моего бота есть публичная страничка-визитка, которую он сам обновляет. Механизм гениально простой: что агент записал в /var/www/<домен>, то и появилось на сайте — отдаёт Caddy, сертификат Let’s Encrypt он выпускает сам.

apt install -y caddy
# /etc/caddy/Caddyfile:
#   { email you@example.com }
#   example.com { root * /var/www/example.com; file_server; encode gzip }
systemctl reload caddy

Дальше меняем A-запись домена на новый IP — и всё.

🔴 Грабля №14 — DNS и сертификат. Caddy выпустит сертификат только когда DNS уже указывает на новый сервер. Старый TTL держит кэш у центра сертификации → ACME-проверка ещё стучится на старый IP и падает (tls internal error). Лечение: понизить TTL (300), дождаться распространения, при необходимости systemctl restart caddy, чтобы форсировать свежую попытку. Сайт при этом всё время живой — его пока отдаёт старый сервер, даунтайма нет.


Бонус-грабля, которую я заслужил

🔴 Грабля №15. Я попросил бота сгенерировать картинку — и пока он рисовал, перезапустил gateway ради мелкой правки конфига. Генерация оборвалась. Мораль простая и обидная: не перезапускайте агента, пока у него выполняется задача. Сначала убедись, что он ничего не делает.


Чек-лист приёмки

Прежде чем гасить старый сервер — прогоните:

  • [ ] hermes -z "PONG" → PONG (значит, провайдер OpenAI, а не OpenRouter).

  • [ ] Бот отвечает в Telegram, allowlist на месте.

  • [ ] Память и персона живые; история переписки читается, поиск работает.

  • [ ] Голосовое распознаётся; картинка генерится и приходит как фото.

  • [ ] Google: почта/календарь/диск отвечают. Perplexity ищет.

  • [ ] Файлы: PDF/DOCX/XLSX/CSV/PPTX читаются и создаются; OCR и конвертация работают.

  • [ ] Сутки наблюдения за памятью без OOM.

Когда всё зелёное — старый сервер можно остановить (но не удалять ещё недельку).


Итог

Переезд оказался не «вечерком», а полноценным днём — но в основном из-за пятнадцати мелких граблей, каждая из которых лечится одной-двумя строками. Сам по себе Hermes встал ровно: архитектура близка к OpenClaw, нативная миграция тянет 80% данных, остальное — аккуратные ручные шаги.

Что я получил в итоге: своего ИИ-агента на своём сервере, который отвечает в Telegram, помнит всю историю, ходит в Google и Perplexity, слушает голос, рисует картинки, читает PDF/Excel/Word и сам обновляет свой сайт. И всё это — на дешёвой модели, без привязки к вендору, с открытой дверью к локалке.

Если будете повторять — держите рядом список граблей. Они сэкономят вам половину дня и один нервный перезапуск.

P.S. А кота-космонавта бот всё-таки дорисовал. И знаете — оно того стоило.


Если статья зашла — в комментариях расскажите, на каком агенте сидите вы и какие грабли собрали при self-host. Соберём народную коллекцию.