Agents sur mesure avec le SDK — et savoir quand s'en passer
Construire son propre agent avec l'Agent SDK, reconnaître les besoins qui se règlent avec une skill ou un hook, et les pratiques senior. Conclusion de la formation. Module 12.
- Décider si un besoin justifie un agent sur mesure, une skill ou un simple hook
- Écrire un agent avec query() et lui brancher un outil sur vos propres données
- Appliquer les pratiques senior : contexte, coût, vérification, garde-fous, journalisation
Dernier module. Vous savez faire travailler Claude Code dans une conversation, puis sans aucune interface. Reste une marche : appeler l’agent depuis votre propre programme, avec vos données et votre logique. Mais avant de coder — en avez-vous vraiment besoin ?
Ce que vous allez apprendre
- Trancher entre CLAUDE.md, skill, hook, sous-agent, script et agent sur mesure
- Écrire un agent avec
query()et lui brancher un outil sur vos données - Automatiser le fil rouge de la formation de bout en bout, avec vérification et journal
- Les pratiques qui distinguent un automate fiable d’un bricolage
Avez-vous besoin d’un agent sur mesure ?
La plupart des besoins qui ressemblent à « il me faudrait un agent » se règlent avec ce que vous connaissez déjà, sans code à maintenir.
| Le besoin | La bonne réponse | Pourquoi pas le SDK |
|---|---|---|
| Rappeler une règle à chaque session | CLAUDE.md (module 6) | Un fichier texte, zéro ligne de code |
| Rejouer une procédure écrite noir sur blanc | Une skill (module 10) | Chargée à la demande, partageable |
| Empêcher une action, formater après coup | Un hook (module 9) | S’exécute à coup sûr, sans dépendre du modèle |
| Explorer un gros volume sans encombrer la session | Un sous-agent (module 10) | Déjà intégré, contexte séparé |
| Faire tourner une tâche sans surveillance | claude -p dans un script (module 11) | Une ligne suffit |
| Appeler l’agent depuis votre programme, avec vos données | L’Agent SDK | C’est le seul cas où il s’impose |
💡 Astuce — Parcourez ce tableau de haut en bas : le premier « oui » est votre réponse. Beaucoup d’agents sur mesure remplacent un fichier de dix lignes.
Le SDK, en pratique
L’Agent SDK d’Anthropic — anciennement Claude Code SDK, aujourd’hui Claude Agent SDK — expose le moteur de Claude Code : la boucle « lire, choisir un outil, agir, observer, recommencer », plus les permissions et le contexte.
npm install @anthropic-ai/claude-agent-sdk # TypeScript
pip install claude-agent-sdk # Python
Une fonction porte l’essentiel : query(). Vous lui passez une demande et des options ; elle rend un itérateur asynchrone de messages — messages système, appels d’outils, réponses, puis un dernier message de type result qui clôt l’exécution. L’authentification passe par ANTHROPIC_API_KEY, comme au module 11.
Côté Python, mêmes concepts : les options passent par ClaudeAgentOptions, les noms s’écrivent allowed_tools et max_turns, et ClaudeSDKClient garde la session ouverte entre plusieurs questions.
Six options font l’essentiel du travail — et racontent toute la formation :
| Option | Rôle | Ce que vous connaissez déjà |
|---|---|---|
cwd | Le dossier de travail de l’agent | Le dossier ouvert dans l’application |
allowedTools | Liste blanche des outils approuvés | Les permissions (module 4) |
permissionMode | default, acceptEdits, plan, bypassPermissions | Le sélecteur de mode (module 4) |
systemPrompt | Les consignes de fond de l’agent | CLAUDE.md (module 6) |
mcpServers | Les serveurs MCP, déclarés en code | claude mcp add (module 8) |
maxTurns | Plafond d’allers-retours | Le coupe-circuit (module 11) |
Rien de nouveau : une autre façon de l’exprimer.
Des outils à vous
L’intérêt du SDK, c’est de brancher vos données. Deux fonctions suffisent : tool() décrit un outil — nom, description, paramètres, code exécuté — et createSdkMcpServer() les regroupe en serveur MCP in-process, c’est-à-dire dans votre programme même : contrairement aux serveurs du module 8, rien à lancer à côté. En Python, un décorateur @tool et create_sdk_mcp_server.
La description de l’outil est ce que l’agent lit pour décider quand l’appeler : soignez-la.
⚠️ Piège courant — Dans
allowedTools, un outil MCP porte son nom complet :mcp__serveur__outil, avec des doubles tirets bas. Écrivez seulementrecherche_clientet la liste blanche ne correspond à rien : l’outil ne sera jamais approuvé.
Cas pratique : l’agent qui classe les documents entrants
La situation. Le script du module 11 atteint sa limite : les règles de la famille se sont étoffées — un dossier par personne, une convention de nommage, des exceptions. Une réponse en un mot ne suffit plus ; il faut une décision structurée, vérifiée et tracée.
Le principe. Les règles vivent dans votre code, exposées par un outil. L’agent lit le document, consulte les règles, rend une décision en JSON. Le programme déplace et journalise. Comme au module précédent : le modèle décide, le programme exécute.
// classeur.ts — un agent par document, les regles restent dans le code
import { query, tool, createSdkMcpServer } from "@anthropic-ai/claude-agent-sdk";
const regles = tool(
"regles_de_classement",
"Renvoie les dossiers autorises et la convention de nommage de la famille",
{},
async () => ({ content: [{ type: "text", text: JSON.stringify(REGLES) }] })
);
const serveur = createSdkMcpServer({
name: "classement", version: "1.0.0", tools: [regles]
});
for (const fichier of aClasser) {
for await (const message of query({
prompt: `Lis ${fichier}, appelle regles_de_classement, puis reponds uniquement par un objet JSON {dossier, nom, confiance}.`,
options: {
cwd: RACINE,
mcpServers: { classement: serveur },
allowedTools: ["Read", "mcp__classement__regles_de_classement"],
maxTurns: 6
}
})) {
if (message.type === "result") deciderEtJournaliser(fichier, message);
}
}
La vérification et le journal. Tout se joue dans deciderEtJournaliser, qui est à vous : valider le JSON, refuser un dossier hors liste, mettre en quarantaine une décision peu sûre, déplacer le fichier, puis écrire une ligne — date, origine, destination, confiance, coût. Un comptage des fichiers avant et après signale la moindre disparition. Un mois plus tard, le journal explique pourquoi tel document se trouve là.
Les pièges rencontrés :
- L’agent a d’abord répondu du texte autour du JSON. La consigne « réponds uniquement par un objet JSON » et une validation stricte côté programme règlent le cas.
Writen’apparaît jamais dans la liste blanche. Un agent qui ne peut pas écrire ne peut pas se tromper de façon irréversible.- La confiance annoncée n’est pas une garantie. Elle sert à trier ce qui mérite un œil humain, pas à décider toute seule.
Les pratiques qui font la différence
| Pratique | Concrètement |
|---|---|
| Contexte borné | Un appel, une unité de travail. En interactif, /compact puis /clear |
| Coût mesuré | maxTurns fixé, coût journalisé, modèle choisi selon la difficulté |
| Vérification | Un contrôle après coup — comptage, tests, échantillon relu — plutôt que la confiance dans la sortie |
| Garde-fous | Liste blanche courte, actions irréversibles côté programme, règles deny sur les secrets, hooks bloquants |
| Reproductibilité | Règles versionnées, demande figée, journal conservé : une exécution se rejoue et s’explique |
| Relecture humaine | L’agent propose, vous tranchez les cas douteux. Aucune automatisation ne remplace ce geste |
💡 Astuce — Avant d’écrire deux cents lignes de SDK, prototypez la même tâche avec
claude -pet--output-format json. Si le prototype tient, le portage est mécanique ; sinon, vous venez d’économiser une journée.
Le chemin parcouru
| Niveau | Modules | Ce que vous savez faire |
|---|---|---|
| Débutant | 1 à 3 | Installer l’application, ouvrir un dossier, demander et relire |
| Intermédiaire | 4 à 7 | Permissions, retour en arrière, mémoire du projet, réglages |
| Avancé | 8 à 10 | Outils externes, garde-fous automatiques, sous-agents et skills |
| Expert | 11 à 12 | Faire tourner une tâche sans surveillance, construire un agent sur mesure |
Deux compagnons pour la suite : l’aide-mémoire des commandes, à garder ouvert, et le glossaire. Et si votre quotidien tourne autour de Word, Excel et Outlook, la formation Microsoft Copilot prend le relais.
À vous de jouer
- Tranchez avant de coder. Placez les trois corvées notées au module 1 dans le tableau de décision : la plupart ne demanderont pas de SDK.
- Écrivez un agent en lecture seule :
npm install @anthropic-ai/claude-agent-sdk, la clé dansANTHROPIC_API_KEY,cwdsur un vrai dossier,allowedToolslimité àRead,Glob,Grep,maxTurnsà 10, une demande de résumé. - Lisez les messages qui défilent : la boucle des douze modules, vue de l’intérieur.
- Cassez volontairement. Retirez
Globde la liste blanche et relancez : observez comment l’agent se débrouille — ou renonce. - Ajoutez un outil à vous avec
tool()etcreateSdkMcpServer(), même s’il renvoie une valeur en dur. N’oubliez pas le nom completmcp__serveur__outil.
En résumé
- Le SDK ne se justifie que si l’agent doit vivre dans votre programme : sinon, CLAUDE.md, une skill ou un hook suffisent.
query()prend une demande et des options, et rend un itérateur de messages qui se termine par un messageresult— en TypeScript comme en Python.- Six options font l’essentiel :
cwd,allowedTools,permissionMode,systemPrompt,mcpServers,maxTurns. Les chapitres de cette formation, exprimés en code. tool()etcreateSdkMcpServer()branchent vos données sans processus externe ; dans la liste blanche, l’outil s’écritmcp__serveur__outil.- Le modèle décide, le programme exécute, le journal explique. Jamais de
bypassPermissionshors conteneur jetable. - Six pratiques à retenir : contexte borné, coût mesuré, vérification, garde-fous, reproductibilité, relecture humaine.
Douze modules plus tôt, vous ouvriez une application pour ranger un dossier de scans mal nommés. Vous savez aujourd’hui encadrer, automatiser et construire — et décider ce qui mérite de l’être. L’outil n’a pas changé de nature en chemin : votre rôle, si. Moins d’exécution, plus d’arbitrage. Le reste s’apprend en forgeant : un vrai besoin, cette semaine, en petit.
Testen Sie Ihr Wissen
Vous voulez que Claude respecte toujours la même convention de nommage dans vos sessions. Faut-il construire un agent avec le SDK ?
Le SDK est le dernier recours, pas le premier réflexe. Une règle permanente relève de la mémoire du projet, une procédure répétable d'une skill, une interdiction d'un hook. Le SDK n'a d'intérêt que lorsque l'agent doit être appelé depuis votre code.
Votre agent est lancé avec allowedTools limité à Read et Grep. En cours de route, il veut modifier un fichier avec Edit. Que se passe-t-il ?
allowedTools est une liste blanche : seuls les outils listés sont approuvés sans question. Un outil absent n'est pas exécuté automatiquement. C'est votre garde-fou principal quand aucun humain ne surveille l'écran.
Vous exposez un outil recherche_client dans un serveur in-process nommé support. Qu'écrivez-vous dans allowedTools ?
Un outil MCP porte toujours son nom complet, préfixé par mcp__ et le nom du serveur. Avec un nom partiel, la liste blanche ne correspond à rien et l'outil n'est jamais approuvé — la panne la plus fréquente des premiers agents.
Dans le cas pratique, l'agent classe les documents entrants. Qu'est-ce qui rend une erreur de sa part rattrapable ?
L'agent n'a aucun droit d'écriture : c'est le programme qui déplace, journalise et met de côté ce dont la décision est incertaine. Une ligne de journal horodatée permet, un mois plus tard, de comprendre et de défaire.
Avant d'écrire deux cents lignes de SDK, quel réflexe peut vous économiser une journée ?
Le mode sans interface du module 11 est le banc d'essai idéal : mêmes outils, mêmes permissions, une seule ligne. Si le prototype tient, le portage vers le SDK est mécanique ; s'il échoue, la cause est dans la demande, pas dans votre code.