← Блог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. Тестовая копия с отдельной домашней папкой вызвала системный диалог с предложением сбросить мою связку ключей.
- Shell на Mac — это не песочница. kosh может выполнить команду на моём ноутбуке от моего имени. Поэтому всё, что удаляет, устанавливает, пушит или трогает ключи, — только после моего «да» на конкретную команду. А отключить канал я могу файлом на самом Mac.
- livesync-workers — молодой проект с одним автором. Поэтому форк и ежечасный бэкап в GitHub.
Что это даёт
Я открываю любой клиент Claude — на Mac, в браузере или на телефоне. У него уже есть всё: задачи, заметки, Telegram, исследования, состояние Mac.
А то, что трудно держать в голове, агент выкладывает на холст. Я смотрю, правлю руками — и агент видит мои правки.
Заметили ошибку?
Неверный факт, кривой перевод, что-то звучит неправдой в этой статье? Напишите мне — на своём языке.