Si vous maintenez un module d'extension pour un éditeur, une extension d'IDE ou un autre client ACP qui lance kiro-cli acp, ce guide présente les changements requis pour passer du serveur ACP CLI v2 à CLI V3 : comment lancer le nouveau serveur, comment fonctionne la négociation des capacités et quelles API v2 ont été remplacées ou supprimées.
| Aspect | CLI v2 | CLI V3 |
|---|---|---|
| Lancement du serveur | kiro-cli acp | Moteur V3 explicite; authentification gérée par CLI ou le client |
| Agent, modèle et effort | Indicateurs de lancement | Entrées de session et options de configuration annoncées |
| Méthodes optionnelles | Catalogue _kiro.dev/* fixe | Négociation des capacités standard et agentCapabilities._meta.kiro.extensionMethods |
| Sélection du modèle | session/set_model | session/set_config_option avec configId: "model" |
| Découverte de session | Lecture de ~/.kiro/sessions/cli/ | session/list et session/load |
| Mises à jour en direct | Mises à jour standard plus _kiro.dev/session/update | session/update standard avec types de mises à jour supplémentaires et _meta.kiro |
| Commandes slash | _kiro.dev/commands/execute | Comportement client, méthodes ACP standard ou extension typée négociée |
| Permissions | Requêtes _meta.trustOptions et réponses _meta.trustOption | options[] standard; retourner _meta.kiro.consent pour les choix persistants |
| État MCP | Événements _kiro.dev/mcp/* par serveur | Instantanés complets _kiro/mcp/status |
| Paramètres client | _kiro.dev/settings/list et set | Stockage appartenant au client; envoyer uniquement les paramètres pertinents pour l'agent |
Conservez des adaptateurs CLI v2 et CLI V3 distincts tant que vous prenez en charge les deux générations de serveurs. La version du protocole ACP n'identifie pas la génération du serveur, car les deux négocient la version 1.
Configurez votre client pour démarrer CLI V3 explicitement :
/full/path/to/kiro-cli acp --agent-engine=v3 --auth-method=cli
CLI V3 utilise JSON-RPC 2.0 délimité par des sauts de ligne sur l'entrée standard et la sortie standard. Chaque objet JSON occupe une ligne.
--auth-method=cli conserve la gestion des jetons d'accès dans le processus Kiro CLI. Si vous l'omettez, votre client doit implémenter la requête agent-vers-client _kiro/auth/getAccessToken et protéger les valeurs des jetons contre les journaux et les diagnostics. Privilégiez la gestion de l'authentification par CLI, sauf si votre client gère déjà l'authentification Kiro.
Retirez les indicateurs réservés à CLI v2 de la commande de lancement V3 :
--agent--model--effort--trust-all-tools--trust-toolsCLI V3 rejette ces indicateurs sur la commande acp. Sélectionnez le mode agent, le modèle et l'effort après l'initialisation. Enregistrez durablement le consentement aux outils au moyen du flux de permissions CLI V3.
Appelez initialize, puis utilisez les capacités retournées pour décider quels comportements UI et protocole activer. N'inférez pas la prise en charge à partir d'une version de Kiro CLI ou d'une liste de méthodes codée en dur.
CLI V3 peut annoncer ces méthodes standard :
| Méthode | Objectif |
|---|---|
initialize | Négocier le protocole, l'authentification et les capacités |
authenticate | Utiliser une méthode d'authentification ACP standard annoncée |
session/new | Créer une session |
session/list | Découvrir les sessions via le serveur |
session/load | Restaurer une session et rejouer son état |
session/fork | Créer une session à partir d'un point antérieur |
session/prompt | Démarrer un tour |
session/cancel | Annuler le tour actif |
session/set_mode | Changer le mode actif |
session/set_config_option | Modifier une option annoncée telle que le modèle ou l'effort |
CLI V3 n'implémente pas session/set_model. Changez le modèle via l'option de configuration model annoncée :
{ "jsonrpc": "2.0", "id": 7, "method": "session/set_config_option", "params": { "sessionId": "session-1", "configId": "model", "value": "claude-sonnet" } }
Utilisez configId: "effortLevel" pour l'effort. Changez le mode avec session/set_mode ou une option de configuration mode annoncée.
Lisez les méthodes de requête Kiro optionnelles depuis agentCapabilities._meta.kiro.extensionMethods. Lisez également les sources de session annoncées, les portées de liste, les cibles d'exécution, le marquage de relecture et la configuration de journalisation lorsque votre client les utilise.
L'annonce du serveur en cours d'exécution fait autorité. Différents déploiements peuvent retourner des tableaux différents. Conditionnez chaque requête optionnelle à la liste de méthodes annoncée, ignorez les champs inconnus et préservez les données _meta inconnues lors des relais et de la relecture.
Enregistrez tous les gestionnaires agent-vers-client requis avant de créer ou de charger une session :
session/update : requis pour tous les clients; enregistrez-le avant de créer ou de charger une session, car les mises à jour en direct ne sont pas mises en mémoire tampon pour les futurs abonnés (la relecture fournit l'historique antérieur, pas les événements en direct manqués)session/request_permission : requis si le client présente des approbations d'outils_kiro/auth/getAccessToken : requis lorsque le serveur n'a pas été démarré avec --auth-method=cliCLI V3 accepte cwd, mcpServers et les additionalDirectories standard de niveau supérieur sur session/new et session/load. Les clients compatibles Kiro peuvent également envoyer des valeurs initiales telles que modeId, modelId et effortLevel sous _meta.kiro.
{ "jsonrpc": "2.0", "id": 8, "method": "session/new", "params": { "cwd": "/workspace/project", "additionalDirectories": ["/workspace/shared"], "mcpServers": [], "_meta": { "kiro": { "modeId": "vibe", "modelId": "claude-sonnet", "effortLevel": "high" } } } }
Lisez les modes retournés et les options de configuration au lieu de coder les choix en dur.
Les définitions de serveurs MCP fournies par le client sont des entrées de session. CLI V3 ne persiste pas ces définitions dans session.json, donc renvoyez-les lors de session/load. Envoyez également le cwd actuel et les répertoires supplémentaires.
{ "jsonrpc": "2.0", "id": 9, "method": "session/load", "params": { "sessionId": "session-1", "cwd": "/workspace/project", "additionalDirectories": ["/workspace/shared"], "mcpServers": [] } }
Conservez l'ID de session demandé dans l'état client. Ne comptez pas sur la réponse de chargement pour le répéter.
N'écrivez pas directement les fichiers de session Kiro et ne dépendez pas de la structure de répertoires CLI V3. Les sessions locales et distantes ne partagent pas un modèle de système de fichiers lisible par le client.
Utilisez session/list pour découvrir les sessions et session/load pour les restaurer. Pour le transfert de fichiers ou l'historique plus ancien, utilisez une méthode d'export ou d'historique annoncée. Ne passez pas de chemin d'archive à session/load. Un analyseur de fichiers CLI v2 en lecture seule peut rester dans l'adaptateur v2 tant que vous prenez en charge cette génération.
CLI V3 émet des mises à jour avec les discriminateurs snake_case existants et d'autres types de mises à jour standard. Les valeurs suivantes identifient les mises à jour dans le champ sessionUpdate d'une notification session/update.
| Type de mise à jour | Action client |
|---|---|
user_message_chunk | Afficher le contenu utilisateur renvoyé ou rejoué lorsqu'il est fourni |
agent_message_chunk | Ajouter le contenu de réponse diffusé en continu |
agent_thought_chunk | Afficher le contenu de pensée selon l'UX du client |
tool_call | Créer ou mettre à jour une carte d'outil par toolCallId |
tool_call_update | Appliquer la progression, la sortie et l'état terminal à la même carte |
available_commands_update | Remplacer le catalogue de commandes annoncé |
current_mode_update | Mettre à jour le mode actif |
config_option_update | Remplacer l'état de configuration annoncé |
session_info_update | Répartir selon _meta.kiro.kind : context_usage contient usagePercentage; turn_completion contient les données de mesure du tour (promptTurnSummaries), le temps écoulé et l'état; les autres types contiennent l'état du cycle de vie |
Associez les mises à jour et les requêtes de permission à l'appel d'origine avec toolCallId, et non avec le nom de l'outil. Acheminez chaque notification par sessionId et traitez les mises à jour de chaque session dans l'ordre d'arrivée. Les types de mises à jour et les champs de métadonnées inconnus ne doivent pas faire échouer la session.
Lorsque les métadonnées d'identité stable sont absentes, affichez le kind et le title standard. Ne déduisez jamais l'identité d'un outil intégré à partir d'un titre lisible par l'humain, et n'utilisez jamais les métadonnées d'identité affichées pour autoriser une action.
Considérez une requête session/prompt en attente comme terminée uniquement lorsqu'elle renvoie une réponse ou une erreur. Ne considérez pas session_info_update avec _meta.kiro.kind: "turn_end" comme la fin de la requête. CLI V3 peut l'émettre, puis poursuivre le traitement avant le retour de la requête, et n'émet pas de discriminateur de mise à jour TurnEnd.
Si le transport est interrompu avant l'arrivée de la réponse, reconnectez-vous et enregistrez le gestionnaire session/update avant d'appeler session/load. Les mises à jour rejouées arrivent pendant le chargement; l'enregistrement après celui-ci peut donc les manquer. Ne renvoyez pas automatiquement la requête. Même si la relecture indique que le tour précédent est terminé, un nouvel envoi peut répéter ses modifications, et l'historique chargé ne peut pas récupérer la réponse perdue.
Une mise à jour rejouée d'une session locale peut porter _meta.kiro.replay: true dans la charge utile de mise à jour :
{ "jsonrpc": "2.0", "method": "session/update", "params": { "sessionId": "session-1", "update": { "sessionUpdate": "agent_message_chunk", "content": { "type": "text", "text": "Previously streamed response" }, "_meta": { "kiro": { "replay": true } } } } }
La relecture distante n'est pas garantie de marquer chaque mise à jour rejouée. Enregistrez le gestionnaire de mises à jour avant d'appeler session/load, car les mises à jour en direct ne sont pas conservées pour les futurs abonnés. Reconstruisez l'état après une reconnexion ou une perte de livraison suspectée.
Pour les sessions locales, traitez noReplay: true comme une suppression de la transcription, et non comme une suppression des mises à jour d'état actuel. Les chargements distants omettent également la connexion au flux de mises à jour en direct; n'utilisez donc pas noReplay pour une session distante si votre client a besoin des mises à jour suivantes.
session/request_permission reste une requête agent-vers-client. Traitez la liste options[] standard comme faisant autorité et affichez uniquement les choix fournis par l'agent.
Une requête CLI V3 peut ajouter un contexte de consentement sous _meta.kiro.consent :
{ "method": "session/request_permission", "params": { "sessionId": "session-1", "toolCall": { "toolCallId": "call-1", "title": "Run tests", "status": "pending" }, "options": [ { "optionId": "accept", "name": "Allow", "kind": "allow_once" }, { "optionId": "always-accept", "name": "Always allow", "kind": "allow_always" }, { "optionId": "reject", "name": "Deny", "kind": "reject_once" }, { "optionId": "always-reject", "name": "Always deny", "kind": "reject_always" } ], "_meta": { "kiro": { "consent": { "capability": "shell", "resource": "npm run test", "triggeringResource": "npm run test", "workspaceRoot": "/workspace/project", "persistableConsent": true } } } } }
Ne synthétisez jamais une option que l'agent a omise. Retournez une option ponctuelle immédiatement. Pour une option persistante offerte, un client compatible Kiro peut recueillir à la fois un motif de ressource et une portée de persistance, puis retourner l'optionId original avec des métadonnées de consentement canoniques :
{ "outcome": { "outcome": "selected", "optionId": "always-accept" }, "_meta": { "kiro": { "consent": { "scope": "workspace", "resource": "npm run *", "workspaceRoot": "/workspace/project" } } } }
CLI V3 valide la réponse, persiste une règle valide, reconstruit la politique et réévalue l'invocation initiale. Une opération multi-ressources peut émettre une autre requête de permission pour la prochaine ressource non couverte.
| Champ CLI v2 | Comportement CLI V3 |
|---|---|
Requête _meta.trustOptions | Utilisez les options[] standard fournis et _meta.kiro.consent |
Réponse _meta.trustOption | Retournez _meta.kiro.consent canonique pour une option persistante |
Requête _meta.fsReadPaths | CLI V3 évalue chaque chemin avant de demander une permission |
Réponse _meta.feedback | Envoyez le texte comme entrée conversationnelle, pas comme métadonnée de permission |
Pour le texte saisi pendant qu'une permission est en attente, choisissez un comportement explicite :
session/cancel, attendez que la réponse session/prompt originale se résolve, puis envoyez un nouveau session/prompt. N'attendez pas de discriminateur de mise à jour TurnEnd.Gardez un refus simple distinct d'une interruption qui porte une nouvelle instruction.
CLI V3 peut inclure une enveloppe _meta.kiro.mcpTool versionnée avec l'identité du serveur et de l'outil résolue par l'hôte, plus des indications optionnelles de comportement MCP. Lisez la version 1 lorsqu'elle est présente, et revenez aux champs plats mcpToolIdentity et mcpAnnotations CLI v2 uniquement pendant la prise en charge du serveur hérité.
{ "method": "session/request_permission", "params": { "sessionId": "session-1", "toolCall": { "toolCallId": "call-2", "title": "@example-server/search", "status": "pending" }, "options": [ { "optionId": "accept", "name": "Allow", "kind": "allow_once" }, { "optionId": "reject", "name": "Deny", "kind": "reject_once" } ], "_meta": { "kiro": { "mcpTool": { "version": 1, "identity": { "serverName": "example-server", "toolName": "search" }, "annotations": { "readOnlyHint": true, "openWorldHint": true } } } } } }
L'objet annotations est optionnel. Les quatre indications prises en charge sont readOnlyHint, destructiveHint, idempotentHint et openWorldHint. Préservez la différence entre un champ omis et un false explicite. N'utilisez jamais une indication seule pour approuver un appel, éviter une demande d'autorisation, réduire le risque, réessayer automatiquement ou contourner une politique réseau.
Les mises à jour d'outils échouées peuvent inclure _meta.kiro.failureReason avec cancelled, denied ou error. Utilisez-le lorsqu'il est présent, conservez un repli hérité lorsqu'il est absent, et traitez une valeur inconnue comme un échec générique.
CLI V3 supprime les API génériques _kiro.dev/commands/execute et _kiro.dev/commands/options. Ne les remplacez pas par un transport session/prompt universel. Utilisez le comportement local au client, les méthodes ACP standard, la configuration annoncée ou une extension typée négociée pour chaque commande.
| Commande CLI v2 | Remplacement CLI V3 |
|---|---|
/help | Construire l'aide depuis le registre de commandes client |
/model | session/set_config_option avec configId: "model" |
/agent | Changer le mode annoncé; garder l'édition de profil locale au client |
/context | _kiro/session/context annoncé |
/compact | _kiro/session/compact annoncé |
/clear | Créer et adopter une nouvelle session |
/quit | Fermer le client localement |
/usage | _kiro/account/getUsage annoncé |
/paste | Lire le presse-papiers client et envoyer un bloc d'image ACP |
/mcp | Afficher _kiro/mcp/status; gérer les déclarations hors du panneau de session |
/tools | Afficher _kiro/tools/didChange; persister le consentement via les permissions |
/plan | Passer en mode planificateur, puis envoyer le texte suivant avec session/prompt |
/feedback | Afficher les choix appartenant au client et ouvrir l'URL sélectionnée localement |
/chat | Composer session/list, session/new et session/load |
/knowledge | _kiro/knowledge annoncé |
/prompts | Utiliser available_commands_update et les sources de requêtes appartenant au client |
/reply | Modifier la dernière réponse localement, puis appeler session/prompt |
/code | _kiro/codeIntelligence annoncé |
/voice | Capturer et transcrire localement, puis appeler session/prompt |
/hooks | Afficher le cache de hooks ou appeler _kiro/hooks/list annoncé |
/guide | Retiré; supprimez-le pour CLI V3 |
/rewind | session/fork au message sélectionné, puis charger la branche |
/stats | Retiré; supprimez-le pour CLI V3 |
/effort | session/set_config_option avec configId: "effortLevel" |
/goal | Utiliser les méthodes _kiro/workflow/* annoncées et les notifications de cycle de vie |
Utilisez available_commands_update pour les commandes invocables, _kiro/tools/didChange pour les outils natifs et _kiro/mcp/status pour l'inventaire MCP. Gardez la découverte de commandes séparée de l'invocation : affichez une commande uniquement lorsque votre client dispose d'une route définie pour celle-ci.
Le tableau suivant couvre les API privées CLI v2 à fort impact restantes. Conditionnez chaque extension CLI V3 à l'annonce de capacités.
_session/steer conserve intentionnellement son nom de méthode _session/ existant dans CLI V3. Ne le renommez pas en _kiro/session/steer.
| API CLI v2 | Migration CLI V3 |
|---|---|
_kiro.dev/session/update tool_call_chunk | session/update standard avec sessionUpdate: "tool_call" |
AgentExecutionUserMessageQueued | session_info_update avec _meta.kiro.kind: "steering_queued" |
AgentExecutionSteeringInjected | session_info_update avec _meta.kiro.kind: "steering_injected" |
AgentExecutionUserMessageCleared | session_info_update avec _meta.kiro.kind: "steering_cleared" |
_kiro.dev/metadata | session_info_update selon la fonction : context_usage pour l’utilisation de la fenêtre de contexte et turn_completion pour la mesure du tour; config_option_update pour la configuration |
_kiro.dev/compaction/status | Types session_info_update de résumé |
_kiro.dev/error/rate_limit | _kiro/error/rate_limit |
_message/send | session/prompt pour une session inactive; _session/steer pendant un tour actif |
_session/spawn | session/new, _kiro/session/rename optionnel, puis session/prompt en arrière-plan |
_kiro.dev/agent/switched | current_mode_update et config_option_update |
_kiro.dev/agent/not_found | _kiro/customAgent/not_found |
_kiro.dev/agent/config_error | _kiro/customAgent/config_error |
_kiro.dev/subagent/list_update | Afficher l'activité d'outil ou de sous-tâche observable; pas de remplacement exact de la liste |
_kiro.dev/goal/status | Notifications de cycle de vie _kiro/workflow/* annoncées |
_kiro.dev/mcp/server_initialized | Entrées connectées dans _kiro/mcp/status |
_kiro.dev/mcp/server_init_failure | Entrées échouées dans _kiro/mcp/status |
_kiro.dev/mcp/oauth_request | État d'authentification requise, réinitialisation explicite et _kiro/openExternalUrl |
_kiro.dev/mcp/governance_disabled | _kiro/mcp/governance_disabled plus _kiro/governance/state |
_kiro.dev/webTools/governance_disabled | _kiro/governance/state |
_kiro.dev/settings/list | Lire les préférences appartenant au client et envoyer les paramètres d'agent typés si nécessaire |
_kiro.dev/settings/set | Persister les préférences appartenant au client localement |
_kiro.dev/clear/status | Traiter un session/new réussi comme l'accusé de réception |
_kiro.dev/telemetry/* | Supprimer de l'ACP; la télémétrie d'application appartient au client |
_kiro.dev/session/terminate | Pas d'équivalent CLI V3 actuel; utilisez session/cancel uniquement pour arrêter un tour actif |
Les mises à jour retry_warning, stream_stall_notice et stream_discarded v2 sont intentionnellement retirées. Maintenez le tour actif jusqu'à l'arrivée d'un signal de cycle de vie ordinaire ou terminal. N'inférez pas un état de réessai ou de blocage à partir de la latence, et ne supprimez pas de façon heuristique une sortie déjà diffusée.
Traitez chaque notification _kiro/mcp/status comme un instantané complet, pas comme un événement à ajouter. Remplacez l'instantané précédent par nom de serveur, affichez les états connected, failed et disabled, et évitez de réafficher un échec inchangé.
Pour une session CLI V3 locale, un flux OAuth interactif utilise trois messages :
_kiro/mcp/status signale un serveur échoué avec failedAuthorization: true._kiro/mcp/resetServer annoncé avec startOAuth: true après que l'utilisateur choisit de s'authentifier._kiro/openExternalUrl avec la nouvelle URL d'autorisation.Enregistrez _kiro/openExternalUrl avant l'initialisation et annoncez clientCapabilities._meta.kiro.openExternalUrl: true. Ouvrez uniquement l'URL fournie par cette requête, utilisez une action visible de l'utilisateur, et ne journalisez ni ne partagez jamais l'URL d'autorisation.
resetServer démarre une réauthentification forcée. Ce n'est pas une opération d'annulation ou de déconnexion autonome, et ne garantit pas la révocation chez le fournisseur distant.
Vérifiez le client contre les deux adaptateurs avant de supprimer la prise en charge CLI v2.
--agent-engine=v3 et le propriétaire d'authentification prévu.protocolVersion ACP comme discriminateur de génération._meta sont ignorés sans problème.session/new et session/load envoient toutes les entrées actuelles appartenant au client.session/list, pas le système de fichiers.sessionId et chaque événement d'outil par toolCallId.TurnEnd.Utilisez le chemin complet vers kiro-cli, confirmez qu'il est exécutable et supprimez les indicateurs de lancement incompatibles avec V3. Vérifiez la sortie d'erreur standard pour le message exact d'erreur d'argument CLI.
Confirmez que le client écrit un objet JSON-RPC par ligne. Si --auth-method=cli est absent, vérifiez que le client répond à _kiro/auth/getAccessToken. Toute requête agent-vers-client avec un id nécessite une réponse ou une erreur JSON-RPC explicite.
Utilisez uniquement des valeurs provenant des options de configuration annoncées actuelles. Ne réutilisez pas une valeur mise en cache depuis un autre compte, une autre génération de serveur ou un autre déploiement.
Renvoyez les définitions mcpServers appartenant au client lors de session/load. Ne supposez pas que le serveur les a persistées avec la session.
Terminez le tour depuis la réponse session/prompt. N'attendez pas de discriminateur de mise à jour TurnEnd. Si une requête de permission est en attente, l'agent attend la réponse du client.
Relisez le résultat initialize actuel. Appelez uniquement les méthodes listées dans agentCapabilities._meta.kiro.extensionMethods et prenez en charge les déploiements qui annoncent un ensemble plus restreint.
Migrer un client ACP vers CLI V3