---
title: Hermes Agent вместо Claude Code
slug: hermes-agent-vs-claude-code
canonical: https://shady2k.ru/posts/hermes-agent-vs-claude-code/
date: 2026-06-21
kind: article
author: human
lang: ru
summary: "Персональный ассистент на Hermes Agent без привязки к вендору: память
  на Hindsight, самообучающиеся скиллы, cron и Telegram, плюс грабли
  Docker-бекенда, на которые я наступил."
tags:
  - ai-agents
projects:
  - https://shady2k.ru/projects/hermes-lifemodel/
---

> Личный боевой дневник: от установки до автономного ассистента с памятью на Hindsight, самообучающимися скиллами, cron-напоминаниями и Telegram-интеграцией. Со всеми граблями, на которые я наступил.

---

## TL;DR

[Hermes Agent](https://github.com/NousResearch/hermes-agent) — ИИ-агент с открытым исходным кодом (MIT) от Nous Research, вышедший в начале 2026 года. Живёт в терминале, веб-интерфейсе и мессенджерах (Telegram, Discord, Slack и ещё десяток), работает с любым LLM-провайдером.

**Главная ценность Hermes для меня — это память, самообучающиеся скиллы и независимость от вендора.** Агент не начинает каждый разговор с чистого листа: он помнит, кто я, какие у меня предпочтения и окружение, и накапливает рабочие процедуры в виде повторно используемых «скиллов» — со временем он становится полезнее именно под мои задачи. Это не «ChatGPT в терминале», а ассистент, который растёт вместе с тобой. А поскольку Hermes не привязан к одному поставщику, весь этот накопленный контекст не становится заложником чужих цен и решений: модель можно сменить одной командой, ничего не потеряв.

Что я в итоге построил: Hermes на Mac, память на Hindsight (граф знаний поверх PostgreSQL), Docker-бекенд для изоляции инструментов, набор скиллов под мою рутину (дайджест Telegram-канала, напоминания о платежах, передача показаний, интеграция с TickTick). Управляю из терминала и с телефона через Telegram — один и тот же агент. И это только начало: система постепенно обрастает новыми скиллами и сценариями.

**Кому будет полезно:** технарям-энтузиастам, которые хотят собрать персонального автономного ассистента и готовы повозиться с настройками. Русскоязычных вводных руководств по Hermes уже хватает, а вот живых боевых разборов — с конкретными граблями, дырами в безопасности и неочевидными нюансами конфигурации — мне попадалось мало. Эту нишу статья и закрывает: экономит вам время на шишках, которые я уже набил.

## Оглавление

- [Главная ценность: память, скиллы и независимость](#%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F-%D1%86%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D1%8C-%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D1%8C-%D1%81%D0%BA%D0%B8%D0%BB%D0%BB%D1%8B-%D0%B8-%D0%BD%D0%B5%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D1%8C)
- [Почему Hermes, а не Claude Code](#%D0%BF%D0%BE%D1%87%D0%B5%D0%BC%D1%83-hermes-%D0%B0-%D0%BD%D0%B5-claude-code)
- [Архитектура Hermes](#%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0-hermes-%D0%BA%D0%B0%D0%BA-%D1%8D%D1%82%D0%BE-%D1%83%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%BE)
- [Мой стек](#%D0%BC%D0%BE%D0%B9-%D1%81%D1%82%D0%B5%D0%BA)
- [Docker-бекенд: главные грабли](#docker-%D0%B1%D0%B5%D0%BA%D0%B5%D0%BD%D0%B4-%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D1%8B%D0%B5-%D0%B3%D1%80%D0%B0%D0%B1%D0%BB%D0%B8)
- [Безопасность: слои защиты](#%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C-%D1%81%D0%BB%D0%BE%D0%B8-%D0%B7%D0%B0%D1%89%D0%B8%D1%82%D1%8B)
- [Память: от Holographic к Hindsight](#%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D1%8C-%D0%BE%D1%82-holographic-%D0%BA-hindsight)
- [Скиллы: самообучающийся агент](#%D1%81%D0%BA%D0%B8%D0%BB%D0%BB%D1%8B-%D1%81%D0%B0%D0%BC%D0%BE%D0%BE%D0%B1%D1%83%D1%87%D0%B0%D1%8E%D1%89%D0%B8%D0%B9%D1%81%D1%8F-%D0%B0%D0%B3%D0%B5%D0%BD%D1%82)
- [Cron и напоминания](#cron-%D0%B8-%D0%BD%D0%B0%D0%BF%D0%BE%D0%BC%D0%B8%D0%BD%D0%B0%D0%BD%D0%B8%D1%8F)
- [Telegram-интеграция](#telegram-%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D1%8F)
- [Практический пример: TickTick API](#%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9-%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-ticktick-api)
- [Контекст и сжатие](#%D0%BA%D0%BE%D0%BD%D1%82%D0%B5%D0%BA%D1%81%D1%82-%D0%B8-%D1%81%D0%B6%D0%B0%D1%82%D0%B8%D0%B5)
- [Что дальше](#%D1%87%D1%82%D0%BE-%D0%B4%D0%B0%D0%BB%D1%8C%D1%88%D0%B5)
- [Источники и инструменты](#%D0%B8%D1%81%D1%82%D0%BE%D1%87%D0%BD%D0%B8%D0%BA%D0%B8-%D0%B8-%D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D1%8B)

---

## Главная ценность: память, скиллы и независимость

Начну с главного, потому что именно это отличает Hermes от очередной обёртки над LLM.

Какую-то память сейчас прикрутили почти все, так что сам факт «агент что-то помнит» уже никого не удивляет. Интереснее другое: насколько эта память глубокая и работает ли она без ручного «запомни это». В Hermes таких механизма два, и оба заточены на то, чтобы агент со временем становился полезнее именно под тебя, — долговременная память и процедурная память (скиллы).

**Память.** Агент помнит контекст между сессиями: кто я, мои предпочтения, моё окружение, договорённости. Я перепробовал несколько провайдеров памяти и остановился на Hindsight — граф знаний с автоматическим извлечением фактов и семантическим поиском (подробно ниже). Результат: я не объясняю одно и то же по второму разу.

**Скиллы — процедурная память.** Когда мы вместе решаем сложную задачу, агент сохраняет рабочий подход как `SKILL.md` файл: условия срабатывания, шаги, подводные камни, проверка. В следующий раз на похожей задаче скилл подгружается автоматически, и агент не изобретает велосипед заново. Скиллы накапливаются — агент буквально учится под мои задачи.

Третья ценность — независимость от вендора — заслуживает отдельного разговора (он ниже). А gateway и cron — это уже инфраструктура, которая делает память и скиллы практичными. Поэтому именно с памяти и скиллов я и начал.

---

## Почему Hermes, а не Claude Code

Я поставил Hermes Desktop на свой Mac (он у меня всегда включён). Это оказалось на удивление просто: одна установка — и агент готов, без возни с зависимостями. Терминал у меня вынесен в Docker-контейнер через OrbStack, общаюсь через Telegram и CLI.

**Уход от привязки к одному поставщику (vendor lock-in).** Самые заметные проприетарные ИИ-агенты для разработки завязаны каждый на своего вендора: Claude Code — на Anthropic, Codex CLI — на OpenAI, Copilot — на GitHub/Microsoft. У каждого своя модель, свой API, своя экосистема. Поставить рядом другой инструмент никто не мешает, и кое-что даже переносимо: скиллы — это обычно просто markdown-файлы, а самостоятельно поднятую память (например, Hindsight) можно делить между инструментами (я так и делаю между Hermes и Claude Code). Но завязка на вендора всё равно сильная — модель, цены и экосистема у каждого свои, единой кнопки «перенести всё» нет, и на практике смена инструмента означает, что многое приходится обустраивать заново.

Я и сейчас пользуюсь Claude Code (Pro/Max-подписка, OAuth), и он хорош. Но когда Anthropic поднимает цены или меняет модель — выбора у меня нет, я на их рельсах. А искать запасной вариант меня подтолкнула [новость](https://support.claude.com/en/articles/14328960-identity-verification-on-claude), что для пользовательских подписок Anthropic вводит проверку личности — государственное удостоверение и селфи (через сторонний сервис Persona, с 8 июля 2026).

Hermes решает это архитектурно. **Независимость от провайдера:** 20+ провайдеров из коробки, переключение модели — одна команда `hermes model`, и ни память, ни скиллы, ни cron к провайдеру не привязаны. Плюс **открытый исходный код (MIT)** — никакого чёрного ящика, можно копаться в коде, чинить, дорабатывать. Для меня это означало одно: я могу выбрать DeepSeek для повседневных задач, Claude для сложного кода и локальную модель для конфиденциального — и весь накопленный контекст (память, скиллы, cron) переезжает между ними без потерь.

**Будем честны: ничего принципиально уникального Hermes не делает.** Те же память, самообучающиеся скиллы, мультиплатформенный gateway есть и в Claude Code, и в Cowork. Разница в одном, но для меня решающем: там ты привязан к вендору, здесь — нет. И честно в обратную сторону: для чистого кодинга специализированные агенты — тот же Claude Code или opencode — Hermes обойдут. Hermes — универсал, а универсал почти всегда уступает специалисту на его поле. Я выбрал Hermes не потому, что он «лучший агент», а потому, что он мой и не заложник чужих цен и решений. Из открытых альтернатив я смотрел в сторону OpenClaw, но на тот момент остановился на Hermes — он показался надёжнее и зрелее.

---

## Архитектура Hermes: как это устроено

Если описать словами: всё работает на хосте (у меня — macOS). В центре — **цикл агента** (`run_conversation`): он собирает системный промпт, подмешивает память и скиллы, отправляет всё в LLM, получает запросы на вызов инструментов, выполняет их — и так по кругу, пока задача не решена; при приближении к лимиту контекста старое сжимается в сводку.

Цикл опирается на несколько источников знания, и у каждого своя роль:

- **Системный промпт** — базовые правила самого Hermes.
- **`SOUL.md`** — личность агента: тон, манера речи, что для него важно. Это про то, *кто* он и *как* говорит, а не про то, что он знает.
- **`AGENTS.md`** — операционные инструкции: как действовать, чего избегать, рабочие договорённости.
- **Память** — что агент знает о мире и обо мне: `MEMORY.md` (стабильные факты про меня, окружение и соглашения; размер ограничен, лимит настраивается — у меня ~2200 знаков) плюс Hindsight (долговременная, с семантическим поиском).
- **Скиллы** — процедурное знание: *как* решать конкретные задачи.

Всем этим цикл пользуется вместе с набором инструментов (`terminal`, `browser`, `file`, `web`, `memory`, `cronjob`, `delegate_task` и др.). Снаружи к нему подключены два канала: **gateway** (Telegram, Discord, Slack…) и **планировщик cron**. А инструменты вроде `terminal` и `file` исполняются в **терминальном бекенде**. По умолчанию это сам хост, но я переключил его на Docker-контейнер с Linux (через OrbStack) ради изоляции — туда проброшен общий том `/workspace/project`.

**Ключевые компоненты:**

| Компонент | Что делает |
| --- | --- |
| **Agent Loop** | Основной цикл: строит системный промпт → вызывает LLM → раздаёт вызовы инструментов → повторяет. При переполнении контекста сжимает старые сообщения в сводку. |
| **Memory** | Два слоя: MEMORY.md (оперативная, настраиваемый лимит ~2200 знаков, подмешивается в каждое обращение) + Hindsight (долговременная, pgvector, семантический поиск). |
| **Skills** | Процедурная память. Агент сохраняет рабочие подходы как SKILL.md файлы. При следующих задачах скилл загружается — агент не изобретает велосипед. |
| **Gateway** | Многоплатформенный слой. Один агент → Telegram, Discord, Slack, WhatsApp, Email и ещё 10+ платформ. |
| **Cron** | Планировщик задач. Автономные запуски по расписанию с доставкой результата на выбранную платформу. |
| **Profiles** | Изолированные экземпляры со своими конфигурациями, скиллами и cron-задачами (память можно как изолировать, так и сделать общей). Можно разделить роли: админ, разработчик, тестировщик. |
| **Delegation** | Порождение субагентов — параллельные подзадачи в изолированных контекстах. |

### Gateway: один агент, много платформ

Gateway — это многоплатформенный слой, который позволяет одному и тому же агенту работать в Telegram, Discord, Slack, WhatsApp, Signal, Email, Matrix и ещё десятке платформ. Не «бот для Telegram» и отдельно «командная строка для терминала» — это один мозг с одной памятью и одними скиллами.

Схематично: и Telegram, и CLI ведут к одному и тому же циклу агента и его инструментам. Общие для всех каналов — память (MEMORY.md + Hindsight), скиллы и cron-задачи. А контекст текущей сессии у каждого канала свой (об этом — чуть ниже).

**Как это работает на практике:**

- Начал задачу в терминале (`hermes chat`) — поработал над кодом
- Ушёл с компьютера — пишу в Telegram с телефона. Важный нюанс: Telegram — это **отдельная сессия**, а не продолжение терминальной. Живая переписка из терминала туда сама не переносится
- Но память и скиллы у них общие, поэтому агент по-прежнему знает, кто я и каков контекст проекта; а недостающее можно поднять из памяти или через `session_search` («вспомни, что мы делали в терминале»)
- Cron-задачи (дайджест канала, напоминания) доставляются в Telegram автоматически

**Настройка gateway:** `hermes gateway setup` → выбрать платформу → прописать токен/ключи в `.env` → `hermes gateway install` (как служба systemd/launchd для работы 24/7).

**Важно:** один gateway = один токен бота. Нельзя запустить два gateway с одним Telegram-токеном — второй заблокируется. Поэтому если хочется несколько экземпляров Hermes с Telegram, нужны отдельные боты.

### Профили: изолированные личности агента

Профили — это независимые экземпляры Hermes со своими конфигурациями, скиллами и cron-задачами (память — по желанию: отдельная у каждого или общая). Живут в `~/.hermes/profiles/<name>/`.

**Зачем нужны профили:**

| Профиль | Роль | Модель | Терминал | Подключение |
| --- | --- | --- | --- | --- |
| `default` | Основной ассистент | deepseek-v4-pro | Docker | Telegram + CLI |
| `coder` | Разработка | Claude через API | Docker (worktree) | CLI |
| `local-admin` | Привилегированные задачи на хосте | локальная модель | local (macOS) | CLI (вручную, как sudo) |

**Ключевое свойство:** по умолчанию профили изолированы — у каждого свои конфигурация, скиллы и cron-задачи (скилл, созданный в `default`, не виден в `coder`). Но что именно разделять, а что использовать совместно — дело настройки. Память я, наоборот, свёл воедино: один и тот же Hindsight подключён ко всем профилям и даже к Claude Code. Hindsight так умеет — каждый профиль пишет в свой банк, но может получить доступ на чтение к чужому (например, к банку основного Hermes). Сама же изоляция профилей позволяет:

- **Разделять роли.** Разработчик работает с кодом, админ — с системой, основной — общается в Telegram.
- **Разделять уровень риска.** `default` в Docker-контейнере (безопасно для автоматических задач), `local-admin` на хосте (только вручную, для привилегированных операций).
- **Использовать разные модели под разные задачи.** Claude для сложного кода, DeepSeek для повседневных задач, локальная модель для конфиденциальных.

**Создание профиля:** `hermes profile create coder` → `hermes --profile coder` для запуска, или `hermes profile alias coder` для удобного `hermes-coder`.

**Общие скиллы между профилями:** Hermes поддерживает профили-репозитории — общую директорию скиллов, на которую ссылаются другие профили. Без этого каждый профиль дублирует скиллы.

---

## Мой стек

**Mac (работает постоянно):**

- **Hermes Agent** (на macOS):
    - Профиль: `default`
    - Модель: `deepseek-v4-pro` (основная), `deepseek-v4-flash` (лёгкие задачи)
    - Провайдер: `opencode-go` (основной), `z.ai/GLM` (резерв)
    - Reasoning: high
    - Память: Hindsight (pgvector) + MEMORY.md
- **Docker** (через OrbStack) — терминальный бекенд:
    - Linux (Debian), Python
    - `/workspace/project` — общий том (rw)
    - `~/.hermes/skills/` — монтирование (ro)
    - `~/.hermes/cache/` — монтирование (rw)

**Почему Docker-бекенд:**

- Изоляция. Инструменты агента (terminal, file, browser) работают в контейнере, не на хосте.
- Безопасность. Даже если агент сделает `rm -rf /`, пострадает контейнер, а не сам Mac.
- Воспроизводимость. Окружение фиксировано — Debian, известные версии пакетов.

---

## Docker-бекенд: главные грабли

Это самая богатая на открытия тема. Docker-бекенд Hermes работает не так, как ожидаешь.

### Проблема 1: `.env` не виден в контейнере

`~/.hermes/.env` на хосте содержит конфигурацию и переменные окружения. Но в Docker-контейнер монтируются **только** `skills/` (ro) и `cache/` (rw). Сам `.env` и `config.yaml` — нет.

**Решение:** `docker_forward_env` в `config.yaml`:

yaml

```yaml
terminal:
  docker_forward_env:
    - TZ
    - HINDSIGHT_URL
    - WINDMILL_BASE_URL
    # ... несекретные переменные окружения, нужные в контейнере
```

Hermes пробрасывает указанные переменные из `.env` на хосте в контейнер при создании сессии. Сюда я кладу только несекретные параметры — адреса сервисов, таймзону и подобное. Настоящие секреты в контейнер не попадают вовсе: для них есть [Agent Vault](#%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C-%D1%81%D0%BB%D0%BE%D0%B8-%D0%B7%D0%B0%D1%89%D0%B8%D1%82%D1%8B).

### Проблема 2: `/reload` не подхватывает `docker_forward_env`

`/reload` перечитывает `.env` для самого процесса Hermes, но новые переменные **не** прокидываются в уже работающий Docker-контейнер на лету — они «запекаются» при создании сессии (`init_session()`). Чтобы изменения в `docker_forward_env` подхватились, нужно **перезапустить gateway**: при первом же следующем обращении контейнер заберёт обновлённые переменные окружения. Вручную сносить контейнер (`docker rm -f`) для этого не требуется.

### Проблема 3: Общий том — не для секретов

`/workspace/project/` — общий том (shared volume) на чтение и запись между хостом и контейнером. Удобно для кода, **опасно для секретов**. Любой секрет, положенный сюда, читаем агентом (поверхность для внедрения вредоносных инструкций) и любым кодом в контейнере.

### Проблема 4: Контейнер постоянный, не одноразовый

Контейнер переиспользуется по меткам, а не пересоздаётся каждый раз. Это значит, что `pip install` и другие изменения в контейнере **переживают** перезапуски Hermes. С одной стороны удобно, с другой — можно забыть, что контейнер «грязный», и удивляться поведению.

---

## Безопасность: слои защиты

Отдавать автономному агенту доступ к терминалу и своим аккаунтам — это всерьёз про безопасность. Hermes построен по принципу defense-in-depth: защита тут не одна галочка, а несколько слоёв. Коротко — что есть из коробки и что я добавил сверху.

**Встроено в Hermes:**

- **Подтверждение опасных команд.** Режим задаётся в `~/.hermes/config.yaml` (`approvals.mode`): `manual` — спрашивать всегда, `smart` — только на рискованных операциях, `off` — не спрашивать. Рискованные команды (рекурсивное удаление, `chmod`, запись в чувствительные файлы) Hermes опознаёт по набору regex-паттернов и выносит на подтверждение.
- **Жёсткий запрет катастрофичных действий.** Часть команд настолько необратима (стирание файловой системы, fork-бомбы, запись напрямую в блочное устройство), что Hermes откажется их выполнять при любых настройках — флага-обхода нет.
- **Маскирование секретов.** Regex-маскирование вырезает API-ключи и токены из логов и вывода инструментов, чтобы они не утекли в историю или в ответ модели. Вдобавок Hermes фильтрует окружение, которое отдаёт менее доверенным компонентам: ключи провайдеров и токены gateway по умолчанию вырезаются.
- **Песочница.** Весь процесс агента (shell, выполнение кода, MCP, файловые инструменты, плагины, хуки, загрузка скиллов) можно завернуть в песочницу с едиными политиками по файловой системе, сети и процессам. А отдельный терминальный бекенд гоняет команды модели в контейнере, на удалённом хосте или в облачной песочнице — у меня это как раз Docker (см. выше).
- **Авторизация и изоляция.** В gateway можно ограничить, кто вообще вправе общаться с агентом; сессии изолированы друг от друга, а сетевой доступ ограничивается.

**Что я добавил сверху: Agent Vault.**

Даже с маскированием остаётся неприятный класс рисков: если секрет в принципе попадает в контейнер или в контекст агента, его можно попытаться вытащить — например, через prompt injection. Я закрываю это [Agent Vault](https://github.com/Infisical/agent-vault) от Infisical — прокси-«сейфом» для агентов. Секреты лежат в сейфе, а агент ходит во внешние API только через прокси: в запросе стоит лишь заполнитель, а настоящий ключ Agent Vault подставляет на лету, перехватывая исходящий HTTPS. Агент даже не знает, что прокси есть, — значит, и красть из его контекста нечего. Так у меня подключён, например, TickTick (тот самый `AV_PROXY` из примера ниже).

Полный разбор встроенной модели безопасности — в [документации Hermes](https://hermes-agent.nousresearch.com/docs/user-guide/security).

---

## Память: от Holographic к Hindsight

Раз память — главная ценность Hermes для меня, расскажу подробно, как я к ней пришёл.

### Holographic (старт)

Hermes по умолчанию предлагает Holographic — алгебраическую память на HRR (holographic reduced representations). Без внешних зависимостей, отклик за доли миллисекунды, оценка доверия к фактам. Идеально для старта: `hermes memory setup` → holographic → работает.

**Минусы:** полностью ручная. Агент должен явно вызвать `fact_store`, чтобы запомнить факт. Нет автоизвлечения, нет семантического поиска, нет графа знаний.

### Поиск «идеальной» памяти

Я хотел память, которая **работает сама** — без постоянных «запомни это». Рассматривал три варианта:

| Провайдер | Автоматизм | Структура | На своём сервере |
| --- | --- | --- | --- |
| **Honcho** | ✅ Полностью авто | Диалектическая модель пользователя | ✅ (AGPL) |
| **Hindsight** | ⚠️ Полуавтомат | Граф знаний + reflect | ✅ (MIT) |
| **Mem0** | ✅ Авто | Векторы + граф | ✅ открытый код / ☁️ облако |

**Honcho** (от Plastic Labs) привлекателен полным автоматизмом — наблюдает диалоги, строит модель пользователя через диалектическое моделирование, сам подмешивает контекст в новые сессии. Но AGPL (строгий copyleft), требует PostgreSQL + Python-сервер, и «холодный старт» (первые сессии модель пустая).

**Hindsight** (от Vectorize.io) — граф знаний с автоматическим извлечением сущностей и связей, reflect для синтеза выводов, **91.4% на LongMemEval** (на момент написания — первая система, перешагнувшая 90%, рекордная точность среди агентных памятей). MIT, разворачивается на своём сервере, PostgreSQL + pgvector. Под капотом — четыре параллельные стратегии поиска на каждый запрос: семантический поиск, BM25, обход графа и анализ по времени.

**Выбрал Hindsight.** Графовая структура, синтез через reflect, лучшая точность на тесте, лицензия MIT. Работает поверх PostgreSQL на моём Mac.

### Как устроена память сейчас

Два слоя:

1.  **MEMORY.md** — оперативная память. Подмешивается в каждое обращение. Хранит поведенческие правила: предпочтения, окружение, соглашения. Лимит размера настраивается (у меня ~2200 знаков) — чтобы память не вытесняла системный промпт.
2.  **Hindsight** — долговременная. Три инструмента:Важно, что Hindsight не ждёт обязательного явного `recall`: релевантные факты он умеет подмешивать прямо в промпт автоматически — агент получает нужный контекст ещё до того, как сам догадается за ним сходить.
    - `hindsight_retain` — сохранить факт
    - `hindsight_recall` — семантический поиск
    - `hindsight_reflect` — синтез выводов по всем сохранённым фактам

---

## Скиллы: самообучающийся агент

Вторая половина того, что делает Hermes ценным. Скилл — это `SKILL.md` файл с процедурным знанием: условия срабатывания, пронумерованные шаги, подводные камни, проверка.

**Как это работает на практике:**

1.  Мы решаем сложную задачу (например, настройка чтения приватного Telegram-канала)
2.  Агент сохраняет рабочий подход как скилл через `skill_manage`
3.  В следующий раз, когда задача похожая — скилл загружается автоматически, и агент не изобретает велосипед

**Примеры скиллов, которые появились за время работы:**

- `telegram-channel-digest` — дайджест приватного Telegram-канала через Telethon/Windmill
- `ticktick-api` — работа с TickTick API (OAuth2, подводные камни с форматом дат)
- `scheduled-reminders` — напоминания по расписанию с защитой от повторной отправки
- `water-meter-submission` — передача показаний счётчиков через сайт ЖКХ
- `hermes-agent` — знание о самом Hermes (конфигурация, CLI, архитектура)

**Важный нюанс:** скиллы — живые. Если по ходу дела выясняется, что скилл что-то упускает или описывает неточно, Hermes правит его сам — дополняет и уточняет на лету. В этом и смысл самообучения: скилл со временем становится точнее, а не устаревает.

**Curator** — фоновый процесс, который отслеживает использование скиллов, помечает неиспользуемые как устаревшие, архивирует. Защита от захламления.

---

## Cron и напоминания

Одна из первых практических задач — автоматические напоминания о ежемесячных платежах и передаче показаний.

Все они привязаны к календарю — к известному окну дат:

- передача показаний счётчиков — раз в месяц, в своё окно дат
- коммунальные платежи — в своё окно
- регулярные подписки и услуги — в своё

Механика: cron-задача с окном дат + `fact_store`, чтобы не дублировать. При каждом запуске cron проверяет `fact_store`: если я уже подтвердил «передал показания» / «оплатил» — напоминание не отправляется. Если нет — напоминает.

```
cron: "0 10 20-24 * *"  → каждый день с 20 по 24 число в 10 утра
prompt: "Проверь fact_store. Если water_meter_readings не done — напомни."
```

Эта логика вынесена в скилл `scheduled-reminders`.

---

## Telegram-интеграция

### Подключение через gateway

Hermes подключается к Telegram через gateway — получает сообщения, отвечает, имеет полный доступ к инструментам. Один бот, один токен. Настройка через `hermes gateway setup` — стандартная процедура: создать бота у @BotFather, прописать токен в `.env`.

### Чтение приватных каналов

Отдельная эпопея. Задача: читать приватный Telegram-канал, на который я подписан, но не админ. Bot API такие каналы читать не умеет — нужен MTProto, то есть вход под личным аккаунтом (Telethon).

И вот здесь главная проблема: **Telegram не даёт ограничить права сессии.** Нельзя выпустить «токен только на чтение» или как-то урезать доступ — сессия личного аккаунта это всё или ничего, полный контроль над аккаунтом. Отдавать такую сессию агенту, который крутится в контейнере, — плохая идея.

Решение — **брокер (обёртка).** Сессию Telethon держит отдельный сервис на хосте (у меня — на Windmill), а наружу торчит только узкий HTTP API: получить сообщения канала — и всё. Агент в контейнере общается с этой обёрткой, а не с Telegram напрямую, и физически не может сделать ничего, кроме чтения. Туда же повесил ограничение частоты, чтобы не словить бан на реальном аккаунте.

---

## Практический пример: TickTick API

Интеграция с TickTick для создания задач. Ключевые открытия:

- **Достаточно статического токена.** Полноценный OAuth2-поток (регистрация приложения, client\_id/client\_secret, authorization code flow) городить не обязательно — у TickTick есть статический API-токен, им я и пользуюсь.
- **Формат дат — только UTC.** TickTick **молча отбрасывает** `dueDate` и `startDate`, если смещение часового пояса не `+0000`. `"dueDate": "2026-06-21T20:00:00+0300"` — не работает. ✓ `"dueDate": "2026-06-21T17:00:00+0000"` + `"timeZone": "Europe/Moscow"` — работает.
- **Безопасность в Docker:** ключ API передаётся через `--oauth2-bearer` с заполнителем, реальный ключ подставляется прокси AV\_PROXY уже в запросе.

---

## Контекст и сжатие

Важный вопрос: что будет, если писать агенту бесконечно?

- Каждое сообщение — +1 шаг в той же сессии
- Контекст растёт, пока не упрётся в порог (`compression.threshold: 0.50`)
- Срабатывает сжатие: старые сообщения сжимаются в сводку силами LLM, освобождая место
- Процесс повторяется циклически — сессия может жить сотни сообщений
- Потери детализации на глубокой истории неизбежны, но `session_search` позволяет перечитать точный журнал любого старого разговора

**Сброс сессии:** есть опция `session_reset` — автосброс сессии по бездействию или по расписанию (раз в день). Но с нюансом: старый контекст не подмешивается в новый автоматически.

---

## Что дальше

Признаюсь, начинал я скептически — ну вот, ещё один агент, очередная обёртка над LLM. Но за пару недель Hermes превратился в инструмент, которому я спокойно делегирую реальную рутину, и сейчас я уверен: это отличная вещь, которая стоит внимания.

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

**Что работает хорошо:**

- Ежедневный дайджест приватного Telegram-канала
- Ежемесячные напоминания о регулярных платежах и показаниях
- Передача показаний через сайт ЖКХ
- Интеграция с TickTick
- Память на Hindsight — факты сохраняются и находятся

**О чём думаю сейчас:** как сделать всю эту автономию безопаснее, не теряя удобства. Чем больше у агента доступов, тем выше цена ошибки или удачного prompt injection — и баланс между «удобно» и «безопасно» для меня сейчас главный открытый вопрос.

Я начал именно с Hermes, но присматриваюсь и к OpenClaw: говорят, команда проделала большую работу над ошибками. Так что следующий эксперимент — попробовать OpenClaw на тех же задачах и сравнить с Hermes.

**Главный урок:** Hermes — не просто «ChatGPT в терминале». Это платформа для построения персонального ИИ-ассистента, который со временем **накапливает контекст и становится полезнее**. Память и скиллы — ядро этой ценности; cron, gateway и независимость от провайдера делают её практичной. Но платформа требует вдумчивой настройки — Docker-бекенд, секреты, модель памяти, формат дат в API — везде есть нюансы, которые всплывают только на практике. Надеюсь, этот дневник сэкономит вам часть набитых мной шишек.

---

## Источники и инструменты

*Цифры и настройки — из моей конфигурации на момент написания; Hermes быстро меняется, так что сверяйтесь с актуальной документацией.*

**Сам агент:**

- [Hermes Agent](https://github.com/NousResearch/hermes-agent) — репозиторий, [документация](https://hermes-agent.nousresearch.com/docs/) и [раздел про безопасность](https://hermes-agent.nousresearch.com/docs/user-guide/security)
- [OpenClaw](https://github.com/openclaw/openclaw) ([openclaw.ai](https://openclaw.ai)) — альтернативный опенсорсный агент

**Память:**

- [Hindsight](https://github.com/vectorize-io/hindsight) (Vectorize) — граф знаний, который я выбрал
- [Honcho](https://github.com/plastic-labs/honcho) (Plastic Labs) и [Mem0](https://github.com/mem0ai/mem0) — альтернативы, которые рассматривал

**Безопасность и секреты:**

- [Agent Vault](https://github.com/Infisical/agent-vault) от [Infisical](https://infisical.com) — прокси-сейф для секретов агента
- [Проверка личности в Claude](https://support.claude.com/en/articles/14328960-identity-verification-on-claude) — та самая новость Anthropic

**Инфраструктура и интеграции:**

- [OrbStack](https://orbstack.dev) — Docker для macOS
- [Telethon](https://github.com/LonamiWebs/Telethon) — MTProto-клиент для чтения Telegram
- [Windmill](https://www.windmill.dev) — брокер для Telegram-сессии
- [TickTick](https://ticktick.com) — задачи
