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

105 lines
6.8 KiB
Markdown
Raw 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`
---
## Отсутствующие возможности (opportunity)
Алекс предложил сделать стабильный слой конфигурируемым через файлы так же, как `memory_prompt.md`:
- Вынести каждый хардкод-блок (hermes help, task completion, memory guidance, session search, skills guidance и т.д.) в отдельный `.md` файл
- Добавить `prompt_overrides` секцию в config.yaml, где указывать пути к файлам
- Если файла нет — fallback на хардкод
Связанные файлы Hermes Agent:
- `agent/system_prompt.py` — сборка system prompt, управляющая логика
- `agent/prompt_builder.py` — константы и функции загрузки
- `agent/agent_init.py` — чтение конфига и проброс
---
## Текущие ограничения
- webhook не имеет platform hint → может быть полезно добавить
- Всё хардкоженое в `prompt_builder.py` нельзя переопределить без редактирования кода
- Нет `.hermes.md` / `AGENTS.md` в `/Users/admin/` — контекстный слой пуст