Agent qui trouve du travail par lui-même
"L'agent trouve lui-même du travail." Aucun humain n'est nécessaire pour expédier les commandes, le travail lui-même sera effectué à partir du tableau des tâches.
Du « être réveillé » à « trouver son propre emploi »
Le coéquipier du s09 / s10 est passif : quelqu'un doit envoyer un message via la boîte aux lettres avant qu'elle ne commence à fonctionner ; quand c'est fait, il se met au ralenti et est à nouveau réveillé.
Le coéquipier autonome de S11 Actif : Il ne s'arrête pas vraiment lorsqu'il n'y a pas de travail. Il analysera le répertoire .tasks/ toutes les 5 secondes - lorsqu'il verra une tâche sans propriétaire, claim_task la réclamera et commencera à travailler.
Cycle de vie d'un coéquipier :
+-------+
| frayer |
+---+---+
|
v
+-------+
| TRAVAIL | <-- Boucle LLM tool_use
+---+---+
|
| stop_reason != outil_use OU outil_use("idle")
v
+-------+
| RALENTI | sondage toutes les 5 s, 12 fois au total = délai d'attente de 60 s
+---+---+
|
+--> De nouvelles nouvelles dans la boîte de réception ? → reprendre le TRAVAIL
|
+--> scannez .tasks/, trouvé non réclamé → réclamation → reprise du TRAVAIL
|
+--> Années 60, rien en attente → statut = arrêt, le fil se termine
Réclamation automatique · "Prendre les commandes" depuis le tableau des tâches
Fonctions principales :
def scan_unclaimed_tasks() -> liste : non réclamé = [] pour f dans trié(TASKS_DIR.glob("task_*.json")) : tâche = json.loads(f.read_text()) if (task.get("status") == "pendant" et pas task.get("owner") et pas task.get("blockedBy")) : non réclamé.append (tâche) retour non réclamé
Trois filtres = en attente + aucun propriétaire + aucun bloqué par. Les deux sont indispensables.
L'action de réclamation elle-même a un verrou (_claim_lock) pour empêcher deux agents de récupérer la même tâche non réclamée en même temps : relisez le verrou, vérifiez si le propriétaire est toujours vide, puis écrivez la marque "in_progress" + propriétaire sur le disque.
Simulez plusieurs agents pour analyser le tableau des tâches en même temps
Trois coéquipiers sont en état d'inactivité et trois tâches sont en attente d'être réclamées. Cliquez sur "Scan Next Round" pour voir qui l'obtiendra en premier.
Réinjection d'identité·Vous savez toujours qui vous êtes après la compression
s06 a mentionné qu'auto_compact remplacerait les messages par un résumé. L'agent autonome peut être facilement déclenché après des heures d'exécution - après compression, le modèle ne connaît ni son nom ni son rôle.
L'astuce de S11 : Lors de la revendication d'une nouvelle tâche, si len(messages) ≤ 3 (indiquant qu'elle vient d'être compressée), insérez automatiquement le bloc d'identité dans l'en-tête :
if len(messages) <= 3 : messages.insert(0, { "role" : "utilisateur", "content" : f"<identity>Vous êtes 'alice', rôle : codeur, équipe : mon-équipe. Continuez votre travail.</identity>", }) messages.insert(1, {"role":"assistant", "content" : f"Je m'appelle Alice. Je continue."})
Ce mode est appelé réinjection d'identité : il utilise une série de dialogues artificiellement construits pour "dire au modèle qui il est" afin qu'il puisse retrouver son sens du caractère.