v3.10.0 — conformidad con Agent Plugins 1.0.0 (formato portátil AAIF) - #32
Merged
Merged
Conversation
Adapta el empaquetado al estándar Agent Plugins 1.0.0 (Agentic AI Foundation, 2026-08-06), que define el formato portátil para skills y servidores MCP. Cambio puramente estructural: no toca el motor de scoring, ni S0-S5, ni un solo veredicto. Los 287 tests siguen verdes. Dos de los tres arreglos eran fallos reales, invisibles porque Claude Code es permisivo donde la spec es estricta: - SKILL.md no validaba contra Agent Skills. El frontmatter es un conjunto CERRADO (name, description, license, compatibility, metadata, allowed-tools) y teníamos una clave `version` al nivel superior y una `description` de 1475 caracteres contra un máximo de 1024. Cualquiera de las dos obliga a un cliente conformante a SALTARSE el skill (§7.1): el plugin se instalaba vacío en cualquier cliente que no fuera Claude. La versión pasa a `metadata.version` y la description a 943 caracteres, conservando todas las frases de activación. - Los requisitos de entorno (macOS, Mail.app/AppleScript o MCP de Gmail, Python 3.9+) estaban solo en prosa dentro de la description. Pasan al campo `compatibility`, que es el que la spec reserva para eso (<=500 chars), de modo que un cliente incompatible pueda saberlo antes de intentar ejecutarlo. - Nuevo manifiesto portable en la raíz del plugin (plugins/email-triage/plugin.json) con el $schema canónico: el §5.1 lo exige ahí y sin él un cliente conformante rechaza el plugin sin mirar los componentes. .claude-plugin/plugin.json se queda, es el único que Claude Code lee hoy; el CI mantiene los dos en sincronía. Mecanismos para que no vuelva a derivar: - Gate #7 de CI: valida el esquema cerrado del manifiesto, el $schema exacto, el name contra §5.5, el author como objeto, el frontmatter del SKILL.md con sus presupuestos 1024/500, el mcp.json si existe (incluida la coherencia de versión de spec del §10.1) y que ningún symlink escape de la raíz del plugin (§4.1). Verificado contra seis mutaciones deliberadas: las seis lo rompen. Sin dependencias nuevas ni red. - La versión pasa de 8 a 9 sitios y bump-version.sh los cubre de una pasada. El sed del frontmatter se acota al bloque 1,/^---$/ para no pisar otro `version:` del cuerpo. - CLAUDE.md y AGENTS.md documentan los dos manifiestos, las tres reglas fáciles de romper y por qué no publicamos mcp.json (§6.2: una ubicación ausente no es error, y el MCP de Gmail lo gestiona el cliente). No cambia: /triage sigue siendo de Claude Code (v1 solo define skills y MCP como componentes portables) y la distribución (marketplace.json, install-plugin.sh) sigue igual porque la spec la deja a cada cliente. La documentación de Claude Code no menciona todavía Agent Plugins, así que esto posiciona el plugin en vez de añadir compatibilidad efectiva hoy; los dos defectos que arregla por el camino ya existían. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013nL5rVeBkv8YSfn2gYKDzg
3 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Qué cambia
Adapta el empaquetado al estándar Agent Plugins 1.0.0 (Agentic AI Foundation, publicado el 2026-08-06), que define el formato portátil para skills y servidores MCP. Es un cambio puramente estructural: no toca el motor de scoring, ni S0–S5, ni un solo veredicto.
Por el camino arregla dos fallos reales que no se veían porque Claude Code es permisivo donde la spec es estricta: el
SKILL.mdno validaba contra Agent Skills, y con la spec en la mano un cliente conformante se saltaba el skill entero (§7.1), dejando el plugin instalado y vacío en cualquier cliente que no fuera Claude.Los tres arreglos
SKILL.mdconforme. El conjunto es cerrado (name,description,license,compatibility,metadata,allowed-tools) y había dos infracciones simultáneas: una claveversional nivel superior, y unadescriptionde 1475 caracteres contra un máximo de 1024. Cualquiera de las dos, por separado, basta para que el skill se descarte. Ahora la versión vive enmetadata.versiony ladescriptionmide 943, conservando todas las frases de activación (incluidas «test del triaje» y «muéstrame qué haría sin ejecutarlo»).description. Pasan al campocompatibility(194 de 500 caracteres), que es el que la spec reserva para eso: un cliente incompatible puede saberlo antes de intentar ejecutarlo.plugins/email-triage/plugin.jsoncon el$schemacanónico. El §5.1 lo exige ahí; sin él, un cliente conformante rechaza el plugin sin llegar a mirar los componentes..claude-plugin/plugin.jsonse queda — es el único que Claude Code lee hoy — y el CI mantiene los dos en sincronía.Para que no vuelva a derivar
$schemaexacto, elnamecontra §5.5, elauthorcomo objeto, el frontmatter con sus presupuestos 1024/500, elmcp.jsonsi algún día existe (incluida la coherencia de versión de spec del §10.1) y que ningún symlink escape de la raíz del plugin (§4.1).bump-version.shlos cubre de una pasada. Elseddel frontmatter se acota al bloque1,/^---$/para no pisar otroversion:del cuerpo.CLAUDE.mdyAGENTS.mddocumentan los dos manifiestos y las tres reglas fáciles de romper sin darse cuenta.Comprobado
OK (skipped=3, expected failures=1)./scripts/bump-version.sh(no a mano)tests.ymltal cual, incluido el fuzz de 20 000 iteraciones × 4 entradasversional nivel superior,description> 1024, manifiesto ausente,$schemade otra versión,mcp.jsonsin$schema, ycompatibility> 500: las seis lo rompen, y el árbol sin mutar vuelve a pasarschemas/1.0.0/plugin.schema.json), no solo contra las comprobaciones propiasNotas
Esto todavía no da compatibilidad efectiva con otros clientes. La documentación de Claude Code no menciona aún Agent Plugins, ni el
plugin.jsonde raíz ni elmcp.jsonsin punto, así que hoy esos ficheros son inocuos pero inertes: posicionan el plugin para cuando Anthropic adopte el formato. Lo que sí vale ya son los dos defectos delSKILL.md, que existían desde antes de que saliera el estándar y que además mejoran el triggering.No se publica
mcp.json. El §6.2 dice que una ubicación ausente no es error,.mcp.jsonestá vacío, y el MCP de Gmail lo gestiona el cliente en vez de empaquetarlo el plugin. De paso se corrigeCLAUDE.md, que lo describía como «proveedor de correo (Gmail MCP)» cuando en realidad estaba vacío.commands/triage.mdno se toca. Los commands no son un componente portable en v1 (la spec solo define skills y MCP, y obliga a los clientes a ignorar el resto), pero moverlo a un directorio de extensión rompería Claude Code, que leecommands/de forma nativa./triageseguirá siendo de Claude Code y eso no afecta a la conformidad. La distribución (marketplace.json,install-plugin.sh,fix-cowork-version.sh) también sigue igual: la spec la deja deliberadamente a cada cliente.Riesgo a vigilar en el futuro: el
seddemetadata.versiondepende de que la clave esté indentada con dos espacios dentro del frontmatter. Si alguien reformatea el bloque, el bump fallará ruidosamente en su propia validación (no en silencio), que es el comportamiento que queremos.Generated by Claude Code