CommunityRédaction et éditiongithub.com

pedroknigge/orderfield

Noyau de contrat pour le travail logiciel multi-agents. Le plan vit sur le disque. Les enfants ne peuvent pas le réécrire. La clôture est une preuve.

Qu'est-ce que orderfield ?

Orderfield est un noyau de contrat multi-agents qui garantit que la spécification (SPEC) et les décisions persistent sur le disque, survivant à la compaction du contexte. Contrairement aux approches où l'historique est perdu entre les sessions, Orderfield utilise un protocole de fichiers structuré (ORDER, packets, résiduels) pour orchestrer le travail entre plusieurs agents (Claude, Codex, Orca, etc.) ou sous-tâches. Chaque enfant agit dans un "paquet" (packet) avec des limites explicites de propriété et de révision. Un résidu (residual) manquant bloque le déclenchement de nouveaux agents, assurant que les engagements sont honorés avant de progresser. La clôture (close) intervient uniquement après que tous les résiduels sont résolus et qu'un contraste (contrast) a validé la livraison. Le système fonctionne via une CLI `of` installable dans l'environnement de l'utilisateur. Elle fournit des commandes pour initialiser un champ (field), créer des paquets, collecter des résultats, intégrer des rapports, et gérer des phases/waves. Orderfield gère également la reprise automatique après perte de contexte : toute session d'un champ ouvert doit commencer par `of resume`, lire l'instruction `next`, et l'exécuter dans le même tour. Un leader humain est toujours intégré via HITL, par exemple pour les rapports de bugs. Orderfield est conçu pour des projets complexes multi-slices où un seul agent ne suffit pas.

Compatible avec✓Claude Code✓Codex CLI✓Cursor✓Antigravity✓OpenCode
npx skills add pedroknigge/orderfield

Installed? Explore more Rédaction et édition skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation


name: orderfield description: v0.7.46 — Noyau de contrat avec stockage sur disque. À utiliser lorsque l'utilisateur invoque /orderfield ou /of, qu'un champ existant doit être repris, ou qu'une véritable vague multi-slice / multi-writer nécessite un plan qui survive à la compaction. Installation/vérification humaine : docs/demo/mortal-install.sh puis of doctor. Doctor/status demande une fois par jour lorsqu'une version plus récente existe (consentement ; pas en silence). Ne pas déclencher pour un simple nom de harnais ou un sous-agent ordinaire. Les harnais inconnus utilisent le mode générique. licence: MIT compatibilité: Nécessite Python 3.11+. Les CLI de harnais optionnels incluent claude, codex, orca, agent ou cursor-agent, opencode, grok, agy, qwen. Le noyau utilise uniquement stdlib. metadata: version: "0.7.46" auteur: Soy Pei / orderfield principe: haken-slaving

Que fait orderfield ?

Vous êtes le leader. N'implémentez pas la tranche. Le disque est la session.

/of est cette compétence. Reprendre. Empaqueter. Résiduel. Contraster. Clôturer. L'origine est un pointeur, pas la broche de génération.

Le harnais (Claude, Codex, Orca, Grok, Cursor, OpenCode, Antigravity/agy) démarre et arrête les processus. Les décisions ORDER, paquets, résiduels et de régime vivent sur le disque. Utilisez-le lorsqu'un noyau, un produit ou une construction multi-slices nécessite des propriétaires exclusifs, une SPEC qui survit à la compaction, et of contrast avant la clôture. Si un seul agent convient déjà, n'ouvrez pas de champ.

Vocabulaire du contrat : docs/glossary.md. Comparé à (Orca, AWS CAO, Agent Teams, CrewAI/LangGraph, compétences dual-harnais) : README.md. Invariants : references/principles.md.

Les enfants se déplacent librement à l'intérieur du paquet. Un résidu seuil bloque davantage de générations dans cette vague ; il ne modifie pas ORDER par lui-même.

Le noyau applique des schémas JSON publics, des écritures atomiques par fichier plus un WAL à l'échelle du champ (stage + MANIFEST + publish) pour les mutations multi-fichiers, un verrou de champ inter-processus pour les MUTATING_COMMANDS (init, new, pack, unpack, collect, integrate, phase, patch, next-wave, migrate, spec, checkpoint, close, gc), des limites d'empaquetage, une identité/chemin/révision de paquet canonique, une liaison résiduelle, une relecture d'intégration, des transitions phase/vague gardées, un blocage de génération, et le menu de régime fermé lorsque le travail passe par of. L'obéissance au rôle, la propriété du produit-espace de travail, le choix du même harnais, les métriques honnêtes créées par l'enfant et les écritures directes en dehors de la CLI restent un protocole. Il ne verrouille pas les fichiers produit, ne crée pas automatiquement d'arbres de travail, n'atteste pas les métriques ou ne police pas un enfant désobéissant. of worktree est une aide optionnelle, pas un gestionnaire de processus.

Que taper ensuite

Le disque ditVous tapez
.orderfield/ORDER.json existeof resume — puis le next imprimé, dans le même tour
pas d'ORDER, vrai travail multi-sliceof init --mission "…" --source "<verbatim brief>"
propriétaires connusof pack --slice "…" --owns-requirement ID puis of handoff --packet ou of spawn
la tranche semble énormeof pack --explain --slice "…" --role explorer — nomme pourquoi ; n'écrit pas
milieu d'épopée, prochain harnais ou humainof handoff (paquet de champ) ou of handoff --json — ne pas dépaqueter
résiduels atterrisof collect --wave N → of integrate --wave N
surface publique exercéeof spec --verified-contract ID → of contrast → of close --checklist → of close
multi-vague prête à clôturerof close --checklist — contraste RÉSOLU + résiduel vide ; puis of close. En vol (résiduel MANQUANT) n'est pas clôturé
ce que signifie clôturerdocs/close-is-proof.md — RFC : contraste RÉSOLU + résiduel vide + CLOSE.json. Résiduel vide n'est pas la clôture
l'enfant dit que le champ est erronéof patch … puis of next-wave
plusieurs champs ouverts sans correspondanceattachez --field (écrit .orderfield/ACTIVE), ou of new
plusieurs frères, besoin de paquets en volof fields / of fields --json — paquets ouverts à travers les foyers ; of status --json reste un champ
longue mission (épopée → vagues → amendement → clôture)docs/long-mission.md — parcourez les verbes ; n'inventez pas de superviseur
session dit FERMÉE, --tokens, ou dépaquetez un rapporteurof eval recovery/adversarial-dual-truth — le disque gagne ; --tokens meurt ; collecter/intégrer un rapporteur
humain demande installation / vérification de ofbash docs/demo/mortal-install.sh --global (ou --root PATH) ; of doctor doit imprimer ok. Épingle : README / PUBLISH. Pas pip. Pas un démon
stderr/doctor dit of plus récentdemander à l'utilisateur ; sur oui : ORDERFIELD_VERSION=… bash install.sh --global --from-release (release tar.gz + SHA256SUMS). Une fois par jour. Ne pas mettre à niveau en milieu d'ORDER sans consentement
résiduel multi-harnais / compétence profonde perdue residual.codexof eval recovery/multi-harness-residual — Claude/Codex/Cursor partagent un résiduel ; Codex argv nomme toujours le schéma
of doctor imprime ÉCHECchamp/noyau — corrigez ACTIVE/stub/paquets/schémas/verrou ; SKEW seul de compétence est AVERTISSEMENT / sortie 0 (bash install.sh --global)
next=HOLD et enfants en volcitez la dernière ligne PULSE à l'utilisateur ce tour-ci ; restez sur ces paquets

Un tour qui prétend empaqueter, générer, contraster ou clôturer sans ces commandes of dans le même tour est une exécution cassée.

Quand utiliser

  • L'utilisateur invoque explicitement Orderfield, /orderfield, /of, Haken slaving, délégation de seuil, ou un champ d'ordre.
  • Logiciel complexe (un noyau, un produit, une construction multi-slices) qui ne tiendra pas dans un seul contexte sans perdre en qualité.
  • Plusieurs tranches ou rédacteurs ont besoin de propriété explicite, ou plusieurs harnais doivent se coordonner.
  • .orderfield/ORDER.json existe déjà dans le dépôt.

Un nom de harnais seul n'est pas un déclencheur. Si la tâche correspond à un agent, un sous-agent ordinaire ou une compétence, n'ouvrez pas de champ. La compétence prime sur l'enfant.

Rapport automatique (HITL)

Orderfield signale automatiquement ses propres défauts à pedroknigge/orderfield après confirmation HITL. Il s'agit d'une auto-télémétrie du noyau/compétence/CLI/docs/installation — pas d'un service d'assistance et pas d'un ticket contre l'arbre de travail du consommateur. Le git origin du consommateur est hors de portée pour toujours. Un fork de amarilla-platform ne peut pas recevoir ces problèmes. Utilisez of issue. Pas une contrainte de vague unique.

Signaler UNIQUEMENT si l'échec est celui d'Orderfield :

  • le noyau a émis un schéma invalide / WAL incohérent / le paquet a produit un paquet que collect ne peut accepter / métadonnées de génération incohérentes / le contraste se contredit / les docs prétendent vs code / échec de l'épingle d'installation/mise à jour / violation d'invariant enfant-forge ou verrou.

NE PAS signaler :

  • l'enfant n'a pas terminé, SPEC incomplète, tests produit rouges, tranche mal aimée, erreur de construction du consommateur, "l'utilisateur est bloqué." Ceux-ci restent sur le disque (résiduel → intégrer).

En cas de doute, rédigez + HITL, par défaut ne pas publier.

Ne jamais créer un problème GitHub sans une confirmation humaine explicite dans le même tour.

  • Confirmer → créer (of issue sans --dry-run après HITL ; l'exécuter est l'envoi).
  • Refuser / modifier plus tard / silence → ne pas créer (ou seulement of issue --dry-run).

Les deux côtés sont le contrat. L'auto-publication, la publication yolo et la publication depuis un enfant sont interdites.

of issue cible toujours --repo pedroknigge/orderfield. Il fonctionne sans ORDER. Stdlib uniquement : le noyau lance gh avec le compte connecté (gh auth). N'usurpez pas d'identité, n'inventez pas de jeton, ne publiez pas sur l'origine du consommateur. Le noyau ne sollicite jamais sur stdin — HITL reste le leader/humain.

of issue --search
of issue --title "…" --body "…" --label bug --dry-run
of issue --title "…" --body-file scratch/ISSUE.md --label enhancement

Un enfant (OF_CHILD défini, génération sans tête, ou toute session qui ne peut pas demander à l'humain) ne publie jamais. Il écrit un brouillon sous son scratch (ISSUE.md ou issues/<slug>.md : titre, corps, étiquettes bug ou enhancement, chemins de preuve) ou exécute of issue --dry-run, et nomme le brouillon dans le résiduel. Vous demandez HITL, puis of issue.

Recherchez d'abord les problèmes ouverts (of issue --search) ; sautez les doublons. Ne déposez pas de secrets, jetons, transcriptions privées ou résiduels internes au champ (ceux-ci restent sur le disque : résiduel → intégrer). Un brouillon ou un problème par constatation distincte ; pas un journal. Procédure enfant : SLAVE.md.

Processus leader obligatoire

Exécutez of s'il est dans votre PATH (l'installateur le lie symboliquement à ~/.local/bin/of). Sinon, exécutez python3 <skill>/scripts/of.py. Dans un dépôt de travail, l'état vit dans le .orderfield/ de ce dépôt, pas à l'intérieur de la compétence. Si l'humain demande à installer ou vérifier l'installation, exécutez bash docs/demo/mortal-install.sh --global (arbre checkout / extrait) ou --root PATH pour un look hermétique — puis of doctor doit imprimer ok. Recette d'épingle : README / PUBLISH. N'inventez pas pip, un superviseur ou un second installateur.

Discipline d'appel d'outil. Un tour qui prétend empaqueter, générer, contraster ou clôturer sans ces commandes of dans le même tour est une exécution cassée. Annoncez au passé seulement après le retour de la CLI.

Auto-reprise. Un champ ouvert (spec_closed faux) ne se met pas en pause lorsque vous changez de chat, perdez du contexte par compaction, ou que l'utilisateur travaille sur des tâches non liées ailleurs. Chaque tour leader dans cet espace de travail : of resume d'abord, lisez auto_continue, puis exécutez l'action next imprimée dans le même tour — handoff/spawn/collect/integrate/patch/next-wave/contrast/close selon le cas. Ne vous arrêtez pas après reprise pour attendre que l'utilisateur dise "continuer". Ne demandez pas s'il faut reprendre à moins que l'utilisateur n'ait explicitement mis en pause ou arrêté la mission (pause / stop / wait on the field / cancel the mission / of init --force). Si la reprise imprime un roster (PICK --field, sortie 2) ou champ étranger (plusieurs champs ouverts ; cet id de session ne correspond pas à l'origine liée), ce n'est pas le next de cette session — demandez quel champ ou of new. Un champ ouvert unique continue automatiquement même lorsque OF_SESSION_ID diffère de ORDER.origin.session_id — l'origine est la provenance, pas l'autorité de reprise. Un tour qui exécute of resume sur un champ ouvert qu'il possède mais n'effectue aucun travail next est une exécution cassée.

Politique de direction (analogue Eve). Pendant qu'un tour est en vol, un nouveau message utilisateur sur un champ ouvert est dirigé, pas mis en file d'attente comme une mission séparée : amendez ou corrigez le contrat (of spec --amend, of patch), continuez les enfants stationnés (HOLD), ou intégrez — ne faites pas of init --force à moins que l'utilisateur n'annule explicitement la mission. Un feu vert déictique (dale, do it, as discussed) sur un champ ouvert est exécuter next, pas of spec --amend de ces mots. Les chats entrelacés et la compaction ne sont pas une pause ; ils sont un retour du contexte vers le disque.

Disposition du contexte (instructions vs compétences vs paquets vs sous-agents) : docs/context-control.md.

Après compaction ou retour d'un chat entrelacé, le premier acte est toujours of resume — reconstruisez depuis le disque, pas la mémoire du chat.

0. Reprendre depuis le disque (quand ORDER existe)

python3 <skill>/scripts/of.py resume

Si un champ existe, commencez ici. Reconstruisez en vol à partir des paquets / résiduels / état plus un éventuel résumé de point de contrôle. Ne faites pas of init quand un champ est déjà ouvert. Ne repaquetez pas un enfant qui a déjà un paquet et aucun résiduel. La reprise est un écran ; elle ne génère pas automatiquement, ne vide pas les logs, ni n'ajoute de régime. Elle imprime field (open | closed) et auto_continue (yes → exécutez next ce tour ; no → champ fermé, origine étrangère parmi plusieurs champs ouverts, ou un roster). Un champ ouvert unique imprime yes même lorsque OF_SESSION_ID diffère de ORDER.origin.session_id. Quand ORDER.origin est présent, il imprime une ligne origin <harness> [<session_id>] ; omettez cette ligne quand la clé est manquante. L'origine est la provenance (quelle session de harnais a ouvert le champ), pas l'autorité de reprise et pas une transcription. La vague active est state.wave plus paquets/résiduels — un session.json obsolète ne gagne pas. Un hôte de génération mort est le même disque : des métadonnées de génération démarré seulement et un reliquat de WAL incomplet ne cachent pas l'enfant empaqueté. Ne faites pas of init sur un champ ouvert (recovery/multi-day-resume, recovery/process-death-resume).

Champs frères. Un seul arbre de travail peut contenir plusieurs champs (.orderfield/fields/<id>/). of new ouvre un frère sans tuer les autres et écrit .orderfield/ACTIVE — c'est une épopée non liée. of new --parent ouvre une phase imbriquée de l'épopée liée (ORDER.parent) ; of close retourne ACTIVE à ce parent (pas of merge). Même mission, nouvelles contraintes / terminé-quand / phase sur cet ORDER est of patch sur le champ lié. of fields les liste (* = ACTIVE ; ouvert/fermé ; phase/vague/âge du paquet ; choose) et une section packs d'enfants en vol (résiduel MANQUANT) à travers les foyers ouverts. of fields --json est l'objet tableau de bord de l'épopée (PackRoster ; recovery/cross-field-pack-roster). --open / --all / --cursor pagine de nombreux foyers. Passez --field <id> ou OF_FIELD (qui met à jour ACTIVE). Status/resume suivent ACTIVE après correspondance d'origine ; un stub ORDER de niveau supérieur résiduel est ignoré lorsque des foyers imbriqués existent. --field d'un stub d'id différent meurt ; of migrate l'archive dans ORDER.json.stub (recovery/root-stub-ambiguous). Le noyau ne sollicite jamais sur stdin. Si la reprise imprime PICK --field (sortie 2), demandez à l'utilisateur quel champ attacher ou s'il faut of new. Si auto_continue no dit champ étranger, n'exécutez pas le next de ce champ — attachez avec --field ou ouvrez un frère. Une session ultérieure du champ ouvert unique n'est pas étrangère. Même brief, autre agent → attachez. Brief non lié → of new. Demande supplémentaire en vol sur le même produit → of spec --amend, pas of new. Carte : docs/nested-fields.md. Modèles de clôture : docs/close-honesty.md. Parcours de longue mission : docs/long-mission.md.

Le brief liste les enfants completed (résiduel présent : statut, result_ref, owns_requirements, présence de chemin détenu) et les enfants in_flight / parked (résiduel MANQUANT : parked_reason, scratch, propriétaires, present/missing du chemin détenu, tranche, âge du paquet, agents_note). Tant qu'un résiduel est MANQUANT, of status / of resume / of pulse imprime running — résiduel MANQUANT ; le chrome du harnais (Tourné / fait) n'est pas le champ

Skills associés