S’exécute seul
L’appel passe directement. Pour les lectures et les écritures courantes que vous avez déjà décidé de considérer comme fiables.
gmail.list_messages
Connectez un outil une seule fois pour toute l’entreprise. Les agents y accèdent via un jeton limité que Kortix gère côté serveur — l’identifiant brut n’est donc jamais transmis à la machine contrôlée par le modèle.
connector.call("gmail", "send_email", {…})
KORTIX_TOKEN=kortix_pat_…
Un jeton limité, et rien d’autre
Chaque action exposée par un connecteur reçoit l’une de trois réponses, que vous définissez. Une par outil, ou un seul motif qui en couvre une centaine — un glob par défaut, ou une expression régulière entre barres obliques.
L’appel passe directement. Pour les lectures et les écritures courantes que vous avez déjà décidé de considérer comme fiables.
gmail.list_messages
L’exécution s’arrête sur l’appel et attend. Une personne peut l’approuver une fois, pour le reste de la session, ou le refuser.
gmail.send_email
L’action n’est pas disponible et aucune approbation ne peut l’autoriser sur le moment. La suppression d’un client reste interdite.
stripe.delete_customer
Un outil laissé sur Par défaut n’a pas sa propre règle et applique la valeur par défaut du projet. Tant que vous n’avez pas défini cette valeur selon le risque — les lectures s’exécutent, les écritures et actions destructrices demandent une validation — un projet intact exécute tout.

Une barrière qui renvoie une erreur apprend à l’agent à la contourner en réessayant. Une barrière Kortix maintient l’appel ouvert : l’agent reste au milieu de sa tâche lorsque vous répondez et reprend exactement là où il s’est arrêté.
running
L’agent rédige la réponse et arrive à send_email.
waiting
L’appel est suspendu. Vous voyez l’action et ses arguments.
approved
Vous approuvez. Le même appel se termine et l’exécution continue.
Une règle basée sur le nom de l’outil peut seulement demander « l’agent peut-il envoyer un email ? » — ce qui est rarement la vraie question. Une condition cible une valeur dans l’appel et la compare à un glob ou une expression régulière. Une règle peut ainsi autoriser les envois vers votre propre domaine et bloquer tout le reste. Un argument de type liste ne passe que si chaque entrée est acceptée : un seul destinataire hors liste suffit à suspendre l’appel. Toute décision impossible se résout vers moins d’accès, jamais davantage.
Les règles à l’échelle du projet sont évaluées en premier et ne peuvent pas être contournées par la personne qui ajoute ensuite un connecteur.
Un connecteur appartient au projet, pas à un ordinateur portable ni à une connexion. Ajoutez-le une fois et chaque session démarrée dans ce projet pourra y accéder — sans configuration supplémentaire ni clé partagée par message privé.
Choisissez l’app, suivez son écran OAuth, et c’est fait. Kortix stocke la connexion, pas votre mot de passe — Gmail, Notion, Linear, Salesforce, HubSpot, Zendesk, Google Drive et des milliers d’autres.
Pointez Kortix vers une spécification OpenAPI ou Postman, un endpoint GraphQL, un serveur MCP distant ou une simple URL de base HTTP. Il lit la source, détermine l’authentification et transforme chaque opération en outil.
Slack et l’email se connectent de la même manière : un agent peut ainsi être contacté et répondre là où le travail se fait déjà.

Un sandbox est une véritable machine Linux sur laquelle le modèle peut tout exécuter. Nous n’y plaçons donc pas vos identifiants. Le sandbox ne contient qu’un seul jeton Kortix, limité au projet, et chaque appel sortant est assemblé de notre côté de la séparation.
Chaque clé se trouve dans l’environnement que le modèle lit. En révoquer une signifie la renouveler partout où elle a été copiée, et n’importe laquelle peut finir dans une ligne de journal.
Limité à un projet, puis restreint davantage selon ce que l’agent est autorisé à utiliser. Désactiver un connecteur prend effet au prochain appel. Rien dans le sandbox n’a besoin d’être renouvelé, car aucun de vos secrets n’y a jamais été placé.
connector.call("gmail", "send_email", {…})
L’agent appelle un outil. Il indique le connecteur et l’action — il n’a ni URL, ni hôte, ni clé.
POST /v1/connectors/call
La passerelle vérifie que cet agent peut utiliser ce connecteur, applique la politique, déchiffre l’identifiant côté serveur et l’ajoute à la requête sortante.
Authorization: Bearer ••••••••
L’API tierce reçoit une requête authentifiée standard. La réponse revient à l’agent. L’identifiant reste à l’extérieur.
Les identifiants des connecteurs sont chiffrés avec une clé propre à chaque projet et stockés séparément des valeurs accessibles au sandbox.
Le secret est ajouté à une seule requête sortante, puis supprimé. Il n’est jamais écrit dans l’environnement du sandbox.
Le modèle ne voit jamais d’identifiant, et le registre stocke un hash des entrées plutôt que les entrées elles-mêmes.
Les accès sont accordés, pas hérités. Un agent reçoit les connecteurs que vous lui attribuez, et rien d’autre. L’accès effectif correspond toujours à l’intersection entre ce que la personne peut faire et ce qui a été accordé à l’agent.
Un connecteur appartient à un seul projet. Un autre projet ne peut ni le voir, ni l’appeler, ni lire son identifiant — chaque projet possède son propre périmètre d’impact.
Chaque agent indique les connecteurs qu’il peut utiliser. L’agent de support accède à Zendesk et Gmail ; l’agent de reporting n’accède à aucun des deux et ne peut même pas découvrir leur existence.
Choisissez à qui appartient la connexion : un compte géré par le projet et partagé par tous, ou une autorisation personnelle où chaque membre agit en son nom et où un principal automatisé ne peut pas agir du tout.
[[agents]]
name = "support"
connectors = ["zendesk", "gmail"]
[[agents]]
name = "recruiting"
connectors = ["greenhouse", "gmail"]
[[agents]]
name = "reporting"
connectors = ["warehouse"]Les autorisations sont du texte dans le dépôt : modifier qui peut accéder à quoi produit donc un diff à réviser, plutôt qu’un réglage déplacé discrètement.
La passerelle qui résout l’identifiant est aussi celle qui écrit l’enregistrement. Aucun chemin vers un outil connecté ne peut la contourner.
Le connecteur et l’action exacte appelée.
L’agent et la personne ou le déclencheur à l’origine de la session.
Exécuté, refusé, en attente d’approbation ou en erreur.
Indique si l’action lit, écrit ou détruit.
La personne qui a autorisé un appel suspendu, et à quel moment.
Un hash des arguments et un résultat expurgé — jamais un secret en clair.
Consultez l’historique de toute session dans l’application. L’accès à l’audit fait partie de l’offre Enterprise.
Commencez par une tâche et développez à partir de là.