CommunityProgramación y desarrollogithub.com

grahama1970/agent-ecosystem

Mapa canónico y contratos compartidos para el ecosistema de gobernanza de agentes: el sobre límite pi.receipt_envelope.v1, el grafo de componentes y las reglas sobre qué componente posee qué esquema. Útil al conectar una habilidad o extensión al mundo compartido de recibos, al preguntar cómo encajan shame, triage-error, tau, ask, project-watchdog, ops-herdr, ponytail y Memory, o al validar un sobre.

¿Qué es agent-ecosystem?

Agent Ecosystem define la topología normativa y los contratos de un bucle de gobernanza de agentes en capas. Cada componente (shame, triage-error, tau, ask, project-watchdog, ops-herdr, ponytail y Memory) posee exactamente una responsabilidad y se acopla solo mediante contratos JSON tipados, sin importar las máquinas de estado de otros. El objetivo inmutable `$shame` garantiza que los agentes no puedan ignorar instrucciones explícitas, convirtiendo la obediencia y la notificación de finalización en contratos validados con pydantic, puertas de extensión deterministas y evaluaciones agénticas retenidas. El ecosistema incluye el sobre límite `pi.receipt_envelope.v1`, que envuelve cargas solo en cambios de autoridad (despacho, entrega, aceptación, escalamiento, cierre, fallo duradero), y una tabla de propiedad que especifica qué esquema posee cada componente, qué emite, qué consume y cómo preserva el objetivo inmutable `$shame`. Las reglas de diseño prohíben un bus de eventos universal, recibos para comentarios internos o recuperaciones, y exigen que los cambios de esquema sean aditivos o con nueva versión, nunca modificaciones in situ. Para un usuario de IA, esta habilidad es esencial al extender el sistema: proporciona contratos de validación mecanizados (pydantic, extra=forbid), convenciones de campo compartidas y un flujo determinista de clasificación de fallos (códigos de catálogo o acuñados) que impide decisiones ambiguas. La membresía se declara añadiendo una sección `## Ecosystem` en el SKILL.md del componente, especificando qué esquemas produce, consume y qué eventos de límite envuelve.

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

Installed? Explore more Programación y desarrollo skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Vista previa

Del README del skill

Ecosistema de gobernanza de agentes

Documentación

Ecosistema de Agentes

Un bucle de gobernanza en capas. Cada componente posee exactamente una responsabilidad; se acoplan solo mediante contratos JSON tipados, nunca importando las máquinas de estado de otros.

El objetivo inmutable $shame es shame-deterministic-instruction-obedience-v1 (skills/shame/immutable_goal.json): hacer imposible que los agentes del proyecto ignoren instrucciones explícitas, convirtiendo la obediencia a instrucciones y la notificación de finalización en contratos tipados validados con pydantic, puertas de extensión deterministas y evaluaciones agénticas retenidas. La prosa es solo para visualización y no puede decidir el éxito. Cada miembro del ecosistema nombrado a continuación DEBE preservar ese objetivo en su límite.

El grafo

Ecosistema de gobernanza de agentes

Renderizado con $create-svg (scene.yml es la fuente; regenerar con skills/create-svg/run.sh render skills/agent-ecosystem/scene.yml skills/agent-ecosystem/ecosystem.svg). El manifiesto de membresía legible por máquina es members.json (validado por scripts/membership.py validate; la evaluación retenida lo mantiene actualizado). Las siguientes ilustraciones (SVG arriba y bloque mermaid) son NO NORMATIVAS; la tabla de propiedad y las secciones ## Ecosystem de cada miembro son la topología normativa.

flowchart TB
    subgraph SHAPE[Conformación de generación]
        PONY[ponytail\nEscalera YAGNI, sin recibos]
    end
    subgraph TURN[Capa de turno - Sesión Pi]
        SHAME[extensión shame\npi.agent_status.v1\nvalidar, compilar, tragar]
        TRIAGE[triage-error\nVocabulario de fallos\ncódigo, causa, next_command]
    end
    subgraph WORK[Capa de flujo de trabajo]
        ASK[ask\nCompila intención a contratos DAG]
        TAU[tau\nEjecuta DAGs, posee aceptación\nRecibos de nodo tipados, goal_hash]
    end
    subgraph OPS[Capa de operaciones]
        WD[project-watchdog\nDespacho cron, arrendamientos,\nPuertas de prueba, recibos de tick]
        HERDR[puente ops-herdr\nBuzón de entrada, aquiescencia,\nCartas muertas TTL]
    end
    MEM[(Memoria\nEjemplos de entrenamiento,\nResoluciones de triaje,\nConocimiento del proyecto)]

    PONY -.-> SHAME
    SHAME -->|código de triage fallido| TRIAGE
    SHAME -->|comandos compilados needs_*| ASK
    ASK -->|tau.dag_contract.v1| TAU
    TAU -->|recibos de nodo / handoff v2 lleva estado| SHAME
    WD -->|ticket_repair vía ask| ASK
    WD -->|lee veredictos| TAU
    HERDR -->|códigos de triaje de carta muerta| TRIAGE
    SHAME -->|ejemplos etiquetados| MEM
    TRIAGE -->|códigos acuñados| MEM
    TAU -->|exportación posterior a ejecución de recibos de nodo fallidos| MEM

Tabla de propiedad

ComponentePoseeEmiteConsumeDEBE para el objetivo inmutable $shame
Agentes del proyectoobediencia a instrucciones en el límite del turnoinformes pi.agent_status.v1instrucciones del operador, resultados de herramientas, recibosDEBE informar trabajo supervisado como datos de estado tipados, usar continuing.not_done[].next_command para trabajo incompleto ejecutable por el agente, y nunca tratar la prosa/commits/opinión del revisor como prueba de finalización.
triage-errorvocabulario de fallos (failure_codes.json){code, cause, next_command}texto de error crudo de cualquier capaDEBE hacer que una señal cruda se asigne a un código de catálogo o acuñado; las etiquetas terminales vagas no pueden convertirse en decisiones válidas.
shameestado de turno (pi.agent_status.v1) y shame.immutable_goal.v1objetos de estado, objetivo inmutable, ejemplos de entrenamientocódigos de triaje, etiquetas humanasDEBE mantener la verdad del estado validada con pydantic, solo prosa para visualización y controlada por evaluación.
extensión lazy-report-shame-shame-shamecumplimiento de message_end de Pipaquetes de rechazo, estado renderizado, comandos de seguimientoJSON de estado final, libros de continuaciónDEBE rechazar JSON de estado faltante/inválido, eliminar prosa de estado generada por el modelo, renderizar desde datos validados y poner en cola comandos de continuación/escalamiento compilados.
status-json-check.mjsextracción de estado final e invocación del validadorresultado del verificador con objeto de estado validadotexto del asistenteDEBE no decidir la validez del estado con expresiones regulares, encabezados de prosa, markdown, HTML o juicio del LLM.
agent_status_schema.pylegalidad del estado pydanticpasar/fallar de análisisJSON de estado finalDEBE hacer que los estados inválidos sean irrepresentables con extra=forbid, cargas de estado tipadas, códigos de triaje canónicos y not_done solo en continuing.
compile-status-command.mjscompilación tipada de estado a comandocomando de seguimiento exacto o ningún comandoobjeto de estado validado con pydanticDEBE compilar cargas continuing/needs_* mecánicamente y compilar estados terminales/humanos a ningún comando automático.
evaluaciones agénticasprueba de regresión retenidainformes de preparaciónaccesorios y comandosDEBE fallar si la política de estado basada en regex/prosa regresa o si los invariantes de estado pydantic se debilitan.
askcompilación de intención a DAGtau.dag_contract.v1, paquetes de recuperacióncargas de escalamiento de estadoDEBE consumir cargas tipadas needs_* en lugar de prosa de escalamiento informal.
tauejecución y aceptación de DAGrecibos de nodo, tau.agent_handoff.v1/v2, hashes de objetivocontratos DAG, objetos de estado incrustadosDEBE poseer hashes de objetivo inmutables y recibos de aceptación tipados; la prosa del revisor no puede reemplazar la aceptación.
project-watchdogdespacho programadorecibos de tick, puertas de prueba, bloqueos, libros de continuacióntickets de GitHub, veredictos de tauDEBE exponer trabajo abierto legible por máquina para que done pueda fallar mientras los tickets/puertas/próximos pasos permanezcan sin resolver.
ops-herdrtransporte entre sesionesregistros de buzón de entrada, cartas muertascódigos de triajeDEBE transportar fallos/estado entre sesiones como registros tipados de buzón de entrada o cartas muertas con códigos de triaje.
ponytailminimalismo de generacióncomentarios de deuda ponytail: (no recibos)nada del mundo de recibosDEBE no anular los requisitos de estado, recibo, prueba o evaluación.
Memoriarecuperaciónrespuestas de lectura de almacenamiento/recuperación (no recibos de sobre; las recuperaciones son observaciones, nunca envueltas)todo duraderoDEBE almacenar ejemplos de shame, resoluciones de triaje y conocimiento del proyecto con lectura; las recuperaciones son observaciones, no recibos de finalización.
agent-ecosystempropiedad de componentes y límites de recibosvalidación pi.receipt_envelope.v1cargas de límiteDEBE publicar el mapa de propiedad y requerir el envoltorio del sobre en los límites que cambian la autoridad.
goal-helperforma de objetivo centrada en pruebaindicación/lista de verificación de objetivo inmutabletexto de objetivo humanoDEBE mantener el éxito vinculado a la prueba principal, criterios de finalización, alcance permitido, deriva prohibida, presupuesto de reintentos y condición de parada.

pi.receipt_envelope.v1 - el sobre límite

Envuelva una carga en el sobre SOLO en límites que cambian la autoridad: despacho, entrega, aceptación, escalamiento, cierre, fallo duradero. Los objetos internos permanecen sin envolver (decisión YAGNI revisada: sin bus de eventos universal, sin sobre en cada artefacto).

{
  "schema": "pi.receipt_envelope.v1",
  "receipt_id": "id-estable",
  "payload_schema": "pi.agent_status.v1",
  "producer": "shame",
  "emitted_at": "RFC3339",
  "goal_hash": "sha256:<64hex> (opcional)",
  "parent_refs": [
    {"receipt_id": "id", "expected_schema": "s", "expected_producer": "p", "digest": "sha256:<64hex> (opcional)"}
  ],
  "triage_code": "código de catálogo o acuñado (opcional)",
  "payload": {}
}

Validar con:

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

Reglas aplicadas por scripts/receipt_envelope.py (pydantic, extra=forbid):

  • triage_code, cuando está presente, debe ser un código de catálogo de triage-error o un código acuñado *_unclassified_<8hex> - misma regla que pi.agent_status.v1.failure.
  • goal_hash y parent_refs[].digest deben ser sha256: + 64 hex minúsculas.
  • parent_refs requieren goal_hash: un borde de evidencia sin un objetivo compartido no es confiable y falla la validación.
  • Pydantic prueba solo la ESTRUCTURA. La RESOLUCIÓN de referencias es un paso separado del lado del consumidor con cuatro comprobaciones obligatorias: el recibo referenciado existe; su esquema es igual a expected_schema; su productor es igual a expected_producer; y resolved_parent.goal_hash == envelope.goal_hash (un hash presente no es un objetivo compartido hasta que se compara). La verificación del digest se aplica cuando digest está configurado. Un sobre estructuralmente válido no es todavía uno confiable.
  • payload.schema es OBLIGATORIO en cada carga envuelta y debe ser igual al payload_schema del sobre; una carga anónima falla la validación.
  • Los cambios en el conjunto de campos de cualquier esquema extra=forbid son disruptivos por construcción; requieren una nueva versión del esquema, nunca una edición in situ.

Convenciones de campo JSON compartidas

Los campos siguientes son la superficie compartida real. Un componente "comparte" un campo cuando emite o valida el mismo nombre, forma y semántica que el propietario.

CampoFormaPropietarioCompartido por
schemaid versionado, ej. pi.agent_status.v1cada propietario de esquemacada objeto de contrato; los bumps de versión son aditivos o nombre nuevo
code (triaje)entrada de catálogo o <prefix>_unclassified_<8hex>triage-errorshame failure.triage.code, sobre triage_code, cartas muertas de herdr, paquetes de recuperación de ask
cause / next_commandcadena simple / comando ejecutable exactotriage-errortodo consumidor de una clasificación de triaje; next_command es también el campo de continuación de shame continuing
goal_hashsha256: + 64 hex minúsculastau (paquete de objetivo inmutable)estado de shame (opcional), sobre (opcional), cada recibo de nodo de tau
verified[]pares {command, result}shameprueba de estado finalizado en cualquier lugar donde se incruste un objeto de estado
proof[]rutas/URLs/ids concretos; las rutas locales en pi.agent_status.v1 deben existir antes de que done paseshameobjetos de estado; las puertas de prueba de watchdog nombran los mismos artefactos
parent_refs[]{receipt_id, expected_schema, expected_producer, digest?}sobre de agent-ecosystemevidencia de escalamiento (reemplaza rutas ad hoc en needs_webgpt)
producer / receipt_id / emitted_atcadena / id estable / RFC3339sobre de agent-ecosystemcualquier recibo envuelto en límite
payload_schemaid versionado; debe ser igual a payload.schema cuando la carga declara unosobre de agent-ecosystemcualquier recibo envuelto en límite
veredictos terminalesPASS FAIL BLOCKED NEEDS_ATTENTIONtaujoin de ask, puertas de prueba de watchdog, monitores de flujo
recoverable / not_thisbool / lista de exclusióncatálogo de triage-errorconsumidores decidiendo reintentar vs escalar

Convenciones de triage-error (normativas aquí, implementadas allí)

  1. Una señal cruda se asigna a UN {code, cause, next_command}; un código genérico en un límite de capa es un error, no una clasificación.
  2. Las entradas del catálogo viven en skills/triage-error/failure_codes.json con {code, layer, match[], cause, next_command, recoverable, not_this[]}. La coincidencia es determinista: la normalización es exactamente " ".join(text.lower().split()) (minúsculas, todos los espacios en blanco colapsados a espacios simples, extremos recortados); una entrada coincide cuando CUALQUIERA de sus tokens match[] (también en minúsculas) es una subcadena de la señal normalizada; cuando se da --layer, las entradas con un layer diferente se saltan; la PRIMERA entrada coincidente en orden de archivo gana. Nunca expresiones regulares, nunca juicio del LLM. Prohibido como clasificaciones terminales (son síntomas, no causas, y deben ser re-triajeadas desde la señal subyacente): NEEDS_ATTENTION, BLOCKED, browser_handler_timeout, unknown_error, generic_failure, y cualquier palabra de veredicto terminal simple.
  3. Las señales no coincidentes acuñan <layer-or-unknown>_unclassified_<8hex> donde los 8 caracteres hex son los primeros 8 de sha256 sobre el texto de la señal normalizada, por lo que la misma señal siempre acuña el mismo código. La acuñación abre el ticket + bucle de evaluación agéntica + memoria. Umbral de recurrencia: la SEGUNDA observación del mismo código acuñado desencadena promoción o alias. Representación de alias: un mapa aliases de nivel superior en el archivo del catálogo asigna código acuñado -> código canónico; debido a que la acuñación es determinista sobre la señal normalizada, una señal recurrente reacuña el mismo código y el clasificador lo resuelve a través del mapa hasta la entrada canónica (registrada como aliased_from); el código acuñado nunca es una segunda identidad canónica. Los efectos secundarios de ticket/evaluación/memoria son idempotentes por código acuñado (claveados por la cadena del código).
  4. Cada componente del ecosistema que nombra un fallo utiliza un código de catálogo o acuñado. Tanto los validadores pydantic (esquema de estado, sobre) lo aplican en tiempo de análisis, por lo que una etiqueta ambigua no puede existir en un objeto válido.

Decisiones de diseño (de la revisión externa)

  1. El rigor se aplica a las DECISIONES, no a las observaciones. Mantenga la evidencia cruda permisiva; mantenga los resultados aceptados estrictos. Una observación tipada unknown es legal; una decisión ambigua no.
  2. Los códigos acuñados *_unclassified_* tienen un ciclo de vida provisional: promocione al catálogo o alias a un código existente cuando recurran; nunca permita que se expandan.
  3. Los cambios de esquema son aditivos; los cambios de forma disruptivos obtienen una nueva versión (patrón tau.agent_handoff.v2), nunca ediciones in situ.
  4. No construir: un bus de eventos de gobernanza universal; recibos para comentarios de ponytail, recuperaciones de Memoria o reintentos internos.

Membresía

Una habilidad o extensión se une al ecosistema añadiendo una sección ## Ecosystem en su SKILL.md nombrando: qué esquemas produce, qué consume y qué eventos de límite envuelve en el sobre. Miembros actuales: shame, triage-error, tau, ask, project-watchdog, ops-herdr. Ponytail es adyacente por diseño.

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 relacionados