Communitygithub.com

grahama1970/plugin-creator

Crea y prepara directorios de plugin para Codex con un archivo `.codex-plugin/plugin.json` obligatorio, carpetas/archivos opcionales, valores predeterminados de manifiesto válidos y entradas de marketplace personal por defecto. Úsalo cuando Codex necesite crear un nuevo plugin personal, añadir estructura opcional, generar o actualizar entradas de marketplace para el ordenamiento y metadatos de disponibilidad, o actualizar un plugin local existente durante el desarrollo con el flujo de cachebuster y reinstalación guiado por CLI.

¿Qué es plugin-creator?

Esta habilidad automatiza la creación y el mantenimiento de plugins para Codex, el asistente de codificación con IA de Sourcegraph. Proporciona una interfaz de línea de comandos (CLI) para crear la estructura de directorios requerida de un plugin, incluyendo el archivo de manifiesto `plugin.json` con valores predeterminados validados, y carpetas opcionales como `skills/`, `hooks/`, scripts, assets y archivos de configuración MCP y de aplicación. También gestiona la integración con el marketplace de Codex, generando o actualizando entradas en el archivo `marketplace.json` para controlar la visibilidad, el orden de instalación y los metadatos de autenticación de los plugins. La habilidad valida los manifiestos generados y ofrece un flujo de actualización con 'cachebuster' para desarrollo iterativo, evitando la edición manual de archivos de configuración. Soporta marketplaces personales, de equipo y de repositorio, y se integra con las capacidades de instalación y enlaces profundos de la aplicación Codex.

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

Preguntar en tu IA favorita

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

Documentación

Creador de Plugins

Inicio Rápido

  1. Ejecuta el script de andamiaje:
# Los nombres de plugins se normalizan a minúsculas con guiones y deben tener <= 64 caracteres.
# La carpeta generada y el nombre en plugin.json son siempre idénticos.
# Ejecutar desde la raíz de la habilidad (el directorio que contiene este `SKILL.md`).
# Por defecto se crea en `~/plugins/<nombre-del-plugin>`.
python3 scripts/create_basic_plugin.py <nombre-del-plugin>
  1. Edita <ruta-del-plugin>/.codex-plugin/plugin.json cuando la solicitud proporcione metadatos específicos. El andamiaje comienza con valores predeterminados válidos y no debe contener marcadores de posición [TODO: ...].

  2. Genera o actualiza la entrada del marketplace personal cuando el plugin deba aparecer en el orden de la interfaz de Codex:

# Las entradas del marketplace personal por defecto están en `~/.agents/plugins/marketplace.json`.
python3 scripts/create_basic_plugin.py mi-plugin --with-marketplace

Solo especifica --marketplace-name <nombre> cuando el nombre de marketplace personal por defecto ya esté ocupado o instalado y necesites inicializar un archivo de marketplace nuevo y diferente:

python3 scripts/create_basic_plugin.py mi-plugin \
  --with-marketplace \
  --marketplace-name equipo-local

Solo utiliza un marketplace de repositorio/equipo cuando el usuario lo solicite explícitamente:

python3 scripts/create_basic_plugin.py mi-plugin \
  --path <raíz-del-repo>/plugins \
  --marketplace-path <raíz-del-repo>/.agents/plugins/marketplace.json \
  --with-marketplace

Cuando el usuario especifique una ruta de marketplace, asegúrate de que ese marketplace esté realmente instalado antes de indicarle que lo reinstale. El archivo de marketplace personal por defecto en ~/.agents/plugins/marketplace.json se descubre implícitamente, pero otras rutas de marketplace no. En Windows, usa la ruta equivalente dentro del perfil de usuario.

  1. Genera/ajusta las carpetas complementarias opcionales según sea necesario:
python3 scripts/create_basic_plugin.py mi-plugin \
  --path <directorio-padre-del-plugin> \
  --marketplace-path <ruta-del-json-del-marketplace> \
  --with-skills --with-hooks --with-scripts --with-assets --with-mcp --with-apps --with-marketplace

<directorio-padre-del-plugin> es el directorio donde se creará la carpeta del plugin <nombre-del-plugin> (por ejemplo ~/plugins).

  1. Antes de entregar un plugin generado, ejecuta:
python3 scripts/validate_plugin.py <ruta-del-plugin>

Para actualizaciones de un plugin local existente durante el desarrollo, mantén el flujo de andamiaje tal cual y usa la referencia en lugar de editar manualmente los archivos de marketplace:

python3 scripts/update_plugin_cachebuster.py <ruta-del-plugin>

Prefiere el cachebuster predeterminado de la ayuda a menos que el usuario solicite explícitamente una anulación específica. Consulta references/installing-and-updating.md para conocer el flujo esperado de cachebuster y reinstalación mientras se itera sobre un plugin local existente.

Qué crea esta habilidad

  • Los andamios predeterminados respaldados por marketplace utilizan el archivo de marketplace personal en ~/.agents/plugins/marketplace.json, con los plugins almacenados generalmente en ~/plugins/<nombre-del-plugin>/.
  • Crea la raíz del plugin en /<directorio-padre-del-plugin>/<nombre-del-plugin>/.
  • Siempre crea /<directorio-padre-del-plugin>/<nombre-del-plugin>/.codex-plugin/plugin.json.
  • Rellena el manifiesto con la forma del esquema validado que acepta la ruta de ingesta.
  • Crea o actualiza ~/.agents/plugins/marketplace.json cuando se establece --with-marketplace.
    • Si el archivo de marketplace aún no existe, inicializa una raíz de marketplace personal antes de añadir la primera entrada de plugin.
  • <nombre-del-plugin> se normaliza utilizando las reglas de nomenclatura del creador de habilidades:
    • Mi Plugin → mi-plugin
    • Mi--Plugin → mi-plugin
    • los guiones bajos, espacios y signos de puntuación se convierten en -
    • el resultado está en minúsculas, separado por guiones con guiones consecutivos colapsados
  • Soporta la creación opcional de:
    • skills/
    • hooks/
    • scripts/
    • assets/
    • .mcp.json
    • .app.json

Flujo de trabajo del marketplace

  • La creación del marketplace personal por defecto apunta a ~/.agents/plugins/marketplace.json. Aquí, "marketplace personal" significa el marketplace cuyo archivo está en esa ruta.
  • La creación del marketplace de repositorio/equipo es opcional mediante --path y --marketplace-path, solo cuando el usuario lo solicita específicamente.
  • --marketplace-name es una ruta excepcional. Úsalo solo cuando el nombre de marketplace personal por defecto ya esté ocupado y necesites inicializar un archivo de marketplace nuevo y diferente.
  • No uses --marketplace-name para renombrar un archivo de marketplace existente. Si el archivo ya existe, su name de nivel superior debe coincidir.
  • Si el usuario especifica una ruta de marketplace diferente, trata ese marketplace como si necesitara instalación explícita mediante codex plugin marketplace add.
  • Prefiere scripts/read_marketplace_name.py cuando necesites el nombre del marketplace desde cualquier archivo marketplace.json. Sin argumentos, lee el marketplace personal por defecto; con una ruta explícita también funciona para marketplaces de repositorio/equipo.
  • En cualquier ubicación, la ruta de origen generada permanece como ./plugins/<nombre-del-plugin>.
  • Los metadatos raíz del marketplace admiten name de nivel superior más interface.displayName opcional.
  • Trata el orden de los plugins en plugins[] como orden de renderizado en Codex. Añade nuevas entradas al final a menos que un usuario solicite explícitamente reordenar la lista.
  • displayName pertenece dentro del objeto interface del marketplace, no en entradas individuales de plugins[].
  • Cada entrada de marketplace generada debe incluir todos los siguientes:
    • policy.installation
    • policy.authentication
    • category
  • Valores predeterminados para nuevas entradas:
    • policy.installation: "AVAILABLE"
    • policy.authentication: "ON_INSTALL"
  • Anula los valores predeterminados solo cuando el usuario especifique explícitamente otro valor permitido.
  • Valores permitidos para policy.installation:
    • NOT_AVAILABLE
    • AVAILABLE
    • INSTALLED_BY_DEFAULT
  • Valores permitidos para policy.authentication:
    • ON_INSTALL
    • ON_USE
  • Trata policy.products como una anulación. Omítelo a menos que el usuario solicite explícitamente la restricción por producto.
  • La forma de la entrada de plugin generada es:
{
  "name": "nombre-del-plugin",
  "source": {
    "source": "local",
    "path": "./plugins/nombre-del-plugin"
  },
  "policy": {
    "installation": "AVAILABLE",
    "authentication": "ON_INSTALL"
  },
  "category": "Productividad"
}
  • Usa --force solo cuando se pretenda reemplazar intencionalmente una entrada existente del marketplace para el mismo nombre de plugin.

  • Si el archivo de marketplace de destino aún no existe, créalo con "name" de nivel superior, un objeto "interface" que contenga "displayName" y un array plugins, luego añade la nueva entrada.

  • Para un archivo de marketplace completamente nuevo, el objeto raíz debe verse así:

{
  "name": "personal",
  "interface": {
    "displayName": "Personal"
  },
  "plugins": [
    {
      "name": "nombre-del-plugin",
      "source": {
        "source": "local",
        "path": "./plugins/nombre-del-plugin"
      },
      "policy": {
        "installation": "AVAILABLE",
        "authentication": "ON_INSTALL"
      },
      "category": "Productividad"
    }
  ]
}

Comportamiento requerido

  • El nombre de la carpeta exterior y el "name" en plugin.json son siempre el mismo nombre de plugin normalizado.
  • No elimines la estructura requerida; mantén .codex-plugin/plugin.json presente.
  • No dejes marcadores de posición [TODO: ...] en los manifiestos de plugins.
  • Mantén apps y mcpServers fuera de plugin.json a menos que sus archivos complementarios se hayan creado realmente.
  • Omite los campos de manifiesto de plugin no compatibles que la validación rechaza, incluyendo hooks.
  • Si creas archivos dentro de una ruta de plugin existente, usa --force solo cuando la sobrescritura sea intencional.
  • Conserva cualquier interface.displayName existente del marketplace.
  • Al generar entradas de marketplace, escribe siempre policy.installation, policy.authentication y category incluso si sus valores son los predeterminados.
  • Añade policy.products solo cuando el usuario lo solicite explícitamente para esa anulación.
  • Mantén source.path del marketplace relativo a la raíz del marketplace seleccionado como ./plugins/<nombre-del-plugin>.
  • Solo usa --marketplace-name cuando crees un nuevo archivo de marketplace cuyo nombre no deba ser personal porque ese nombre ya está ocupado o instalado en otro lugar.
  • Si Codex necesitara aprobación para escribir el archivo de marketplace, solicita esa aprobación antes de continuar. Si el usuario prefiere ejecutar la escritura él mismo, proporciona el comando de andamiaje exacto y luego continúa desde la validación o las ediciones posteriores del plugin en lugar de dejar el flujo de trabajo vago.
  • Para actualizaciones de un plugin local existente durante el desarrollo, no edites manualmente la configuración del marketplace ni marketplace.json. Usa el flujo de actualización documentado en references/installing-and-updating.md y scripts/update_plugin_cachebuster.py.
  • No le digas al usuario que ejecute codex plugin marketplace add para el flujo predeterminado del marketplace personal. Ese comando es para la configuración explícita de un marketplace no predeterminado, no para la ruta estándar ~/.agents/plugins/marketplace.json.
  • Si el usuario proporcionó un --marketplace-path no predeterminado, asegúrate de que ese marketplace esté instalado antes de dar instrucciones de reinstalación. Usa codex plugin marketplace add <ruta-a-la-raíz-del-marketplace> cuando ese marketplace explícito aún no se haya configurado.
  • Cuando el flujo de trabajo haya creado o actualizado un plugin respaldado por marketplace, finaliza la respuesta final para el usuario con una breve transferencia a la aplicación Codex. Di Para ver esto en la aplicación Codex: y escribe Ver <nombre del plugin normalizado> y Compartir <nombre del plugin normalizado> como enlaces Markdown, no como URL sin formato o tramos de código.
  • El enlace profundo "Ver" usa codex://plugins/<nombre del plugin normalizado>?marketplacePath=<ruta absoluta de marketplace.json>. El enlace profundo "Compartir" usa la misma URL con &mode=share.
  • Reemplaza los marcadores de posición con el nombre real del plugin normalizado y la ruta absoluta de marketplace.json del plugin andamiado. Codifica la URL del segmento de ruta y el valor de la consulta cuando sea necesario.
  • No añadas parámetros de consulta pluginName o hostId a estos enlaces profundos. Codex los deriva después de que el usuario haga clic en el enlace.
  • No emitas los enlaces Ver <nombre del plugin normalizado> o Compartir <nombre del plugin normalizado> cuando no se haya creado ni actualizado ninguna entrada de marketplace.

Referencia a la muestra exacta de la especificación

Para la muestra JSON canónica exacta tanto para los manifiestos de plugin como para las entradas de marketplace, usa:

  • references/plugin-json-spec.md
  • references/installing-and-updating.md para obtener orientación sobre actualización/reinstalación mientras se itera sobre un plugin local existente, además del comportamiento de reanudación en un nuevo hilo después de la reinstalación

Validación

Después de editar SKILL.md, ejecuta:

python3 ../skill-creator/scripts/quick_validate.py .

Antes de entregar un plugin generado, ejecuta:

python3 scripts/validate_plugin.py <ruta-del-plugin>

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/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.

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.

Skills relacionados