Permettre à l’agent de poser des questions
Suspendez une tâche pour obtenir une réponse humaine et poursuivez la conversation enregistrée.
Choisir entre une question et une approbation
Section intitulée « Choisir entre une question et une approbation »Utilisez une tâche interactive si l’agent a besoin d’une information humaine pour poursuivre. Utilisez une tâche d’approbation si votre workflow attend une autorisation. Ces deux pauses ont des entrées et des règles de reprise différentes.
| Tâche interactive | Gate d’approbation | |
|---|---|---|
| Question | Écrite par l’agent, adaptée aux réponses précédentes | Le prompt fixe du gate |
| Réponse | Texte libre, ou l’un des choices de l’agent | approve ou reject |
| Ce qu’elle reprend | La conversation de l’agent, dans un nouveau tour | Les tâches qui dépendent du gate |
| Soumise avec | start({ answers }) | start({ decisions }) |
| Preuve signée | Non | Facultative, avec authentication: "signed" |
| Définition | defineInteractiveAgentTask() | defineApprovalTask(), definePauseTask() |
Définir le dialogue
Section intitulée « Définir le dialogue »La tâche exige un checkpoint : il conserve les questions et les réponses d’un processus à l’autre.
Le script affiche waiting-input et la première question de l’agent. Outpost ajoute lui-même le protocole de question à votre brief : le brief décrit seulement l’objectif et la forme du JSON final.
Référence API : InteractiveAgentTaskOptions.
Codex, Claude Code, Copilot CLI, Kimi Code et le harness intégré sont acceptés. Antigravity et un harness créé avec conversations: false sont refusés dès la définition de la tâche : voir Conversations.
Déroulement du dialogue
Section intitulée « Déroulement du dialogue »Afficher les questions
Section intitulée « Afficher les questions »result.inputRequests liste toutes les questions en attente. Plusieurs tâches interactives indépendantes peuvent attendre en même temps.
Référence API : WorkflowInputRequest.
Accepter une réponse
Section intitulée « Accepter une réponse »Relancez le même workflow avec le même checkpoint et une entrée answers par demande.
start() exécute le tour suivant et rend la main à la question suivante ou à la fin de la tâche. Sans answers, il renvoie les questions en attente sans appeler le modèle.
Outpost vérifie toutes les réponses avant d’en appliquer une seule. Il refuse un requestId périmé, un acteur absent de actors, une autre exécution, une deuxième réponse pour la même tâche et, quand allowFreeText vaut false, une valeur hors de choices.
Lire le résultat
Section intitulée « Lire le résultat »Lisez le résultat du dialogue avec result.value(clarify).
Référence API : InteractiveAgentResult.
result.usage cumule les tentatives et les tokens de tous les tours, réparations comprises. unwrap() lève une erreur tant que l’exécution attend. Dans un workflow qui contient aussi des étapes d’approbation, waiting-input l’emporte sur paused, et un échec ou une annulation l’emporte sur les deux.
Conserver le workspace
Section intitulée « Conserver le workspace »Chaque tour ouvre une sandbox et la ferme avant la publication de la question. Les fichiers du worktree passent d’un tour à l’autre, commités ou non ; le répertoire personnel de la sandbox et les processus en cours, non.
Outpost n’intègre, ne pousse ni ne supprime jamais le worktree. Relisez branch et fusionnez-la vous-même (Dépôt et branche), puis nettoyez-la avec Rétention et nettoyage.
Le dépôt, le worktree et le stockage des conversations doivent rester aux mêmes chemins pour le processus suivant. Un worktree déplacé échoue avec Interactive workspace moved; recover it explicitly, et une branche changée avec Interactive workspace branch changed; recover it explicitly.
Reprendre après un arrêt brutal
Section intitulée « Reprendre après un arrêt brutal »Un arrêt brutal pendant un tour laisse la tâche inachevée, et le start() suivant refuse de la rejouer. Autorisez le rejeu avec checkpoint: { ...checkpoint, resume: "retry-incomplete" }.
Le tour repart de la dernière conversation et de la dernière réponse enregistrées ; une sortie déjà terminée est réutilisée sans appeler le modèle. Les effets partiels du tour interrompu peuvent se répéter. Exécutions durables décrit le rejeu et la récupération de la propriété du checkpoint.
Écrire une tâche interactive personnalisée
Section intitulée « Écrire une tâche interactive personnalisée »defineTask() avec interaction suspend n’importe quelle tâche sur une question. defineInteractiveAgentTask() repose sur ce mécanisme.
perform repart du début après chaque réponse. Lisez interaction.state pour sauter le travail déjà fait, et save(state) pour enregistrer l’avancement ; les deux ne contiennent que du JSON.
- Une question au dernier des
maxTurnsfait échouer la tâche au lieu d’attendre. - Les questions n’expirent pas et les réponses ne sont pas signées.
- Une annulation arrête le tour en cours ; une question déjà enregistrée reste en attente.
- Changer l’agent, le modèle, le brief, le dépôt, le fournisseur, les acteurs ou
maxTurnsrend le checkpoint enregistré incompatible : démarrez un nouveaurunId.
Un scénario complet, avec une approbation, des tests rouges et du code relu : Construire un workflow de développement.
API : defineInteractiveAgentTask · InteractiveAgentTaskOptions · InteractiveAgentResult · WorkflowInputRequest · WorkflowAnswer · TaskInteractionContext