# Состав system prompt Hermes Whale **Дата анализа:** 2026-06-24 **Версия:** Текущее состояние на момент разговора System prompt собирается в `agent/system_prompt.py` (Hermes Agent) из трёх слоёв: **stable**, **context**, **volatile**. --- ## Полный состав ### СТАБИЛЬНЫЙ СЛОЙ (stable) — кешируется на всю сессию Этот слой не меняется между поворотами. Всё, кроме SOUL.md, захардкожено в `agent/prompt_builder.py`. | # | Блок | Источник | Описание | |---|------|----------|----------| | 1 | **SOUL.md** | `~/.hermes/hermes-whale/SOUL.md` | Кастомная идентичность: «Кит (Whale) — Alex's personal agent». Правила: Obsidian MCP, jq, backup before edit, plan first, stop on стоп. | | 2 | **Hermes Agent help guidance** | `prompt_builder.py`: `HERMES_AGENT_HELP_GUIDANCE` | docs.hermes-agent.nousresearch.com — source of truth | | 3 | **Task completion guidance** | `prompt_builder.py`: `TASK_COMPLETION_GUIDANCE` | «Finishing the job» — доводить до конца, не фабриковать | | 4 | **Memory guidance** | `prompt_builder.py`: `MEMORY_GUIDANCE` | Как сохранять memory (declarative facts, не task progress) | | 5 | **Session search guidance** | `prompt_builder.py`: `SESSION_SEARCH_GUIDANCE` | session_search для кросс-сессионного контекста | | 6 | **Skills guidance** | `prompt_builder.py`: `SKILLS_GUIDANCE` | Сохранять сложные подходы как skills, патчить устаревшие | | 7 | **Tool-use enforcement** | `prompt_builder.py`: `TOOL_USE_ENFORCEMENT_GUIDANCE` | Ты ДОЛЖЕН вызывать инструменты, не описывать планы | | 8 | **Execution discipline** | `prompt_builder.py`: `OPENAI_MODEL_EXECUTION_GUIDANCE` | Расширенные правила: tool persistence, prerequisite checks, verification | | 9 | **Skills prompt** | `prompt_builder.py`: `build_skills_system_prompt()` | Список всех доступных skills (автогенерируется) | | 10 | **Environment hints** | `prompt_builder.py`: `build_environment_hints()` | macOS, home dir, cwd | | 11 | **Active profile hint** | `system_prompt.py` runtime | «default» + guard не лезть в чужие профили | | 12 | **Platform hints** | `prompt_builder.py`: `PLATFORM_HINTS` | webhook **нет** в словаре → пусто | **Note #7–8:** Т.к. модель `deepseek-chat` попадает под `TOOL_USE_ENFORCEMENT_MODELS = ("gpt", "codex", "gemini", "gemma", "grok", "glm", "qwen", "deepseek")`, то enforcement применяется. DeepSeek НЕ входит в OpenAI-специфичную часть (GPT/Codex/Grok), поэтому блок `OPENAI_MODEL_EXECUTION_GUIDANCE` не вставляется — только `TOOL_USE_ENFORCEMENT_GUIDANCE`. ### КОНТЕКСТНЫЙ СЛОЙ (context) — зависит от cwd | # | Блок | Что приходит | |---|------|-------------| | 13 | **AGENTS.md / CLAUDE.md / .cursorrules / .hermes.md** | Из `TERMINAL_CWD`. В этой сессии `TERMINAL_CWD=/Users/admin` — файлов нет → пусто | | 14 | **system_message** | Caller-supplied. Webhook не передаёт → пусто | Поиск контекстных файлов (функция `build_context_files_prompt()`): 1. `.hermes.md` / `HERMES.md` (walk to git root) 2. `AGENTS.md` / `agents.md` (cwd only) 3. `CLAUDE.md` / `claude.md` (cwd only) 4. `.cursorrules` + `.cursor/rules/*.mdc` (cwd only) — Первый найденный wins, только один проект-контекст загружается. SOUL.md из HERMES_HOME независим и не участвует в этой очереди — он загружается отдельно через `load_soul_md()`. ### ВОЛАТИЛЬНЫЙ СЛОЙ (volatile) — пересобирается каждый раз | # | Блок | Источник | Описание | |---|------|----------|----------| | 15 | **MEMORY** | `memories/threads//MEMORY.md` | Thread-scoped memory (включено конфигом) | | 16 | **USER profile** | `memories/USER.md` | Глобальный профиль пользователя | | 17 | **Memory instruction** | `~/.hermes/hermes-whale/review/memory_prompt.md` | Кастомная инструкция что запоминать | | 18 | **Timestamp/model/provider** | Runtime | Дата старта, Model, Provider | --- ## Ключевые файлы ### SOUL.md - Путь: `~/.hermes/hermes-whale/SOUL.md` (HERMES_HOME/SOUL.md) - Полностью заменяет `DEFAULT_AGENT_IDENTITY` - Правила: Obsidian MCP first, jq, backup before edit, plan first, stop on стоп - Загружается `load_soul_md()` в `agent/prompt_builder.py` ### memory_prompt.md - Путь: `~/.hermes/hermes-whale/review/memory_prompt.md` - Конфиг: `memory.prompt_path` в config.yaml - Загружается в `agent/agent_init.py`, вставляется в volatile слой ### config.yaml (Whale) - Путь: `~/.hermes/hermes-whale/config.yaml` - Релевантные секции: ```yaml memory: thread_scoped: true prompt_path: ~/.hermes/hermes-whale/review/memory_prompt.md ``` - Webhook route: `whale` на порту 8645, deliver в zulip - Webhook платформа **не имеет** platform hint в `PLATFORM_HINTS` --- ## Реализовано: prompt_overrides (2026-09-15) Возможность, описанная здесь ранее как opportunity, **реализована**. Стабильный слой теперь конфигурируемый: каждый хардкод-блок вынесен в `.md` файл, маппинг — в `agent.prompt_overrides`. Если файла нет — fallback на хардкод. Полное описание реализации: [[hermes-agent-improvements]] → секция «Вынос хардкода промптов в файлы». Кратко: - `agent/system_prompt.py` — функция `_load_prompt_block(agent, block_name, default)`, 7 констант заменены на её вызовы - `agent/agent_init.py` — чтение `agent.prompt_overrides` из конфига в `agent._prompt_overrides` - `~/.hermes/hermes-whale/config.yaml` — секция `agent.prompt_overrides` (7 путей) - `~/.hermes/hermes-whale/review/` — 7 файлов блоков + `memory_prompt.md`, `skill_prompt.md` Итого вместо хардкода (см. таблицу stable-слоя выше) блоки #2–#8 читаются из файлов. Осталось в коде: `DEFAULT_AGENT_IDENTITY` (fallback), `GOOGLE_MODEL_OPERATIONAL_GUIDANCE`, `COMPUTER_USE_GUIDANCE`, `KANBAN_GUIDANCE`, `PLATFORM_HINTS`. **Коммиты:** `hermes-agent` `207a1de16`, `~/.hermes` `7fd200c`. **Осталось:** перезапуск webhook — правки вступят в силу. ## Текущие ограничения - webhook не имеет platform hint → может быть полезно добавить - Google-specific и kanban-блоки остаются хардкодом (неактуальны для Whale) - Нет `.hermes.md` / `AGENTS.md` в `/Users/admin/` — контекстный слой пуст