← БлогObsidian · MCP · Cloudflare
Obsidian переїхав у мій AI-хаб: одне підключення до всіх сервісів і схеми, які малює агент
Сховище Obsidian тепер живе на Cloudflare, а kosh — одне MCP-підключення до задач, нотаток, Telegram, Go-Alpha, Instagram і мого Mac. Агент малює схеми в Excalidraw прямо в сховищі. Як це влаштовано і де межі.
Опубліковано 31 жовт. 2026 р.7 хв читання
TL;DR
Моє сховище Obsidian більше не живе на Mac. Воно живе на Cloudflare, у kosh-vault. Mac і iPhone синхронізуються з ним через плагін Self-hosted LiveSync.
kosh — мій особистий AI-хаб. Це одне MCP-підключення, за яким стоять усі мої сервіси: задачі, нотатки, Telegram, Go-Alpha, Instagram, вартовий мого Mac і shell на ньому.
А ще агент тепер малює схеми в Excalidraw прямо в сховищі. Я відкриваю Obsidian — і бачу його думку картинкою. Можу поправити її руками, і агент побачить мої правки.
Що боліло
Проблем було дві. Під кожною — як було і як стало.
1. Кожен сервіс — окреме підключення
БУЛО — 5 підключень:
Claude ──▶ задачі
Claude ──▶ Telegram
Claude ──▶ Go-Alpha
Claude ──▶ Instagram
Claude ──▶ нотатки (лише на Mac)
СТАЛО — 1 підключення:
Claude ──▶ kosh ──▶ усі ці сервісиІ так у кожному клієнті: Claude Code, claude.ai, телефон. Новий сервіс треба було додавати в кожен окремо. А нотатки Claude міг правити тільки на Mac.
2. Правка агента йшла до нотаток кружним шляхом
БУЛО:
агент ──▶ GitHub ──(до 2 хв)──▶ Mac ──(iCloud)──▶ iPhone
СТАЛО:
агент ──▶ kosh-vault ──(~1 с)──▶ Mac і iPhoneРаніше правку з GitHub забирав плагін Obsidian Git — до двох хвилин, і тільки коли Obsidian на Mac відкритий. До iPhone вона їхала ще й через iCloud. Тепер сховище в хмарі, і Mac може спати.
Сховище переїхало в хмару
Я хотів одне джерело правди. Таке, що не засинає разом із ноутбуком.
Знайшовся готовий проєкт: livesync-workers — бекенд для плагіна Self-hosted LiveSync на Cloudflare Workers. Я форкнув його і назвав kosh-vault.
Правда тепер — це база SQLite у Durable Object. Obsidian на Mac і на iPhone тримає з нею живе з'єднання і отримує кожну зміну приблизно за секунду. По суті, Obsidian поверх вебсокетів.
Mac може спати — сховище все одно доступне агентам. Усі інші копії лише йдуть за хмарою: щогодинний бекап у GitHub і дзеркало в iCloud тільки для читання.
keepReplicationActiveInBackground: true. Інакше синхронізація стає на паузу, коли вікно Obsidian сховане за іншими, — і правки агента приходять лише тоді, коли я дивлюсь.kosh — одні двері
kosh — це кілька Workers на Cloudflare. Назва — від козацького коша, штабу Січі.
Усередині кожен сервіс лишився окремим. Telegram і Go-Alpha працюють у Cloudflare Containers. Instagram — звичайний Worker. Нотатки — kosh-vault. Але назовні вхід один: /mcp.
Що це означає на практиці:
- Хаб збирає інструменти всіх сервісів в один список під їхніми рідними назвами. Клієнт бачить одне підключення.
- Сервіси говорять між собою через service bindings Cloudflare, а не через публічні адреси зі спільним токеном.
- Ключі сторонніх сервісів я вставляю на одній сторінці підключень. Вони зберігаються зашифрованими, і назад їх ніхто не показує.
- Якщо сервіс лежить, його інструменти лишаються в списку, а виклик чесно відповідає: «недоступний».
Уся суть коша була в тому, щоб через нього були доступні всі мої сервіси, а не підключати кожен окремо.
Задачі — просто markdown
Моя єдина система задач — нотатки в сховищі. Одна зона — один файл. Пріоритет — емодзі Obsidian Tasks на рядку.
Агент додає, переносить і закриває задачі інструментами tasks_*. Кожен запис перевіряється за хешем вмісту: якщо файл змінився під ним, операція проходить заново. І кожна правка лягає рядком у журнал.
Дошку з задачами kosh малює сам, у файлі Excalidraw. Я змінив список руками — за хвилину крон це помічає і перемальовує дошку. Пише він її лише тоді, коли на ній справді щось змінилось.
Агент малює схеми
Це найновіша частина. Чотири інструменти: drawing_list, drawing_read, drawing_create, drawing_edit.
Я прошу: «намалюй, як влаштований цей процес». Агент створює файл .excalidraw.md у сховищі. Секунда — і він у мене на Mac, а плагін Excalidraw відкриває його як свій.
агент
│ просить змінити схему (drawing_edit)
▼
kosh
│ записує файл малюнка
▼
kosh-vault (Cloudflare)
│ LiveSync доставляє, ~1 с
▼
відкритий малюнок в Obsidian оновлюєтьсяУ плагіна Excalidraw є власний CLI. Але йому потрібен запущений Obsidian на Mac. Тому kosh пише файл сам, у форматі плагіна, — і працює навіть тоді, коли Mac спить. Кожне правило нижче перевірене на справжньому плагіні:
- Кожен змінений елемент отримує нову версію — не меншу за поточний час у секундах. Інакше відкритий малюнок мовчки ігнорує правку.
- Видаляти — позначкою
isDeleted. Елемент, який просто зник із файлу, лишається у відкритому вікні й повертається з наступним збереженням. - Текст міняється в двох місцях: у JSON і в секції Text Elements. Перемагає Text Elements.
- Файл пишеться стисненим, як його пише сам плагін. Тоді відкрите вікно не перезберігає його зайвий раз.
Розкладку агент може не рахувати сам: є автоматична. 80 блоків і 118 стрілок у шести секціях розкладаються за 2,9 секунди. Першу справжню схему я подивився у своєму Obsidian і сказав: «так, все чудово».
Чесні межі
Найслабше місце — малюнок, відкритий у мене на екрані, поки агент його править.
Після першої чужої правки плагін ще раз зберігає малюнок. Якщо агент пише знову раніше, ніж це збереження дійшло до хмари, у LiveSync виникає конфлікт.
Конфлікт нічого не губить: LiveSync тримає обидві версії. Але нотатка завмирає на диску, а на екрані вискакує діалог «Conflicting changes». Ось що показав живий тест — правки одна за одною у відкритий малюнок:
| Пауза між правками | Прийнято записів | Діалогів конфлікту |
|---|---|---|
| 15 с | 25 | 0 |
| 5 с | 30 | 1 |
| 1 с | 3 | 1 |
| без паузи | 6 | 1 |
Вибірки малі. Це тенденція, а не статистика. Пауза — не гарантія.
Тому kosh навчився зливати такі конфлікти сам. Він бере спільного предка двох версій і порівнює елемент за елементом. Я змінив блок C, агент — блок A? Обидві зміни лишаються, а діалог закривається сам приблизно за 10 секунд. Після виправлень той самий тест:
| Пауза між правками | Прийнято записів | Діалогів конфлікту |
|---|---|---|
| 5 с | 24 | 0 |
| 1 с | 29 | 1 — закрився сам за 12 с |
Чого kosh свідомо не зливає: коли обидва боки змінили той самий елемент. Обидві версії можуть бути моєю роботою, тож цей діалог лишається мені. Конфлікт між двома моїми пристроями kosh теж не чіпає — тільки той, де одна з версій його власна.
Пастки, на які я наступив
- Linter ламав малюнки. Його правило робило заголовки секцій з малої літери. Плагін Excalidraw шукає їх з урахуванням регістру, тож переставав їх бачити — і кожне збереження дописувало ще одну секцію. Рішення: виключити
.excalidraw.mdз Linter. - Не запускай другий Obsidian на тому самому Mac. Тестова копія з окремою домашньою текою підняла системний діалог із пропозицією скинути мій Keychain.
- Shell на Mac — це не пісочниця. kosh може виконати команду на моєму ноутбуці від мого імені. Тому все, що видаляє, встановлює, пушить чи торкається ключів, — лише після мого «так» на конкретну команду. А вимкнути канал я можу файлом на самому Mac.
- livesync-workers — молодий проєкт з одним автором. Тому форк, і щогодинний бекап у GitHub.
Що це дає
Я відкриваю будь-який клієнт Claude — на Mac, у браузері чи на телефоні. У нього вже є все: задачі, нотатки, Telegram, дослідження, стан Mac.
А те, що важко тримати в голові, агент кладе на полотно. Я дивлюсь, правлю руками — і агент бачить мої правки.
Помітили помилку?
Невірний факт, кривий переклад, щось звучить неправдиво в цій статті? Напишіть мені — своєю мовою.