Ґайд міграції для AI-агента: як перенести будь-який Obsidian Vault у структуру P.O.W.E.R.¶
Цільова аудиторія: AI-агенти (Claude, GPT, Gemini, OpenCode) з MCP-доступом до P.O.W.E.R.
Мета: Перетворити будь-який неструктурований Obsidian Vault на P.O.W.E.R.-сумісну базу знань з валідованими OKF-метаданими, P.A.R.A. структурою папок та ієрархічними індексами — повністю автономно.
Огляд¶
Цей протокол дозволяє будь-якому LLM-агенту виконати міграцію, комбінуючи:
- MCP-інструменти —
ingest_note,lint_vault,generate_index,read_sub_index,search_vault_tool - Доступ до файлової системи — читання
.mdфайлів, переміщення старих файлів - Інтелект LLM — класифікація нотаток за категоріями P.A.R.A., визначення тайтлів, генерація описів
Агент виконує 6 фаз. Кожна фаза має чіткі критерії успіху.
Фаза 1: Дослідження (Discovery)¶
Мета: Зрозуміти поточний стан Vault.
Кроки¶
-
Проскануйте директорію Vault — знайдіть всі
.mdфайли рекурсивно, виключаючи.git/,node_modules/,__pycache__/,.venv/. -
Прочитайте кожен
.mdфайл — захопіть повний вміст. Зверніть увагу: - Чи є вже YAML frontmatter?
- Чи є поля
type,title,description? -
Яка поточна структура папок?
-
Визначте існуючі патерни — знайдіть:
- Теги (
#tagв тексті абоtags:у frontmatter) - Вікіпосилання (
[[Назва Нотатки]]) - Вкладені файли (
![[image.png]]) -
Назви папок, що натякають на категорії (наприклад, "Projects", "Archives")
-
Запустіть
lint_vault(vault_path)— базова перевірка здоров'я. Запишіть скільки нотаток не мають метаданих та скільки битих посилань.
Критерій успіху: Ви маєте повний інвентар всіх нотаток та їх поточного стану.
Фаза 2: Класифікація¶
Мета: Проаналізувати кожну нотатку та визначити її категорію P.A.R.A. + OKF-метадані.
Правила¶
Кожна нотатка отримує рівно один type:
| Type | P.A.R.A. Папка | Коли використовувати |
|---|---|---|
Project |
01_Projects/ |
Активна робота з дедлайном або результатом |
Area |
02_Areas/ |
Постійна відповідальність без фіксованого дедлайну |
Resource |
03_Resources/ |
Довідкові матеріали, гайди, зовнішні посилання |
Archive |
04_Archive/ |
Завершені або застарілі проекти |
Daily Log |
06_Daily_Logs/ |
Часозалежні записи, сесійні логи, щоденники |
System Guide |
PROTOCOLS/ |
Інструкції для AI-агентів, операційні протоколи |
Для кожної нотатки визначте:¶
title— заголовок H1 або ім'я файлу (1-200 символів)description— опис в один рядок (1-150 символів)type— категорія P.A.R.A. (див. таблицю)tags— релевантні ключові слова (опціонально, список рядків)resource— якщо нотатка посилається на зовнішній URL (опціонально)
Евристики класифікації¶
- Використовуйте назву папки як підказку:
old_projects/→ ймовірноArchiveабоProject - Аналізуйте вміст: щоденниковий стиль →
Daily Log; довідковий →Resource - Перевіряйте внутрішні посилання: якщо багато посилань з інших нотаток → активне →
AreaабоProject - Якщо не впевнені — за замовчуванням
Resource
Критерій успіху: Кожна нотатка має чернетку (type, title, description, tags).
Фаза 3: Міграція¶
Мета: Створити кожну нотатку у відповідній папці P.A.R.A. з валідованим OKF frontmatter.
Крок 3a: Підготуйте скелет Vault (якщо потрібно)¶
Якщо Vault ще не має папок P.A.R.A., запустіть:
power init /шлях/до/vault
Або створіть структуру папок вручну:
00_Inbox/
01_Projects/
02_Areas/
03_Resources/
04_Archive/
05_Templates/
06_Daily_Logs/
PROTOCOLS/
Крок 3b: Інгест кожної нотатки¶
Для кожної класифікованої нотатки викличте MCP-інструмент ingest_note:
{
"name": "01_Projects/My-Project", // P.A.R.A. шлях + ім'я файлу (без .md)
"note_type": "Project", // З NoteType enum
"title": "My Project", // Людський заголовок
"description": "Будуємо наступну велику річ", // 1-150 символів
"content": "<повний вміст markdown>", // Оригінальний вміст
"tags": ["active", "dev"], // Опціонально
"resource": "https://github.com/..." // Опціонально
}
Важливі правила:
nameвключає префікс папки P.A.R.A. + ім'я файлу (підкреслення, без пробілів)note_typeмає відповідати папці:01_Projects/→type: Projectcontent— це повний оригінальний markdown — спочатку видаліть старий YAML frontmatter- Інструмент
ingest_noteавтоматично: - Валідує всі метадані через Pydantic v2
- Записує файл з правильним OKF frontmatter
- Перебудовує ієрархічний індекс
- Додає запис у
log.md - Запускає перевірку lint
Крок 3c: Пакетна ефективність¶
Для великих Vault (>50 нотаток) групуйте інгести за категоріями. Спочатку Resource, потім Area, потім Project і т.д. Це робить перебудову індексу передбачуваною.
Критерій успіху: Всі нотатки перестворено в папках P.A.R.A. з валідним OKF frontmatter. Індекс актуальний.
Фаза 4: Верифікація¶
Мета: Підтвердити, що Vault повністю здоровий.
Кроки¶
-
Запустіть
lint_vault(vault_path)— очікуйте:✅ OKF Metadata: 0 помилок ✅ Internal Links: 0 битих ✅ Orphans: 0 (або очікувані в Daily Logs) -
Вибірково перевірте файли — прочитайте 3-5 випадкових нотаток, щоб переконатися, що frontmatter правильний і вміст цілий.
-
Перевірте ієрархічний індекс — викличте
read_sub_index(category="01_Projects", vault_path=...)і переконайтеся, що повертається валідний sub-index. -
Перевірте пошук — викличте
search_vault_tool(query="test", vault_path=...)і переконайтеся, що результати коректні.
Критерій успіху: Lint проходить з нульовими помилками. Вибіркова перевірка проходить.
Фаза 5: Прибирання (Опціонально)¶
Мета: Видалити старий, неструктурований файли після верифікації міграції.
Кроки¶
- Знайдіть файли, що залишилися поза папками P.A.R.A.
- Для кожного:
- Якщо успішно мігровано (вміст існує в папці P.A.R.A.) — видаліть
- Якщо не мігровано — дослідіть і класифікуйте
- Після всіх видалень запустіть
generate_index(vault_path)для оновлення - Виконайте фінальний
lint_vault(vault_path)
⚠️ Увага: Видаляйте файли тільки після повної верифікації. Для безпеки краще переміщувати в 04_Archive/, ніж видаляти.
Фаза 6: Післяміграційне самопідтримання та Синхронізація (Post-Migration Maintenance & Sync)¶
Мета: Гарантувати постійне збереження здоров'я бази знань між сесіями роботи AI-агентів, а також синхронізувати зміни із віддаленим сховищем.
Крок 6a: Встановлення P.O.W.E.R. Framework для AI-агентів¶
Для автономної роботи агента на цільовому хості встановіть інструментарій P.O.W.E.R. глобально або у віртуальне середовище проєкту:
pip install git+https://github.com/weby-homelab/power-framework.git
Налаштуйте інтеграцію MCP-сервера у вашому клієнті AI-агента або конфігураційному файлі IDE (наприклад, cline_config.json, opencode.jsonc, налаштуваннях Cursor/Windsurf тощо):
"mcpServers": {
"power": {
"command": "python",
"args": ["-m", "power_framework.mcp"],
"enabled": true
}
}
Це надає вашому агенту доступ до інструментів валідації (lint_vault), автоматичного індексування (generate_index, read_sub_index) та пошуку (search_vault_tool).
Крок 6b: Оптимізація контексту (Файли ігнорування)¶
Для запобігання переповненню контексту AI-агента зайвими файлами (бінарними файлами, кешами, системними папками Git) створіть файл конфігурації ігнорування (наприклад, .geminiignore, .cursorignore або .gitignore залежно від вашого IDE) у корені робочого простору:
.git/
.gitignore
.geminiignore
.cursorignore
__pycache__/
*.pyc
.venv/
venv/
node_modules/
*.db
*.key
*.pem
*.crt
*.log
Крок 6c: Конфігурація інструкцій та правил для AI-агентів¶
Налаштуйте передачу правил проєкту вашому агенту через системні файли правил (наприклад, .clinerules, .cursorrules, .windsurfrules) або секцію інструкцій у конфігурації клієнта.
Приклад структури файлів інструкцій:
- RULES.md / INSTRUCTIONS.md — загальні правила поведінки агента.
- MASTER-LESSONS-LEARNED.md — журнал засвоєних уроків та edge-cases для запобігання повторенню помилок.
- power/SKILL.md — правила роботи з методологією P.A.R.A.
Крок 6d: Виправлення внутрішніх вікіпосилань¶
Оскільки файли переміщуються у папки P.A.R.A. (01_Projects/, 02_Areas/ тощо), старі прямі вікіпосилання стають недійсними. AI-агент має перевірити та оновити посилання [[Назва нотатки]] на релевантний відносний шлях у форматі [[P.A.R.A. папка/Назва нотатки|Аліас]].
P.O.W.E.R. Linter автоматично перевіряє биті посилання, а оновлення виконується через скрипт автокорекції або інструменти редагування коду.
Крок 6e: Автоматичне оновлення індексів (_index.md)¶
Файли _index.md для кожної папки P.A.R.A. є обов'язковими навігаційними картами. Вони генеруються автоматично через команду power index.
Правило для агента: Після будь-якої зміни структури нотаток (додавання, переміщення, видалення) завжди виконуйте регенерацію індексів за допомогою MCP-інструменту generate_index або CLI power index.
Крок 6f: Виключення системних папок¶
Переконайтеся, що валідатор та генератор індексу ігнорують приховані та системні папки (наприклад, .git/, .obsidian/), щоб уникновувати помилкових попереджень про відсутність метаданих або битих посилань у тимчасових файлах.
Крок 6g: Щоденний протокол обслуговування (Daily Maintenance)¶
Сесія роботи з базою знань має завершуватися циклом самопідтримання:
1. Збереження логу сесії — створення нотатки в 06_Daily_Logs/ (тип: Daily Log) з описом виконаної роботи.
2. Перебудова індексу — виконання power index для оновлення index.md та _index.md.
3. Оновлення журналу змін — додавання стислого запису в загальний log.md.
4. Валідація стану (Lint) — запуск power lint для підтвердження відсутності регресій.
Крок 6h: Чек-лист безперервності між сесіями¶
Перед початком нової робочої сесії AI-агент повинен:
1. Прочитати загальні правила проєкту та інструкції.
2. Ознайомитися з MASTER-LESSONS-LEARNED.md (журналом помилок).
3. Запустити power lint для перевірки поточного стану бази знань.
4. Прочитати навігаційний індекс index.md та історію змін log.md.
Крок 6i: Синхронізація з Git та Публікація (Sync & Publish)¶
Для збереження історії та спільного доступу до бази знань налаштуйте процес синхронізації:
1. Ідентичність комітера: Налаштуйте user.name та user.email у Git відповідно до вашого профілю розробника. Уникайте комітів від системних користувачів на кшталт root.
2. Конфігурація безпеки: Додайте конфіденційні файли (ключі, паролі, конфігураційні файли, тимчасові файли експорту) у .gitignore.
3. GPG-підпис (за наявності вимог): Налаштуйте підпис комітів (commit.gpgsign=true) за допомогою вашого персонального GPG-ключа.
4. Робочий процес Git (PR Workflow):
- Робота над змінами має вестися в окремих гілках (feature/*).
- Публікація змін у головну гілку здійснюється через Pull Request після проходження всіх локальних тестів та автоматичних перевірок (CI/CD).
Крок 6j: Повнотекстовий пошук (FTS) на базі SQLite FTS5¶
Фреймворк P.O.W.E.R. включає вбудовану систему повнотекстового пошуку на базі SQLite FTS5. Вона автоматично створює локальну базу даних .power_search.db у корені Vault та інкрементально синхронізує її при кожному виклику пошуку.
Правила використання пошуку для AI-агентів:
1. Економія токенів: Замість рекурсивного сканування файлової системи (glob **/*.md) або зчитування вмісту файлів для пошуку ключових слів, агенти зобов'язані використовувати MCP-інструмент search_vault_tool(query, max_results=20). Це знижує споживання контексту на 95%+.
2. Синтаксис запитів:
- Пошук за фразою: Використовуйте подвійні лапки для пошуку точних фраз, наприклад: search_vault_tool(query='"Docker Compose"').
- Пошук за префіксом: Скрипт автоматично додає зірочку * до кожного слова (наприклад, dock* знайде docker, docking тощо) для гнучкості.
- Уникайте спецсимволів: Не передавайте спецсимволи (окрім подвійних лапок), оскільки вони можуть викликати синтаксичну помилку в SQLite FTS5.
3. Безпека: Файл бази даних .power_search.db автоматично додається до .gitignore та .geminiignore (через маску *.db), тому його категорично заборонено комітити в Git.
Приклад: Повний транскрипт міграції¶
Ось як виглядає повна міграція з точки зору агента:
Agent: Сканую Vault /Users/alice/obsidian...
Agent: Знайдено 47 .md файлів, 12 папок
Agent: 31 мають frontmatter, 16 — сирий markdown
Agent: Запускаю класифікацію всіх нотаток...
Нотатка "Daily Thoughts 2026-06-15" → Daily Log
Нотатка "Project Alpha Requirements" → Project
Нотатка "Docker Cheatsheet" → Resource
Нотатка "Old Meeting Notes 2024" → Archive
...
Agent: Мігрую через MCP-інструмент ingest_note...
✅ 01_Projects/Project-Alpha-Requirements.md
✅ 01_Projects/Project-Beta-Plan.md
✅ 02_Areas/Health-Routine.md
✅ 03_Resources/Docker-Cheatsheet.md
✅ 04_Archive/Old-Meeting-Notes-2024.md
✅ 06_Daily_Logs/2026-06-15_Daily-Thoughts.md
... (всього 47 нотаток)
Agent: Запускаю lint...
✅ OKF Metadata: 0 помилок
✅ Internal Links: 0 битих
✅ Orphans: 3 нотатки (всі в 06_Daily_Logs — виключення)
Agent: Запускаю Фазу 6: Синхронізація та Публікація...
Agent: Імпортую GPG-ключ та налаштовую ідентичність Git
Agent: Створюю підписаний коміт у гілці feature/power-migration
Agent: Надсилаю зміни до GitHub та створюю Pull Request
Agent: Перевіряю статус CI/CD воркфлоу...
✅ Збірка MkDocs успішна: https://weby-homelab.github.io/power-framework/
Agent: Міграцію та публікацію успішно завершено. Vault сумісний з P.O.W.E.R.
Вирішення проблем¶
| Проблема | Причина | Виправлення |
|---|---|---|
ingest_note повертає "Note already exists" |
Нотатку вже мігровано | Пропустіть і йдіть далі |
Lint повідомляє про відсутній type |
Нотатка не має frontmatter | Переінгестіть з явним note_type |
| Бите посилання після міграції | [[посилання]] змінили імена файлів |
Запустіть скрипт авто-ремонту з Кроку 6d |
read_sub_index повертає "No notes found" |
Папка категорії порожня або не проіндексована | Спочатку запустіть generate_index(vault_path) |
Забагато orphans в 04_Archive/ |
Архівні нотатки за визначенням мають мало посилань | Це очікувано — orphans в архіві нормальні |
| Lint повідомляє 200+ зайвих нотаток | Директорію .git/ не виключено |
Оновіть лінтер для пропуску прихованих папок (v1.5.0+ робить це) |
_index.md не має frontmatter |
Використовується стара версія фреймворку | Оновіться до v1.5.0+ або перезапустіть generate_index |
pip install падає з PEP 668 |
Системний Python блокує пряме встановлення | Використовуйте venv: /шлях/до/venv/bin/pip install ... |
Додатки¶
A. Відповідність папок та типів¶
| Папка | note_type |
Типовий вміст |
|---|---|---|
00_Inbox/ |
Будь-який | Необроблені чернетки (агент має класифікувати та перенести) |
01_Projects/ |
Project |
Активні проекти з результатами |
02_Areas/ |
Area |
Постійні обов'язки |
03_Resources/ |
Resource |
Довідники, гайди, зовнішні посилання |
04_Archive/ |
Archive |
Завершені/мертві проекти |
06_Daily_Logs/ |
Daily Log |
Часозалежні щоденникові записи |
PROTOCOLS/ |
System Guide |
Інструкції для агентів, правила |
B. Необхідні MCP-інструменти¶
| Інструмент | Використовується у фазі |
|---|---|
ingest_note(name, note_type, title, description, content, tags?, resource?) |
Фаза 3 |
lint_vault(vault_path?) |
Фаза 1, 4, 5, 6 |
generate_index(vault_path?) |
Фаза 5, 6 |
read_sub_index(category, vault_path?) |
Фаза 4, 6 |
search_vault_tool(query, vault_path?) |
Фаза 4, 6 |
C. Швидка довідка: поля OKF Frontmatter¶
---
type: Project | Area | Resource | Daily Log | Archive | System Guide
title: "Людський заголовок (1-200 символів)"
description: "Опис в один рядок (1-150 символів)"
resource: "https://..." # Опціонально
tags: [tag1, tag2] # Опціонально
timestamp: 2026-07-03T12:00:00 # Авто-генерується
---
Створено AI-агентами для AI-агентів ⚡
© 2026 Weby Homelab