Brahim Bousnguar

Notes · Article

Les collègues IA dans Slack ont besoin de leur propre identité

Par · · 11 min de lecture

MintMCP fait tourner 40 à 50 agents IA dans Slack. Ils ont des noms (Max s’occupe des ventes, Leo du marketing, Peter des achats), les gens leur écrivent comme à des collègues, et aucun n’emprunte le login d’un humain. Chaque agent est son propre principal de sécurité, avec sa propre identité, sa propre liste d’outils autorisés et une piste d’audit au niveau de la gateway.

C’est tiré de The Context ft MintMCP, le livestream de l’Agentic AI Foundation, où Jiquan Ngiam, cofondateur et CEO de MintMCP, a montré comment son équipe travaille avec des agents. Ma propre conférence sur ma flotte d’agents se termine sur la partie qu’une installation maison peut se permettre de sauter : supervision, traçabilité, gestion des identités. Son intervention, c’est cette partie-là.

L’identité fait passer de l’outil au coéquipier

JQ (c’est comme ça qu’il se fait appeler) découpe l’adoption de l’IA en quatre niveaux. Le plus intéressant, ce sont les marches entre eux :

N1

Chat

Elle conseille.

Accès aux données via MCP

N2

Cowork

Elle termine des tâches.

Identité d’agent

N3

Collègue

Elle rejoint l’équipe.

Usines logicielles

N4

La machine

Elle construit le logiciel.

Le niveau 2, c’est là où en sont la plupart d’entre nous. Vous branchez Claude Cowork ou un outil du même genre sur le CRM et vous demandez une présentation de prévisions. Il abat des heures de travail, mais en solo.

Le niveau 3, c’est un agent qu’on n’ouvre pas comme une app. Il vit dans Slack ou Teams, peut-être avec son propre compte et sa propre adresse e-mail, et vous lui écrivez comme vous écririez à un collègue. C’est là que l’identité des agents, le contrôle d’accès et les messages d’agent à agent commencent à compter. Le niveau 4, c’est l’usine logicielle dont j’ai parlé le mois dernier.

Du solo au multijoueur

Quand je lance Claude Code ou Codex dans un terminal, personne d’autre ne voit la session. Personne ne peut l’orienter ni reprendre là où elle s’est arrêtée. JQ appelle ça l’IA en solo.

Dans un fil Slack, plusieurs humains et plusieurs agents travaillent au même endroit, tout le monde voit ce qui se passe, et n’importe qui peut intervenir. Les gens adoptent les agents plus vite quand ils les regardent travailler, et les agents gagnent un endroit où travailler ensemble.

Un chiffre m’a surpris. Sur la gateway de MintMCP, qui traite plus de deux millions d’appels MCP et d’agents par jour, les 20 connecteurs les plus installés sont des outils de travail du quotidien : Google, Slack, Notion, Figma, HubSpot. Les ingénieurs sont arrivés en premier, mais ce sont maintenant les non-ingénieurs qui gagnent le plus de temps. Chez Modern Treasury, les agents font gagner des heures par dossier aux technical account managers.

Claude Code ou Codex dans un terminal

Solo

Personne d’autre ne voit la session

Personne ne peut l’orienter ni reprendre là où elle s’est arrêtée

Un fil Slack

Multijoueur

Plusieurs humains et plusieurs agents, au même endroit

Tout le monde voit, n’importe qui peut intervenir

2 M+appels MCP et d’agents par jour sur la gateway de MintMCP

Top 20des connecteurs : des outils du quotidien, Google, Slack, Notion, Figma, HubSpot

Des heuresgagnées par dossier pour les technical account managers de Modern Treasury

Le solo et le multijoueur de JQ, avec les chiffres qu’il a donnés sur la gateway de MintMCP. Les ingénieurs sont arrivés en premier ; ce sont maintenant les non-ingénieurs qui gagnent le plus de temps.

Un fil Slack est une sandbox

La démo en direct était simple. Il a demandé à Leo, l’agent marketing, à quels événements de l’AAIF ils étaient allés et lesquels arrivaient. Leo a ouvert un fil, lancé bash et une recherche, lu Slack via le serveur MCP de Slack, et diffusé chaque étape dans le fil. Sa réponse incluait le livestream qu’on était en train de regarder.

Voici l’installation telle qu’il l’a décrite :

Porte d’entrée

Fil Slack

  • Humains et agents ensemble
  • Un fil, une session
  • Des planifications réveillent aussi les agents

Sandbox éphémère

Harnais de code

  • Claude, Codex ou harnais ouverts
  • Chaque étape diffusée dans Slack
  • Hooks de supervision · mémoire

La seule sortie

Gateway MCP

  • L’identité propre de l’agent
  • Listes d’outils et de données autorisés
  • Chaque appel journalisé

Mon exemple préféré vient de l’ingénierie. Dan est un agent de code sur Claude, Sam en est un sur Codex. Un humain demande à Dan une modification de leur gateway LLM. Dan lit la base de code, propose un plan et attend un feu vert. Il construit une première version et écrit à Sam, et les deux se relisent mutuellement dans le canal jusqu’à tomber d’accord. Puis Dan notifie l’humain, l’humain relit et merge, et le bot se réveille une dernière fois pour demander si la doc a besoin d’une mise à jour.

  1. humainDemande à Dan une modification de leur gateway LLM
  2. DanLit la base de code, propose un plan, attend un feu vertClaude
  3. DanConstruit une première version et écrit à Sam
  4. Dan ⇄ SamSe relisent jusqu’à tomber d’accordClaude ⇄ Codex
  5. DanNotifie l’humain
  6. humainRelit et merge
  7. botSe réveille une dernière fois : la doc a-t-elle besoin d’une mise à jour ?

À découvertChaque étape se trouve dans un canal où les gens peuvent regarder et intervenir.

L’exemple d’ingénierie, un message par ligne. Dan tourne sur Claude et Sam sur Codex : deux familles de modèles se relisent l’une l’autre.

Mon agent de code, Spark, fait déjà relire ses pull requests par un modèle d’une autre famille. La différence, c’est l’endroit : chez eux, tout l’aller-retour se trouve dans un canal où les gens peuvent regarder et intervenir.

Les autres qu’il a montrés : Peter relance les revues de sécurité, les documents manquants et les tenants d’essai sur les deals en cours, et notifie les gens de ce qui reste ouvert. JQ a dit qu’il ne savait plus très bien si c’est lui qui relance les bots ou eux qui le relancent. Minty répond aux clients dans leurs canaux partagés ; après un long fil sur le SSO, un client a écrit « vous avez été parfait, pas besoin d’humain, c’est tout bon pour moi ».

Leur premier agent, Max, a été mis en service en février. Ils sont vite passés d’un agent à cinq, puis à 20. Aujourd’hui, chaque nouvelle recrue crée un agent dès sa première semaine.

Chaque agent est son propre principal

Sans couche d’identité, un agent détient les identifiants d’un humain. Un agent commercial agit en tant que JQ dans le CRM, sur LinkedIn et dans Gmail, et vous perdez le contrôle, le journal d’audit et toute trace de qui a fait quoi. Son exemple : vous lui demandez de faire le ménage dans le CRM, et il comprend « faire le ménage » comme « tout supprimer ».

Chez MintMCP, chaque agent a donc :

  • sa propre identité et son propre périmètre, avec une liste de ce qu’il a le droit de faire
  • des identifiants explicites à chaque appel d’outil : un compte de service, ou un identifiant délégué qui agit pour un utilisateur, avec la chaîne de délégation enregistrée
  • l’OAuth géré au niveau de la gateway, renouvellement compris, parce qu’un agent en arrière-plan ne peut pas s’arrêter pour cliquer sur un écran de connexion

Sans couche d’identité

Login emprunté

Agit en tant que JQ dans le CRM, LinkedIn et Gmail

Aucune trace de qui a fait quoi

« Fais le ménage dans le CRM » compris comme « supprime tout »

Chez MintMCP

Son propre principal

Sa propre identité et son périmètre, avec une liste d’autorisations

Des identifiants explicites à chaque appel, chaîne de délégation enregistrée

L’OAuth à la gateway, renouvellement compris

Le même agent commercial, deux façons d’entrer. Avec son propre principal, chaque appel dit qui agit et pour qui.

Les permissions se décident à l’exécution

C’est la partie à laquelle je n’avais pas réfléchi. L’agent doit-il lire les données en son nom propre, ou au nom de la personne qui a demandé ? Ça dépend du système. Un assistant qui lit des agendas doit utiliser les identifiants de la personne qui demande. Un agent qui suit le monitoring DevOps doit utiliser un compte de service.

Un consentement OAuth, c’est un token statique, et c’est facile à appréhender. Dans un canal, les bonnes permissions dépendent du consentement, de qui a envoyé le message, de qui d’autre verra la réponse, et de la tâche. JQ appelle ça le passage des permissions statiques aux permissions dynamiques.

Statique

Consentement OAuthUn seul token, facile à appréhender

Dynamique · dans un canal

  • le consentement
  • qui a envoyé le message
  • qui d’autre verra la réponse
  • la tâche

les bonnes permissions, pour ce message

Un assistant qui lit des agendasles identifiants de qui demande

Un agent qui suit le monitoring DevOpsun compte de service

Le passage des permissions statiques aux dynamiques selon JQ. Les deux lignes du bas répondent à « en son nom, ou au nom de qui a demandé ? » Ça dépend du système.

Environ 99 % des contrôles de MintMCP restent déterministes. Sa règle : ce que vous pouvez rendre déterministe, rendez-le déterministe. Le cas difficile, c’est un fil avec une personne A, qui peut voir certaines données, et une personne B, qui ne peut pas. Si A dit « vas-y, récupère-les », c’est sans doute acceptable, comme si les deux étaient dans une salle de réunion. Ils testent un peu d’IA pour cette décision, à deux conditions : tout le monde dans le fil voit que l’accès a été accordé, et A dispose d’un bouton pour annuler.

Environ 99 % déterministele reste

Avoit les donnéesBne les voit pas

Avas-y, récupère-les

Accès accordé dans ce fil. Tout le monde ici le voit.Annuler · A seulement

Un peu d’IASans doute acceptable, comme si les deux étaient dans une salle de réunion.

Le cas difficile de l’intervention, dessiné comme un fil. La notification et le bouton d’annulation sont ses deux conditions ; leur formulation est de moi.

Verrouiller les outils à la gateway

Les scopes OAuth sont souvent trop larges, si bien qu’un agent hérite de tout ce que son utilisateur peut faire, y compris envoyer des e-mails et supprimer des enregistrements. La réponse de MintMCP se trouve dans la gateway MCP, et elle est déterministe :

  • les outils risqués sont refusés d’office, comme supprimer des enregistrements ou envoyer des e-mails
  • les agents ne détiennent jamais les clés finales, seulement un accès temporaire via la gateway
  • la gateway journalise chaque appel, pour qu’on puisse retrouver quel agent a fait quoi
  • les outils sont regroupés par rôle, pas par serveur : les ingénieurs ont Jira en lecture et écriture et Intercom en lecture seule, un agent marketing a droit à moins
  • les données ont aussi un périmètre : Google Drive, mais seulement ces 10 dossiers

Deux détails qui m’ont plu. L’outil fork-repository du serveur MCP de GitHub est l’un des premiers que leurs clients désactivent. Et les clients de la finance et de la santé font passer leur DLP existant sur chaque appel MCP, ce qui ajoute 100 à 200 ms.

Agent

Pas de clés finales

Seulement un accès temporaire, via la gateway

Gateway MCP · déterministe

  • Chaque appel journalisé
  • Outils regroupés par rôle, pas par serveur
  • Données sous périmètre aussi
  • Finance et santé : leur DLP sur chaque appel, +100 à 200 ms

Outils

  • Supprimer des enregistrementsrefusé d’office
  • Envoyer un e-mailrefusé d’office
  • Fork repositoryGitHub, l’un des premiers désactivés
  • Jiralecture et écriture, pour les ingénieurs
  • Intercomlecture seule, pour les ingénieurs
  • Google Driveseulement ces 10 dossiers

Le problèmeLes scopes OAuth sont souvent trop larges : un agent hérite de tout ce que son utilisateur peut faire.

La réponse de MintMCP, de l’agent jusqu’aux outils. Les outils barrés sont refusés d’office ; les autres arrivent dans le lot d’un rôle.

J’ai appris la partie déterministe à mes dépens. En août, j’ai interdit les outils MCP de mon app de finances à la plupart de mes agents avec un motif dans la config de ma gateway. Un mois plus tard, j’ai testé : le motif ne correspondait à rien, et un agent censé être bloqué se voyait proposer les 13 outils, outils d’écriture compris. Les noms d’outils utilisaient un autre séparateur que celui que j’avais supposé. Maintenant, je vérifie une règle de refus en demandant à l’agent de lister ses outils.

  1. 1Août

    Un motif de refus pour les outils de mon app de finances, dans la config de ma gateway

  2. 2Un mois plus tard

    Il ne correspondait à rien. Un agent bloqué voyait les 13 outils, outils d’écriture compris

  3. 3Maintenant

    Je vérifie une règle de refus en demandant à l’agent de lister ses outils

PourquoiLes noms d’outils utilisaient un autre séparateur que celui que j’avais supposé.

Ma propre version de la leçon : une règle de refus ne vaut que par les noms qu’elle reconnaît.

Personne n’avait demandé ce message de 6 h

La meilleure histoire est arrivée pendant les questions. À 6 h du matin, Max a posté dans le canal des deals qu’un même deal avait été attribué à deux commerciaux. JQ a commencé à déboguer le deal, puis s’est arrêté : pourquoi l’agent s’était-il réveillé pour poster ça, au fond ?

Il a fallu le journal d’audit pour le savoir. Un membre de l’équipe avait demandé quelque chose à son propre agent, cet agent avait délégué à Max, et Max avait remonté l’affaire à tout le canal. Sans la chaîne de délégation, personne ne l’aurait su.

Ce que le canal a vu, à 6 h

MaxUn même deal a été attribué à deux commerciaux.

Ce que montrait le journal d’audit

  1. Un membre de l’équipedemande quelque chose à son propre agent
  2. Son agentdélègue à Max
  3. Maxremonte l’affaire à tout le canal
  4. Canal des dealsle post de 6 h

Journal d’auditSans la chaîne de délégation, personne n’aurait su pourquoi Max avait posté.

L’histoire de JQ pendant les questions-réponses, lue comme il a dû la lire : du post jusqu’à qui l’a déclenché. Le message de Max est paraphrasé.

C’est la prochaine phase qu’il voit venir : qui peut créer un agent, lui écrire et le modifier, qui les orchestre tous, et, selon ses mots, quel est l’équivalent des RH pour les agents.

La mémoire aussi a besoin d’un contrôle d’accès

Darren Shepherd, l’un des animateurs, a objecté. On ne peut pas étiqueter chaque phrase avec une classification de données, et à mesure que les modèles deviennent plus malins, l’IA devrait peut-être prendre davantage de ces décisions. Nous faisons confiance aux humains, a-t-il dit, à cause des processus qui les entourent, pas parce qu’ils sont fiables.

La réponse de JQ a été une seconde dimension : la mémoire. Quand son agent personnel parle à Darren, il ne doit pas partager les finances de JQ. La mémoire est donc cloisonnée (un silo par personne, par équipe, par entreprise, par client), et l’agent voit des silos différents selon la personne à qui il parle. Le même badge persistant à l’entrée, des livres différents qu’il a le droit de lire. Pour lui, cette partie relève encore largement de la R&D.

Le même badge à l’entrée

Des livres différents, selon l’interlocuteur

  • Par personneFinances de JQfermé pour Darren
  • Par équipe
  • Par entreprise
  • Par client

R&DSes mots pour cette partie : encore largement de la R&D.

Un schéma de la réponse de JQ à Darren. Seul le silo qu’il a cité est dessiné fermé ; lesquels s’ouvrent pour qui, il ne l’a pas dit.

Où en est ma propre flotte

Chacun de mes agents a son propre fil Telegram. Sur la carte de JQ, c’est le niveau 2 : un humain et un agent par fil, personne d’autre pour regarder. Telegram ne transmet même pas les messages d’un bot à un autre bot, donc mes agents ne peuvent pas se parler là-bas.

Aujourd’hui, j’ai donné un compte Slack à deux d’entre eux : Nova, mon généraliste, et Spark, mon codeur. Ils vivent dans un espace de travail réservé aux agents, chacun avec sa propre app Slack, parce qu’une app correspond à un utilisateur bot. C’est la première brique d’identité. Prochaine étape : que Nova ouvre un canal pour une tâche de code et y fasse venir Spark, comme Dan fait venir Sam.

Le hic : l’offre gratuite de Slack autorise 10 apps par espace de travail, et j’ai 17 agents. Identifiants délégués, permissions à l’exécution et silos de mémoire : tout ça est encore devant moi.

Chaque agent

Telegram

Un humain et un agent par fil, personne d’autre pour regarder

Les bots ne reçoivent pas les messages des autres bots

Le niveau 2 de JQ

Nova et Spark

Slack

Un espace de travail Slack réservé aux agents

Une app Slack chacun : la première brique d’identité

Ensuite : Nova ouvre un canal pour une tâche de code et y fait venir Spark

Offre gratuite de Slack : 10 apps par espace de travail

N, S : Nova et Spark7 de mes 17 agents n’y entrent pas

Encore devant moiIdentifiants délégués, permissions à l’exécution, silos de mémoire.

Mon installation face à la carte de JQ. Les carrés dans le cadre sont les 10 emplacements d’app de l’offre gratuite ; ceux en pointillés sont les agents qui restent.

L’intervention dure 40 minutes, et les questions-réponses sur les permissions en sont le meilleur moment. MintMCP a aussi écrit un billet sur comment construire un collègue IA dans Slack. Et si vous avez résolu le cas du fil avec la personne A et la personne B, je serais ravi de savoir comment.

Texte brut: ai-coworkers-slack-agent-identity.md · Flux Atom · Toutes les notes

Contact

Écrivez-moi.

b.bousnguar@gmail.com

Intégration SAP Commerce Cloud, MuleSoft et Salesforce · Nantes · FR / EN