DEV Community

Cover image for So bearbeitet ein Claude-Chat deine osFoundry Notes, ohne die Änderungen von Kollegen zu überschreiben
BBT for BBT Deutsch

Posted on

So bearbeitet ein Claude-Chat deine osFoundry Notes, ohne die Änderungen von Kollegen zu überschreiben

Am Ende liest eine Claude-Unterhaltung einen Zellbereich aus einem Sheet-Tab in einer deiner osFoundry Notes, schreibt einen Text-Tab in derselben Note neu und fügt einen neuen Slides-Tab hinzu, während eine Person weiter in dieser Note tippt. Jeder Schreibvorgang nennt die genaue Tab-ID und die Note-Version, die Claude zuletzt gelesen hat. Hat die Person zwischendurch etwas gespeichert, weist osFoundry Claudes Schreibvorgang ab, und Claude liest neu, bevor es einen zweiten Versuch macht. Niemandes Änderung verschwindet.

Wer macht was

Claudes Seite osFoundrys Seite
Anmeldung Dein Claude-Konto, unverändert Die Verbindung, die du für einen Workspace freigegeben hast
Welche Note Claude wählt sie aus dem, was der Server auflistet Nur Notes in Projekten, denen die Verbindung hinzugefügt wurde
Welcher Tab Claude muss eine exakte tab_id senden list_note_tabs liefert jede Tab-Instanz, auch zwei Sheets desselben Typs
Konflikte Claude liest neu und wiederholt seine Änderung Schreibvorgänge tragen expected_version; eine veraltete wird abgelehnt, nicht zusammengeführt
Wiederholungen Claude darf denselben Aufruf erneut senden Derselbe idempotency_key liefert das erste Ergebnis, statt zweimal zu schreiben
Freigaben Claudes eigene Tool-Berechtigungsabfrage vor jedem Schreibvorgang Deine aktuellen Bearbeitungsrechte an dieser Note, bei jedem Aufruf geprüft

Einrichtung

Der Connector ist derselbe wie bei der Einrichtung des Custom Connectors für Claude (Schlüssel-Symbol → Connected → Add assistant, dann https://api.osfoundry.io/api/v1/external-mcp in Claude hinzufügen). Die folgenden Schritte setzen voraus, dass diese Verbindung existiert und einem Projekt hinzugefügt ist.

1. Die Note ins verbundene Projekt legen

Öffne die Note, öffne das rechte Seitenpanel und geh zu Config → Settings. Das Feld Project zeigt "Add to project" (zum Projekt hinzufügen), wenn die Note keinem Projekt zugeordnet ist. Wähle das Projekt, zu dem die Claude-Verbindung gehört.

Eine Note, die nur auf diesem Gerät liegt, hat keine Cloud-Kopie, also kann die Verbindung sie nicht sehen. Die Note muss mit deinem Workspace synchronisiert sein.

2. Prüfen, ob die Note-Tools aktiv sind

Wähle unter Schlüssel-Symbol → Connected die Claude-Verbindung und sieh dir Tools an. Alle unterstützten Tools sind standardmäßig aktiv. Für diese Anleitung müssen diese angehakt bleiben:

read   list_note_tabs   read_note_tab   read_sheet_range   list_note_attachments
write  edit_note_tab    create_note_tab add_note_source
Enter fullscreen mode Exit fullscreen mode

Die Tools-Checkliste einer Claude-Verbindung, standardmäßig alles aktiv

Beispiel: Die Tools-Checkliste einer Claude-Verbindung, standardmäßig alles aktiv

Soll ein Chat eine Weile nur lesen dürfen, entferne die Haken bei den drei Schreib-Tools und klick auf Save tools. Lesen funktioniert weiterhin.

3. Kurz die eigenen Bearbeitungsrechte prüfen

Claudes Schreibvorgänge laufen mit den Rechten der Person, die die Verbindung freigegeben hat, und werden bei jedem Aufruf neu geprüft. Wenn du die Note nur ansehen darfst, wird edit_note_tab abgelehnt, obwohl das Tool aktiv ist. Öffne im Zweifel den Access-Tab der Note.

4. Mit Tab-Namen fragen

Nenne in einem Claude-Chat mit aktiviertem osFoundry-Connector die Note und die Tabs. Claude löst Namen selbst in Tab-IDs auf, aber "das Owners-Sheet" ist eindeutiger als "die Tabelle".

Öffne in osFoundry die Note "Q3 launch". Lies A1:D12 im Owners-Sheet,
schreib den Brief-Tab so um, dass jeder offene Punkt einen Verantwortlichen aus diesem Sheet hat,
und füge dann einen Slides-Tab "Launch status" mit einer Folie pro Verantwortlichem hinzu.
Enter fullscreen mode Exit fullscreen mode

Ein echter Durchlauf

Der Inhalt der Note und Claudes Antwort sind Beispieldaten. Die Tool- und Argumentnamen sind die, die der Live-Server in tools/list auflistet. In Claude Code erscheinen dieselben Tools als mcp__osfoundry__list_note_tabs usw.

Beispiel

Claude → list_note_tabs {"note_id": "…"}
       ← version "…41.118Z"
         Tabs: Brief (note), Owners (sheet), Owners archive (sheet)
Claude → read_sheet_range {"note_id": "…", "tab_id": "<Owners>",
                           "start_row": 0, "start_col": 0,
                           "row_count": 12, "col_count": 4}
       ← 12 × 4 Werte
Claude → read_note_tab {"note_id": "…", "tab_id": "<Brief>"}
       ← Text, version "…41.118Z"
Claude → edit_note_tab {"note_id": "…", "tab_id": "<Brief>",
                        "operation": "replace_text", "text": "…",
                        "expected_version": "…41.118Z",
                        "idempotency_key": "brief-owners-1"}
       [Claude bittet dich, diesen Tool-Aufruf zu erlauben → Allow]
       ← abgelehnt: die Note wurde nach dieser Version geändert

         (währenddessen hat Mika in osFoundry "press kit" im Brief-Tab ergänzt)

Claude → read_note_tab {"note_id": "…", "tab_id": "<Brief>"}
       ← Text enthält jetzt "press kit", version "…07.502Z"
Claude → edit_note_tab {... "text": "… press kit — owner: Mika …",
                        "expected_version": "…07.502Z",
                        "idempotency_key": "brief-owners-2"}
       ← gespeichert, version "…19.044Z"
Claude → create_note_tab {"note_id": "…", "tab_type": "slides",
                          "label": "Launch status",
                          "slides": [{"title": "Aiko"}, {"title": "Mika"}, …],
                          "expected_version": "…19.044Z",
                          "idempotency_key": "launch-status-deck"}
       ← neue Tab-ID "<Launch status>"

Claude: Der Brief nennt jetzt für alle 9 offenen Punkte einen Verantwortlichen,
        auch für "press kit", das Mika ergänzt hat, während ich bearbeitet
        habe. Der neue Tab Launch status hat eine Folie pro Verantwortlichem.
Enter fullscreen mode Exit fullscreen mode

Drei Dinge sind passiert, die man in einem normalen Chat nicht sieht. Claude hat den Sheet-Bereich gelesen statt der ganzen Arbeitsmappe. read_sheet_range liefert höchstens 100 mal 100 Zellen, ein großes Sheet überflutet die Unterhaltung also nicht. Die erste Bearbeitung ist absichtlich gescheitert: Claudes Version war älter als Mikas Speichern. Claude hat seinen alten Text nicht einfach mit der neuen Version erneut gesendet. Es hat den Tab neu gelesen und einen Brief geschrieben, der sowohl seine Änderung als auch Mikas Zeile enthält. Der Erstellungsaufruf trägt einen eigenen Key. Wäre die Antwort verloren gegangen und hätte Claude erneut aufgerufen, hätte osFoundry denselben Launch-status-Tab zurückgegeben, statt einen zweiten anzulegen.

Der Tab Owners archive zeigt, warum Tab-IDs wichtig sind. Eine Note kann mehrere Sheet- oder Slides-Tabs enthalten, und weder ein Name noch ein Typ bestimmt genau einen davon. Jeder edit_note_tab-Aufruf braucht die ID, die list_note_tabs geliefert hat.

Wo die Grenze liegt

Ein veralteter Schreibvorgang wird abgelehnt, nie zusammengeführt. osFoundry versucht nicht, Claudes Text und den Text der Person auf dem Server zu kombinieren, weil ein replace_text mit dem vollständigen Text nicht verlässlich erkennen kann, welche von zwei Versionen eines Absatzes gemeint war. Die Absicht kennt der Agent, also wiederholt der Agent die Änderung auf dem aktuellen Stand. Die Speichervorgänge der Person in der Desktop-App sind genauso abgesichert. Ein Speichern trägt die Revision mit, von der es ausging, und hat sich die Note darunter verändert, behält die App die Änderung der Person als lokalen Entwurf und meldet einen Sync-Konflikt, statt Claudes Änderung zu überschreiben.

Die Version gehört zur Note. Du bekommst sie von list_note_tabs, bevor du einen Tab erstellst, und von read_note_tab, bevor du einen bearbeitest. Wenn die Person irgendeinen Tab der Note bearbeitet, muss Claudes nächster Schreibvorgang neu lesen, selbst wenn er einen anderen Tab betrifft. Das zusätzliche Lesen ist günstig und sorgt dafür, dass Claude nie auf Basis eines veralteten Bildes der Note schreibt.

Einen Tab zu erstellen fügt nur hinzu. create_note_tab legt Slides- und Sheet-Tabs an und kann den Inhalt eines bestehenden Tabs nicht ersetzen. Jede Bearbeitungsoperation passt zu einer Tab-Art: replace_text für Note- und Markdown-Tabs, slide_add und slides_add_outline für Slides, sheet_set_range für genaue Sheet-Zellen, replace_tab_data für andere unterstützte Inhalts-Tabs.

Dateien bleiben Metadaten. list_note_attachments listet die Files und Sources einer Note auf, liefert aber weder Dateiinhalte noch Download-Links. Ein in einen Chat eingefügter Link ließe sich überallhin weiterleiten und würde auch nach dem Widerrufen der Verbindung noch funktionieren. Claude kann mit add_note_source eine Quelle hinzufügen; das Tool nimmt eine HTTP- oder HTTPS-URL, die Note-Version und einen Key, genau wie die anderen Schreibvorgänge.

Wird die Note verschoben, endet der Zugriff beim nächsten Aufruf. Verschiebe sie in ein Projekt, das nicht zur Verbindung gehört, entferne das Projekt aus der Verbindung oder klick auf Revoke connection, und Claudes nächstes Lesen wird abgelehnt. Ein früher ausgestelltes Token hält den Zugang nicht offen.

Als Nächstes

Bitte Claude, aus dem Owners-Bereich ein Briefing mit fünf Folien in einem neuen Slides-Tab zu machen, und ändere selbst einen Folientitel, während es arbeitet. In den Tool-Aufrufen siehst du dann den abgelehnten Schreibvorgang und das erneute Lesen. Wie Slides-Tabs neben dem Rest einer Note stehen, steht auf der Seite zu Note Slides.

Top comments (0)