Files
obsidian-vault/personal/plans/hermes-whale-system-prompt.md

112 lines
7.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Состав 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 #78:** Т.к. модель `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/<gateway_session_key>/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/` — контекстный слой пуст