- Обслуживание убивает любую wiki; агент делает bookkeeping бесплатно и без жалоб
- Три слоя: raw-источники, wiki-страницы, схема; один ingest трогает 10-15 страниц
- Пять slash-команд как интерфейс; вся система ставится одним промптом, код открыт
Задача
Большинство систем «LLM плюс документы» работают как поиск: загрузил файлы, спросил, получил синтез. Ничего не накапливается. Структура, которую модель построила, отвечая на вопрос, выбрасывается до следующего; второй такой же вопрос запускает ту же дорогую работу заново. Связи между документами не хранятся.
Человеческие wiki ломаются с другой стороны. Стоимость поддержания графа в порядке (обновить перекрёстные ссылки, согласовать противоречия, вычистить устаревшее) растёт быстрее, чем польза от графа. Люди бросают wiki не потому, что wiki плохи, а потому что обслуживание скучно, и скука масштабируется с числом страниц. Zettelkasten, Roam, Obsidian, TiddlyWiki: каждая система спотыкается об одну и ту же проблему.
У LLM этого ограничения нет. Модель обновит пятнадцать страниц за проход, пройдёт по каждой ссылке, отметит каждое противоречие и повторит завтра. Дефицитный ресурс, который убивал wiki, — внимание к bookkeeping — у агента в избытке. Отсюда разделение: человек владеет курированием и суждением, агент владеет всем слоем обслуживания. Подход описал Андрей Карпатый в заметке «LLM Knowledge Bases»; его наблюдение, что автоподдерживаемый индекс работает лучше «fancy RAG» (Карпатый), совпало с моим. Эта статья не про идею — она его, — а про воспроизводимую реализацию: Obsidian как интерфейс, Claude Code как мейнтейнер, открытый репозиторий.
Метод
Три слоя.
Raw-источники (raw/). Неизменяемая коллекция: статьи, PDF, транскрипты встреч, голосовые заметки, вырезки страниц. Агент читает отсюда и никогда сюда не пишет. Это ground truth.
Wiki (wiki/). Markdown-страницы, которые агент создаёт и поддерживает, разложенные по типу: sources/ (одна summary-страница на источник), entities/ (люди, организации, системы), concepts/, topics/ (синтез по нескольким источникам), analyses/ (сохранённые ответы на запросы), projects/, personal/, research/, meta/. Два файла особые. index.md — это мастер-каталог, каждая страница с однострочной summary; агент читает его первым при любом запросе, и как лёгкий поисковый индекс он работает до ~100 источников и сотен страниц. log.md дописывается только в конец, каждая запись с префиксом даты и операции, чтобы парсилась unix-инструментами.
Схема (CLAUDE.md). Файл в корне хранилища, который говорит агенту, как wiki устроена, каким конвенциям следовать, какой формат страницы использовать и какие процессы запускать. Самый важный файл системы: без него агент — чат-бот, с ним — дисциплинированный мейнтейнер, чьё поведение совпадает от сессии к сессии.
flowchart LR
R[(raw/:<br/>источники)] -->|только чтение| A[Агент]
A -->|пишет| W[wiki/:<br/>страницы, index, log]
S[CLAUDE.md:<br/>схема и конвенции] -.-> A
classDef key stroke:#FF3600,stroke-width:2px
class S keyФормат страницы один для всех:
---
type: concept | entity | project | ...
created: 2026-04-20
updated: 2026-05-18
tags: [..]
---
Текст с перекрёстными ссылками. У каждой страницы хотя бы одна входящая.
Четыре операции.
Ingest. Источник попадает в raw/. Агент читает, обсуждает выводы с пользователем, пишет summary-страницу и распространяет: на каждого упомянутого человека обновляет или создаёт entity, на каждую идею — концепт, на каждый затронутый проект — синтез. Один ingest трогает 10–15 страниц. Здесь происходит накопление.
flowchart LR
R[Источник<br/>в raw/] --> D[Обсуждение<br/>с пользователем]
D --> S[Summary-страница]
S --> E[Entity на<br/>каждого человека]
S --> C[Концепт на<br/>каждую идею]
S --> P[Синтез на<br/>каждый проект]Query. Агент читает индекс, находит страницы, синтезирует ответ со ссылками как цитатами. Существенные ответы (сравнения, расследования) предлагаются к сохранению в analyses/, чтобы не исчезнуть в истории чата.
Lint. Периодический аудит: страницы-сироты, битые ссылки, устаревшие страницы по порогу updated:, противоречия, концепты со ссылками, но без страницы, источники без summary. Механизм против энтропии.
Обновление, сентябрь 2026. Линт выдержал рост: в июле полный проход почти по пятистам страницам нашёл около 40 ссылок в никуда и 18 страниц без шапки, после чистки вне архива не осталось ни одной. Писателей тоже стало больше: с мая рабочие агенты пишут знания прямо в центральное хранилище, а кто куда читает и пишет, задаёт отдельная матрица доступа.
Автономный захват. Операция, от которой система ощущается живой. В начале сессии агент читает индекс и лог; по ходу сессии фиксирует решения, новых людей, находки, личный контекст; в конце сохраняет всё, что стоит хранить. Пользователь этого не вызывает — это часть каждой сессии по умолчанию.
Персистентность между сессиями. Захват работает за счёт одной детали: глобального файла конфигурации, который Claude Code читает в начале каждой сессии независимо от рабочей папки. Пользователь может писать код несвязанного проекта или прозу — wiki всё равно растёт. Стоимость обслуживания невидима, и в этом суть: люди бросают wiki, потому что обслуживание видимо. Эвристика захвата явная: фиксируем решения, обоснования, изменения статуса, новые сущности, находки; пропускаем отладочный шум, разовые правки опечаток, всё, что не будет важно завтра.
flowchart LR
G[Глобальный<br/>конфиг] --> S[Старт:<br/>индекс и лог]
S --> M[По ходу:<br/>решения, находки]
M --> F[Конец:<br/>запись в wiki]
M -.-> N[Пропуск: шум,<br/>опечатки]Сессия кончается очисткой. Захват в конце сессии ломался в самом частом сценарии: контекст очищают, и всё, что агент не успел записать, пропадает вместе с чатом. Ритуал «запиши итог перед очисткой» упаковали в команду /wrap: инвентаризация сессии, раскладка по wiki, отдельный файл передачи на диске, потом очистка. /handoff подтягивает этот файл в новом контексте, а хук на старт сессии после очистки делает это сам, один раз, по файлу-маркеру. Итог живёт на диске, потому что чат очистку не переживает. Для кодовых проектов добавился средний слой документации: коммит, затем запись в папке docs/features/ в самом репозитории, затем строка в логе wiki. Коммит фиксирует изменение, запись в репозитории объясняет, что это за фича и зачем она, а wiki держит то, что понадобится следующей сессии в любом проекте.
flowchart LR
S[Сессия] --> W[wrap: итог<br/>в файл на диске]
W --> C[Очистка<br/>контекста]
C --> H[Хук: подхват<br/>по маркеру]
H --> N[Новая сессия<br/>с итогом]
classDef key stroke:#FF3600,stroke-width:2px
class W keyПять команд. Каждая — это один markdown-файл с YAML-шапкой, кода нет; агент интерпретирует текст как инструкцию.
| Команда | Назначение |
|---|---|
/ingest <file> | Полный цикл ingest на источнике |
/wiki <question> | Поиск по wiki, ответ с цитатами |
/wiki-status | Счётчики страниц, недавняя активность, ждущие источники |
/lint-wiki | Проверка здоровья с предложениями |
/wiki-save <info> | Вручную положить факт в нужную категорию |
Для нетехнического пользователя это важно: новый навык — это абзац прозы, а не функция. Глобальный конфиг ещё и просит агента замечать повторяющиеся процессы и предлагать их в навыки: у фрилансера появляется /invoice-prep, у исследователя /literature-review.
Три слоя персонализации. Инструменты и предпочтения (агент запоминает пакетный менеджер, хостинг, дизайн-приложение при первом упоминании), личность агента (тон, подробность, проактивность; фидбэк вроде «без эмодзи» дописывается как постоянное правило) и профиль пользователя (консервативная модель привычек, обновляется только по паттерну, наблюдённому несколько раз, без домыслов о характере). Слои не сливаются; противоречие между ними — это повод спросить, а не решить молча.
flowchart TD
T[Инструменты и<br/>предпочтения] --> Q{Противоречие<br/>между слоями?}
P[Личность агента:<br/>тон, подробность] --> Q
U[Профиль: только<br/>повторы паттерна] --> Q
Q -->|да| A[Спросить,<br/>не решать молча]
Q -->|нет| K[Слои работают<br/>раздельно]
classDef key stroke:#FF3600,stroke-width:2px
class A keyРеализация. Открытый код под MIT: setup-prompt.md (один промпт, который задаёт 6–8 вопросов, создаёт хранилище, пишет схему, включает персистентность, создаёт команды и объясняет использование), 13 нумерованных гайдов по каждому решению, примеры навыков и конфигов. Установка: Obsidian, Claude Code, один промпт, открыть папку. Терминала и языка конфигурации не нужно.
Где ломается
- Дрейф между копиями. Локальная wiki, глобальный конфиг и публичный репозиторий расходятся. Лечится явным sync-процессом в конфиге и проверкой санитизации перед каждым публичным коммитом. Самый серьёзный сбой из наблюдённых.
- Неровный захват. В одних сессиях агент пишет много, в других почти ничего. Помогают явные примеры в схеме: «фиксировать решения, пропускать отладку».
- Спекулятивный профиль. Агент записывает черты, которых не наблюдал. Границы в схеме: только после двух наблюдений, без психологии, обновлять на месте.
- Масштаб и переносимость. Индекс как поиск работает до нескольких сотен страниц; на десятикратном объёме понадобится векторный поиск, и как гибридизировать его с индексом — пока открытый вопрос. Универсальный
AGENTS.mdпокрывает ещё около 15 агентов, но автономный захват вне папки хранилища работает только в Claude Code. Командные wiki с конфликтами слияния и объективные метрики полезности тоже не решены.
Итог
- Обслуживание — это ограничение, и LLM его снимает; всё остальное — следствие.
- Wiki становится полезной не из-за отдельной страницы, а потому что пятидесятая связана с сорока девятью, и агент сделал эти связи без просьбы.
- Вклад — в конкретности: раскладка папок, схема, четыре операции, консервативная персонализация, репозиторий, который можно форкнуть.
- Соседний паттерн для рабочих проектов: Файловая память агента как актив.
© Александр Никулин. Цитирование — с указанием автора и ссылкой · Версия для LLM