La CLI de Cord : votre intégration prête depuis le terminal

Ce que fait la CLI de Cord 2.1 : connexion depuis le navigateur, intégration du projet, apps connectées, MCP dans vos agents et webhooks testés sur localhost.

Intégrer une plateforme de paiement commence souvent de la même façon : chercher la section des clés dans un tableau de bord, copier une longue chaîne dans un .env, écrire la route qui reçoit les webhooks, vérifier leur signature, ouvrir un tunnel pour la tester sur votre machine et tout recommencer quand vous changez d’ordinateur. Avec Cord, nous voulions que tout tienne en une seule commande :

npx @flouviahq/cli

Hier soir, nous avons publié la version 2.1 de @flouviahq/cli. Cet article présente ce qu’elle fait, écran par écran. Les images sont des reproductions fidèles de l’assistant réel : les mêmes textes, couleurs et étapes que vous verrez dans votre terminal.

À l’ouverture, l’assistant sait déjà où il se trouve : le dossier, le framework et les apps qu’utilise votre projet.

Un assistant en plein écran

Lancée sans commande, la CLI ouvre un assistant qui occupe tout le terminal. Avant de toucher à quoi que ce soit, il lit votre projet : il reconnaît Next.js (App Router et Pages Router), Astro, Express, Laravel, Django, Flask et FastAPI, et vous indique ce qu’il va intégrer. Depuis le menu, vous pouvez changer de framework, voir la liste exacte de ce qu’il va faire ou ouvrir Confidentialité et données avant de continuer.

Il lui faut un terminal d’au moins 80 sur 28 caractères ; avec --simple, il ouvre la version en ligne. Il parle espagnol, anglais, portugais, français et allemand selon votre système, ou la langue que vous fixez avec CORD_LANG. Et tout ce que fait l’assistant reste disponible sous forme de commandes autonomes pour les scripts et la CI, chacune avec --json.

Connexion depuis le navigateur, sans copier de clé

Pour connecter votre compte, le terminal ouvre votre navigateur sur la page d’autorisation. Vous y choisissez l’organisation, vous voyez que l’assistant ne travaille qu’en mode test et vous décidez de ce que peut faire la clé de votre projet : cinq ressources (produits, clients, devis, webhooks et Elements), chacune sans accès, en lecture ou en écriture. Suggéré correspond au minimum qu’utilisent les fichiers qu’il va créer : lire votre catalogue et écrire les devis et la configuration d’Elements.

Vous cliquez sur Autoriser l’assistant, Cord confirme votre identité et le terminal se connecte tout seul. Aucun code à comparer, aucune clé à coller.

Le terminal attend ; dans le navigateur, vous choisissez l’organisation et les droits de la clé du projet.

Comment ça marche en coulisses

Le retour vers le terminal suit le modèle des applications natives avec OAuth (RFC 8252) et PKCE (RFC 7636). Le terminal ouvre un port aléatoire sur 127.0.0.1, génère un code_verifier qui ne quitte jamais votre machine et n’envoie à Cord que son empreinte S256, avec un state. Quand vous autorisez l’accès, Cord renvoie le navigateur vers 127.0.0.1/callback avec un code à usage unique, et le terminal l’échange à l’aide du vérificateur.

Sans le vérificateur, le code du navigateur ne sert à rien : l’intercepter ne suffit pas pour repartir avec les clés.

Quelques décisions qui ne sont pas évidentes :

  • La base ne contient que des empreintes. Du device code et du code du navigateur, Cord conserve le sha256, jamais la valeur.
  • Le retour n’accepte que votre propre ordinateur. L’adresse doit être 127.0.0.1 ou localhost avec un port et le chemin /callback ; toute autre adresse est rejetée dès la demande de connexion.
  • Les clés ne sont remises qu’une seule fois. Elles restent chiffrées jusqu’à ce que le terminal les réclame, et sont supprimées à ce moment-là.
  • Deux clés, deux rôles. Celle de la CLI est restreinte et de test, expire au bout de 90 jours et n’utilise que les simulateurs, les événements, les propositions de configuration et l’assistant IA ; elle ne compte pas dans la limite de clés de votre offre. Celle du projet porte les droits que vous avez choisis, compte comme une clé de votre offre et est enregistrée dans votre .env.local.

Par SSH, en CI, avec --no-browser ou avec --json, il n’y a pas de navigateur vers lequel revenir : la CLI utilise alors le code à comparer, le flux d’appareil que nous avons décrit dans cord login sans copier de clés.

L’assistant travaille à découvert

Pendant l’intégration, l’écran affiche chaque tâche avec son avancement, l’action en cours et quatre onglets : État, Journal (chaque fichier qu’il lit ou écrit et chaque commande qu’il exécute), Nouveautés (les dernières sorties de Cord) et Visualiseur.

Les tâches se cochent à mesure qu’elles se terminent ; ce qui ne s’applique pas à votre projet est ignoré, et l’assistant le signale.

Dans un projet Next.js avec App Router, l’assistant :

  1. Installe @flouviahq/node et @flouviahq/elements avec votre gestionnaire de paquets (npm, pnpm, yarn ou bun, selon votre fichier de verrouillage).
  2. Crée app/api/webhooks/cord/route.ts, qui vérifie la signature de chaque webhook sur le corps brut.
  3. Crée app/api/cord/[...path]/route.ts, le proxy par lequel Cord Elements communique avec Cord sans exposer votre clé.
  4. Enregistre la clé du projet dans .env.local.
  5. Si vous lui avez indiqué votre site et votre activité, demande à Cord une proposition de configuration (produits, taxes et modèles) que vous validez dans le navigateur.
  6. Écrit CORD-INTEGRACION.md avec ce qui a changé.

Trois règles qu’il n’enfreint jamais : il n’écrase aucun fichier existant, il n’écrit de clés que dans un fichier d’environnement ignoré par git et il ne touche pas aux autres lignes de votre .env.

L’IA qui intègre, et ses limites

La 2.1 apporte un agent qui lit votre projet et y adapte l’intégration : il place les routes dans votre arborescence, intègre le générateur de devis à votre page, puis lance votre build et vos tests. Il raisonne côté Cord, mais ses outils s’exécutent sur votre machine et restent confinés au dossier du projet :

  • Il n’ouvre jamais un .env*, votre dossier .git ni node_modules. Un chemin qui sort du projet, y compris par un lien symbolique, échoue.
  • Il n’exécute que les commandes d’une liste : installer des paquets @flouviahq/* avec npm, pnpm, yarn ou bun, vos scripts de build, de lint, de vérification de types et de tests, et npx tsc --noEmit. Toute autre commande, ou une commande contenant des caractères du shell, est rejetée et consignée dans le journal.

Pour l’instant, Cord ne l’active pas : le serveur répond que l’assistant n’est pas disponible et la CLI continue avec des modèles, sans que vous ayez rien à faire. Nous l’activerons quand notre déclaration sur l’intelligence artificielle couvrira la lecture, par l’IA, du code de la personne qui intègre. L’assistant vous demandera alors s’il doit intégrer avec l’IA ou avec des modèles, et tout ce qu’il modifiera sera consigné dans CORD-INTEGRACION.md.

Avant de commencer, Confidentialité et données indique ce qui quitte votre ordinateur et ce qui n’en sort jamais.

Connectez les apps que vous utilisez déjà

L’assistant cherche dans vos dépendances (package.json, composer.json ou celles de Python) les SDK des apps que Cord connecte : @hubspot/api-client, c’est HubSpot ; @shopify/shopify-api ou Hydrogen, c’est Shopify ; @slack/bolt ou @slack/web-api, c’est Slack. Il reconnaît aussi QuickBooks Online, Xero, Google Sheets et Microsoft Teams.

S’il en trouve une, il vous propose de la connecter à Cord. Vous appuyez sur o, la page de cette intégration s’ouvre dans votre navigateur et, une fois que vous avez terminé, l’écran se coche tout seul. Pour le savoir, Cord ne renvoie que l’état de chaque connexion, jamais l’une de ses données.

HubSpot a été connecté depuis le navigateur ; Shopify et Slack attendent leur tour.

Le MCP de Cord dans vos agents

À la fin, l’assistant propose d’ajouter le serveur MCP de Cord à Claude Code (.mcp.json), Cursor (.cursor/mcp.json) et VS Code (.vscode/mcp.json). Il n’écrit que l’adresse du serveur, sans toucher aux autres que vous avez déjà : la première fois, votre agent vous demande d’autoriser l’accès dans Cord avec OAuth, si bien qu’aucun fichier ne contient de clé.

Vous cochez les agents avec la barre d’espace et l’assistant écrit leur fichier.

Avec le MCP, votre agent consulte les devis, les clients et les paiements, et prépare des brouillons. Ce qui envoie, encaisse ou modifie un client, c’est vous qui le validez dans Cord. Tout cela existe aussi sous forme de commandes : cord mcp add, cord mcp remove et cord mcp tutorial, qui explique comment l’ajouter comme connecteur personnalisé dans Claude et ChatGPT. Le détail se trouve dans le guide du MCP.

Des webhooks signés sur votre localhost

cord listen ouvre une session de test et transfère chaque événement à votre serveur avec la même signature qu’en production. Avec --env-file, il enregistre le secret de signature dans votre .env.local, et ce secret est le même dans chaque session de votre clé : redémarrer ne vous oblige pas à le changer.

npx @flouviahq/cli listen --forward-to http://localhost:3000/api/webhooks/cord --env-file .env.local

Chaque transfert est confirmé : si votre serveur ne répond pas, l’événement retourne dans la file et repart au bout de 5, 15, 30 et 60 secondes. Dans un autre terminal, cord trigger déclenche n’importe quel événement du catalogue ; avec --objeto et l’id d’un devis ou d’une facture de test, l’événement porte ses données réelles.

Déclenchez un événement dans un terminal et regardez-le arriver sur votre route, signé, dans l’autre.

D’autres commandes servent au quotidien : cord events tail et cord logs tail affichent les événements et les requêtes à mesure qu’ils arrivent, cord api appelle n’importe quelle route avec votre clé et cord simulate force le résultat de la prochaine émission fiscale ou fait expirer un devis. Le guide de la CLI donne la liste complète.

À la fin, un récapitulatif

L’assistant se termine sur ce qu’il a fait, ce qui reste à faire et les webhooks déjà à l’écoute sur votre serveur local. Ce qui a changé est consigné dans CORD-INTEGRACION.md, sans aucune valeur de votre .env.

Le récapitulatif indique ce qui est prêt et ce qui reste à faire, avec le lien pour terminer.

Essayez-le

Il vous faut Node 22 ou une version ultérieure et un compte Cord.

npx create-next-app@latest ma-boutique --ts --app
cd ma-boutique
npx @flouviahq/cli

Une fois l’assistant terminé, laissez npm run dev tourner dans un terminal et lancez npx @flouviahq/cli trigger quote.approved dans un autre : l’événement arrive sur votre route, signé, et l’assistant vous affiche le 200.

FIN DE L’ARTICLE

De la proposition au paiement. Tout dans un seul lien.

Envoyez un devis que votre client approuve et paie depuis un seul lien, sans créer de compte, puis facturez-le en un clic. Dans 12 pays, avec une offre gratuite et sans carte bancaire.