[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:
Taiga
2026-06-25 05:23:46 +00:00
parent ac0d753ec0
commit 16987d69f3
26 changed files with 2656 additions and 457 deletions
+78
View File
@@ -0,0 +1,78 @@
# Docker на Mac — проблема с диском и сборкой образов
_Последнее обновление: 2026-06-24_
## Сетап
| Параметр | Значение |
|----------|----------|
| Движок | Colima (не Docker Desktop!) |
| Гипервизор | macOS Virtualization.Framework |
| Архитектура | arm64 |
| CPU | **8 ядер** |
| RAM | **24 GiB** |
| Диск VM | **100 GiB** (sparse) |
| Mount type | virtiofs |
## Проблема: контейнеры (особенно Zulip) зависают во время сборки Docker образов для Валеры
**Симптом:** Zulip перестаёт отвечать на вебхуки, RabbitMQ паникует, PostgreSQL тормозит.
## 🔴 Реальный корень — переполнение диска VM (не CPU, не bind mount)
### Структура диска Colima VM
`/dev/vdb1` (98 GiB, data disk) хранит `/var/lib/docker`:
```
17 GB — /var/lib/docker (Colima data)
├── 8.2 GB — rootfs/overlayfs ← слои всех образов
├── 8.9 GB — volumes
│ ├── 8.4 GB — buildx_buildkit_arm64builder0_state ← 🔴 build cache volume
│ ├── 341 MB — zulip_zulip-pgdata
│ ├── 85 MB — dangling volume
│ ├── 46 MB — openclaw_postgres-data
│ └── 38 MB — zulip_zulip-data
└── остальное — containers, buildkit metadata
```
### Build cache volume — 8.4 GB и не чистится сам
Docker BuildKit при использовании `buildx` хранит кеш слоёв в **Docker volume**, а не в overlayfs. Это volume `buildx_buildkit_arm64builder0_state`.
**Почему не чистится:**
- `docker system prune` чистит только build cache records (метаданные), НЕ volume
- BuildKit контейнер (`moby/buildkit:buildx-stable-1`) всегда running — volume считается активным
- BuildKit GC policy не видит этот volume как «своё» хранилище (это Docker volume, не `/var/lib/buildkit`)
- Без ручной очистки volume растёт с каждой сборкой и не уменьшается
**Почему аффектит контейнеры:**
1. Каждая сборка Валеры добавляет новые слои в этот volume
2. Volume растёт (8.4 GB и выше)
3. Когда `/dev/vdb1` заполняется >85-90%:
- Docker overlayfs + containerd snapshotter начинают тормозить
- Запись новых слоёв фейлится или идёт в разы медленнее
- PostgreSQL и RabbitMQ WAL не могут закоммититься
- RabbitMQ Khepri (Raft) при проблемах с WAL сбрасывает состояние (пользователи пропадают)
- Zulip отдаёт 500 на `/api/v1/register`
- Контейнеры тупят или падают в restart loop
### Чистка build cache volume (безопасно)
```bash
# Остановить buildkit контейнер, удалить volume, BuildKit пересоздаст при следующем билде
docker rm -f buildx_buildkit_arm64builder0
docker volume rm buildx_buildkit_arm64builder0_state
```
Мониторинг заполненности диска VM:
```bash
colima ssh -- df -h /dev/vdb1
```
### Связанные документы
- [[tech/docker_colima_setup]] — установка и автостарт Colima
- [[projects/balda/setup]] — Balda агенты (Валера, Клавдий)
- [[how-to/hermes-eagle-mac]] — Hermes на Mac, Zulip Docker стек (RabbitMQ pitfall про Khepri)
- [[how-to/openmediavault-rpi5]] — build cache на RPi (та же проблема ENOSPC)
+11
View File
@@ -1,5 +1,16 @@
# Docker + Colima Autostart Setup (macOS)
_Последнее обновление: 2026-06-24_
## Текущие параметры Colima
```
colima start --cpu 8 --memory 24 --disk 100
```
- virtiofs mount type
- Build cache volume `buildx_buildkit_arm64builder0_state` занимает до 8+ GB и не чистится автоматически. См. [[tech/docker-mac-disk-issues]].
## 1. Install dependencies
``` bash
+112
View File
@@ -0,0 +1,112 @@
# Hermes Memory Architecture
## Обзор
Hermes (Whale) использует **thread-scoped memory** + кастомную memory instruction. Глобальный профиль (`USER.md`) и thread-локальная память (`MEMORY.md`) — два независимых хранилища.
## Состав системного промпта
Собирается в `agent/system_prompt.py` из трёх слоёв: stable (кешируется на сессию), context (зависит от CWD), volatile (каждый раз свежий).
### Stable tier
1. **SOUL.md** — не существует (Whale), используется `DEFAULT_AGENT_IDENTITY`.
2. **HERMES_AGENT_HELP_GUIDANCE** — ссылка на `https://hermes-agent.nousresearch.com/docs`.
3. **TASK_COMPLETION_GUIDANCE** — «Finishing the job»: не фабриковать, не останавливаться на стабах.
4. **Tool-aware guidance**:
- `MEMORY_GUIDANCE` — declarative facts, не imperative, не task progress.
- `SESSION_SEARCH_GUIDANCE` — искать в прошлом session_search.
- `SKILLS_GUIDANCE` — сохранять сложные подходы как skills, патчить устаревшие.
5. **Tool-use enforcement**`TOOL_USE_ENFORCEMENT_GUIDANCE` + per-model operational guidance (deepseek → `OPENAI_MODEL_EXECUTION_GUIDANCE`).
6. **Skills prompt** — список доступных скиллов из `~/.hermes/skills/`.
7. **Environment hints** — macOS, home, cwd.
8. **Active profile hint** — «default», +предупреждение не лезть в чужие профили.
9. **Platform hints** — зависит от платформы (zulip/telegram/webhook/webui...).
### Context tier
10. **system_message** — от платформы (например, содержимое входящего сообщения).
11. **Context files**`AGENTS.md`, `.cursorrules`, `.hermes.md` из `TERMINAL_CWD`.
### Volatile tier (не кешируется)
12. **Memory** — thread-scoped MEMORY.md.
13. **USER.md** — глобальный профиль.
14. **Custom memory instruction**`~/.hermes/hermes-whale/review/memory_prompt.md`.
15. **Таймстемп** — дата старта, session ID, model, provider.
### Файлы конфигурации и кастомные промпты
- `~/.hermes/hermes-whale/review/skill_prompt.md` — инжектится в background review (skill review).
- `~/.hermes/hermes-whale/review/memory_prompt.md` — memory instruction.
- `prefill_messages_file` — не задан.
- `personalities` — пусто.
- `hooks` — пусто.
## Конфигурация
Файл: `~/.hermes/hermes-whale/config.yaml`
```yaml
memory:
memory_enabled: true
user_profile_enabled: true
memory_char_limit: 3000
user_char_limit: 1375
provider: ''
nudge_interval: 10
flush_min_turns: 6
thread_scoped: true # изолированная память по треду
prompt_path: ~/.hermes/hermes-whale/review/memory_prompt.md # кастомная инструкция
```
## Файловая структура
```
~/.hermes/hermes-whale/memories/
├── MEMORY.md # глобальная (fallback для CLI/старых сессий)
├── USER.md # глобальная (всегда)
└── threads/
├── agent:main:webhook:webhook:webhook:whale/
│ └── MEMORY.md # память конкретного треда
└── ...
```
## Memory prompt
Файл: `~/.hermes/hermes-whale/review/memory_prompt.md`
### Что запоминать
1. Документы — file paths, что изменено, почему.
2. **После загрузки Obsidian docs** — извлекать ключевые факты в memory.
3. Команды и инструменты — нетривиальные CLI вызовы, форматы конфигов.
4. Статус проекта — completed, pending, blockers, next steps.
5. Предпочтения пользователя — коррекции, фидбек.
6. Факты окружения — пакеты, порты, пути до credentials (не сами secrets).
7. Решения и обоснование выбора подхода.
8. Конфиг изменения — ключи/значения/пути.
### Что НЕ запоминать
- Временный debugging noise.
- "Сейчас в процессе задачи X" — session_search покрывает.
- Очевидные факты (rediscover за 2 сек).
- Negative claims о сломанных инструментах — становятся persistent self-imposed constraints.
### Особенности редактирования
- `patch()` для точных замен, но не перенумеровывает списки.
- После вставки пункта mid-list — проверить нумерацию, делать второй clean patch.
## Команды
```bash
# Проверить текущую память
cat ~/.hermes/hermes-whale/memories/USER.md
cat ~/.hermes/hermes-whale/memories/MEMORY.md
# Структура файлов памяти
find ~/.hermes/hermes-whale/memories -type f -name "*.md"
# Редактировать prompt (через patch или write_file)
```
## Связанное
- [[thread-scoped-memory]] — план реализации.
- `personal/plans/thread-scoped-memory.md` — детали тестов, pitfalls, коммиты.
@@ -0,0 +1,222 @@
# Hermes Self-Improvement Review (Background Memory/Skill Review)
Source: codebase analysis of `hermes-agent/agent/background_review.py`, `run_agent.py`, `agent/conversation_loop.py`, `agent/agent_init.py`.
## Что это
После каждого юзерского сообщения ([run_conversation](https://github.com/NousResearch/hermes-agent)) AIAgent может запустить **фоновый daemon-thread**, который форкает ещё один AIAgent, даёт ему снимок всего разговора и просит оценить — нужно ли сохранить что-то в память (Memory) или обновить/создать скилл (Skill).
Основной поток продолжается немедленно. Ревью не блокирует пользователя.
## Where it lives
| File | Lines | Role |
|------|-------|------|
| `agent/background_review.py` | 1–597 | Центральный модуль — промпты, `_run_review_in_thread`, `spawn_background_review_thread`, `summarize_background_review_actions` |
| `run_agent.py` | 1360–1400 | Форвардеры: `_spawn_background_review`, `_summarize_background_review_actions`, импорт констант-промптов |
| `agent/conversation_loop.py` | 4779–4805 | Место вызова — после завершения ответа, перед возвратом `result` |
| `agent/codex_runtime.py` | 150–162 | Аналогичный вызов для Codex Response API режима |
| `agent/agent_init.py` | 10671075, 11871190 | Инициализация счётчиков и интервалов |
| `agent/tool_executor.py` | 207209, 776778 | Сброс счётчиков при вызове `memory` или `skill_manage` |
| `tui_gateway/server.py` | 2452–2464 | Подключение `background_review_callback` для TUI (Ink) |
| `gateway/run.py` | 17849–17893 | Подключение `background_review_callback` для gateway-сообщений |
## Как триггерится
Два независимых счётчика:
### Memory review (turn-based)
- Счётчик: `_turns_since_memory`
- Интервал: `_memory_nudge_interval` (default = **10**)
- Задаётся из `config.yaml: memory.nudge_interval`
- Инкрементится **в начале** каждого `run_conversation` (строка 559)
- Проверка: `if _turns_since_memory >= _memory_nudge_interval``_should_review_memory = True`
- Сброс: при вызове `memory` tool (строка 207 в tool_executor.py)
- Условия: `"memory" in valid_tool_names` и `_memory_store != None`
Если `memory_enabled: false` → ревью не триггерится.
### Skills review (iteration-based)
- Счётчик: `_iters_since_skill`
- Интервал: `_skill_nudge_interval` (default = **10**)
- Инкрементится **внутри tool-call цикла** после каждого батча (строка 860)
- Проверка: `if _iters_since_skill >= _skill_nudge_interval``_should_review_skills = True`
- Сброс: при вызове `skill_manage` tool (строки 209, 778 в tool_executor.py)
- Условия: `"skill_manage" in valid_tool_names`
### Финальная проверка
```python
if final_response and not interrupted and (_should_review_memory or _should_review_skills):
agent._spawn_background_review(
messages_snapshot=list(messages),
review_memory=_should_review_memory,
review_skills=_should_review_skills,
)
```
## Что происходит внутри
### `_run_review_in_thread` (background_review.py:327559)
1. **Создаёт форк AIAgent**, наследуя:
- `model`, `provider`, `base_url`, `api_key`, `credential_pool` от родителя (чтобы попасть в тот же prefix cache у Anthropic/OpenRouter)
- `_cached_system_prompt` — byte-идентичный, чтобы не разогревать кеш заново
- `session_id`, `session_start` — те же
- `_memory_store`, `_memory_enabled`, `_user_profile_enabled` — те же
- Но `skip_memory=True` (чтобы форк не создавал свой MemoryManager)
- `_memory_nudge_interval = 0`, `_skill_nudge_interval = 0` (чтобы не рекурсил)
2. **Устанавливает tool whitelist** (строки 459472):
```python
review_whitelist = {
t["function"]["name"]
for t in get_tool_definitions(
enabled_toolsets=["memory", "skills"],
quiet_mode=True,
)
}
```
Вне whitelist — всё блокируется с сообщением `"Background review denied non-whitelisted tool: ..."`
3. **Запускает** `review_agent.run_conversation(...)` с:
- Выбранным промптом (см. ниже) + суффикс `"You can only call memory and skill management tools. Other tools will be denied at runtime — do not attempt them."`
- `conversation_history=messages_snapshot` — весь разговор до этого момента
- `max_iterations=16` (жёстко, не из конфига)
4. **После завершения** — собирает успешные tool-результаты через `summarize_background_review_actions()`, фильтруя те, что уже были в `messages_snapshot` (чтобы не показывать старые как новые).
5. **Выводит** пользователю:
```python
f" 💾 Self-improvement review: {summary}"
# Например: "💾 Self-improvement review: Memory updated · Skill 'xxx' patched"
```
Через `agent._safe_print()` и через `agent.background_review_callback()` (для TUI/gateway).
6. **На ошибках** — пишет в лог `"Background memory/skill review failed: ..."` и шлёт `_emit_auxiliary_failure`. Не ломает основной разговор.
## 3 варианта промпта
Выбираются в `spawn_background_review_thread()` по комбинации флагов:
| `review_memory` | `review_skills` | Промпт | Суть |
|---|---|---|---|
| ✅ | ❌ | `_MEMORY_REVIEW_PROMPT` (~10 строк) | Сохранить факты о пользователе (persona, preferences, style). Если нечего — 'Nothing to save.' |
| ❌ | ✅ | `_SKILL_REVIEW_PROMPT` (~120 строк) | Самая большая инструкция. Искать сигналы: коррекции, frustration, новые техники, устаревшие скиллы. Приоритет: loaded skill → existing umbrella → support file → new umbrella. Запрещено: env-зависимости, негативные фиксации, session-specific. |
| ✅ | ✅ | `_COMBINED_REVIEW_PROMPT` (~80 строк) | Смесь обоих — сначала memory, потом skills с той же логикой. |
## Потенциальные проблемы
- **Нет конфигурируемости для skills interval** — `_skill_nudge_interval` хардкожен в 10, не читается из config.yaml (в отличие от memory).
- **Tool whitelist был фиксирован** — теперь настраивается через `review.allowed_toolsets` в config.yaml (см. ниже).
- **Форк не имеет MCP-серверов** — MCP tools (obsidian-mcp, etc.) не регенерируются в форке.
- **max_iterations=16** — жёстко, не из конфига. Может не хватить на комплексное ревью многоскилловых сессий.
## Реализованные расширения (2026-06-24)
Сделаны два изменения в исходном коде Hermes Agent для того, чтобы промпты и whitelist ревью были настраиваемы из `config.yaml`:
### 1. agent_init.py — чтение секции `review:` из config.yaml
Место: `agent/agent_init.py` (после блока skills config).
Читает секцию:
```yaml
review:
# Пути к .md файлам с кастомными промптами.
# Если файл не найден/не читается — тихо падает на встроенный хардкод.
skill_prompt_path: ~/.hermes/review/skill_prompt.md
memory_prompt_path: ~/.hermes/review/memory_prompt.md
combined_prompt_path: ~/.hermes/review/combined_prompt.md
# Какие toolsets доступны форку ревью.
# По дефолту: ["memory", "skills"].
# Чтобы форк мог читать/писать .md файлы Obsidian — добавить "file".
allowed_toolsets:
- memory
- skills
# - file
```
Что делает код:
1. Выставляет `agent._review_allowed_toolsets` (по дефолту `["memory", "skills"]`)
2. Для каждого из трёх путей (`skill_prompt_path`, `memory_prompt_path`, `combined_prompt_path`) — пытается прочитать файл и записать содержимое в `agent._SKILL_REVIEW_PROMPT` / `agent._MEMORY_REVIEW_PROMPT` / `agent._COMBINED_REVIEW_PROMPT` соответственно.
3. Если путь не указан, файл не найден или не читается — тихо игнорируется, остаётся встроенный хардкод.
### 2. background_review.py — использование `_review_allowed_toolsets` с инстанса
Место: `agent/background_review.py`, функция `_run_review_in_thread`, whitelist (строка ~459).
**Было:**
```python
review_whitelist = {
t["function"]["name"]
for t in get_tool_definitions(
enabled_toolsets=["memory", "skills"],
quiet_mode=True,
)
}
```
**Стало:**
```python
_allowed_sets = getattr(agent, "_review_allowed_toolsets", ["memory", "skills"])
review_whitelist = {
t["function"]["name"]
for t in get_tool_definitions(
enabled_toolsets=_allowed_sets,
quiet_mode=True,
)
}
```
А также сообщение для форка динамически подставляет имена toolsets вместо хардкода `"memory and skill"`.
### 3. Примеры промптов
Созданы в `~/.hermes/review/`:
- **`skill_prompt.md`** — копия встроенного `_SKILL_REVIEW_PROMPT` + секция `--- Obsidian documentation update ---`, которая инструктирует форк после каждого обновления скилла читать и патчить соответствующий `.md` в `/Users/admin/obsidian/`.
- **`memory_prompt.md`** — копия `_MEMORY_REVIEW_PROMPT` + инструкция обновлять `personal/profiles/Alex.md` при сохранении user preference.
### Как включить Obsidian-обновление
1. Раскомментировать в `~/.hermes/config.yaml`:
```yaml
review:
skill_prompt_path: ~/.hermes/review/skill_prompt.md
memory_prompt_path: ~/.hermes/review/memory_prompt.md
allowed_toolsets:
- memory
- skills
- file
```
2. Перезапустить Hermes (новый сессионный конфиг прочитается при старте `AIAgent.__init__`).
3. После каждого десятого tool-батча (или любого вызова `skill_manage` раньше) форк будет: создать/обновить скилл **и** прочитать/пропатчить соответствующий Obsidian-документ через `read_file`/`patch`.
### Замечание по архитектуре
File tools работают напрямую с файловой системой, в обход obsidian-mcp. Это значит:
- **Линки** `[[wiki]]` в Obsidian не резолвятся автоматически — форк видит сырой `.md`.
- **Frontmatter** (YAML заголовки) — видит как часть текста, может патчить.
- **Vault search** недоступен — только прямой путь к файлу.
Для большинства задач (пропатчить существующий doc, создать новый .md с frontmatter) file tools достаточно. Если нужен полный Obsidian API — надо дорабатывать подключение MCP в форке (Вариант B из первоначального исследования, пока не реализован).
## Related files
- `~/.hermes/hermes-whale/review/skill_prompt.md` — кастомный skills промпт с Obsidian-инструкцией (для всех артефактов: планы, конфиги, этапы проектов)
- `~/.hermes/hermes-whale/review/memory_prompt.md` — кастомный memory промпт с Obsidian-инструкцией
- `agent/agent_init.py` — чтение секции `review:` из config.yaml
- `agent/background_review.py` — использование `_review_allowed_toolsets` и кастомных промптов
- Config: `config.yaml → review.*` (см. секцию выше)
## Хронология
- 2026-06-24: Исследование и документирование механизма self-improvement review (Whale/Alex).
- 2026-06-24: Реализация настройки через config.yaml: промпты (через пути к .md) + allowed_toolsets. Созданы примеры промптов с Obsidian-инструкцией.
- 2026-06-24: Реализация thread-scoped memory + custom memory instruction (см. `personal/plans/thread-scoped-memory.md`).
- 2026-06-24: Тесты thread-scoped memory: 9 новых тестов (76/76 passed), закоммичено в `4ebad4f69`.
+104
View File
@@ -0,0 +1,104 @@
# Obsidian MCP implementation ecosystem (2026)
Обзор активных реализаций Obsidian MCP серверов по состоянию на июнь 2026. Три архитектурных подхода, ~8 проектов с traction.
## Три архитектуры
| Подход | Примеры | Obsidian нужен? | Плюсы | Минусы |
|--------|---------|----------------|-------|--------|
| **Direct filesystem** | mcpvault, obsidian-mcp (Steven) | Нет | Простота, работает без Obsidian | Нет доступа к внутреннему API Obsidian |
| **Local REST API plugin** | mcp-obsidian (Markus), cyanheads | Да (должен быть открыт) | Obsidian опосредует операции | Нужен плагин + API key |
| **Native Obsidian plugin** | obsidian-mcp-plugin (aaronsb) | Да (должен быть открыт) | Полный API: граф, Dataview, Bases | Менее зрелый, только через BRAT |
## Детальный обзор
### 1. @bitbonsai/mcpvault (наш текущий) — filesystem
- **npm:** `@bitbonsai/mcpvault` (бывший `obsidian-mcp`, переименован март 2026 из-за trademark)
- **Версия:** 0.12.1 (июнь 2026)
- **Язык:** TypeScript
- **Транспорт:** stdio только
- **Инструменты:** 14: read_note, write_note, patch_note, list_directory, delete_note, search_notes, move_note, move_file, read_multiple_notes, update_frontmatter, get_notes_info, get_frontmatter, manage_tags, get_vault_stats, list_all_tags
- **Проблема:** exact string match в patch_note (`fullContent.split(oldString).length - 1`), без fuzzy, без trim, без нормализации whitespace
### 2. cyanheads/obsidian-mcp-server — REST API, самый популярный по загрузкам
- **npm:** `obsidian-mcp-server`
- **Версия:** 3.2.8 (май 2026)
- **★:** 603 | **dl/week:** ~9,776 (самые высокие)
- **Язык:** TypeScript, Bun/Node.js v24+
- **Транспорт:** stdio + Streamable HTTP (dual)
- **Инструменты:** 14
- **Требует:** Obsidian Local REST API plugin v4.0.0+
- **Ключевые фичи:**
- `obsidian_replace_in_note` — regex, whole-word, flexible whitespace, case-sensitivity, capture groups. **Решает проблему exact match**.
- `obsidian_patch_note` — surgical append/prepend/replace по heading/block/frontmatter
- Path policy (folder-scoped permissions через env vars: OBSIDIAN_READ_PATHS, OBSIDIAN_WRITE_PATHS)
- In-memory vault cache (configurable, default 10 min)
- JWT/OAuth аутентификация
- Structured logging с file rotation
- Zod schema validation
- Docker support (`ghcr.io/cyanheads/obsidian-mcp-server`)
- **Вердикт:** самый production-ready
### 3. MarkusPfundstein/mcp-obsidian — REST API, Python
- **npm:** `mcp-obsidian` (Python, через uvx)
- **★:** ~3,700 (самые звёзды)
- **Язык:** Python 100%
- **Транспорт:** stdio
- **Статус:** был 17 месяцев мёртв, вернулся 15 мая 2026. Но npm всё ещё v1.0.0.
- **Инструменты:** 7 (list_files, get_file_contents, search, patch_content, append_content, delete_file)
- **Известные баги:** patch_content timeout/validation (#9), UTF-8 failures (#25), Dataview dependency (#70), нет multi-vault (#63)
- **Вердикт:** watch — viable если выйдет новый npm release
### 4. aaronsb/obsidian-mcp-plugin (Semantic Notes Vault MCP) — native plugin
- **★:** 423
- **Версия:** 0.11.33 (13 релизов с 20 апреля, очень активен)
- **Язык:** TypeScript (плагин Obsidian)
- **Транспорт:** HTTP (порт 3001/3443)
- **Инструменты:** 8 категорий (vault, edit, view, graph, workflow, dataview, bases, system)
- **Ключевые фичи:**
- **Fuzzy text matching** для edits — прямо в описании
- Graph traversal (multi-hop, backlinks, forward-links, path finding)
- Dataview DQL execution
- Bases database operations
- Read-only mode
- mcpb one-click install для Claude Desktop
- **Минус:** Obsidian должен быть открыт. Установка через BRAT (не в community store).
- **Вердикт:** если нужен graph/Dataview/Bases — лучший выбор
### 5. Local REST API v4.0.0+ built-in MCP
- **Плагин:** `coddingtonbear/obsidian-local-rest-api` (★ 2.5k)
- **Версия:** v4.1.3 (июнь 2026)
- С апреля 2026: Local REST API сам стал MCP сервером на `/mcp/`
- **15 tools** (file CRUD, search, tagging, commands, open-in-ui)
- **Транспорт:** Streamable HTTP
- **Требует:** только установку плагина + API key (никаких дополнительных пакетов)
### 6. Minhao-Zhang/obsidian-mcp-server — WIP plugin
- **★:** 13
- **Версия:** v1.1.0 (апрель 2025 — заброшен)
- **Статус:** WIP. Автор: «я не знаю TypeScript». Не рекомендуется.
## Остальные
Всего ~79 Obsidian-связанных MCP серверов на PulseMCP, но ~8 имеют traction. Большинство — клоны/форки mcpvault или mcp-obsidian.
## Рекомендация от 2026-06-24
**Лучший апгрейд без смены архитектуры — cyanheads/obsidian-mcp-server.**
Почему:
1. Решает exact match проблему — `obsidian_replace_in_note` с regex и flexible whitespace
2. Самая высокая загрузка (9.7K dl/week) — стабильность доказана
3. Dual transport (можно через stdio как Hermes native MCP, можно HTTP)
4. Path policy — можно ограничить запись только определёнными папками
5. Docker support
Минус: требует Obsidian открытым (Local REST API плагин).
**Если не хочется ставить плагин:** остаться на mcpvault + Hermes `patch()` для сложных строк.