129| `false` | presente | ninguno | `plugin.json` es el manifiesto, como con `true` |129| `false` | presente | ninguno | `plugin.json` es el manifiesto, como con `true` |
130| `false` | presente | uno o más | Conflicto. El plugin falla al cargar con `Plugin <name> has conflicting manifests: both plugin.json and marketplace entry specify components` |130| `false` | presente | uno o más | Conflicto. El plugin falla al cargar con `Plugin <name> has conflicting manifests: both plugin.json and marketplace entry specify components` |
131 131
132## Fuentes de plugins132## Orígenes de plugins
133 133
134El `source` de una entrada de plugin indica dónde Claude Code obtiene ese plugin. Es una cadena de ruta relativa u un objeto cuya propia clave `source` nombra el tipo, por lo que una entrada se ve como `"source": { "source": "github", "repo": "your-org/formatter" }`.134El `source` de una entrada de plugin indica desde dónde Claude Code obtiene ese plugin en particular. Es una cadena de ruta relativa o un objeto cuya propia clave `source` nombra el tipo, de modo que una entrada se ve así: `"source": { "source": "github", "repo": "your-org/formatter" }`.
135 135
136La tabla enumera cada tipo de fuente de plugin y sus campos.136La tabla enumera cada tipo de origen de plugin y sus campos.
137 137
138| Tipo | Campos | Notas |138| Tipo | Campos | Notas |
139| :- | :- | :- |139| :- | :- | :- |
140| Ruta relativa | la cadena en sí | Un directorio dentro del marketplace, resuelto desde la raíz del marketplace. Debe comenzar con `./`, a menos que escriba un [nombre desnudo bajo `metadata.pluginRoot`](#relative-path-plugin-source). `"."` por sí solo significa la raíz en sí |140| Ruta relativa | la propia cadena | Un directorio dentro del marketplace, resuelto desde la raíz del marketplace. Debe comenzar con `./`, a menos que escribas un [nombre simple bajo `metadata.pluginRoot`](#relative-path-plugin-source). `"."` por sí solo significa la propia raíz |
141| `github` | `repo`, `ref`, `sha` | Repositorio de GitHub en forma `owner/repo` |141| `github` | `repo`, `ref`, `sha` | Repositorio de GitHub en formato `owner/repo` |
142| `url` | `url`, `ref`, `sha` | Cualquier repositorio git por URL |142| `url` | `url`, `ref`, `sha` | Cualquier repositorio git por URL |
143| `git-subdir` | `url`, `path`, `ref`, `sha` | Un subdirectorio de un repositorio git, obtenido con un sparse checkout |143| `git-subdir` | `url`, `path`, `ref`, `sha` | Un subdirectorio de un repositorio git, obtenido con un sparse checkout |
144| `npm` | `package`, `version`, `registry` | Paquete del registro npm o enlace a un tarball, obtenido con tu cliente npm y desempaquetado sin ejecutar scripts de instalación |144| `npm` | `package`, `version`, `registry` | Paquete del registro de npm o enlace a un tarball, obtenido con tu cliente de npm y desempaquetado sin ejecutar scripts de instalación |
145| `archive` | `url`, `sha256` | Archivo Zip sobre HTTPS. Requiere Claude Code v2.1.224 o posterior |145| `archive` | `url`, `sha256` | Archivo zip a través de HTTPS. Requiere Claude Code v2.1.224 o posterior |
146| `command` | `command`, `timeout`, `mode` | Directorio impreso por un comando que Claude Code ejecuta en la máquina del usuario. Requiere Claude Code v2.1.229 o posterior |146| `command` | `command`, `timeout`, `mode` | Directorio impreso por un comando que Claude Code ejecuta en la máquina del usuario. Requiere Claude Code v2.1.229 o posterior |
147 147
148Los nombres `url` y `github` también son tipos de [fuente de marketplace](#marketplace-sources), donde `url` significa un enlace directo a un archivo `marketplace.json` en lugar de un repositorio git. `git` existe solo como una fuente de marketplace, y `npm` existe como ambas. `git-subdir`, `archive` y `command` existen solo como fuentes de plugins.148Los nombres `url` y `github` también son tipos de [origen de marketplace](#marketplace-sources), donde `url` significa un enlace directo a un archivo `marketplace.json` en lugar de a un repositorio git. `git` existe solo como origen de marketplace, y `npm` existe como ambos. `git-subdir`, `archive` y `command` existen solo como orígenes de plugin.
149 149
150Use una ruta relativa para un plugin en un subdirectorio del repositorio del marketplace en sí. Use `git-subdir` para un subdirectorio de algún otro repositorio.150Usa una ruta relativa para un plugin que esté en un subdirectorio del propio repositorio del marketplace. Usa `git-subdir` para un subdirectorio de algún otro repositorio.
151 151
152Las fuentes `github`, `url` y `git-subdir` comparten los campos `ref` y `sha`:152Los orígenes `github`, `url` y `git-subdir` comparten los campos `ref` y `sha`:
153 153
154* **`ref`**: una rama o etiqueta. Por defecto es la rama predeterminada del repositorio.154* **`ref`**: una rama o etiqueta. De forma predeterminada es la rama predeterminada del repositorio.
155* **`sha`**: un SHA de commit completo de 40 caracteres en minúsculas. Cuando establece tanto `ref` como `sha`, Claude Code verifica `sha`. En la mayoría de hosts git, incluidos GitHub, GitLab y Bitbucket, esto significa que la instalación tiene éxito incluso si la rama o etiqueta nombrada por `ref` ha sido eliminada posteriormente, siempre que el commit aún sea alcanzable desde el repositorio. Algunos servidores, como AWS CodeCommit, no admiten obtener commits por SHA. En esos servidores, el `ref` aún debe existir y el commit fijado debe ser alcanzable desde él.155* **`sha`**: un SHA de commit completo de 40 caracteres en minúsculas. Cuando estableces tanto `ref` como `sha`, Claude Code hace checkout de `sha`. En la mayoría de los hosts de git, incluidos GitHub, GitLab y Bitbucket, esto significa que la instalación tiene éxito aunque la rama o etiqueta nombrada por `ref` se haya eliminado desde entonces en el upstream, siempre que el commit siga siendo alcanzable desde el repositorio. Algunos servidores, como AWS CodeCommit, no admiten obtener commits por SHA. En esos servidores, la `ref` debe seguir existiendo y el commit fijado debe ser alcanzable desde ella.
156 156
157Para cómo se obtiene, almacena en caché y versiona cada tipo, consulte [Referencia de carga de plugins](https://code.claude.com/docs/es/plugins/loading.md).157Para saber cómo se obtiene, almacena en caché y versiona cada tipo, consulta la [referencia de carga de plugins](https://code.claude.com/docs/es/plugins/loading.md).
158 158
159### Fuente de plugin de ruta relativa159### Origen de plugin de ruta relativa
160 160
161La ruta se resuelve desde la raíz del marketplace. `./plugins/formatter` es `<root>/plugins/formatter` aunque el archivo marketplace esté en `<root>/.claude-plugin/`.161La ruta se resuelve desde la raíz del marketplace. `./plugins/formatter` es `<root>/plugins/formatter` aunque el archivo del marketplace esté en `<root>/.claude-plugin/`.
162 162
163Una ruta que contiene `..` falla la validación. En macOS y Linux, Claude Code rechaza una ruta de entrada que contiene una barra invertida en cualquier lugar después del `./` inicial, por lo que escriba la ruta con barras diagonales.163Una ruta que contiene `..` no supera la validación. En macOS y Linux, Claude Code rechaza una ruta de entrada que contenga una barra invertida en cualquier lugar después del `./` inicial, así que escribe la ruta con barras diagonales.
164 164
165```json theme={null}165```json theme={null}
166{ "name": "formatter", "source": "./plugins/formatter" }166{ "name": "formatter", "source": "./plugins/formatter" }
167```167```
168 168
169Una ruta relativa se resuelve solo cuando Claude Code tiene los archivos del marketplace, así que verifique el tipo de [fuente de marketplace](#marketplace-sources):169Una ruta relativa solo se resuelve cuando Claude Code tiene los archivos del marketplace, así que revisa el tipo de [origen del marketplace](#marketplace-sources):
170 170
171* **`github`, `git`, `file` y `directory`**: Claude Code tiene los archivos del marketplace.171* **`github`, `git`, `file` y `directory`**: Claude Code tiene los archivos del marketplace.
172* **`url`**: Claude Code obtiene solo `marketplace.json`, por lo que las rutas relativas no pueden resolverse. Dé a cada plugin una fuente de objeto en su lugar, como `github` o `git-subdir`.172* **`url`**: Claude Code obtiene solo `marketplace.json`, por lo que las rutas relativas no pueden resolverse. En su lugar, dale a cada plugin un origen de tipo objeto, como `github` o `git-subdir`.
173* **`settings`**: las rutas relativas se rechazan directamente.173* **`settings`**: las rutas relativas se rechazan directamente.
174 174
175#### Nombres desnudos bajo pluginRoot175#### Submódulos de Git en el repositorio del marketplace
176 176
177Un nombre desnudo es un nombre de directorio único sin `/`, como `"formatter"`. Para escribir nombres desnudos en lugar de rutas `./`, establezca [`metadata.pluginRoot`](#top-level-fields) en el directorio bajo el cual se resuelven. Con `"pluginRoot": "./plugins"`, `"source": "formatter"` se resuelve a `./plugins/formatter`. Requiere Claude Code v2.1.239 o posterior.177Cuando Claude Code clona un repositorio de marketplace, obtiene solo los submódulos de git que contienen archivos de plugins. Requiere Claude Code v2.1.295 o posterior.
178
179Las versiones anteriores obtienen todos los submódulos, incluidos los anidados. Si el repositorio tiene un submódulo grande, Claude Code puede entonces superar el [tiempo de espera de clonación](https://code.claude.com/docs/es/plugins/troubleshooting.md#git-clone-timed-out-after-120s) mientras lo obtiene.
180
181Para un plugin en un subdirectorio, como `./plugins/formatter`, Claude Code obtiene un submódulo en estos casos:
182
183* **El plugin está dentro del submódulo**: el submódulo es el directorio del plugin o un directorio por encima de él
184* **El submódulo está dentro del plugin**: el submódulo está en cualquier lugar bajo el directorio del plugin
185* **Un enlace simbólico apunta dentro del submódulo**: un enlace con commit en el repositorio tiene su destino en el submódulo
186
187Un plugin en la raíz del marketplace, con `"source": "./"`, obtiene todos los submódulos del repositorio o ninguno. Claude Code obtiene todos los submódulos cuando alguno de estos apunta dentro de cualquier submódulo:
188
189* **Un directorio de componentes**: un directorio en la raíz que contiene componentes del plugin, como `skills/`, `hooks/` o `bin/`
190* **Una ruta en la configuración del plugin**: una ruta en la entrada del marketplace del plugin, en su `plugin.json` o en un archivo de configuración como `.mcp.json` o `hooks/hooks.json`
191* **Un enlace simbólico**: un enlace con commit en el repositorio
192* **Texto en los archivos del plugin**: la ruta de un submódulo, como `vendor/tool`, escrita en un archivo de configuración o en un archivo bajo un directorio de componentes
193
194Cuando ninguno de ellos apunta dentro de un submódulo, Claude Code no obtiene ningún submódulo para ese plugin. Un repositorio que es a la vez un proyecto y un plugin a menudo tiene submódulos que solo usa la compilación del proyecto, y esta regla los deja fuera.
195
196Claude Code también obtiene todos los submódulos cuando no puede determinar cuáles contienen archivos de plugins, por ejemplo:
197
198* **Un `SKILL.md` en la raíz**: en ese caso, todo el repositorio es el directorio de un skill
199* **Un archivo que Claude Code no puede leer**: el archivo del marketplace, uno de los archivos de configuración del plugin o `.gitmodules`
200
201Si agregas un marketplace con `--sparse`, o su origen establece `sparsePaths`, Claude Code hace checkout solo de los directorios nombrados allí y no obtiene ningún submódulo. Las versiones anteriores hacen lo mismo.
202
203Para mantener fuera de la clonación un submódulo que tus plugins no usan, consulta [Mantener los submódulos no usados fuera de la clonación](https://code.claude.com/docs/es/plugins/create-marketplace.md#keep-unused-submodules-out-of-the-clone).
204
205#### Nombres simples bajo pluginRoot
206
207Un nombre simple es un único nombre de directorio sin `/`, como `"formatter"`. Para escribir nombres simples en lugar de rutas `./`, establece [`metadata.pluginRoot`](#top-level-fields) en el directorio bajo el cual se resuelven. Con `"pluginRoot": "./plugins"`, `"source": "formatter"` se resuelve como `./plugins/formatter`. Requiere Claude Code v2.1.239 o posterior.
178 208
179`metadata.pluginRoot` tiene estos límites:209`metadata.pluginRoot` tiene estos límites:
180 210
181* Debe ser en sí una ruta relativa dentro del marketplace.211* Debe ser en sí mismo una ruta relativa dentro del marketplace.
182* No tiene efecto en una fuente que ya comienza con `./`.212* No tiene efecto sobre un origen que ya comienza con `./`.
183* Una fuente que contiene un `/`, como `team-a/formatter`, no es un nombre desnudo y aún necesita el prefijo `./`, incluso cuando `metadata.pluginRoot` está establecido.213* Un origen que contiene una `/`, como `team-a/formatter`, no es un nombre simple y sigue necesitando el prefijo `./`, incluso cuando `metadata.pluginRoot` está establecido.
184 214
185### Fuente de plugin github215### Origen de plugin github
186 216
187`repo` toma `owner/repo`. `ref` y `sha` son opcionales.217`repo` acepta `owner/repo`. `ref` y `sha` son opcionales.
188 218
189```json theme={null}219```json theme={null}
190{220{
198}228}
199```229```
200 230
201### Fuente de plugin url231### Origen de plugin url
202 232
203`url` es una URL git completa: `https://`, `http://`, `file://` o `git@`. Un sufijo `.git` no es obligatorio, por lo que las URL de Azure DevOps y AWS CodeCommit funcionan tal como están escritas. Este tipo no toma el atajo `owner/repo`.233`url` es una URL de git completa: `https://`, `http://`, `file://` o `git@`. No se requiere el sufijo `.git`, por lo que las URL de Azure DevOps y AWS CodeCommit funcionan tal como están escritas. Este tipo no acepta la forma abreviada `owner/repo`.
204 234
205```json theme={null}235```json theme={null}
206{236{
213}243}
214```244```
215 245
216### Fuente de plugin git-subdir246### Origen de plugin git-subdir
217 247
218`url` acepta una URL git completa o el atajo `owner/repo` de GitHub. `path` es el subdirectorio que contiene el plugin, y Claude Code hace checkout solo de ese subdirectorio. Sobre una URL `https` o SSH, Claude Code le pide al servidor un clon parcial, así que desde un host que admite clones parciales, un plugin en un monorepo grande se instala sin descargar el resto del repositorio.248`url` acepta una URL de git completa o la forma abreviada `owner/repo` de GitHub. `path` es el subdirectorio que contiene el plugin, y Claude Code hace checkout solo de ese subdirectorio. Con una URL `https` o SSH, Claude Code le pide al servidor una clonación parcial, así que desde un host que admite clonaciones parciales, un plugin en un monorepo grande se instala sin descargar el resto del repositorio.
219 249
220```json theme={null}250```json theme={null}
221{251{
228}258}
229```259```
230 260
231### Fuente de plugin npm261### Origen de plugin npm
232 262
233Una fuente `npm` toma estos campos:263Un origen `npm` acepta estos campos:
234 264
235* `package`: un nombre de paquete del registro como `@your-org/formatter`, un nombre con una versión añadida como `@your-org/formatter@2.0.0`, o un enlace `https` al archivo tarball del paquete265* `package`: un nombre de paquete del registro como `@your-org/formatter`, un nombre con una versión añadida como `@your-org/formatter@2.0.0`, o un enlace `https` al archivo tarball del paquete
236* `version`: una versión, un rango semver o un dist-tag, que se usa cuando `package` es un nombre de paquete sin versión añadida. Omítelo para obtener `latest`266* `version`: una versión, un rango semver o una dist-tag, que se usa cuando `package` es un nombre de paquete sin versión añadida. Omítelo para obtener `latest`
237* `registry`: una URL de registro para un paquete que no está en el registro predeterminado267* `registry`: una URL de registro para un paquete que no está en el registro predeterminado
238 268
239Claude Code obtiene el paquete con su cliente npm. Los scripts de instalación del paquete, como `preinstall` o `postinstall`, nunca se ejecutan, y sus dependencias no se instalan durante la obtención. Si el paquete tiene un archivo de bloqueo compatible junto a su `package.json`, Claude Code instala esas [dependencias de paquetes Node.js](https://code.claude.com/docs/es/plugins/loading.md#node-js-package-dependencies) en un paso separado, también con scripts deshabilitados.269Claude Code obtiene el paquete con tu cliente de npm. Los scripts de instalación del paquete, como `preinstall` o `postinstall`, nunca se ejecutan, y sus dependencias no se instalan durante la obtención. Si el paquete tiene un lockfile compatible junto a su `package.json`, Claude Code instala esas [dependencias de paquetes de Node.js](https://code.claude.com/docs/es/plugins/loading.md#node-js-package-dependencies) en un paso aparte, también con los scripts deshabilitados.
240 270
241Claude Code verifica el valor de `package` antes de obtener nada. Un valor rechazado hace fallar la instalación con un mensaje que nombra el valor y el motivo. Los valores rechazados incluyen:271Claude Code revisa el valor de `package` antes de obtener nada. Un valor rechazado hace fallar la instalación con un mensaje que nombra el valor y el motivo. Los valores rechazados incluyen:
242 272
243* **Una dirección git, una carpeta o ruta `file:`, o un alias `npm:`**: usa una [fuente `github`, `url` o `git-subdir`](#plugin-sources) para un repositorio git, una ruta relativa para una carpeta en el marketplace y el nombre propio del paquete para un alias273* **Una dirección de git, una carpeta o ruta `file:`, o un alias `npm:`**: usa un [origen `github`, `url` o `git-subdir`](#plugin-sources) para un repositorio git, una ruta relativa para una carpeta del marketplace y el propio nombre del paquete en lugar de un alias
244* **Un enlace a un tarball en github.com, gist.github.com, gitlab.com, bitbucket.org o git.sr.ht**: se rechaza incluso cuando el enlace es una descarga de release de GitHub, a menos que sea un enlace al registro npm de GitLab bajo `gitlab.com/api/v4/`274* **Un enlace a un tarball en github.com, gist.github.com, gitlab.com, bitbucket.org o git.sr.ht**: se rechaza incluso cuando el enlace es una descarga de una release de GitHub, a menos que sea un enlace al registro npm de GitLab bajo `gitlab.com/api/v4/`
245* **Un enlace a un tarball sobre `http`**: se rechaza a menos que apunte al registro npm predeterminado del propio usuario que instala275* **Un enlace a un tarball a través de `http`**: se rechaza a menos que apunte al registro npm predeterminado del propio usuario que instala
246 276
247La URL de `registry` debe usar `https` a menos que sea el registro npm predeterminado del propio usuario que instala. Con cualquier otro registro `http`, la instalación falla antes de que npm lo contacte.277La URL de `registry` debe usar `https` a menos que sea el registro npm predeterminado del propio usuario que instala. Con cualquier otro registro `http`, la instalación falla antes de que npm lo contacte.
248 278
258}288}
259```289```
260 290
261### Fuente de plugin archive291### Origen de plugin archive
262 292
263`url` debe usar `https://` y no puede apuntar a un host de loopback, link-local o cloud-metadata. Para los límites de tamaño, tiempo de espera, redirección y extracción en la descarga, consulte [Manténgase dentro de los límites de descarga para archivos alojados](https://code.claude.com/docs/es/plugins/host-marketplace.md#stay-within-the-download-limits-for-hosted-files).293`url` debe usar `https://` y no puede apuntar a un host de loopback, de enlace local (link-local) o de metadatos de la nube. Para conocer los límites de tamaño, tiempo de espera, redirecciones y extracción de la descarga, consulta [Mantenerse dentro de los límites de descarga para archivos alojados](https://code.claude.com/docs/es/plugins/host-marketplace.md#stay-within-the-download-limits-for-hosted-files).
264 294
265La raíz del plugin puede estar en la parte superior del zip o un directorio hacia abajo.295La raíz del plugin puede estar en el nivel superior del zip o un directorio más abajo.
266 296
267`sha256` es el resumen del archivo como 64 caracteres hexadecimales, mayúsculas o minúsculas. Cuando lo establece, Claude Code rechaza una descarga que no coincida.297`sha256` es el digest del archivo como 64 caracteres hexadecimales, en mayúsculas o minúsculas. Cuando lo estableces, Claude Code rechaza una descarga que no coincida.
268 298
269```json theme={null}299```json theme={null}
270{300{
277}307}
278```308```
279 309
280### Fuente de plugin command310### Origen de plugin command
281 311
282Use una fuente `command` cuando una herramienta instalada en la máquina del usuario produce el directorio del plugin, como un IDE que renderiza su plugin para la cadena de herramientas que el usuario ha seleccionado. Claude Code ejecuta el comando cuando el usuario instala o actualiza el plugin, y [nuevamente una vez por sesión](https://code.claude.com/docs/es/plugins/loading.md#when-a-command-source-re-runs), por lo que los usuarios obtienen la salida cambiada de la herramienta sin reinstalar.312Usa un origen `command` cuando una herramienta instalada en la máquina del usuario produce el directorio del plugin, como un IDE que genera su plugin para la cadena de herramientas que el usuario ha seleccionado. Claude Code ejecuta el comando cuando el usuario instala o actualiza el plugin, y [de nuevo una vez por sesión](https://code.claude.com/docs/es/plugins/loading.md#when-a-command-source-re-runs), para que los usuarios reciban la salida modificada de la herramienta sin reinstalar.
283 313
284Una fuente `command` toma estos campos:314Un origen `command` acepta estos campos:
285 315
286* `command`: un comando de shell que imprime la ruta absoluta del directorio del plugin como una línea y sale con 0. Claude Code muestra a los usuarios la cadena completa para revisión antes de ejecutarla. Escríbala como ASCII imprimible, como máximo 500 caracteres, sin una ejecución de cuatro o más espacios.316* `command`: un comando de shell que imprime la ruta absoluta del directorio del plugin como una sola línea y termina con código 0. Claude Code muestra a los usuarios la cadena completa para que la revisen antes de ejecutarla. Escríbelo en ASCII imprimible, con un máximo de 500 caracteres y sin secuencias de cuatro o más espacios.
287* `timeout`: un número entero de segundos de 1 a 600. Por defecto es 60.317* `timeout`: un número entero de segundos entre 1 y 600. El valor predeterminado es 60.
288* `mode`: `copy`, el predeterminado, o `link`. Consulte [Modo de copia y modo de enlace](#copy-mode-and-link-mode).318* `mode`: `copy`, el predeterminado, o `link`. Consulta [Modo copy y modo link](#copy-mode-and-link-mode).
289 319
290```json theme={null}320```json theme={null}
291{321{
298}328}
299```329```
300 330
301Para cómo los usuarios aceptan el comando, consulte [Instalar desde su shell](https://code.claude.com/docs/es/plugins/install.md#install-from-your-shell). Para lo que los usuarios ven después de que lo cambia, consulte [Cambiar el comando de una fuente de comando](https://code.claude.com/docs/es/plugins/host-marketplace.md#change-the-command-of-a-command-source). Los administradores desactivan las fuentes de comando con [`disableCommandPluginSources`](https://code.claude.com/docs/es/settings-reference#disablecommandpluginsources).331Para saber cómo los usuarios aceptan el comando, consulta [Instalar desde tu shell](https://code.claude.com/docs/es/plugins/install.md#install-from-your-shell). Para saber qué ven los usuarios después de que lo cambias, consulta [Cambiar el comando de un origen command](https://code.claude.com/docs/es/plugins/host-marketplace.md#change-the-command-of-a-command-source). Los administradores desactivan los orígenes command con [`disableCommandPluginSources`](https://code.claude.com/docs/es/settings-reference#disablecommandpluginsources).
302 332
303#### Qué debe hacer el comando333#### Qué debe hacer el comando
304 334
305Escriba el comando para cumplir con estos requisitos:335Escribe el comando de modo que cumpla estos requisitos:
306 336
307* **Shell y directorio de trabajo**: Claude Code ejecuta el comando a través de `sh`, o a través de `cmd.exe` en Windows, desde el directorio de inicio del usuario. Dé una ruta absoluta o un comando en `PATH`.337* **Shell y directorio de trabajo**: Claude Code ejecuta el comando mediante `sh`, o mediante `cmd.exe` en Windows, desde el directorio home del usuario. Indica una ruta absoluta o un comando que esté en `PATH`.
308* **Salida**: imprima exactamente una línea en stdout, la ruta absoluta del directorio del plugin, y salga con 0 dentro de `timeout` segundos.338* **Salida**: imprime exactamente una línea en stdout, la ruta absoluta del directorio del plugin, y termina con código 0 dentro de los `timeout` segundos.
309* **Contenido del directorio**: el directorio contiene el plugin completo en el momento en que el comando sale. La ruta puede diferir de una ejecución a la siguiente.339* **Contenido del directorio**: el directorio contiene el plugin completo en el momento en que el comando termina. La ruta puede ser distinta de una ejecución a otra.
310 340
311#### Salida que falla la instalación o actualización341#### Salida que hace fallar la instalación o actualización
312 342
313La instalación o actualización falla cuando el comando sale con un código distinto de cero, se ejecuta más tiempo que `timeout`, o imprime algo que no sea una ruta absoluta. También falla cuando el directorio impreso es uno de estos:343La instalación o actualización falla cuando el comando termina con un código distinto de cero, se ejecuta durante más de `timeout` o imprime cualquier cosa que no sea exactamente una única ruta absoluta. También falla cuando el directorio impreso es uno de estos:
314 344
315* **Sin contenido de plugin**: el directorio impreso no tiene contenido de plugin en su nivel superior, como un directorio `.claude-plugin/` o un directorio `skills/`, `commands/`, `agents/` o `hooks/`.345* **Sin contenido de plugin**: el directorio impreso no tiene contenido de plugin en su nivel superior, como un directorio `.claude-plugin/` o un directorio `skills/`, `commands/`, `agents/` o `hooks/`.
316* **El directorio de la propia sesión**: el directorio impreso es el en el que se inició Claude Code, o uno de sus padres.346* **El propio directorio de la sesión**: el directorio impreso es aquel en el que se inició Claude Code, o uno de sus directorios superiores.
317* **Una ruta de red**: en Windows, la ruta impresa es una ruta UNC.347* **Una ruta de red**: en Windows, la ruta impresa es una ruta UNC.
318* **Demasiado grande para copiar**: en modo de copia, el directorio es más grande que 256 MiB o tiene más de 20,000 entradas.348* **Demasiado grande para copiar**: en modo copy, el directorio ocupa más de 256 MiB o tiene más de 20,000 entradas.
319 349
320#### Modo de copia y modo de enlace350#### Modo copy y modo link
321 351
322`mode` decide si Claude Code copia el directorio impreso o lo usa en su lugar:352`mode` decide si Claude Code copia el directorio impreso o lo usa en su ubicación:
323 353
324* **`copy`**: Claude Code copia el directorio en el caché de plugins y deriva la [versión del plugin](https://code.claude.com/docs/es/plugins/loading.md#how-claude-code-computes-the-version) de un hash de los archivos copiados. Su herramienta puede eliminar o reescribir el directorio después de que el comando salga. Una re-ejecución que produce archivos idénticos cuenta como actualizado.354* **`copy`**: Claude Code copia el directorio en la caché de plugins y deriva la [versión del plugin](https://code.claude.com/docs/es/plugins/loading.md#how-claude-code-computes-the-version) a partir de un hash de los archivos copiados. Tu herramienta puede eliminar o reescribir el directorio después de que el comando termine. Una nueva ejecución que produce archivos idénticos se considera actualizada.
325* **`link`**: Claude Code llena la entrada de caché del plugin con un enlace a cada entrada de nivel superior del directorio impreso y carga los archivos en su lugar. Nada se copia, los contenidos de los archivos no se hashean, y los límites de tamaño no se aplican. Úselo para un directorio demasiado grande para copiar, como una exportación de SDK renderizada.355* **`link`**: Claude Code llena la entrada de caché del plugin con un enlace a cada entrada de nivel superior del directorio impreso y carga los archivos en su ubicación. No se copia nada, no se calcula el hash del contenido de los archivos y los límites de tamaño no se aplican. Úsalo para un directorio demasiado grande para copiar, como una exportación de un SDK generada.
326 356
327Un plugin en modo de enlace tiene estos requisitos:357Un plugin en modo link tiene estos requisitos:
328 358
329* **Mantenga el directorio en su lugar**: Claude Code carga el plugin a través de los enlaces en cada inicio, por lo que el directorio impreso debe permanecer donde está mientras el plugin permanezca instalado.359* **Mantén el directorio en su lugar**: Claude Code carga el plugin a través de los enlaces en cada inicio, por lo que el directorio impreso debe permanecer donde está mientras el plugin siga instalado.
330* **Imprima una ruta diferente para señalar contenido nuevo**: la versión proviene de la ruta real del directorio impreso y sus entradas de nivel superior, no de los archivos dentro de ellas.360* **Imprime una ruta diferente para indicar contenido nuevo**: la versión proviene de la ruta real del directorio impreso y de sus entradas de nivel superior, no de los archivos que contienen.
331* **Mantenga los enlaces simbólicos de nivel superior dentro del directorio**: la instalación falla si una entrada de nivel superior es un enlace simbólico que apunta fuera del directorio impreso.361* **Mantén los enlaces simbólicos de nivel superior dentro del directorio**: la instalación falla si una entrada de nivel superior es un enlace simbólico que apunta fuera del directorio impreso.
332* **Incluya `node_modules`**: Claude Code omite la [instalación de dependencias de paquetes Node.js](https://code.claude.com/docs/es/plugins/loading.md#node-js-package-dependencies) para un plugin en modo de enlace, por lo que imprima un directorio que ya contenga los paquetes que el plugin necesita.362* **Incluye `node_modules`**: Claude Code omite la [instalación de dependencias de paquetes de Node.js](https://code.claude.com/docs/es/plugins/loading.md#node-js-package-dependencies) para un plugin en modo link, así que imprime un directorio que ya contenga los paquetes que el plugin necesita.
333* **Sesiones iniciadas dentro del directorio**: una sesión iniciada en el directorio impreso o en cualquier lugar debajo de él no carga el plugin.363* **Sesiones iniciadas dentro del directorio**: una sesión iniciada en el directorio impreso o en cualquier lugar debajo de él no carga el plugin.
334* **No en Windows**: Claude Code rechaza instalar un plugin en modo de enlace en Windows. Declare `"mode": "copy"` allí.364* **No en Windows**: Claude Code se niega a instalar un plugin en modo link en Windows. Declara `"mode": "copy"` allí.
335 365
336## Fuentes de marketplace366## Fuentes de marketplace
337 367