Ajouter un agent en ligne de commande
Créez un adaptateur qui lance votre agent et traduit sa sortie en événements Outpost.
Écrire un adaptateur minimal
Section intitulée « Écrire un adaptateur minimal »Implémentez un AgentAdapter pour décrire le lancement de votre outil et traduire sa sortie en événements : request() construit la commande et events() lit les lignes produites. Un CliHarness associe l’adaptateur au modèle choisi, puis createAgent() rend l’agent utilisable dans une tâche.
Outpost exécute mycli --json --model mycli-pro dans la sandbox avec le brief sur stdin, transmet chaque ligne de stdout à events() et renvoie le texte collecté dans result.text. Installez d’abord la CLI dans votre image d’agent.
Construire la commande
Section intitulée « Construire la commande »request() reçoit un AgentInput et renvoie une Command : executable, arguments, stdin, variables. Outpost ajoute l’échéance et le signal d’annulation.
Référence API : AgentInput.
Décoder la sortie
Section intitulée « Décoder la sortie »events() reçoit chaque ligne de stdout et renvoie zéro, un ou plusieurs événements. Stderr ne lui parvient jamais : Outpost signale ses lignes par des événements stderr.
Référence API : AgentEvent.
Les autres types, comme tool, tool-result, reasoning, file-change et warning, ne parviennent qu’aux observateurs. Un code de sortie non nul fait échouer le tour. Sans événement text ni result, result.text contient la fin de stdout.
Déclarer les capacités optionnelles
Section intitulée « Déclarer les capacités optionnelles »Chaque membre optionnel active une fonctionnalité. Ne déclarez que ce que la CLI fait réellement.
Référence API : AgentAdapter.
Mesurer la consommation de tokens
Section intitulée « Mesurer la consommation de tokens »usage indique à Outpost d’où viennent les compteurs. Une consommation incomplète est une borne inférieure que les budgets traitent à part.
Référence API : Usage.
Ajoutez ...sessionUsage à l’adaptateur. La commande dispose de cinq secondes et n’est pas lancée si un événement usage cumulatif a déjà fourni les totaux. Sur une conversation poursuivie, Outpost mesure d’abord une référence et garde la différence ; un fork n’a pas de référence, sa consommation est donc incomplète.
Avec storage, transcriptUsage(text) peut plutôt lire les totaux dans la transcription capturée.
Réorienter un tour en cours
Section intitulée « Réorienter un tour en cours »Un dispatch réorienté atteint votre CLI de l’une de deux façons.
| Adapter | Livraison | Ce qui se passe |
|---|---|---|
Avec liveInput | injected | Outpost écrit chaque instruction sur le stdin du processus en cours. |
resumable: true, sans liveInput | resumed | Outpost arrête le processus dès que sa conversation est connue, puis la reprend avec le texte. |
| Aucun des deux | ― | Le dispatch est refusé avant de démarrer. |
encode() transforme une instruction en texte pour stdin. read() voit chaque ligne de stdout et renvoie le nombre de messages confirmés par la CLI, ainsi que les réponses de protocole à écrire, comme les réponses aux demandes de permission.
Le prompt compte comme premier message à confirmer. Outpost garde stdin ouvert et le ferme après un événement finished, une fois tous les messages consommés.
L’injection exige aussi un SandboxLease avec liveInput: true, ce que renvoient tous les fournisseurs intégrés. Sur un fournisseur personnalisé qui n’en a pas, un adaptateur reprenable se replie sur resumed.
Ce qu’Outpost gère pour vous
Section intitulée « Ce qu’Outpost gère pour vous »- ProcessusLes échéances, les délais d’inactivité et l’annulation arrêtent tout le groupe de processus.
- Sandbox et workspaceL’allocation, le worktree, les commits et le nettoyage fonctionnent comme pour les agents intégrés.
- Répertoire personnel de l’agentLes plans de
credentials()etconfiguration()sont installés dans le répertoire personnel privé de la sandbox. - RéponsesLes réponses typées, les réparations et les marqueurs de fin s’appliquent à votre texte décodé.
- ConsommationLes compteurs s’additionnent entre tours, nouvelles tentatives et workflows, et alimentent les budgets.
- ObservationLes événements décodés, les lignes brutes et stderr parviennent à
observe, aux reporters et aux journaux.
Tester l’adaptateur
Section intitulée « Tester l’adaptateur »Enregistrez une fois de vraies lignes de sortie de la CLI, puis rejouez-les dans events(). diagnoseAgentProtocol() vérifie les agents intégrés de la même façon.
Ajoutez des fixtures pour les échecs, et vérifiez que quota() ne reconnaît que les messages de limite définitifs, pas les avis de nouvelle tentative. Lancez ensuite un vrai dispatch dans un conteneur : les fixtures ne testent ni l’installation, ni la connexion, ni le code de sortie, ni la capture.
- Le bootstrap distant n’installe que les CLI intégrées. Installez la vôtre dans l’image de chaque fournisseur utilisé.
outpost init,outpost doctoretdiagnoseAgentProtocol()ne connaissent que les agents intégrés.- Une ligne de stdout contient au plus 16 Mio ; une ligne plus longue fait échouer le tour.
API : createAgent · CliHarness · AgentAdapter · AgentInput · AgentEvent · AgentLiveInput · Usage · diagnoseAgentProtocol.