Skip to main content

← Блог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 тільки для читання.

Одне налаштування, без якого «живе» не працює: у LiveSync має бути 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 с250
5 с301
1 с31
без паузи61

Вибірки малі. Це тенденція, а не статистика. Пауза — не гарантія.

Тому kosh навчився зливати такі конфлікти сам. Він бере спільного предка двох версій і порівнює елемент за елементом. Я змінив блок C, агент — блок A? Обидві зміни лишаються, а діалог закривається сам приблизно за 10 секунд. Після виправлень той самий тест:

Пауза між правкамиПрийнято записівДіалогів конфлікту
5 с240
1 с291 — закрився сам за 12 с

Чого kosh свідомо не зливає: коли обидва боки змінили той самий елемент. Обидві версії можуть бути моєю роботою, тож цей діалог лишається мені. Конфлікт між двома моїми пристроями kosh теж не чіпає — тільки той, де одна з версій його власна.

Пастки, на які я наступив

  • Linter ламав малюнки. Його правило робило заголовки секцій з малої літери. Плагін Excalidraw шукає їх з урахуванням регістру, тож переставав їх бачити — і кожне збереження дописувало ще одну секцію. Рішення: виключити .excalidraw.md з Linter.
  • Не запускай другий Obsidian на тому самому Mac. Тестова копія з окремою домашньою текою підняла системний діалог із пропозицією скинути мій Keychain.
  • Shell на Mac — це не пісочниця. kosh може виконати команду на моєму ноутбуці від мого імені. Тому все, що видаляє, встановлює, пушить чи торкається ключів, — лише після мого «так» на конкретну команду. А вимкнути канал я можу файлом на самому Mac.
  • livesync-workers — молодий проєкт з одним автором. Тому форк, і щогодинний бекап у GitHub.

Що це дає

Я відкриваю будь-який клієнт Claude — на Mac, у браузері чи на телефоні. У нього вже є все: задачі, нотатки, Telegram, дослідження, стан Mac.

А те, що важко тримати в голові, агент кладе на полотно. Я дивлюсь, правлю руками — і агент бачить мої правки.

Одне підключення, одне джерело правди — і схема замість стіни тексту.

Помітили помилку?

Невірний факт, кривий переклад, щось звучить неправдиво в цій статті? Напишіть мені — своєю мовою.