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

Что это даёт

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

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

Одно подключение, один источник правды — и схема вместо стены текста.

Заметили ошибку?

Неверный факт, кривой перевод, что-то звучит неправдой в этой статье? Напишите мне — на своём языке.