obsidian-ingest — Ингест знаний в SecondBrain
Скилл-координатор пайплайна ингеста: взять один markdown-источник, понять, какие знания в нём скрыты, и создать нужные файлы. Форматирование, frontmatter и связи — часть ингеста, ты делаешь их сам.
Правила хранилища из ../../rules/ (frontmatter, атомарность, стиль, теги, именование) загружены в каждую сессию — следуй им, здесь описан только пайплайн. Для внешнего research по необходимости подключай .agents/skills/deep-research/SKILL.md.
Шаг 1. Прочитай и пойми источник
Большой источник (файл или URL больше ~15 КБ) не читай в основной контекст. Запусти субагента obsidian-source-reader (Agent tool, subagent_type obsidian-source-reader), передав путь или URL, — он прочитает источник целиком и вернёт структурированную выжимку: метаданные, главный тезис, кандидатов в атомарки с цитатами-опорами, противоречия, термины. Формат выжимки зафиксирован в самом агенте (.agents/agents/obsidian-source-reader.md).
Дальше основная сессия работает только с выжимкой: ищет дубликаты в базе, составляет план, создаёт заметки, расставляет связи. Малый источник (меньше ~15 КБ) читай напрямую, как обычно.
По итогам чтения или выжимки определи: тип контента, главную тему (одна фраза), домен (теги таксономии) и стартовый confidence (medium если источник один).
Шаг 1.5. Внешний research (опционально)
Запускай только при срабатывании триггера: источник старше 2 лет на технологическую тему; тезисы с «многие/часто/обычно» без конкретики; инструмент или паттерн, которого нет ни в одной существующей заметке (проверь rg); единственный источник просится в confidence: high; пользователь явно попросил «обогати», «дополни», «исследуй».
Если триггеров нет — переходи к шагу 2. Методичка — deep-research. Потолок — 3–5 внешних источников: цель — обогатить этот источник, а не написать обзор по теме. Запросы формулируй на текущей дате и по-английски, результаты записывай по-русски.
По итогам зафиксируй для шагов 4–5: что подтверждается (повод для confidence: high), что расширяется (абзац в литературке и атомарках), что противоречит (callout + contradicts).
Шаг 2. Извлеки сущности
Типы: концепты и модели, инсайты (нетривиальные выводы), факты, практики («как делать»). Критерии атомарности — навык /knowledge-structures, раздел «Когда выделять раздел в отдельную заметку».
Выделяй столько сущностей, сколько в источнике реально самостоятельных идей. Одна или ноль — нормальный результат: не дотягивай до «нормы» и не дроби ради количества.
Шаг 2.5. Семантический поиск существующих заметок
Каждую сущность прогони через myvault_search — он ловит уже написанное другими словами, тогда как rg на шаге 3 найдёт только точное совпадение имени. Запросы: главный тезис по-русски + английский эквивалент термина. Параметры гибридного поиска — см. CLAUDE.md.
Дополнительно один запрос по теме источника целиком — он даёт 5–10 кандидатов на обновление (требование workflows.md, «Ингест внешнего источника»).
Решение по каждой сущности: нашлась заметка с близким тезисом → она идёт в блок «Обновить существующие», не «Создать новые»; нашлись только смежные темы → создаём новую, кандидаты в other или wikilinks из тела; ничего релевантного → создаём новую. Зафиксируй для шага 4 список кандидатов на обновление и что именно в каждом меняешь.
Шаг 3. Придумай названия заметок
Стиль (claim-based) и запрещённые символы — file-naming.md. Перед именованием — rg -l "<ключевое слово>" для проверки точных дубликатов; семантические уже отловлены на шаге 2.5. Если похожая заметка есть — план включает обновление существующей, а не создание новой.
Шаг 4. Составь план ингеста
Протокол «план → подтверждение → действие» — workflows.md. Все новые файлы создаются в 00. Входящие/, целевая папка в плане — справочно (переезд после ревью автором). Формат:
📄 Литературная заметка: «Название источника»
→ 00. Входящие/ (#literature-note #review → 03. Ресурсы/03. Литературные заметки/)
📝 Новые атомарные заметки:
1. «Название заметки А» — суть одним предложением
→ 00. Входящие/ (#thought #review → 03. Ресурсы/04. Заметки/)
🔄 Обновить существующие:
- [[Существующая заметка]] — что именно меняется
🗺 MOC (если нужен):
- [[MOC по теме]] — добавить новые заметки
🔬 Внешний research (если был шаг 1.5):
- триггер, число запросов/источников; что подтверждено / расширено / противоречит
Существующую заметку перед правкой прочти и опиши в плане, что меняешь. Не перезаписывай молча.
Шаг 5. Создай файлы
После подтверждения плана — в порядке: литературка → атомарки → обновление существующих.
5а. Литературная заметка
В 00. Входящие/ (целевая — 03. Ресурсы/03. Литературные заметки/). Файл заводи через Templater по Шаблон литературной цитаты.md — рецепт и грабли в навыке /note-templates, раздел «Как применить шаблон технически»; поля дозаполняй Edit-ом. Формат полей summary, sources, contradicts, ai_generated — политики в note-types-frontmatter.md.
Блок ниже — что должно получиться после заполнения, а не шапка для копипасты:
---
aliases: []
tags:
- literature-note
- review
up: []
links:
- "URL источника (если есть)"
sources:
- "Название и автор источника"
contradicts: []
confidence: medium
summary: "Главный тезис источника и чем он полезен"
ai_generated: true
---
## О чём
2–3 предложения: что это за текст и зачем его читать.
## Ключевые идеи
- [[Атомарная заметка А]] — одно предложение о чём
## Цитаты и фрагменты
> Важная цитата, которую хочется сохранить дословно.
## Внешний контекст
Секция появляется только если выполнялся шаг 1.5: что подтверждается, расширяется или опровергается внешними данными, с inline-ссылками на URL. Не было research — секции нет.
## Вопросы и следующие шаги
Опциональная секция: заполняй, только если по источнику остались реальные открытые вопросы. Не выдумывай вопросы ради секции — если их нет, пропусти её целиком.
5б. Атомарные заметки
Для каждой сущности из плана — заметка в 00. Входящие/ (целевая — 03. Ресурсы/04. Заметки/), через Templater по Шаблон мысли.md (концепт — Шаблон концепта.md); см. навык /note-templates. Тело держи в 300–800 знаках: это медиана авторской атомарки, а не формальный лимит — всё сверх одной мысли либо пересказывает родителя, либо является второй заметкой (note-density.md). Блок ниже — результат заполнения, не шапка для копипасты:
---
aliases: []
tags:
- thought
- review
up:
- "[[Литературная заметка — источник]]"
links: []
sources:
- "Название источника"
contradicts: []
confidence: medium
other: []
summary: "Суть утверждения в claim-стиле"
ai_generated: true
---
## Суть
По умолчанию ОДИН абзац своими словами — больше только если идея реально не влезает. Не копируй дословно из источника. Пиши так, чтобы через год было понятно без открытия источника.
## Контекст
Опциональная секция: откуда пришла идея. Пропусти её целиком, если нечего сказать сверх того, что уже видно из up/sources.
## Связанные идеи
Опциональная секция: - [[Другая заметка]] — почему связана. Пропусти целиком, если содержательных связей сверх up/sources нет.
5в. Обнови существующие заметки
Для каждой заметки из плана:
- Добавь новый источник в
sources(никогда не очищай поле) - Добавь wikilink на новую атомарку или литературку
- Если информация расширяет — абзац со ссылкой на источник; если противоречит — callout
> [!warning] Противоречие: …+ взаимные ссылки вcontradicts(политика —note-types-frontmatter.md) - При существенной правке тела обнови
summary; отсутствующийsummaryдобавь (это НЕ повод ставитьai_generated)
5г. Применение находок research (если был шаг 1.5)
- Подтверждение → в атомарке
confidence: medium → high, внешний URL вsourcesрядом с литературкой (литературная остаётся первой) - Расширение → абзац в атомарке с inline-ссылкой + пункт в «Внешнем контексте» литературки
- Противоречие → callout + двусторонний
contradicts; если альтернативная позиция тянет на самостоятельную идею — отдельная атомарка с взаимными ссылками - Внешних URL в
sourcesатомарки — не больше 2–3, лишние идут только в литературку
Шаг 6. Проверка плотности
Перед отчётом прогони созданные файлы:
python3 .agents/scripts/check_note_density.py "00. Входящие"
Скрипт печатает объём тела против авторского корпуса, пустые секции шаблона, вводные обороты, эхо summary и дубли связей. Находки правь сразу. Формально сокращать не нужно: если после снятия воды остаются две разные мысли — это obsidian-split-note, а не редактура.
Шаг 7. Финальный отчёт
✅ Создано: [[Литературная заметка]], [[Заметка А]], …
🔄 Обновлено: [[Существующая заметка]] — что именно
⚠️ Проверить: спорные решения (не нашёл похожей заметки, выбор confidence, …)
🔬 Research (если был): триггер, источники, поднятые confidence, зафиксированные противоречия
Правила, которые нельзя нарушать
- Не удаляй исходный файл — пользователь сам решит, что с ним делать
- Не переписывай существующие заметки с нуля — только дополняй
- Не создавай «мёртвые» wikilinks — ссылки только на существующие или только что созданные заметки
- Не плоди теги и frontmatter-поля — только существующая таксономия и поля из шаблонов
- Сохраняй авторский голос — живой текст источника не превращай в сухую документацию
- Поле
sourcesникогда не очищай - Не раскрывай мысль там, где надо её зафиксировать — вводных абзацев, закругляющих финалов и аналогий «для наглядности» в агентской заметке не бывает; пустую секцию шаблона удаляй, а не заполняй (
note-density.md)
Маршрутизация по PARA (какой тег — в какую папку) — таблица в tags.md. Все новые файлы рождаются в 00. Входящие/ с #review; обновление существующих заметок идёт на месте.