Skip to main content

← BloggObsidian · MCP · Cloudflare

Obsidian flyttet inn i AI-huben min: én tilkobling til alle tjenester og diagrammer som agenten tegner

Obsidian-hvelvet mitt bor nå på Cloudflare, og kosh er én MCP-tilkobling til oppgaver, notater, Telegram, Go-Alpha, Instagram og Macen min. Agenten tegner Excalidraw-diagrammer rett i hvelvet. Hvordan det er bygd, og hvor grensene går.

Publisert 31. okt. 20267 min lesing

TL;DR

Obsidian-hvelvet mitt bor ikke lenger på Macen. Det bor på Cloudflare, i kosh-vault. Macen og iPhonen synkroniserer med det via pluginen Self-hosted LiveSync.

kosh er min personlige AI-hub. Én MCP-tilkobling med alle tjenestene mine bak: oppgaver, notater, Telegram, Go-Alpha, Instagram, vakthunden på Macen min og et skall på den.

Og agenten tegner nå Excalidraw-diagrammer rett i hvelvet. Jeg åpner Obsidian og ser tanken dens som et bilde. Jeg kan rette den for hånd, og agenten ser endringene mine.

Det som skavet

Det var to problemer. Under hvert av dem: hvordan det var, og hvordan det er nå.

1. Hver tjeneste var en egen tilkobling

FØR – 5 tilkoblinger:

Claude ──▶ oppgaver
Claude ──▶ Telegram
Claude ──▶ Go-Alpha
Claude ──▶ Instagram
Claude ──▶ notater (bare på Macen)

NÅ – 1 tilkobling:

Claude ──▶ kosh ──▶ alle disse tjenestene

Sånn var det i hver klient: Claude Code, claude.ai, telefonen. En ny tjeneste måtte legges inn i hver enkelt. Og notater kunne Claude bare redigere på Macen.

2. Agentens endringer tok en omvei til notatene mine

FØR:

agent ──▶ GitHub ──(opptil 2 min)──▶ Mac ──(iCloud)──▶ iPhone

NÅ:

agent ──▶ kosh-vault ──(~1 s)──▶ Mac og iPhone

Før hentet pluginen Obsidian Git endringen fra GitHub – opptil to minutter, og bare mens Obsidian var åpent på Macen. Til iPhonen gikk den i tillegg via iCloud. Nå ligger hvelvet i skyen, og Macen kan sove.

Hvelvet flyttet til skyen

Jeg ville ha én kilde til sannhet. En som ikke sovner sammen med laptopen.

Det fantes et ferdig prosjekt: livesync-workers, en backend for pluginen Self-hosted LiveSync på Cloudflare Workers. Jeg forket det og kalte det kosh-vault.

Sannheten er nå en SQLite-database i et Durable Object. Obsidian på Macen og på iPhonen holder en levende forbindelse til den og får hver endring på omtrent ett sekund. I praksis Obsidian over websockets.

Macen kan sove – hvelvet er der likevel for agentene. Alle andre kopier følger bare skyen: en sikkerhetskopi til GitHub hver time og et skrivebeskyttet speil i iCloud.

Én innstilling som «live» ikke virker uten: LiveSync trenger keepReplicationActiveInBackground: true. Ellers settes synkroniseringen på pause når Obsidian-vinduet ligger bak andre, og agentens endringer kommer først når jeg ser etter.

kosh – én dør

kosh er noen få Workers på Cloudflare. Navnet kommer fra kosakkenes kosj, hovedkvarteret i Sitsj.

Inni er hver tjeneste fortsatt for seg selv. Telegram og Go-Alpha kjører i Cloudflare Containers. Instagram er en vanlig Worker. Notatene er kosh-vault. Men utenfra finnes det én inngang: /mcp.

Hva det betyr i praksis:

  • Huben samler verktøyene til alle tjenestene i én liste, under deres egne navn. En klient ser én tilkobling.
  • Tjenestene snakker sammen via Cloudflares service bindings, ikke via offentlige adresser med et delt token.
  • Nøkler til tredjepartstjenester limer jeg inn på én tilkoblingsside. De lagres kryptert, og ingenting viser dem fram igjen.
  • Når en tjeneste er nede, blir verktøyene værende i lista, og et kall svarer ærlig: «utilgjengelig».

Hele poenget med kosh var at alle tjenestene mine skulle være tilgjengelige gjennom den, i stedet for å koble til hver enkelt for seg.

Oppgaver er bare markdown

Det eneste oppgavesystemet mitt er notater i hvelvet. Én sone, én fil. Prioriteten er en Obsidian Tasks-emoji på linja.

Agenten legger til, flytter og lukker oppgaver med verktøyene tasks_*. Hver skriving sjekkes mot innholdets hash: har fila endret seg i mellomtiden, kjøres operasjonen på nytt. Og hver endring havner som en linje i loggen.

Oppgavetavla tegner kosh selv, i en Excalidraw-fil. Endrer jeg en liste for hånd, merker en cron-jobb det innen ett minutt og tegner tavla på nytt. Den skrives bare når noe på den faktisk har endret seg.

Agenten tegner diagrammer

Dette er den nyeste delen. Fire verktøy: drawing_list, drawing_read, drawing_create, drawing_edit.

Jeg ber: «tegn hvordan denne prosessen fungerer». Agenten lager en .excalidraw.md-fil i hvelvet. Et sekund senere er den på Macen min, og Excalidraw-pluginen åpner den som sin egen.

agent
  │ ber om å endre diagrammet (drawing_edit)
  ▼
kosh
  │ skriver tegningsfila
  ▼
kosh-vault (Cloudflare)
  │ LiveSync leverer den, ~1 s
  ▼
den åpne tegningen i Obsidian oppdateres

Excalidraw-pluginen har sitt eget CLI. Men det krever at Obsidian kjører på Macen. Derfor skriver kosh fila selv, i pluginens format – og virker selv når Macen sover. Hver regel nedenfor er testet mot den ekte pluginen:

  • Hvert endret element får en ny versjon, ikke lavere enn nåværende tid i sekunder. Ellers ignorerer en åpen tegning endringen i stillhet.
  • Slett med flagget isDeleted. Et element som bare forsvinner fra fila, blir værende i den åpne visningen og kommer tilbake ved neste lagring.
  • Tekst endres to steder: i JSON-en og i seksjonen Text Elements. Text Elements vinner.
  • Fila skrives komprimert, slik pluginen selv skriver den. Da har en åpen visning ingen grunn til å lagre den på nytt.

Agenten trenger ikke regne ut oppsettet selv: det finnes et automatisk. 80 blokker og 118 piler i seks seksjoner legges ut på 2,9 sekunder. Jeg så på det første ekte diagrammet i Obsidian og sa: «ja, alt er supert».

Ærlige grenser

Det svakeste punktet er en tegning som er åpen på skjermen min mens agenten redigerer den.

Etter den første endringen utenfra lagrer pluginen tegningen én gang til. Skriver agenten igjen før den lagringen har nådd skyen, oppstår det en konflikt i LiveSync.

Ved en konflikt går ingenting tapt: LiveSync tar vare på begge versjonene. Men notatet fryser på disken, og en «Conflicting changes»-dialog dukker opp. Dette viste en test i ekte bruk, med endringer tett etter hverandre i en åpen tegning:

Pause mellom endringerGodtatte skrivingerKonfliktdialoger
15 s250
5 s301
1 s31
ingen pause61

Utvalgene er små. Det er en tendens, ikke statistikk. En pause er ingen garanti.

Derfor har kosh lært å slå sammen slike konflikter selv. Den tar den felles stamfaren til de to versjonene og sammenligner element for element. Jeg endret blokk C, agenten blokk A? Begge endringene blir værende, og dialogen lukker seg selv etter rundt 10 sekunder. Samme test etter rettelsene:

Pause mellom endringerGodtatte skrivingerKonfliktdialoger
5 s240
1 s291 – lukket seg selv etter 12 s

Det kosh bevisst ikke slår sammen: når begge sider har endret det samme elementet. Begge versjonene kan være mitt eget arbeid, så den dialogen er overlatt til meg. En konflikt mellom to av enhetene mine rører kosh heller ikke – bare en der én av versjonene er dens egen.

Feller jeg gikk i

  • Linter ødela tegninger. En av reglene skrev seksjonsoverskriftene med liten forbokstav. Excalidraw-pluginen leter etter dem med skille mellom store og små bokstaver, så den sluttet å se dem – og hver lagring la til enda en seksjon. Løsning: unnta .excalidraw.md fra Linter.
  • Ikke start et andre Obsidian på samme Mac. En testkopi med egen hjemmemappe fikk opp en systemdialog som tilbød å tilbakestille nøkkelringen min.
  • Skallet på Macen er ingen sandkasse. kosh kan kjøre en kommando på laptopen min som meg. Derfor går alt som sletter, installerer, pusher eller rører nøkler, bare etter mitt «ja» til akkurat den kommandoen. Og jeg kan slå av kanalen med en fil på selve Macen.
  • livesync-workers er et ungt prosjekt med én forfatter. Derav forken og sikkerhetskopien til GitHub hver time.

Hva det gir meg

Jeg åpner hvilken som helst Claude-klient – på Macen, i nettleseren eller på telefonen. Den har allerede alt: oppgaver, notater, Telegram, research, helsa til Macen.

Og det som er vanskelig å holde i hodet, legger agenten på et lerret. Jeg ser, retter for hånd – og agenten ser endringene mine.

Én tilkobling, én kilde til sannhet – og et diagram i stedet for en vegg av tekst.

Fant du en feil?

Et feil faktum, en skjev oversettelse, noe som virker usant i denne artikkelen? Skriv til meg — på ditt eget språk.