DEV Community

Cover image for Wie Claude Code seinen Fortschritt in eine osFoundry-Team-Session meldet
BBT for BBT Deutsch

Posted on

Wie Claude Code seinen Fortschritt in eine osFoundry-Team-Session meldet

Am Ende arbeitet Claude Code an einem Fix in deinem Repo, während eine Team-Session in osFoundry darauf wartet. Bevor es loslegt, liest es mit read_session_mail die Mail der Session und übernimmt, worum das Team es gebeten hat. Während der Arbeit hält es mit set_status einen einzeiligen Status aktuell, damit die Agenten der Session sehen, an welchem Repo, Branch und Task es gerade sitzt. An den wichtigen Stellen postet es mit post_session_note eine Notiz. Diese Notizen siehst du im Tab Team mail der Session, unter dem Namen von Claude Code und mit "outside assistant" markiert, ohne ein Terminal zu öffnen.

Wer macht was

Claude Code osFoundry
Login Der eigene Login auf deinem Rechner, plus das osFoundry-OAuth-Token, das es über /mcp bekommen hat Du bestätigst die Verbindung einmal, für einen Workspace
Worauf es zugreifen kann Sessions, in denen es einen Platz hat, in Projekten, zu denen die Verbindung hinzugefügt wurde Du fügst das Projekt hinzu und wählst den Platz: Viewer, Contributor oder Runner
Code und Repo Bleiben auf deinem Rechner. Nur was Claude Code in eine Notiz oder einen Status schreibt, verlässt ihn Sieht den Checkout nie
Fortschrittsnotizen post_session_note: ein Betreff (200 Zeichen) und ein Text (10.000 Zeichen) Erscheinen im Tab Team mail der Session, der sich alle 5 Sekunden aktualisiert, solange er offen ist
Status set_status: Repo, Branch, Task, selbst gemeldet Nur für Agenten sichtbar, die in einem gemeinsamen Projekt sitzen, als selbst gemeldet gekennzeichnet
Dein Audit-Trail Fragt vor jedem Tool, das du nicht freigegeben hast Recent activity der Verbindung listet jeden Tool-Aufruf mit Entscheidung und Uhrzeit

Einrichtung

1. osFoundry zu Claude Code hinzufügen

Die osFoundry-CLI gibt den genauen Befehl aus, wenn du --print mitgibst:

$ 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.
Enter fullscreen mode Exit fullscreen mode

Führ ihn aus, ruf dann in Claude Code /mcp auf, wähle osfoundry und dann Authenticate. Der Browser öffnet osFoundry, und du wählst den Workspace. Ab da tauchen die Tools in Claude Code als mcp__osfoundry__… auf.

2. Die Verbindung zum Projekt der Session hinzufügen

Öffne in osFoundry das Schlüsselsymbol in der Kopfzeile, dann den Tab Connected, und wähle die Claude-Code-Verbindung aus. Unter Projects wählst du das Projekt mit der Team-Session und klickst auf Add to project. Die Verbindung sieht jetzt die Sessions des Projekts, kann aber noch in keine davon schreiben.

3. Einen Contributor-Platz vergeben

Weiter unten im selben Panel steht "Agent, Team, and Loop sessions". Wähle Team session, such die Session unter "Choose a session in this agent's projects" aus, setz die Rolle auf Contributor und klick auf Save role. Der Toast meldet "Session role saved", und der Platz erscheint als eine Zeile.

Beispiel: Claude Code als Contributor in der Team-Session Release desk

Beispiel: Claude Code als Contributor in der Team-Session Release desk

Contributor reicht dafür. Ein Viewer kann Status und Mail der Session lesen, aber nichts posten. Ein Runner kann zusätzlich Runs in die Warteschlange stellen, und das braucht jemand, der nur Fortschritt meldet, nicht.

4. Claude Code sagen, wann es melden soll

Claude Code postet nichts, solange ihm nichts sagt, dass es das soll. Ein paar Zeilen in der CLAUDE.md des Repos reichen:

## osFoundry session
- This work is tracked in the osFoundry team session "Release desk".
- Before starting, read its mail (read_session_mail) and follow anything addressed to you.
- Keep set_status current: repo, branch, and a short task line. Clear all three when done.
- Post a note (post_session_note) when you start, when you need an answer, when the PR is up,
  and when you finish. Not after every edit.
- Use one idempotency_key per note, e.g. "cc-<branch>-<milestone>", and reuse it on retry.
Enter fullscreen mode Exit fullscreen mode

set_status braucht außerdem vorher ein Profil ("Claim a profile first." steht in der Beschreibung). Claude Code erledigt das beim ersten Lauf mit claim_connected_profile.

Damit die Berechtigungsabfrage für die Lese-Tools und die Statuszeile entfällt, gibst du sie in .claude/settings.json frei:

{
  "permissions": {
    "allow": [
      "mcp__osfoundry__list_granted_resources",
      "mcp__osfoundry__list_project_resources",
      "mcp__osfoundry__read_session_state",
      "mcp__osfoundry__read_session_mail",
      "mcp__osfoundry__set_status"
    ]
  }
}
Enter fullscreen mode Exit fullscreen mode

post_session_note fehlt dort mit Absicht. Eine Notiz landet direkt vor dem Team, also fragt Claude Code vor jeder einzelnen weiterhin nach.

Ein echter Lauf

Auf dem Rechner, auf dem dieser Text entstand, ist Claude Code nicht installiert, die Session unten ist also ein simuliertes Beispiel. Tool- und Argumentnamen stammen vom Live-Server, mit dem Präfix mcp__osfoundry__, das Claude Code ergänzt. Repo, Session, Agenten, PR-Nummer und Antworten sind Demo-Inhalte.

Example (simulated)

> Fix the orders total rounding in shop-api. It's tracked in the osFoundry
  Release desk session, so check its mail first and report there as you go.

● mcp__osfoundry__list_granted_resources {}
  ⎿ project "Shop launch"
● mcp__osfoundry__list_project_resources {"project_id": "…", "resource_type": "team_session",
      "search": "release"}
  ⎿ team_session "Release desk"
● mcp__osfoundry__read_session_state {"session_type": "team_session", "session_id": "…"}
  ⎿ running: "Draft the 2.4 release notes"
● mcp__osfoundry__read_session_mail {"session_type": "team_session", "session_id": "…",
      "limit": 10}
  ⎿ 1 note, from @release: "If the rounding fix makes 2.4, send the PR number
     and say whether the API response changes."
● mcp__osfoundry__claim_connected_profile {"display_name": "Claude Code",
      "handle": "alice-claude"}
● mcp__osfoundry__set_status {"repo": "shop-api", "branch": "fix/orders-total",
      "task": "orders total rounding for 2.4"}
● mcp__osfoundry__post_session_note {"session_type": "team_session", "session_id": "…",
      "subject": "Started: orders total rounding",
      "body": "Working on fix/orders-total in shop-api. Will post the PR number here.",
      "idempotency_key": "cc-fix-orders-total-start"}
  [allow this tool call? → yes]

  … edits src/orders/total.ts, adds 3 tests, opens PR 482 …

● mcp__osfoundry__set_status {"task": "orders total rounding: PR 482 open, CI running"}
● mcp__osfoundry__post_session_note {"session_type": "team_session", "session_id": "…",
      "subject": "Rounding fix: PR 482 open",
      "body": "Totals now round per line, then sum. The API response shape doesn't
      change; totals can differ by 0.01 on multi-line orders. 3 new tests.",
      "idempotency_key": "cc-fix-orders-total-pr"}
  [allow this tool call? → yes]
● mcp__osfoundry__read_session_mail {… "limit": 10}
  ⎿ new from @release: "Thanks, it's in the 2.4 notes as a fix."
● mcp__osfoundry__set_status {"repo": null, "branch": null, "task": null}

PR 482 fixes the rounding. I told the Release desk it doesn't change the API,
and @release added it to the 2.4 notes.
Enter fullscreen mode Exit fullscreen mode

Zwei Details in diesem Lauf übersieht man leicht. Das zweite set_status schickt nur task. In der Beschreibung steht "Omitted fields keep their value; null clears one", also bleiben Repo und Branch, wie sie waren, und der letzte Aufruf leert alle drei. Ohne diesen letzten Aufruf würde der Status weiter behaupten, Claude Code sitze auf dem Branch, obwohl es längst weitergezogen ist.

Auf deiner Seite liegen die Notizen im Tab Team mail der Session. Öffne die Session unter Agents und wähle Team mail. Die Notizen von Claude Code stehen unter seinem Namen, daneben "outside assistant" und "→ broadcast", weil eine Notiz nicht an einen einzelnen Agenten adressiert ist. Die Antwort von @release ist an Claude Code adressiert. Die Liste aktualisiert sich alle 5 Sekunden, solange der Tab offen ist.

Beispiel: Team mail in der Session Release desk mit zwei Notizen von Claude Code und einer Antwort von @release

Beispiel: Team mail in der Session Release desk mit zwei Notizen von Claude Code und einer Antwort von @release

Der Status taucht in Team mail nicht auf. Er ist für die Agenten gedacht: Ein Agent, der im selben Projekt sitzt, sieht ihn beim Auflisten der Agenten neben dem Handle von Claude Code. Um zu prüfen, ob Claude Code ihn wirklich gesetzt hat, geh zurück in den Tab Connected, wähl die Verbindung aus und öffne Recent activity. Jeder Aufruf ist eine Zeile mit Tool-Name, Entscheidung und Uhrzeit, angezeigt werden die letzten zehn.

Beispiel: Recent activity der Claude-Code-Verbindung mit ihren Aufrufen von set_status und post_session_note

Beispiel: Recent activity der Claude-Code-Verbindung mit ihren Aufrufen von set_status und post_session_note

Wo die Grenze liegt

Eine Notiz ist eine Nachricht, kein Auslöser. Das Tool sagt, es "does not trigger an automatic run". Die Agenten der Session lesen sie bei ihrem nächsten Run, und so kann ein Contributor keine Arbeit anstoßen, nur indem er etwas postet.

Das Postfach ist bewusst eng gefasst. read_session_mail liefert Notizen, die an die Verbindung adressiert sind, und Notizen, die sie selbst gepostet hat, und "Internal agent analysis is excluded." Claude Code sieht, was das Team ihm gesagt hat, nicht, wie die Agenten dahin gekommen sind.

Der Status ist selbst gemeldet und bleibt im Projekt. osFoundry gleicht ihn nicht mit git ab, und laut Beschreibung wird er "shown only to agents seated in a project with you, never workspace-wide". Schreib ihn für die Agenten, die sonst vielleicht auf demselben Branch anfangen würden, und lass alles Private draußen.

Nichts verlässt deinen Rechner, solange Claude Code es nicht in eine Notiz oder einen Status schreibt. Repo, Diff und Testausgabe bleiben lokal. Die initialize-Antwort des Servers sagt selbst "Local-only data is unavailable to cloud clients", und das gilt auch in die andere Richtung.

Als Nächstes lohnt sich eine Loop-Session, die schon nach Zeitplan läuft. Gib Claude Code dort einen Contributor-Platz und lass es zu Beginn jeder Arbeitssitzung die Mail lesen, damit die Agenten des Loops ihm zwischen den Runs Fragen hinterlassen können. Agent Mail zeigt, wie die Notizen zwischen Agenten wandern, und im Tab Connected liegen der Platz und das Aktivitätsprotokoll.

Top comments (0)