← BlogObsidian · MCP · Cloudflare
Obsidian se mudó a mi hub de IA: una conexión para todos los servicios y diagramas que dibuja el agente
Mi bóveda de Obsidian ahora vive en Cloudflare, y kosh es una sola conexión MCP a tareas, notas, Telegram, Go-Alpha, Instagram y mi Mac. El agente dibuja diagramas de Excalidraw directamente en la bóveda. Cómo está hecho y dónde están sus límites.
Publicado 31 oct 20267 min de lectura
TL;DR
Mi bóveda de Obsidian ya no vive en el Mac. Vive en Cloudflare, en kosh-vault. El Mac y el iPhone se sincronizan con ella mediante el plugin Self-hosted LiveSync.
kosh es mi hub personal de IA. Una sola conexión MCP con todos mis servicios detrás: tareas, notas, Telegram, Go-Alpha, Instagram, el vigilante de mi Mac y una shell en él.
Y ahora el agente dibuja diagramas de Excalidraw directamente en la bóveda. Abro Obsidian y veo su idea convertida en dibujo. Puedo corregirlo a mano, y el agente ve mis cambios.
Qué dolía
Había dos problemas. Debajo de cada uno: cómo era antes y cómo es ahora.
1. Cada servicio era una conexión aparte
ANTES — 5 conexiones:
Claude ──▶ tareas
Claude ──▶ Telegram
Claude ──▶ Go-Alpha
Claude ──▶ Instagram
Claude ──▶ notas (solo en el Mac)
AHORA — 1 conexión:
Claude ──▶ kosh ──▶ todos estos serviciosY así en cada cliente: Claude Code, claude.ai, el móvil. Un servicio nuevo había que añadirlo en cada uno por separado. Y Claude solo podía editar las notas en el Mac.
2. Los cambios del agente daban un rodeo hasta mis notas
ANTES:
agente ──▶ GitHub ──(hasta 2 min)──▶ Mac ──(iCloud)──▶ iPhone
AHORA:
agente ──▶ kosh-vault ──(~1 s)──▶ Mac y iPhoneAntes, el plugin Obsidian Git recogía el cambio de GitHub: hasta dos minutos, y solo con Obsidian abierto en el Mac. Para llegar al iPhone, además pasaba por iCloud. Ahora la bóveda está en la nube y el Mac puede dormir.
La bóveda se mudó a la nube
Quería una sola fuente de verdad. Una que no se duerma con el portátil.
Ya había un proyecto hecho: livesync-workers, un backend para el plugin Self-hosted LiveSync sobre Cloudflare Workers. Hice un fork y lo llamé kosh-vault.
La verdad es ahora una base de datos SQLite dentro de un Durable Object. Obsidian en el Mac y en el iPhone mantiene una conexión en vivo con ella y recibe cada cambio en más o menos un segundo. En el fondo, Obsidian sobre websockets.
El Mac puede dormir: la bóveda sigue disponible para los agentes. Las demás copias solo siguen a la nube: una copia de seguridad cada hora en GitHub y un espejo de solo lectura en iCloud.
keepReplicationActiveInBackground: true. Si no, la sincronización se pausa cuando la ventana de Obsidian queda detrás de otras, y los cambios del agente solo llegan cuando miro.kosh: una sola puerta
kosh son unos cuantos Workers en Cloudflare. El nombre viene del kosh cosaco, el cuartel general de la Sich.
Por dentro, cada servicio sigue siendo independiente. Telegram y Go-Alpha corren en Cloudflare Containers. Instagram es un Worker normal. Las notas son kosh-vault. Pero desde fuera hay una sola entrada: /mcp.
Lo que significa en la práctica:
- El hub reúne las herramientas de todos los servicios en una sola lista, con sus nombres originales. El cliente ve una conexión.
- Los servicios hablan entre sí mediante service bindings de Cloudflare, no mediante URL públicas con un token compartido.
- Las claves de servicios de terceros las pego en una única página de conexiones. Se guardan cifradas y nada vuelve a mostrarlas.
- Si un servicio se cae, sus herramientas siguen en la lista y la llamada responde con honestidad: «no disponible».
La gracia de kosh era que todos mis servicios fueran accesibles a través de él, en lugar de conectar cada uno por separado.
Las tareas son simplemente markdown
Mi único sistema de tareas son notas en la bóveda. Una zona, un archivo. La prioridad es un emoji de Obsidian Tasks en la línea.
El agente añade, mueve y cierra tareas con las herramientas tasks_*. Cada escritura se comprueba contra el hash del contenido: si el archivo cambió entretanto, la operación se repite. Y cada cambio queda como una línea en el diario.
El tablero de tareas lo dibuja kosh solo, en un archivo de Excalidraw. Cambio una lista a mano y, en menos de un minuto, un cron lo detecta y vuelve a dibujar el tablero. Solo lo escribe cuando algo en él ha cambiado de verdad.
El agente dibuja diagramas
Es la parte más nueva. Cuatro herramientas: drawing_list, drawing_read, drawing_create, drawing_edit.
Le pido: «dibuja cómo funciona este proceso». El agente crea un archivo .excalidraw.md en la bóveda. Un segundo después está en mi Mac, y el plugin de Excalidraw lo abre como si fuera suyo.
agente
│ pide cambiar el diagrama (drawing_edit)
▼
kosh
│ escribe el archivo del dibujo
▼
kosh-vault (Cloudflare)
│ LiveSync lo entrega, ~1 s
▼
el dibujo abierto en Obsidian se actualizaEl plugin de Excalidraw tiene su propio CLI. Pero necesita Obsidian en marcha en el Mac. Por eso kosh escribe el archivo él mismo, en el formato del plugin, y funciona incluso con el Mac dormido. Cada regla de abajo se probó con el plugin real:
- Cada elemento modificado recibe una versión nueva, no menor que la hora actual en segundos. Si no, un dibujo abierto ignora el cambio en silencio.
- Se borra con la marca
isDeleted. Un elemento que simplemente desaparece del archivo se queda en la vista abierta y vuelve con el siguiente guardado. - El texto cambia en dos sitios: en el JSON y en la sección Text Elements. Gana Text Elements.
- El archivo se escribe comprimido, como lo escribe el propio plugin. Así la vista abierta no tiene motivo para volver a guardarlo.
El agente no tiene que calcular la disposición: hay una automática. 80 bloques y 118 flechas en seis secciones se colocan en 2,9 segundos. Miré el primer diagrama real en mi Obsidian y dije: «sí, todo genial».
Límites, con honestidad
El punto más débil es un dibujo abierto en mi pantalla mientras el agente lo edita.
Tras el primer cambio externo, el plugin guarda el dibujo una vez más. Si el agente vuelve a escribir antes de que ese guardado llegue a la nube, se produce un conflicto en LiveSync.
Con un conflicto no se pierde nada: LiveSync guarda las dos versiones. Pero la nota se congela en el disco y en la pantalla salta el diálogo «Conflicting changes». Esto es lo que mostró una prueba real, con cambios seguidos sobre un dibujo abierto:
| Pausa entre cambios | Escrituras aceptadas | Diálogos de conflicto |
|---|---|---|
| 15 s | 25 | 0 |
| 5 s | 30 | 1 |
| 1 s | 3 | 1 |
| sin pausa | 6 | 1 |
Las muestras son pequeñas. Es una tendencia, no una estadística. Una pausa no es una garantía.
Así que kosh aprendió a fusionar estos conflictos él solo. Toma el ancestro común de las dos versiones y las compara elemento por elemento. ¿Yo cambié el bloque C y el agente el bloque A? Se quedan los dos cambios, y el diálogo se cierra solo en unos 10 segundos. La misma prueba después de los arreglos:
| Pausa entre cambios | Escrituras aceptadas | Diálogos de conflicto |
|---|---|---|
| 5 s | 24 | 0 |
| 1 s | 29 | 1 — se cerró solo en 12 s |
Lo que kosh deliberadamente no fusiona: los casos en que los dos lados cambiaron el mismo elemento. Ambas versiones pueden ser trabajo mío, así que ese diálogo me lo deja a mí. kosh tampoco toca un conflicto entre dos de mis dispositivos: solo uno en el que una de las versiones es suya.
Trampas en las que caí
- Linter rompía los dibujos. Una de sus reglas ponía en minúscula los encabezados de las secciones. El plugin de Excalidraw los busca distinguiendo mayúsculas y minúsculas, así que dejaba de verlos, y cada guardado añadía una sección más. Solución: excluir
.excalidraw.mdde Linter. - No abras un segundo Obsidian en el mismo Mac. Una copia de prueba con su propia carpeta de inicio hizo saltar un diálogo del sistema que ofrecía restablecer mi llavero.
- La shell del Mac no es un sandbox. kosh puede ejecutar un comando en mi portátil como si fuera yo. Por eso todo lo que borra, instala, hace push o toca claves va solo tras mi «sí» a ese comando exacto. Y puedo cortar el canal con un archivo en el propio Mac.
- livesync-workers es un proyecto joven con un solo autor. De ahí el fork y la copia de seguridad cada hora en GitHub.
Lo que me da
Abro cualquier cliente de Claude: en el Mac, en el navegador o en el móvil. Ya lo tiene todo: tareas, notas, Telegram, investigaciones, el estado del Mac.
Y lo que cuesta tener en la cabeza, el agente lo pone en un lienzo. Lo miro, lo corrijo a mano, y el agente ve mis cambios.
¿Ves un error?
¿Un dato incorrecto, una traducción torpe, algo que suena falso en este artículo? Escríbeme — en tu propio idioma.