• Обслуживание убивает любую 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