--- name: memory-os-pipeline title: "Memory OS Pipeline" description: "Управление pipeline Memory OS: Obsidian vault → синхронизация → ингест в Qdrant → поиск. Критически важно: НЕ ТРОГАТЬ /opt/hermes/obsidian-vault/." --- ## Критические правила - **ЗАПРЕЩЕНО** удалять, изменять, перемещать, перезаписывать файлы в `/opt/hermes/obsidian-vault/`. Только чтение. - **ЗАПРЕЩЕНО** удалять любые файлы пользователя без явного подтверждения. - Если vault пуст, не удалять wiki — это означает, что отвалилось монтирование (Yandex.Disk WebDAV или S3). Скрипт `sync_obsidian_to_wiki.py` защищён: если vault пуст, но state не пуст — удаление из wiki блокируется. ## Управление cron-задачами (важно) - Когда пользователь говорит "stop reminder", "отключи задачу" — он хочет **отключить уведомления**, а не удалить задачу. - **Решать:** обновить `deliver: local` (тихий режим). Не удалять cronjob. - Для no_agent скриптов сразу ставить `deliver: local` — они не должны слать уведомления каждые 5 минут. ## Архитектура ``` Obsidian vault (/opt/hermes/obsidian-vault/) ← READ-ONLY, НЕ ТРОГАТЬ ↓ sync_obsidian_to_wiki.py (копирование → wiki/raw/obsidian/) Wiki (/opt/hermes/vault/wiki/raw/obsidian/) ↓ ARQ queue → worker (chunk + embed) Qdrant (localhost:6333, collection: knowledge_base) ↓ dense: nomic-embed-text (768d, Cosine) ↓ sparse: BM25 Search API (localhost:8000, POST /search, GET /health) ``` ## Стек - Worker: Docker, docker-worker-1 (healthy) - Redis: Docker, docker-redis-1 (healthy) - Qdrant: Docker, docker-qdrant-1 (healthy) - Search API: Docker, docker-search-api-1 (healthy) - Ollama: Docker, localhost:11434 - Yandex.Disk: WebDAV на /mnt/yandex-disk ## Пути - Репозиторий: `/opt/hermes/memory-os/` - Docker compose: `/opt/hermes/memory-os/docker/docker-compose.yml` - .env: `/opt/hermes/memory-os/docker/.env` - Скрипты: `/opt/hermes/memory-os/scripts/` - Search API: `/opt/hermes/memory-os/search_api/main.py` - Obsidian vault (READ-ONLY): `/opt/hermes/obsidian-vault/` - Wiki target: `/opt/hermes/vault/wiki/raw/obsidian/` - State: `~/.hermes/obsidian_sync_state.json` ## Cron-задачи - memory-os obsidian sync + ingest — каждые 10 мин (LLM agent) - memory-os micro-reflection trigger — каждые 5 мин (no_agent, тихо, deliver: local) ## Переменные окружения (worker) - OLLAMA_BASE_URL=http://ollama:11434 - OLLAMA_MODEL=qwen3-8b-64k - EMBEDDING_API_BASE=http://ollama:11434/v1 - REDIS_HOST=redis, REDIS_PORT=6379