CLI vs. MCP : notre choix.
Chez Bold, nous pensons que le CLI sera le moteur de l’IA agentique.
Pourquoi ?
-
Les outils en ligne de commande existent depuis plusieurs
décennies, alors que le MCP est un protocole encore immature.
- beaucoup de failles de sécurité déjà comblées ;
-
Le CLI est parfaitement compatible avec les harness modernes
capables de découvrir les commandes.
- pour les CLI les plus mainstream, les LLM sont déjà entraînés pour les utiliser ;
- pour les nouveaux CLI ou les CLI custom si vous en publiez, il est possible de publier des skills pour accompagner leur documentation.
- Le CLI est token-efficient pour construire des automatisations complexes : il permet aux LLM de « coder » des scripts réutilisables de manière déterministe, au lieu de re-mobiliser des tokens à chaque exécution.
- Le CLI peut être utilisé sans IA : les outils en ligne de commande sont par définition construits pour les humains. Les commandes sont généralement intelligibles d’un coup d’œil, donc l’humain (s’il souhaite exercer de la supervision) peut consulter les commandes et même en exécuter certaines manuellement.
Bold est peut-être le seul cabinet d’avocats en France à proposer un CLI à ses clients.
Aujourd’hui, nos clients ont la possibilité de lancer des opérations de recrutement avec le prompt suivant :
En utilisant le CLI Google Workspace, récupère le mail d’Alice concernant le recrutement de John Doe et, à partir de ces infos, lance une opération de recrutement en utilisant le CLI Bold, tout en précisant à l’avocat que le recrutement doit avoir lieu avant vendredi au plus tard.
Ce prompt donnera lieu, à peu de choses près, à l’exécution des commandes suivantes :
# ── 1. Mail d'Alice (gws) ────────────────────────────────────────────────
MESSAGE_ID=$(gws gmail users messages list \
--params '{"userId":"me","q":"from:alice recrutement \"John Doe\"","maxResults":1}' \
| jq -r '.messages[0].id')
gws gmail users messages get \
--params "{\"userId\":\"me\",\"id\":\"${MESSAGE_ID}\",\"format\":\"full\"}"
# → lire la sortie et reporter les infos dans les `fields set` ci-dessous
# ── 2. Auth + société active (Bold CLI) ──────────────────────────────────
bold auth status
bold config set company <COMPANY_ID>
# ── 3. Lancer le recrutement et récupérer l'action id ────────────────────
ACTION_ID=$(bold employees hire --title "Recrutement de John Doe" --yes --output json \
| jq -r '.id')
echo "Action créée : ${ACTION_ID}"
# ── 4. Remplir le formulaire (valeurs à reporter depuis le mail d'Alice) ─
bold employees action "${ACTION_ID}" fields list
bold employees action "${ACTION_ID}" fields set civility --value="M."
bold employees action "${ACTION_ID}" fields set firstname --value="John"
bold employees action "${ACTION_ID}" fields set lastname --value="Doe"
bold employees action "${ACTION_ID}" fields set email --value="john.doe@example.com"
bold employees action "${ACTION_ID}" fields set position --value="Développeur backend"
bold employees action "${ACTION_ID}" fields set contract_type --value="cdi"
bold employees action "${ACTION_ID}" fields set annual_salary --value="55000"
bold employees action "${ACTION_ID}" fields set employmentDate --value="2026-07-17"
# Pour un champ à options contraintes, lister d'abord les valeurs valides :
# bold employees action "${ACTION_ID}" fields get contract_type options
# ── 5. Valider les étapes tant qu'il en reste ────────────────────────────
until ! bold employees action "${ACTION_ID}" submit-step --output json 2>/dev/null; do :; done
bold employees action "${ACTION_ID}" fields list # vérifier remaining=0 / étape finale
# ── 6. Préciser le délai à l'avocat ──────────────────────────────────────
bold actions update-description "${ACTION_ID}" \
--description "Recrutement de John Doe (détails dans le formulaire). Impératif : le recrutement doit être finalisé avant vendredi 17 juillet 2026 au plus tard." \
--yes
