Skip to main content

← BlogObsidian · MCP · Cloudflare

Obsidian ist in meinen KI-Hub gezogen: eine Verbindung zu allen Diensten und Diagramme, die der Agent zeichnet

Mein Obsidian-Vault lebt jetzt auf Cloudflare, und kosh ist eine einzige MCP-Verbindung zu Aufgaben, Notizen, Telegram, Go-Alpha, Instagram und meinem Mac. Der Agent zeichnet Excalidraw-Diagramme direkt im Vault. Wie das gebaut ist und wo es an Grenzen stößt.

Veröffentlicht 31. Okt. 20267 Min. Lesezeit

TL;DR

Mein Obsidian-Vault lebt nicht mehr auf dem Mac. Er lebt auf Cloudflare, in kosh-vault. Mac und iPhone synchronisieren sich mit ihm über das Plugin Self-hosted LiveSync.

kosh ist mein persönlicher KI-Hub. Eine einzige MCP-Verbindung, hinter der alle meine Dienste stehen: Aufgaben, Notizen, Telegram, Go-Alpha, Instagram, der Wachhund meines Macs und eine Shell darauf.

Und der Agent zeichnet jetzt Excalidraw-Diagramme direkt im Vault. Ich öffne Obsidian und sehe seine Gedanken als Bild. Ich kann das Bild von Hand korrigieren, und der Agent sieht meine Änderungen.

Was wehtat

Es gab zwei Probleme. Unter jedem steht, wie es war und wie es jetzt ist.

1. Jeder Dienst war eine eigene Verbindung

VORHER — 5 Verbindungen:

Claude ──▶ Aufgaben
Claude ──▶ Telegram
Claude ──▶ Go-Alpha
Claude ──▶ Instagram
Claude ──▶ Notizen (nur auf dem Mac)

JETZT — 1 Verbindung:

Claude ──▶ kosh ──▶ alle diese Dienste

Und das in jedem Client: Claude Code, claude.ai, Handy. Ein neuer Dienst musste in jedem einzeln eingetragen werden. Und Notizen konnte Claude nur auf dem Mac bearbeiten.

2. Die Änderungen des Agenten nahmen einen Umweg zu meinen Notizen

VORHER:

Agent ──▶ GitHub ──(bis 2 Min.)──▶ Mac ──(iCloud)──▶ iPhone

JETZT:

Agent ──▶ kosh-vault ──(~1 s)──▶ Mac und iPhone

Früher holte das Plugin Obsidian Git die Änderung von GitHub ab — bis zu zwei Minuten, und nur, solange Obsidian auf dem Mac offen war. Zum iPhone ging sie dann noch über iCloud. Jetzt liegt der Vault in der Cloud, und der Mac darf schlafen.

Der Vault ist in die Cloud gezogen

Ich wollte eine einzige Quelle der Wahrheit. Eine, die nicht mit dem Laptop einschläft.

Es gab schon ein fertiges Projekt: livesync-workers, ein Backend für das Plugin Self-hosted LiveSync auf Cloudflare Workers. Ich habe es geforkt und kosh-vault genannt.

Die Wahrheit ist jetzt eine SQLite-Datenbank in einem Durable Object. Obsidian auf Mac und iPhone hält eine Live-Verbindung zu ihr und bekommt jede Änderung in etwa einer Sekunde. Im Grunde Obsidian über WebSockets.

Der Mac darf schlafen — für Agenten ist der Vault trotzdem da. Alle anderen Kopien folgen nur noch der Cloud: ein stündliches Backup auf GitHub und ein schreibgeschützter Spiegel in iCloud.

Eine Einstellung, ohne die „live“ nicht funktioniert: LiveSync braucht keepReplicationActiveInBackground: true. Sonst pausiert die Synchronisierung, sobald das Obsidian-Fenster hinter anderen liegt, und die Änderungen des Agenten kommen erst an, wenn ich hinschaue.

kosh — eine Tür

kosh besteht aus ein paar Workers auf Cloudflare. Der Name kommt vom Kosch der Kosaken, dem Hauptquartier der Sitsch.

Innen ist jeder Dienst eigenständig geblieben. Telegram und Go-Alpha laufen in Cloudflare Containers. Instagram ist ein einfacher Worker. Die Notizen sind kosh-vault. Aber von außen gibt es einen einzigen Eingang: /mcp.

Was das in der Praxis heißt:

  • Der Hub sammelt die Tools aller Dienste in einer Liste, unter ihren eigenen Namen. Ein Client sieht eine Verbindung.
  • Die Dienste sprechen über Cloudflare Service Bindings miteinander, nicht über öffentliche Adressen mit einem gemeinsamen Token.
  • Schlüssel fremder Dienste füge ich auf einer einzigen Verbindungsseite ein. Sie werden verschlüsselt gespeichert, und nichts zeigt sie je wieder an.
  • Fällt ein Dienst aus, bleiben seine Tools in der Liste, und ein Aufruf antwortet ehrlich: „nicht verfügbar“.

Der ganze Sinn von kosh war, dass alle meine Dienste über ihn erreichbar sind, statt jeden einzeln anzubinden.

Aufgaben sind einfach Markdown

Mein einziges Aufgabensystem sind Notizen im Vault. Eine Zone, eine Datei. Die Priorität ist ein Obsidian-Tasks-Emoji in der Zeile.

Der Agent legt Aufgaben mit den tasks_*-Tools an, verschiebt und schließt sie. Jeder Schreibvorgang wird gegen den Hash des Inhalts geprüft: Hat sich die Datei zwischendurch geändert, läuft die Operation neu. Und jede Änderung landet als Zeile im Journal.

Das Aufgaben-Board zeichnet kosh selbst, in einer Excalidraw-Datei. Ändere ich eine Liste von Hand, merkt ein Cron das innerhalb einer Minute und zeichnet das Board neu. Geschrieben wird es nur, wenn sich darauf wirklich etwas geändert hat.

Der Agent zeichnet Diagramme

Das ist der neueste Teil. Vier Tools: drawing_list, drawing_read, drawing_create, drawing_edit.

Ich bitte: „Zeichne, wie dieser Prozess funktioniert.“ Der Agent legt eine .excalidraw.md-Datei im Vault an. Eine Sekunde später ist sie auf meinem Mac, und das Excalidraw-Plugin öffnet sie wie seine eigene.

Agent
  │ bittet, das Diagramm zu ändern (drawing_edit)
  ▼
kosh
  │ schreibt die Zeichnungsdatei
  ▼
kosh-vault (Cloudflare)
  │ LiveSync liefert sie aus, ~1 s
  ▼
die offene Zeichnung in Obsidian aktualisiert sich

Das Excalidraw-Plugin hat eine eigene CLI. Die braucht aber ein laufendes Obsidian auf dem Mac. Deshalb schreibt kosh die Datei selbst, im Format des Plugins — und funktioniert auch, während der Mac schläft. Jede Regel unten wurde am echten Plugin getestet:

  • Jedes geänderte Element bekommt eine neue Version, nicht kleiner als die aktuelle Zeit in Sekunden. Sonst ignoriert eine offene Zeichnung die Änderung stillschweigend.
  • Gelöscht wird mit dem Flag isDeleted. Ein Element, das einfach aus der Datei verschwindet, bleibt in der offenen Ansicht und kommt beim nächsten Speichern zurück.
  • Text ändert sich an zwei Stellen: im JSON und im Abschnitt Text Elements. Text Elements gewinnt.
  • Die Datei wird komprimiert geschrieben, so wie das Plugin selbst sie schreibt. Dann hat eine offene Ansicht keinen Grund, sie noch einmal zu speichern.

Das Layout muss der Agent nicht selbst ausrechnen: Es gibt ein automatisches. 80 Blöcke und 118 Pfeile in sechs Abschnitten sind in 2,9 Sekunden angeordnet. Das erste echte Diagramm habe ich mir in meinem Obsidian angesehen und gesagt: „Ja, alles super.“

Ehrliche Grenzen

Die schwächste Stelle ist eine Zeichnung, die auf meinem Bildschirm offen ist, während der Agent sie bearbeitet.

Nach der ersten Änderung von außen speichert das Plugin die Zeichnung noch einmal. Schreibt der Agent erneut, bevor dieses Speichern die Cloud erreicht hat, entsteht in LiveSync ein Konflikt.

Bei einem Konflikt geht nichts verloren: LiveSync behält beide Versionen. Aber die Notiz friert auf der Festplatte ein, und auf dem Bildschirm springt der Dialog „Conflicting changes“ auf. Das zeigte ein Live-Test mit Änderungen kurz hintereinander an einer offenen Zeichnung:

Pause zwischen ÄnderungenAngenommene SchreibvorgängeKonfliktdialoge
15 s250
5 s301
1 s31
keine Pause61

Die Stichproben sind klein. Das ist eine Tendenz, keine Statistik. Eine Pause ist keine Garantie.

Deshalb hat kosh gelernt, solche Konflikte selbst zusammenzuführen. Er nimmt den gemeinsamen Vorfahren beider Versionen und vergleicht Element für Element. Ich habe Block C geändert, der Agent Block A? Beide Änderungen bleiben, und der Dialog schließt sich nach etwa 10 Sekunden von selbst. Derselbe Test nach den Korrekturen:

Pause zwischen ÄnderungenAngenommene SchreibvorgängeKonfliktdialoge
5 s240
1 s291 — schloss sich nach 12 s selbst

Was kosh bewusst nicht zusammenführt: wenn beide Seiten dasselbe Element geändert haben. Beide Versionen können meine eigene Arbeit sein, also bleibt dieser Dialog mir überlassen. Auch einen Konflikt zwischen zwei meiner Geräte lässt kosh in Ruhe — er fasst nur einen an, in dem eine Version von ihm selbst stammt.

Fallen, in die ich getappt bin

  • Linter hat Zeichnungen kaputt gemacht. Eine seiner Regeln schrieb Abschnittsüberschriften klein. Das Excalidraw-Plugin sucht sie unter Beachtung der Groß- und Kleinschreibung, sah sie also nicht mehr — und jedes Speichern hängte einen weiteren Abschnitt an. Lösung: .excalidraw.md vom Linter ausnehmen.
  • Starte kein zweites Obsidian auf demselben Mac. Eine Testkopie mit eigenem Home-Ordner öffnete einen Systemdialog, der anbot, meinen Schlüsselbund zurückzusetzen.
  • Die Shell auf dem Mac ist keine Sandbox. kosh kann auf meinem Laptop einen Befehl in meinem Namen ausführen. Alles, was löscht, installiert, pusht oder Schlüssel berührt, läuft deshalb nur nach meinem „Ja“ zu genau diesem Befehl. Und abschalten kann ich den Kanal mit einer Datei auf dem Mac selbst.
  • livesync-workers ist ein junges Projekt mit einem einzigen Autor. Daher der Fork und das stündliche Backup auf GitHub.

Was es mir bringt

Ich öffne irgendeinen Claude-Client — auf dem Mac, im Browser oder auf dem Handy. Er hat schon alles: Aufgaben, Notizen, Telegram, Recherchen, den Zustand des Macs.

Und was schwer im Kopf zu behalten ist, legt der Agent auf eine Leinwand. Ich schaue hin, korrigiere von Hand — und der Agent sieht meine Änderungen.

Eine Verbindung, eine Quelle der Wahrheit — und ein Diagramm statt einer Textwand.

Einen Fehler entdeckt?

Ein falscher Fakt, eine schiefe Übersetzung, etwas, das in diesem Artikel falsch klingt? Schreib mir — in deiner eigenen Sprache.