Dev.to · 8 min read

Wie Claude Code eine kleine App erst nach deiner Freigabe in einen osFoundry-Room bringt

Wie Claude Code eine kleine App erst nach deiner Freigabe in einen osFoundry-Room bringt

Am Ende schreibt Claude Code auf deinem Rechner ein kleines internes Tool (hier ein Standup-Timer: eine Namensliste, 90 Sekunden pro Person, ein Next-Button) und schlägt es einem Cloud-Room in osFoundry vor. Im Room taucht zunächst nichts auf. Du öffnest den Vorschlag, liest beide Quelldateien und klickst auf Approve and create. Danach sitzt der Timer als neuer Tab in der App-Tableiste des Rooms, und alle im Room können ihn öffnen. Claude Code prüft das Ergebnis über einen Status-Read, statt zu raten. Wer macht was Claude Code osFoundry Login Sein eigenes Login auf deinem Rechner Die Verbindung, die du einmal für einen Workspace freigegeben hast, mit den Scopes osfoundry:read und osfoundry:write Welcher Room Wählt einen aus der Liste des Servers Listet nur Cloud-Rooms, die einem Projekt zugeordnet sind, in dem die Verbindung ist Der Code Schreibt komplette Dateien lokal und schickt sie als eine files-Map Speichert den Vorschlag und zeigt dem Owner jede Datei vollständig Freigabe Seine eigene Tool-Berechtigungsabfrage, weil die Propose-Tools als destruktiv markiert sind Du klickst unter "Needs your approval" (braucht deine Freigabe) auf Approve and create. Bis dahin ändert sich die Tableiste des Rooms nicht App ausführen Führt sie nicht aus Der Room führt sie als Tab aus: als sandboxed iframe in der Desktop-App, im Web in einer Browser-Sandbox Was es zurückliest list_room_apps und read_room_app_status Name, Identität, Launcher und letzter Build-Status. Keine App-Config, Secrets, Dateien, Logs oder Datenbankinhalte Einrichtung 1. osFoundry zu Claude Code hinzufügen Mit --print gibt die osFoundry-CLI den Befehl aus, den sie ausführen würde: $ osfoundry agent connect claude --print $ claude mcp add --transport http -s user osfoundry https://api.osfoundry.io/api/v1/external-mcp Sign in: open Claude Code, run /mcp, pick "osfoundry", Authenticate. Führ ihn ohne --print aus oder füge die claude mcp add-Zeile selbst ein. Starte in Claude Code /mcp, wähle osfoundry und dann Authenticate. Im Browser öffnet sich osFoundry, und dort wählst du einen Workspace. Danach erscheinen die Tools als mcp__osfoundry__…. 2. Den Room einem Projekt zuordnen Von sich aus sieht die Verbindung keinen Room. Es muss ein Cloud-Room sein (im Workspace angelegt, nicht nur auf diesem Gerät gespeichert), und er muss zu einem Projekt gehören. Öffne den Room und klick im Header auf das Zahnrad (Room-Einstellungen). Hat der Room noch kein Projekt, zeigt das Feld Project "Add to project". Der Hilfetext darunter lautet "Project-owned content is accessible to members of this project and its ancestors." (Inhalte eines Projekts sind für Mitglieder dieses Projekts und seiner übergeordneten Projekte zugänglich). Wähle das Projekt. 3. Die Verbindung demselben Projekt hinzufügen Öffne das Schlüssel-Icon → Connected, wähle die Claude-Code-Verbindung, such unter Projects dasselbe Projekt aus und klick auf Add to project. Die Rooms des Projekts kommen damit automatisch dazu, ebenso seine Notes, Knowledge Bases und andere synchronisierte Inhalte. Beispiel: Die Verbindung zum Projekt hinzufügen, zu dem der Room gehört Öffne im selben Panel Tools. "All supported tools are on by default." (alle unterstützten Tools sind standardmäßig aktiv). Die Room-Tools stehen dort mit Leerzeichen statt Unterstrichen: read room propose room snippet app list room apps propose room repo app read room app status Soll Claude Code bei Rooms nur lesen dürfen, nimm den Haken bei den beiden Propose-Tools raus und klick auf Save tools. 4. Claude Code um das Tool bitten Beschreib das Tool und sag, wohin es soll. Claude Code schreibt die Dateien wie jeden anderen Code in seinen Arbeitsordner und schlägt sie dann vor. Ein Room-Tab läuft mit React 18 und TypeScript. Der Einstiegspunkt ist src/App.tsx mit einem Default-Export. Die einzigen npm-Pakete sind dayjs, marked, clsx, lucide-react und recharts. Daten laufen über das App-SDK (docs, kv, db), nicht über localStorage und nicht per fetch an externe Seiten. Schreib das in deinen Prompt oder in CLAUDE.md, sonst weiß Claude Code es nicht. Ein echter Durchlauf Die Tool- und Argumentnamen sind die, die der osFoundry-Server über tools/list zurückgibt. Projekt, Room, IDs und Antworten sind Beispielinhalte. Die beiden Dateien sind die echten aus dieser Anleitung (63 und 14 Zeilen). Example You: Build a small standup timer for the Launch room in osFoundry. Names list, 90 seconds each, a Next button, roster saved. Propose it as a Room app. Claude Code → mcp__osfoundry__list_granted_resources {} ← project "Launch plan" Claude Code → mcp__osfoundry__list_project_resources {"project_id": "…", "resource_type": "room"} ← Room "Launch room" (room_7f3c) Claude Code → mcp__osfoundry__read_room {"room_id": "room_7f3c"} ← cloud Room "Launch room" Claude Code → mcp__osfoundry__list_room_apps {"room_id": "room_7f3c"} ← 2 apps, no standup timer Claude Code → Write src/App.tsx (63 lines: roster in kv, 90 s countdown, Next/Finish) Claude Code → Write src/styles.css (14 lines) Claude Code → mcp__osfoundry__propose_room_snippet_app {"room_id": "room_7f3c", "name": "Standup timer", "files": {"src/App.tsx": "import { useEffect, useState } from 'react'\n…", "src/styles.css": ":root { --bg: #fff; …"}, "idempotency_key": "snip-1c9e…"} ← proposal waiting for the owner Claude Code: I proposed "Standup timer" to Launch room. It shows up in the Room once you approve it under Connected → Needs your approval. (you approve in osFoundry) You: Approved. Is it there? Claude Code → mcp__osfoundry__list_room_apps {"room_id": "room_7f3c"} ← 3 apps, including "Standup timer" Claude Code → mcp__osfoundry__read_room_app_status {"room_id": "room_7f3c", "instance_id": "…"} ← on the Room launcher Claude Code: It's in Launch room's tab bar as "Standup timer". Der Teil in der Mitte ist deiner. Die Glocke zeigt " proposes a Room app". Unter Schlüssel-Icon → Connected hat das Panel der Verbindung einen Abschnitt "Needs your approval". Auf der Karte steht: Create Room snippet app in Launch room Standup timer ▸ Review all proposed files (2) Approval makes this code available in the Room app launcher. Review the files before approving. Expires … [ Approve and create ] [ Decline ] Beispiel: Ein Vorschlag für eine Room-Snippet-App unter Needs your approval, beide Dateien geöffnet Öffne "Review all proposed files". Jede Datei wird vollständig angezeigt, der Pfad zuerst. Das ist schon die ganze Prüfung, denn ein Snippet hat keinen Build-Schritt und kein Manifest, das man checken müsste. Approve and create fügt den Tab hinzu. Decline verwirft den Vorschlag. Beispiel: Der freigegebene Standup timer als neuer Tab im Room Wo die Grenze verläuft Lokale Rooms sind außer Reichweite, und read_room sagt das in seiner eigenen Beschreibung: "Local Rooms are unavailable." Ein lokaler Room ist eine Zeile in der Datenbank der Desktop-App auf einem einzigen Rechner und wird nie synchronisiert. Der MCP-Server, mit dem Claude Code spricht, läuft in der Cloud von osFoundry. Sehen könnte er diesen Room nur über ein Relay durch deinen Desktop, gebunden an dieses Gerät und dieses Projekt. Die initialize-Antwort des Servers nennt die allgemeine Regel: "Local-only data is unavailable to cloud clients." Gehört das Tool in einen lokalen Room, leg es zuerst in einem Cloud-Room ab. Im ⋯-Menü eines lokalen Tabs gibt es außerdem "Move to cloud room…". Ein Vorschlag ist keine Installation. Claude Code kann so viele machen, wie du es lässt, und jeder wartet auf einen Menschen. Die Karte landet im eigenen Panel der Verbindung, mit Room-Name, App-Name und jeder Datei, und sie hat ein Ablaufdatum. Jeder Aufruf trägt außerdem einen idempotency_key (8 bis 128 Zeichen). Wiederholt Claude Code einen Aufruf, weil die Antwort verloren ging, wird er deshalb als derselbe Vorschlag erkannt und erzeugt keine neue Karte. propose_room_repo_app ist der andere Weg. Es verweist auf eine gepinnte Version eines GitNest-Repositorys im selben Projekt wie der Room, nicht auf Dateien im Aufruf. Apps, die Daten, Secrets, Datenbanken, Connectors oder Compute anfordern, lehnt dieses Tool ab; die muss ein Mensch in osFoundry einrichten. Auf der Freigabekarte dazu steht "This path does not build or deploy a bundle." und dass die Freigabe "may incur normal app-serving usage". Was Claude Code zurückliest, ist bewusst dünn. list_room_apps lässt App-Config, Secrets, Dateien und Datenbankinhalte weg, und read_room_app_status liefert keine Config, Dateien, Logs oder Secrets. Es kann also bestätigen, dass der Timer im Launcher ist, aber nicht die Namen lesen, die dein Team eingetippt hat. Diese Namen bleiben dort, wo sie eingetippt wurden. Ein Snippet-Tab speichert seine Daten auf dem Gerät der Person, die ihn benutzt. In der Desktop-App zeigt der Tab ein Laufwerk-Icon, "On this device — data is saved on this computer only", also hat jedes Teammitglied seine eigene Liste. Um diese Daten in den Workspace zu bringen, muss man den Tab als App speichern und aus dem Room deployen. Das macht ein Mensch in osFoundry, und Claude Code hat dafür kein Tool. Als Nächstes lohnt sich der Repository-Weg: Lass Claude Code den Timer in ein GitNest-Repository im selben Projekt pushen und ruf dann propose_room_repo_app mit dieser Version auf, damit der Room eine gepinnte, prüfbare Version ausführt statt einer eingefügten Kopie. Die Room-Seite zeigt Tableiste und Einstellungen, und interne Apps erklärt, wofür Room-Apps gedacht sind.

This is a summary aggregated from Dev.to. Read the complete article on the original site:

Read full article at Dev.to

More AI & Machine Learning News