grahama1970/agent-ecosystem

Carte canonique et contrats partagés pour l'écosystème de gouvernance des agents : l'enveloppe de frontière pi.receipt_envelope.v1, le graphe des composants et les règles de propriété des schémas. À utiliser lors du câblage d'une compétence ou d'une extension dans le monde partagé des reçus, pour comprendre comment shame, triage-error, tau, ask, project-watchdog, ops-herdr, ponytail et Memory s'assemblent, ou pour valider une enveloppe.

Qu'est-ce que agent-ecosystem ?

Cette compétence définit l'architecture et les contrats de l'écosystème agent-ecosystem, un système de gouvernance en boucle pour les agents d'IA. Elle fournit une carte canonique des composants (shame, triage-error, tau, ask, project-watchdog, ops-herdr, ponytail, Memory) et les règles de propriété des schémas JSON. L'objectif central est le respect d'instructions via le contrat immuable `$shame`, qui convertit l'obéissance aux instructions et le reporting d'achèvement en contrats typés validés par Pydantic, portes d'extension déterministes et évaluations agentiques retenues. La compétence est utile pour les développeurs qui intègrent de nouvelles compétences ou extensions dans cet écosystème, car elle spécifie l'enveloppe de frontière `pi.receipt_envelope.v1` pour les changements d'autorité, le format des reçus, les champs JSON partagés, et les règles de validation (extras interdits, versions de schéma additives). Elle prend en charge des outils en ligne de commande pour valider les enveloppes et maintenir le manifeste des membres.

Compatible avec✓Claude Code~Codex CLI~Cursor✓Antigravity
npx skills add https://github.com/grahama1970/agent-skills/tree/main/skills/agent-ecosystem

Installed? Explore more Développement et programmation skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · 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.

Aperçu

Depuis le README du skill

Écosystème de gouvernance des agents

Documentation

Écosystème d'agents

Une boucle de gouvernance en couches. Chaque composant possède exactement une préoccupation ; ils ne se couplent que par des contrats JSON typés, jamais en important les machines à états les uns des autres.

L'objectif immuable $shame est shame-deterministic-instruction-obedience-v1 (skills/shame/immutable_goal.json) : rendre impossible pour les agents du projet d'ignorer des instructions explicites en convertissant l'obéissance aux instructions et le reporting d'achèvement en contrats typés validés par Pydantic, en portes d'extension déterministes et en évaluations agentiques retenues. Le texte prose est uniquement destiné à l'affichage et ne peut pas décider du succès. Chaque membre de l'écosystème nommé ci-dessous DOIT préserver cet objectif à sa frontière.

Le graphe

Écosystème de gouvernance des agents

Rendu avec $create-svg (scene.yml est la source ; régénérer avec skills/create-svg/run.sh render skills/agent-ecosystem/scene.yml skills/agent-ecosystem/ecosystem.svg). Le manifeste d'appartenance lisible par machine est members.json (validé par scripts/membership.py validate ; l'évaluation retenue le maintient à jour). Le SVG ci-dessus et le bloc mermaid ci-dessous sont des illustrations NON NORMATIVES ; le tableau de propriété et les sections ## Ecosystem des membres sont la topologie normative.

flowchart TB
    subgraph SHAPE[Façonnage de la génération]
        PONY[ponytail\nÉchelle YAGNI, pas de reçus]
    end
    subgraph TURN[Couche de tour - Session Pi]
        SHAME[extension shame\npi.agent_status.v1\nvalider, compiler, avaler]
        TRIAGE[triage-error\nvocabulaire d'échec\ncode, cause, next_command]
    end
    subgraph WORK[Couche de workflow]
        ASK[ask\ncompile l'intention en contrats DAG]
        TAU[tau\nexécute les DAGs, possède l'acceptation\nreçus de nœuds typés, goal_hash]
    end
    subgraph OPS[Couche d'opérations]
        WD[project-watchdog\nrépartition cron, baux,
portes de preuve, reçus de tick]
        HERDR[passerelle ops-herdr\nboîte de réception, quiescence,
lettres mortes TTL]
    end
    MEM[(Memory\nexemples d'apprentissage,
résolutions de triage,
connaissances du projet)]

    PONY -.-> SHAME
    SHAME -->|failed.triage.code| TRIAGE
    SHAME -->|commandes compilées needs_*| ASK
    ASK -->|tau.dag_contract.v1| TAU
    TAU -->|reçus de nœuds / handoff v2 porte le statut| SHAME
    WD -->|ticket_repair via ask| ASK
    WD -->|lit les verdicts| TAU
    HERDR -->|codes de triage de lettres mortes| TRIAGE
    SHAME -->|exemples étiquetés| MEM
    TRIAGE -->|codes créés| MEM
    TAU -->|export post-exécution des mauvais reçus de nœuds| MEM

Tableau de propriété

ComposantPossèdeÉmetConsommeDOIT pour l'objectif immuable $shame
agents du projetobéissance aux instructions à la frontière du tourrapports pi.agent_status.v1instructions de l'opérateur, résultats d'outils, reçusDOIT reporter le travail gardé comme données de statut typées, utiliser continuing.not_done[].next_command pour le travail inachevé exécutable par l'agent, et ne jamais traiter la prose/les commits/l'opinion du relecteur comme une preuve d'achèvement.
triage-errorvocabulaire d'échec (failure_codes.json){code, cause, next_command}texte d'erreur brut de n'importe quelle coucheDOIT faire correspondre un signal brut à un code de catalogue ou créé ; les étiquettes terminales vagues ne peuvent pas devenir des décisions valides.
shamestatut de tour (pi.agent_status.v1) et shame.immutable_goal.v1objets de statut, objectif immuable, exemples d'apprentissagecodes de triage, étiquettes humainesDOIT garder la vérité du statut validée par Pydantic, prose-affichage-seulement, et évaluée par porte.
extension lazy-report-shame-shame-shameapplication de message_end de Pipaquets de rejet, statut rendu, commandes de suiviJSON de statut final, registres de continuationDOIT rejeter le JSON de statut manquant/invalide, supprimer la prose de statut générée par le modèle, rendre à partir de données validées, et mettre en file d'attente les commandes de continuation/escalade compilées.
status-json-check.mjsextraction du statut final et invocation du validateurrésultat du vérificateur avec objet de statut validétexte de l'assistantDOIT ne pas décider de la validité du statut avec des regex, des en-têtes de prose, du markdown, du HTML ou un jugement LLM.
agent_status_schema.pylégalité du statut Pydanticpassage/échec d'analyseJSON de statut finalDOIT rendre les états de statut invalides irreprésentables avec extra=forbid, les charges utiles d'état typées, les codes de triage canoniques, et not_done uniquement sur continuing.
compile-status-command.mjscompilation typée statut-vers-commandecommande de suivi exacte ou pas de commandeobjet de statut validé par PydanticDOIT compiler les charges utiles continuing/needs_* mécaniquement et compiler les états terminaux/humains en aucune commande automatique.
agentic-evalspreuve de régression retenuerapports de préparationfixtures et commandesDOIT échouer si la politique de statut par regex/prose revient ou si les invariants du statut Pydantic sont affaiblis.
askcompilation intention-vers-DAGtau.dag_contract.v1, paquets de récupérationcharges utiles d'escalade de statutDOIT consommer les charges utiles typées needs_* au lieu de la prose d'escalade informelle.
tauexécution et acceptation du DAGreçus de nœuds, tau.agent_handoff.v1/v2, hachages d'objectifscontrats DAG, objets de statut intégrésDOIT posséder les hachages d'objectifs immuables et les reçus d'acceptation typés ; la prose du relecteur ne peut pas remplacer l'acceptation.
project-watchdogrépartition planifiéereçus de tick, portes de preuve, verrous, registres de continuationtickets GitHub, verdicts tauDOIT exposer le travail ouvert lisible par machine afin que done puisse échouer pendant que les tickets/portes/prochaines étapes restent non résolus.
ops-herdrtransport inter-sessionsenregistrements de boîte de réception, lettres mortescodes de triageDOIT transporter les échecs/états inter-sessions comme des enregistrements typés de boîte de réception ou de lettres mortes avec des codes de triage.
ponytailminimalisme de générationcommentaires de dette ponytail: (pas de reçus)rien du monde des reçusDOIT ne pas outrepasser les exigences de statut, de reçu, de preuve ou d'évaluation.
Memoryrappelréponses de lecture de stockage/rappel (pas de reçus d'enveloppe ; les rappels sont des observations, jamais enveloppés)tout ce qui est durableDOIT stocker les exemples de honte, les résolutions de triage et les connaissances du projet avec lecture ; les rappels sont des observations, pas des reçus d'achèvement.
agent-ecosystempropriété des composants et frontières de reçusvalidation pi.receipt_envelope.v1charges utiles de frontièreDOIT publier la carte de propriété et exiger le wrapping d'enveloppe aux frontières changeant l'autorité.
goal-helperforme d'objectif centrée sur la preuveinvite/checklist d'objectif immuabletexte d'objectif humainDOIT lier le succès à la preuve principale, aux critères d'achèvement, à la portée autorisée, à la dérive interdite, au budget de réessai et à la condition d'arrêt.

pi.receipt_envelope.v1 - l'enveloppe de frontière

Enveloppez une charge utile dans l'enveloppe UNIQUEMENT aux frontières changeant l'autorité : envoi, transfert, acceptation, escalade, fermeture, échec durable. Les objets internes restent non enveloppés (décision YAGNI examinée : pas de bus d'événements universel, pas d'enveloppe sur chaque artefact).

{
  "schema": "pi.receipt_envelope.v1",
  "receipt_id": "stable-id",
  "payload_schema": "pi.agent_status.v1",
  "producer": "shame",
  "emitted_at": "RFC3339",
  "goal_hash": "sha256:<64hex> (optionnel)",
  "parent_refs": [
    {"receipt_id": "id", "expected_schema": "s", "expected_producer": "p", "digest": "sha256:<64hex> (optionnel)"}
  ],
  "triage_code": "code de catalogue ou créé (optionnel)",
  "payload": {}
}

Validez avec :

skills/agent-ecosystem/run.sh validate <envelope.json>
echo '{...}' | skills/agent-ecosystem/run.sh validate -

Règles appliquées par scripts/receipt_envelope.py (Pydantic, extra=forbid) :

  • triage_code, lorsqu'il est présent, doit être un code de catalogue triage-error ou un code créé *_unclassified_<8hex> - même règle que pi.agent_status.v1.failure.
  • goal_hash et parent_refs[].digest doivent être sha256: + 64 hex minuscules.
  • parent_refs nécessitent goal_hash : une arête de preuve sans objectif partagé n'est pas fiable et échoue à la validation.
  • Pydantic prouve UNIQUEMENT la STRUCTURE. La RÉSOLUTION de référence est une étape distincte côté consommateur avec quatre vérifications obligatoires : le reçu référencé existe ; son schéma est égal à expected_schema ; son producteur est égal à expected_producer ; et resolved_parent.goal_hash == envelope.goal_hash (un hachage présent n'est pas un objectif partagé tant qu'il n'est pas comparé). La vérification du condensé s'applique lorsque digest est défini. Une enveloppe structurellement valide n'est pas encore une enveloppe de confiance.
  • payload.schema est REQUIS dans chaque charge utile enveloppée et doit être égal à payload_schema de l'enveloppe ; une charge utile anonyme échoue à la validation.
  • Les modifications d'ensemble de champs sur tout schéma extra=forbid sont cassantes par construction ; elles nécessitent une nouvelle version de schéma, jamais une modification sur place.

Conventions de champs JSON partagés

Les champs ci-dessous sont la surface partagée réelle. Un composant « partage » un champ lorsqu'il émet ou valide le même nom, la même forme et la même sémantique que le propriétaire.

ChampFormePropriétairePartagé par
schemaid versionné, p. ex. pi.agent_status.v1chaque propriétaire de schémachaque objet de contrat ; les incréments de version sont additifs ou nouveau-nom
code (triage)entrée de catalogue ou <prefix>_unclassified_<8hex>triage-errorshame failure.triage.code, enveloppe triage_code, lettres mortes herdr, paquets de récupération ask
cause / next_commandchaîne simple / commande exécutable exactetriage-errorchaque consommateur d'une classification de triage ; next_command est également le champ de continuation de shame continuing
goal_hashsha256: + 64 hex minusculestau (paquet d'objectif immuable)statut shame (optionnel), enveloppe (optionnel), chaque reçu de nœud tau
verified[]paires {command, result}shamepreuve partout où un objet de statut est intégré
proof[]chemins/URLs/IDs concrets ; les chemins locaux dans pi.agent_status.v1 doivent exister avant que done ne passeshameobjets de statut ; les portes de preuve watchdog nomment les mêmes artefacts
parent_refs[]{receipt_id, expected_schema, expected_producer, digest?}enveloppe agent-ecosystempreuve d'escalade (remplace les chemins ad hoc dans needs_webgpt)
producer / receipt_id / emitted_atchaîne / id stable / RFC3339enveloppe agent-ecosystemtout reçu enveloppé à la frontière
payload_schemaid versionné ; doit être égal à payload.schema lorsque la charge utile en déclare unenveloppe agent-ecosystemtout reçu enveloppé à la frontière
verdicts terminauxPASS FAIL BLOCKED NEEDS_ATTENTIONtauask rejoint, portes de preuve watchdog, moniteurs de flux
recoverable / not_thisbool / liste d'exclusioncatalogue triage-errorconsommateurs décidant de réessayer vs escalader

Conventions de triage-error (normatives ici, implémentées là-bas)

  1. Un signal brut correspond à UN {code, cause, next_command} ; un code générique à une frontière de couche est un bug, pas une classification.
  2. Les entrées du catalogue vivent dans skills/triage-error/failure_codes.json avec {code, layer, match[], cause, next_command, recoverable, not_this[]}. La correspondance est déterministe : la normalisation est exactement " ".join(text.lower().split()) (minuscules, tous les espaces blancs réduits en espaces simples, extrémités coupées) ; une entrée correspond lorsque L'UN de ses jetons match[] (également en minuscules) est une sous-chaîne du signal normalisé ; lorsque --layer est donné, les entrées avec un layer différent sont ignorées ; la PREMIÈRE entrée correspondante dans l'ordre du fichier gagne. Jamais de regex, jamais de jugement LLM. Interdits comme classifications terminales (ce sont des symptômes, pas des causes, et doivent être re-triés à partir du signal sous-jacent) : NEEDS_ATTENTION, BLOCKED, browser_handler_timeout, unknown_error, generic_failure, et tout mot de verdict terminal nu.
  3. Les signaux non correspondants créent <layer-ou-inconnu>_unclassified_<8hex> où les 8 caractères hex sont les 8 premiers du sha256 du texte du signal normalisé, de sorte que le même signal crée toujours le même code. La création ouvre la boucle ticket + agentic-eval + mémoire. Seuil de récurrence : la DEUXIÈME observation du même code créé déclenche une promotion ou un alias. Représentation d'alias : une carte aliases de premier niveau dans le fichier du catalogue mappe code créé -> code canonique ; parce que la création est déterministe sur le signal normalisé, un signal récurrent re-crée le même code et le classificateur le résout à travers la carte vers l'entrée canonique (enregistrée comme aliased_from) ; le code créé n'est jamais une deuxième identité canonique. Les effets secondaires ticket/eval/mémoire sont idempotents par code créé (clé par la chaîne de code).
  4. Chaque composant de l'écosystème qui nomme un échec utilise un code de catalogue ou créé. Les validateurs Pydantic (schéma de statut, enveloppe) l'appliquent au moment de l'analyse, de sorte qu'une étiquette ambiguë ne peut pas exister dans un objet valide.

Décisions de conception (issues de la revue externe)

  1. La rigueur s'applique aux DÉCISIONS, pas aux observations. Gardez les preuves brutes permissives ; gardez les résultats acceptés stricts. Une observation typée unknown est légale ; une décision ambiguë ne l'est pas.
  2. Les codes créés *_unclassified_* ont un cycle de vie provisoire : promouvoir au catalogue ou créer un alias vers un code existant lorsqu'ils reviennent ; ne les laissez jamais proliférer.
  3. Les modifications de schéma sont additives ; les changements cassants de forme obtiennent une nouvelle version (modèle tau.agent_handoff.v2), jamais de modifications sur place.
  4. Ne construisez pas : un bus d'événements de gouvernance universel ; des reçus pour les commentaires ponytail, les rappels Memory, ou les nouvelles tentatives internes.

Appartenance

Une compétence ou une extension rejoint l'écosystème en ajoutant une section ## Ecosystem à son SKILL.md nommant : quels schémas elle produit, lesquels elle consomme, et quels événements de frontière elle enveloppe dans l'enveloppe. Membres actuels : shame, triage-error, tau, ask, project-watchdog, ops-herdr. Ponytail est adjacent par conception.

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

grahama1970/acceptance-contract

Turn a client brief, zip bundle, directory, or single requirements file into a typed acceptance-contract bundle with extracted requirements, acceptance checks, open questions, an immutable-goal draft, and a create-report-backed decision report. Use when users say acceptance contract, brief to requirements, freeze the goal, create immutable goal, amend immutable goal, build a Battle requirements bundle, or extract requirements from this bundle.

grahama1970/agentic-evals

Agentic evaluation of skills using multi-trial fixtures, deterministic command assertions, trajectory checks, safety constraints, and evidence-backed readiness scoring. Use when users ask for agentic evals, multi-trial skill evaluation, skill trajectory validation, or readiness scoring for a skill workflow.

grahama1970/agent-inbox

File-based inter-agent messaging with headless dispatch. Check inbox, send bugs/requests to other projects, automatically spawn headless agents to fix bugs, and track progress via task-monitor.

grahama1970/agents-registry

Generate and query the centralized agent identity registry. Scans .pi/agents/*/AGENTS.md, parses frontmatter, outputs agents-registry.json and optionally syncs to /memory for semantic search.

grahama1970/agent-status

Artifact-driven status surfaces for long-running project-agent work. Maintains status.json, events.jsonl, proof manifests, and a stale-aware STATUS.html so humans can tell where the agent is, what passed, what is still unproven, and what decision or action is next — without dashboard theater.

grahama1970/align

Round-based context alignment before execution. Use when the human, project agent, WebGPT, scillm, ask, dogpile, memory, or project-knowledge may each hold different facts about a task; especially before ambiguous design, infographic, product workflow, high-stakes implementation, plan-iterate, project-infographic, or multi-review work.

grahama1970/analytics

Flexible data science analytics for any dataset. Auto-discovers schema, recommends charts, exports to create-figure. Works with JSONL, JSON, CSV from any source.

grahama1970/analyze-chatterbox-emotions

Evaluate generated Chatterbox voice files as voice-quality artifacts: affect match, arousal/valence proxies, pause placement, intelligibility inputs, clipping, loudness, and discontinuity flags. Use when reviewing Chatterbox emotional tags, pauses, Turbo/base affect delivery, Persona Dream utterance renders, or whether generated speech matches an intended product-facing affect.

grahama1970/analyze-elf

Reverse-engineer features from ELF binaries. Extracts CLI commands, state machines, protocols, Zod schemas, and data models. Automatically generates a /create-walkthrough prosecution brief with Mermaid diagrams. Uses /treesitter for AST analysis of bundled JS/TS source.

grahama1970/animation-vocabulary

Reverse-lookup glossary that turns a vague description of a web animation or motion effect into its exact term ("the bouncy thing when a popover opens" → Pop in; "the iOS rubber-band scroll" → Rubber-banding). Use when the user asks "what's it called when…", or describes a motion effect without knowing its name and wants the right word to prompt an AI or designer with. For naming an effect, not designing or building one.

grahama1970/anonymize-data

Anonymize supported CSV, JSON, UTF-8 text, and SQLite files using an explicit policy through the oai-trial project. Use for anonymize data, pseudonymize exports, redact policy literals, or discover and explicitly approve fuzzy name aliases. The skill is a thin CLI/Docker interface, not another engine.

grahama1970/anvil

Heavy-duty "No-Vibes" debugging and hardening orchestrator. Use this for complex, stubborn bugs where `review-code` has failed, or for "Red Teaming" (hardening) a codebase. Runs multiple agents in parallel (Thunderdome) using git worktree isolation.

grahama1970/apple-design

Apple's approach to interface design and fluid, physical motion, translated for the web. Use when building or reviewing gesture-driven UI, spring animations, drag/swipe/sheet interactions, momentum and interruptible transitions, translucent materials and depth, typography (optical sizing, tracking, leading), reduced-motion, or the design foundations (feedback, spatial consistency, restraint) behind Apple-style interfaces.

grahama1970/argue

Multi-persona structured debate orchestrator. Personas research via /dogpile, consult colleagues via /ask, and argue toward nuanced synthesis on complex questions.

grahama1970/arxiv

Search arXiv for papers and extract knowledge into memory. Use `search` to find papers, `learn` to extract knowledge.

grahama1970/ask

Use when the user asks to query project memory, ask an oracle, use supported browser-backed reviewers, run Tau roundtable/single-handler workflows, ask Pi-native subagents from within Pi, run persona/deep-review workflows, generate image prompts, check OS/project health through composed skills, or run an ask DAG. This skill is the executable /ask runtime; do not replace it with an informal subagent, plain web search, or hand-written review; inside Pi, explicit Pi-native subagent targets are routed through the pi-subagents tool as an Ask target type.

grahama1970/assess

Step back and critically reassess project state. Use when asked to "assess", "step back", "fresh eyes", "check alignment", "sanity check", "health check", "prune documentation", or "evaluate what's working". Offers documentation pruning and doc-code alignment analysis. Offer to run after major changes (don't auto-run).

grahama1970/assistant

Shared GPT + classifier inference gateway for persona monitor tasks. Routes validation and classification through a 4-tier cascade: heuristic → classifier → local GPT → scillm.

grahama1970/assistant-lab

Self-improvement workbench for /assistant. All the tools needed to diagnose, train, evaluate, and promote models in a continuous loop. The "warm pond" where /assistant evolves its own inference stack.

grahama1970/batch-quality

Pre-flight validation and quality gates for batch LLM operations. ACTUALLY tests samples through LLM before burning tokens. Uses SPARTA contracts for DuckDB validation queries. Integrates with task-monitor for enforced quality gates.

Skills associés