Comment piloter mini-me depuis un programme
Ce guide montre comment utiliser un agent mini-me depuis votre propre code Go, Kotlin ou Node.js : lui poser des questions, recevoir ses réponses en stream, annuler un tour, et décider quels outils il peut lancer. Il suppose que vous avez déjà un fichier d'agent qui fonctionne (voir Créer un agent avec mm init) et le binaire mm.
Votre programme lance mm -acp comme processus enfant et lui parle par ACP, le protocole qu'utilisent les éditeurs comme Zed. Rien ne change dans mm : tout fichier d'agent fonctionne, avec ses outils, ses hooks, ses serveurs MCP et ses autres agents.
Étapes
- Rendez
mmaccessible : dans le PATH, ou désigné parMM_BIN=/chemin/vers/mm. - Choisissez le client de votre langage et ajoutez-le à votre projet :
- Go : le module
minimededemo.acp.sdk/go/. Tant qu'il n'est pas publié, faites-le pointer depuis votrego.mod:go mod edit -require=minime@v0.0.0 -replace=minime=../chemin/vers/demo.acp.sdk/go go mod tidy - Kotlin (JDK ≥ 21) : le build Gradle de
demo.acp.sdk/kotlin/. Tant qu'il n'est pas publié, incluez-le depuis votresettings.gradle.ktsavecincludeBuild("../chemin/vers/demo.acp.sdk/kotlin"), puis déclarez la dépendanceminime:minime:0.1.0(plus un backend SLF4J commeorg.slf4j:slf4j-nop, pour les logs du SDK). - Node.js (≥ 20), deux clients avec la même API :
demo.acp.sdk/nodejs/: copiezlib/minime.js, qui n'a aucune dépendance ;demo.acp.sdk/nodejs-sdk/: construit sur le SDK ACP officiel@agentclientprotocol/sdk;npm install ../chemin/vers/demo.acp.sdk/nodejs-sdk, puisimport { Agent } from "minime-sdk".
- Go : le module
- Démarrez un agent sur votre fichier d'agent, posez une question, puis fermez-le :
agent, err := minime.Start(ctx, minime.Options{Config: "agent.yaml"}) if err != nil { log.Fatal(err) } defer agent.Close() res, err := agent.Complete(ctx, "What is in this folder?")Agent.start(Options(config = "agent.yaml")).use { agent -> val result = agent.complete("What is in this folder?") }import { Agent } from "./lib/minime.js"; // ou "minime-sdk" const agent = await Agent.start({ config: "agent.yaml" }); const { text } = await agent.complete("What is in this folder?"); await agent.close(); - Pour afficher la réponse au fil de l'eau, utilisez plutôt la forme stream (
agent.Stream(ctx, prompt)en Go, le flowagent.stream(prompt)en Kotlin,agent.stream(prompt)en Node.js) et affichez les événements de texte. - Si votre fichier d'agent contient
yolo: false, donnez un callback de permission, sinon chaque appel d'outil est refusé :minime.Options{ Config: "agent.yaml", OnPermission: func(_ context.Context, call minime.ToolCall) minime.Decision { if call.Kind == "read" { return minime.Allow } return minime.Reject }, }Options(config = "agent.yaml", onPermission = { call -> if (call.kind == "read") Decision.Allow else Decision.Reject })Agent.start({ config: "agent.yaml", onPermission: (call) => call.toolKind === "read" });
Variantes
- Pour arrêter un tour trop long, annulez-le : en Go, annulez le
ctxque vous avez passé (par exemple aveccontext.WithTimeout) ; en Kotlin, appelezagent.cancel()depuis une autre coroutine ; en Node.js, passez{ signal }d'unAbortController. Le tour se termine avecstopReason: "cancelled"et le texte déjà reçu. mm retire la question inachevée de la conversation. - Pour repartir d'une conversation vierge sans relancer mm, appelez
Reset(ctx)(Go) oureset()(Kotlin, Node.js). - Pour travailler sur plusieurs choses en parallèle, démarrez plusieurs agents : chacun est son propre processus mm et ne traite qu'un tour à la fois.
- Pour exécuter les outils dans un autre répertoire que celui de votre programme, renseignez
Cwd(Go) oucwd(Kotlin, Node.js). - Pour voir ce que mm écrit dans ses logs (bannière, avertissements, lignes
[acp]), renseignezOnStderr(Go) ouonStderr(Kotlin, Node.js).
Voir aussi
- Toutes les options, événements et erreurs de chaque client : Go, Kotlin, Node.js, Node.js avec le SDK ACP.
- Les messages ACP derrière les clients :
demo.acp.sdk/README.fr.md. - Confirmer les appels d'outils dans mm lui-même : Confirmer les appels d'outils.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
|