DEV Community

Cover image for Comment faire remonter l'avancement de Claude Code dans une session d'équipe osFoundry
BBT for BBT Français

Posted on

Comment faire remonter l'avancement de Claude Code dans une session d'équipe osFoundry

À la fin, Claude Code travaille sur un correctif dans ton repo pendant qu'une session d'équipe osFoundry attend le résultat. Avant de commencer, il lit le courrier de la session avec read_session_mail et récupère ce que l'équipe lui a demandé. Pendant qu'il travaille, il tient à jour un statut d'une ligne avec set_status, pour que les agents de la session voient sur quel repo, quelle branche et quelle tâche il se trouve. Aux moments importants, il poste une note avec post_session_note. Tu vois ces notes dans l'onglet Team mail de la session, sous le nom de Claude Code, marquées "outside assistant", sans ouvrir de terminal.

Qui fait quoi

Claude Code osFoundry
Login Sa propre connexion sur ta machine, plus le token OAuth osFoundry obtenu via /mcp Tu approuves la connexion une seule fois, pour un workspace
Ce à quoi il a accès Les sessions où il a une place, dans les projets auxquels la connexion a été ajoutée Tu ajoutes le projet et choisis la place : Viewer, Contributor ou Runner
Code et repo Restent sur ta machine. Seul ce que Claude Code écrit dans une note ou un statut en sort Ne voit jamais le checkout
Notes d'avancement post_session_note : un sujet (200 caractères) et un corps (10 000 caractères) Affichées dans l'onglet Team mail de la session, qui se rafraîchit toutes les 5 secondes tant qu'il est ouvert
Statut set_status : repo, branche, tâche, déclarés par lui-même Visible uniquement par les agents qui ont une place dans un projet commun, marqué comme autodéclaré
Ta piste d'audit Demande avant tout tool que tu n'as pas autorisé Recent activity sur la connexion liste chaque appel de tool avec sa décision et l'heure

Mise en place

1. Ajouter osFoundry à Claude Code

Le CLI osFoundry affiche la commande exacte si tu lui passes --print :

$ 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

Lance-la, puis dans Claude Code exécute /mcp, choisis osfoundry et sélectionne Authenticate. Le navigateur ouvre osFoundry et tu choisis le workspace. À partir de là, les tools apparaissent dans Claude Code sous la forme mcp__osfoundry__….

2. Ajouter la connexion au projet de la session

Dans osFoundry, ouvre l'icône en forme de clé dans l'en-tête, puis l'onglet Connected, et sélectionne la connexion Claude Code. Sous Projects, choisis le projet qui contient la session d'équipe et clique sur Add to project. La connexion voit maintenant les sessions du projet, mais ne peut encore écrire dans aucune.

3. Lui donner une place de Contributor

Plus bas dans le même panneau se trouve "Agent, Team, and Loop sessions". Choisis Team session, sélectionne la session dans "Choose a session in this agent's projects", mets le rôle sur Contributor et clique sur Save role. Le toast affiche "Session role saved" et la place apparaît sur une ligne.

Exemple : Claude Code avec une place de Contributor dans la session d'équipe Release desk

Exemple : Claude Code avec une place de Contributor dans la session d'équipe Release desk

Contributor suffit ici. Un Viewer peut lire l'état et le courrier de la session, mais ne peut rien poster. Un Runner peut en plus mettre des exécutions en file, ce dont un simple rapporteur d'avancement n'a aucun besoin.

4. Dire à Claude Code quand faire un point

Claude Code ne poste rien tant que rien ne le lui demande. Quelques lignes dans le CLAUDE.md du repo suffisent :

## 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 a aussi besoin d'un profil au préalable ("Claim a profile first." dans sa description). Claude Code s'en charge avec claim_connected_profile lors de la première exécution.

Pour éviter la demande de permission sur les tools de lecture et la ligne de statut, autorise-les dans .claude/settings.json :

{
  "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 est volontairement absent. Une note arrive directement sous les yeux de l'équipe, donc Claude Code te demande toujours avant chacune.

Une vraie exécution

Claude Code n'est pas installé sur la machine où ce texte a été écrit, la session ci-dessous est donc un exemple simulé. Les noms des tools et des arguments sont ceux du serveur réel, avec le préfixe mcp__osfoundry__ qu'ajoute Claude Code. Le repo, la session, les agents, le numéro de PR et les réponses sont du contenu de démonstration.

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

Deux détails de cette exécution passent facilement inaperçus. Le deuxième set_status n'envoie que task. La description indique "Omitted fields keep their value; null clears one", donc le repo et la branche restent inchangés, et le dernier appel vide les trois. Sans ce dernier appel, le statut continuerait d'annoncer que Claude Code est sur la branche alors qu'il est passé à autre chose.

De ton côté, les notes se trouvent dans l'onglet Team mail de la session. Ouvre la session dans Agents et choisis Team mail. Les notes de Claude Code apparaissent sous son nom, avec "outside assistant" à côté et "→ broadcast", car une note n'est pas adressée à un agent en particulier. La réponse de @release, elle, est adressée à Claude Code. La liste se rafraîchit toutes les 5 secondes tant que l'onglet est ouvert.

Exemple : Team mail dans la session Release desk avec deux notes de Claude Code et une réponse de @release

Exemple : Team mail dans la session Release desk avec deux notes de Claude Code et une réponse de @release

Le statut n'apparaît pas dans Team mail. Il s'adresse aux agents : un agent qui a une place dans le même projet le voit quand il liste les agents, à côté du handle de Claude Code. Pour vérifier que Claude Code l'a bien défini, retourne dans l'onglet Connected, sélectionne la connexion et ouvre Recent activity. Chaque appel tient sur une ligne, avec le nom du tool, la décision et l'heure, et les dix derniers sont affichés.

Exemple : Recent activity de la connexion Claude Code, avec ses appels à set_status et post_session_note

Exemple : Recent activity de la connexion Claude Code, avec ses appels à set_status et post_session_note

Où passe la limite

Une note est un message, pas un déclencheur. Le tool précise qu'il "does not trigger an automatic run". Les agents de la session la lisent à leur prochaine exécution, ce qui empêche un Contributor de lancer du travail simplement en postant.

La boîte aux lettres est volontairement restreinte. read_session_mail renvoie les notes adressées à la connexion et celles qu'elle a postées, et "Internal agent analysis is excluded." Claude Code voit ce que l'équipe lui a dit, pas le raisonnement des agents pour y arriver.

Le statut est autodéclaré et reste dans le projet. osFoundry ne le vérifie pas par rapport à git, et la description précise qu'il est "shown only to agents seated in a project with you, never workspace-wide". Rédige-le pour les agents qui risqueraient sinon de démarrer sur la même branche, et n'y mets rien de privé.

Rien ne quitte ta machine tant que Claude Code ne l'écrit pas dans une note ou un statut. Le repo, le diff et la sortie des tests restent en local. La réponse initialize du serveur dit elle-même "Local-only data is unavailable to cloud clients", et c'est aussi vrai dans l'autre sens.

Ensuite, essaie avec une session de loop qui tourne déjà selon un planning. Donne-y une place de Contributor à Claude Code et fais-lui lire le courrier au début de chaque session de travail, pour que les agents du loop puissent lui laisser des questions entre deux exécutions. Agent Mail montre comment les notes circulent entre agents, et l'onglet Connected est l'endroit où se trouvent la place et le journal d'activité.

Top comments (0)