[2026-06-25] taiga-vault: family/how-to/htpc-emulators-setup.md family/how-to/htpc-gaming-plans.md family/how-to/kraken-access.md family/how-to/openmediavault-rpi5.md family/how-to/time-machine.md family/how-to/wireguard-vpn.md personal/documents/todo-list.md personal/plans/extract-stable-prompt-blocks.md personal/plans/hermes-whale-system-prompt.md personal/plans/thread-scoped-memory.md
This commit is contained in:
@@ -0,0 +1,104 @@
|
||||
# Состав 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/<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/` — контекстный слой пуст
|
||||
Reference in New Issue
Block a user