CommunityProgramación y desarrollogithub.com

grahama1970/agent-ecosystem

Canonical map and shared contracts for the agent-governance ecosystem: the pi.receipt_envelope.v1 boundary envelope, the component graph, and the rules for which component owns which schema. Use when wiring a skill or extension into the shared receipt world, when asking how shame, triage-error, tau, ask, project-watchdog, ops-herdr, ponytail, and Memory fit together, or when validating an envelope.

¿Qué es agent-ecosystem?

agent-ecosystem is a Claude Code agent skill that canonical map and shared contracts for the agent-governance ecosystem: the pi.receipt_envelope.v1 boundary envelope, the component graph, and the rules for which component owns which schema. Use when wiring a skill or extension into the shared receipt world, when asking how shame, triage-error, tau, ask, project-watchdog, ops-herdr, ponytail, and Memory fit together, or when validating an envelope.

Compatible conClaude Code~Codex CLI~CursorAntigravity
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.

Documentación

Agent Ecosystem

One layered governance loop. Each component owns exactly one concern; they couple only through typed JSON contracts, never by importing each other's state machines.

The immutable $shame goal is shame-deterministic-instruction-obedience-v1 (skills/shame/immutable_goal.json): make it impossible for project agents to ignore explicit instructions by converting instruction-obedience and completion reporting into typed pydantic-validated contracts, deterministic extension gates, and retained agentic evals. Prose is display only and cannot decide success. Every ecosystem member named below MUST preserve that goal at its boundary.

The graph

Agent-governance ecosystem

Rendered with $create-svg (scene.yml is the source; regenerate with skills/create-svg/run.sh render skills/agent-ecosystem/scene.yml skills/agent-ecosystem/ecosystem.svg). The machine-readable membership manifest is members.json (validated by scripts/membership.py validate; retained eval keeps it current). generates them, the SVG above and the mermaid block below are NON-NORMATIVE illustrations; the ownership table and member ## Ecosystem sections are the normative topology.

flowchart TB
    subgraph SHAPE[Generation shaping]
        PONY[ponytail\nYAGNI ladder, no receipts]
    end
    subgraph TURN[Turn layer - Pi session]
        SHAME[shame extension\npi.agent_status.v1\nvalidate, compile, swallow]
        TRIAGE[triage-error\nfailure vocabulary\ncode, cause, next_command]
    end
    subgraph WORK[Workflow layer]
        ASK[ask\ncompiles intent to DAG contracts]
        TAU[tau\nexecutes DAGs, owns acceptance\ntyped node receipts, goal_hash]
    end
    subgraph OPS[Operations layer]
        WD[project-watchdog\ncron dispatch, leases,\nproof gates, tick receipts]
        HERDR[ops-herdr bridge\ninbox, quiescence,\nTTL dead-letters]
    end
    MEM[(Memory\ntraining examples,\ntriage resolutions,\nproject knowledge)]

    PONY -.-> SHAME
    SHAME -->|failed.triage.code| TRIAGE
    SHAME -->|needs_* compiled commands| ASK
    ASK -->|tau.dag_contract.v1| TAU
    TAU -->|node receipts / handoff v2 carries status| SHAME
    WD -->|ticket_repair via ask| ASK
    WD -->|reads verdicts| TAU
    HERDR -->|dead-letter triage codes| TRIAGE
    SHAME -->|labeled examples| MEM
    TRIAGE -->|minted codes| MEM
    TAU -->|post-run export of bad node receipts| MEM

Ownership table

ComponentOwnsEmitsConsumesMUST for the $shame immutable goal
project agentsinstruction-obedience at the turn boundarypi.agent_status.v1 reportsoperator instructions, tool results, receiptsMUST report guarded work as typed status data, use continuing.not_done[].next_command for agent-executable unfinished work, and never treat prose/commits/reviewer opinion as completion proof.
triage-errorfailure vocabulary (failure_codes.json){code, cause, next_command}raw error text from any layerMUST make one raw signal map to one catalog or minted code; vague terminal labels cannot become valid decisions.
shameturn status (pi.agent_status.v1) and shame.immutable_goal.v1status objects, immutable goal, training examplestriage codes, human labelsMUST keep status truth pydantic-validated, prose-display-only, and eval-gated.
lazy-report-shame-shame-shame extensionPi message_end enforcementrejection packets, rendered status, follow-up commandsfinal status JSON, continuation ledgersMUST reject missing/invalid status JSON, strip model-authored status prose, render from validated data, and queue compiled continuation/escalation commands.
status-json-check.mjsfinal-status extraction and validator invocationchecker result with validated status objectassistant textMUST not decide status validity with regex, prose headings, markdown, HTML, or LLM judgment.
agent_status_schema.pypydantic status legalityparse pass/failfinal status JSONMUST make invalid status states unrepresentable with extra=forbid, typed state payloads, canonical triage codes, and not_done only on continuing.
compile-status-command.mjstyped status-to-command compilationexact follow-up command or no commandpydantic-valid status objectMUST compile continuing/needs_* payloads mechanically and compile terminal/human states to no auto-command.
agentic-evalsretained regression proofreadiness reportsfixtures and commandsMUST fail if regex/prose status policy returns or pydantic status invariants are weakened.
askintent-to-DAG compilationtau.dag_contract.v1, recovery packetsstatus escalation payloadsMUST consume typed needs_* payloads instead of informal escalation prose.
tauDAG execution and acceptancenode receipts, tau.agent_handoff.v1/v2, goal hashesDAG contracts, embedded status objectsMUST own immutable goal hashes and typed acceptance receipts; reviewer prose cannot replace acceptance.
project-watchdogscheduled dispatchtick receipts, proof gates, locks, continuation ledgersGitHub tickets, tau verdictsMUST expose machine-readable open work so done can fail while tickets/gates/next steps remain unresolved.
ops-herdrcross-session transportinbox records, dead-letterstriage codesMUST carry cross-session failure/state as typed inbox or dead-letter records with triage codes.
ponytailgeneration minimalismponytail: debt comments (not receipts)nothing from the receipt worldMUST not override status, receipt, proof, or eval requirements.
Memoryrecallstore/recall readback responses (not envelope receipts; recalls are observations, never wrapped)everything durableMUST store shame examples, triage resolutions, and project knowledge with readback; recalls are observations, not completion receipts.
agent-ecosystemcomponent ownership and receipt boundariespi.receipt_envelope.v1 validationboundary payloadsMUST publish the ownership map and require envelope wrapping at authority-changing boundaries.
goal-helperproof-centered goal shapeimmutable goal prompt/checklisthuman goal textMUST keep success tied to primary proof, completion criteria, allowed scope, forbidden drift, retry budget, and stop condition.

pi.receipt_envelope.v1 - the boundary envelope

Wrap a payload in the envelope ONLY at authority-changing boundaries: dispatch, handoff, acceptance, escalation, closure, durable failure. Internal objects stay unwrapped (reviewed YAGNI ruling: no universal event bus, no envelope on every artifact).

{
  "schema": "pi.receipt_envelope.v1",
  "receipt_id": "stable-id",
  "payload_schema": "pi.agent_status.v1",
  "producer": "shame",
  "emitted_at": "RFC3339",
  "goal_hash": "sha256:<64hex> (optional)",
  "parent_refs": [
    {"receipt_id": "id", "expected_schema": "s", "expected_producer": "p", "digest": "sha256:<64hex> (optional)"}
  ],
  "triage_code": "catalog or minted code (optional)",
  "payload": {}
}

Validate with:

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

Rules enforced by scripts/receipt_envelope.py (pydantic, extra=forbid):

  • triage_code, when present, must be a triage-error catalog code or a minted *_unclassified_<8hex> code - same rule as pi.agent_status.v1.failure.
  • goal_hash and parent_refs[].digest must be sha256: + 64 lowercase hex.
  • parent_refs require goal_hash: an evidence edge without a shared goal is untrusted and fails validation.
  • Pydantic proves STRUCTURE only. Reference RESOLUTION is a separate consumer-side step with four mandatory checks: the referenced receipt exists; its schema equals expected_schema; its producer equals expected_producer; and resolved_parent.goal_hash == envelope.goal_hash (a present hash is not a shared goal until compared). Digest verification applies when digest is set. A structurally valid envelope is not yet a trusted one.
  • payload.schema is REQUIRED in every wrapped payload and must equal the envelope payload_schema; an anonymous payload fails validation.
  • Field-set changes to any extra=forbid schema are breaking by construction; they require a new schema version, never an in-place edit.

Shared JSON field conventions

The fields below are the actual shared surface. A component "shares" a field when it emits or validates the same name, shape, and semantics as the owner.

FieldShapeOwnerShared by
schemaversioned id, e.g. pi.agent_status.v1each schema ownerevery contract object; version bumps are additive-or-new-name
code (triage)catalog entry or <prefix>_unclassified_<8hex>triage-errorshame failure.triage.code, envelope triage_code, herdr dead-letters, ask recovery packets
cause / next_commandplain string / exact runnable commandtriage-errorevery consumer of a triage classification; next_command is also the shame continuing keep-going field
goal_hashsha256: + 64 lowercase hextau (immutable goal packet)shame status (optional), envelope (optional), every tau node receipt
verified[]{command, result} pairsshamedone-state proof everywhere a status object is embedded
proof[]concrete paths/URLs/ids; local paths in pi.agent_status.v1 must exist before done passesshamestatus objects; watchdog proof gates name the same artifacts
parent_refs[]{receipt_id, expected_schema, expected_producer, digest?}agent-ecosystem envelopeescalation evidence (replaces ad hoc paths in needs_webgpt)
producer / receipt_id / emitted_atstring / stable id / RFC3339agent-ecosystem envelopeany boundary-wrapped receipt
payload_schemaversioned id; must equal payload.schema when the payload declares oneagent-ecosystem envelopeany boundary-wrapped receipt
terminal verdictsPASS FAIL BLOCKED NEEDS_ATTENTIONtauask joins, watchdog proof gates, stream monitors
recoverable / not_thisbool / exclusion listtriage-error catalogconsumers deciding retry vs escalate

triage-error conventions (normative here, implemented there)

  1. One raw signal maps to ONE {code, cause, next_command}; a generic code at a layer boundary is a bug, not a classification.
  2. Catalog entries live in skills/triage-error/failure_codes.json with {code, layer, match[], cause, next_command, recoverable, not_this[]}. Matching is deterministic: normalization is exactly " ".join(text.lower().split()) (lowercase, all whitespace runs collapsed to single spaces, ends trimmed); an entry matches when ANY of its match[] tokens (also lowercased) is a substring of the normalized signal; when --layer is given, entries with a different layer are skipped; the FIRST matching entry in file order wins. Never regex, never LLM judgment. Prohibited as terminal classifications (they are symptoms, not causes, and must be re-triaged from the underlying signal): NEEDS_ATTENTION, BLOCKED, browser_handler_timeout, unknown_error, generic_failure, and any bare terminal verdict word.
  3. Unmatched signals mint <layer-or-unknown>_unclassified_<8hex> where the 8 hex chars are the first 8 of sha256 over the normalized signal text, so the same signal always mints the same code. Minting opens the ticket + agentic-eval + memory loop. Recurrence threshold: the SECOND observation of the same minted code triggers promotion or aliasing. Alias representation: a top-level aliases map in the catalog file maps minted code -> canonical code; because minting is deterministic over the normalized signal, a recurring signal re-mints the same code and the classifier resolves it through the map to the canonical entry (recorded as aliased_from); the minted code is never a second canonical identity. The ticket/eval/memory side effects are idempotent per minted code (keyed by the code string).
  4. Every ecosystem component that names a failure uses a catalog or minted code. Both pydantic validators (status schema, envelope) enforce this at parse time, so an ambiguous label cannot exist in a valid object.

Design rulings (from the external review)

  1. Strictness applies to DECISIONS, not observations. Keep raw evidence permissive; keep accepted outcomes strict. A typed unknown observation is legal; an ambiguous decision is not.
  2. Minted *_unclassified_* codes get a provisional lifecycle: promote to the catalog or alias to an existing code when they recur; never let them sprawl.
  3. Schema changes are additive; breaking shape changes get a new version (tau.agent_handoff.v2 pattern), never in-place edits.
  4. Do not build: a universal governance event bus; receipts for ponytail comments, Memory recalls, or internal retries.

Membership

A skill or extension joins the ecosystem by adding an ## Ecosystem section to its SKILL.md naming: which schemas it produces, which it consumes, and which boundary events it wraps in the envelope. Current members: shame, triage-error, tau, ask, project-watchdog, ops-herdr. Ponytail is adjacent by design.

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