zugzbot 1.0.6 → 1.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/.opencode/commands/web.md +17 -0
  2. package/.opencode/plugins/sdd-bridge.ts +83 -1
  3. package/.utils/docs_opencode/acp.md +165 -0
  4. package/.utils/docs_opencode/acp.pdf +0 -0
  5. package/.utils/docs_opencode/agents.md +803 -0
  6. package/.utils/docs_opencode/agents.pdf +0 -0
  7. package/.utils/docs_opencode/commands.md +354 -0
  8. package/.utils/docs_opencode/commands.pdf +0 -0
  9. package/.utils/docs_opencode/custom-tools.md +209 -0
  10. package/.utils/docs_opencode/custom-tools.pdf +0 -0
  11. package/.utils/docs_opencode/ecosystem.md +81 -0
  12. package/.utils/docs_opencode/ecosystem.pdf +0 -0
  13. package/.utils/docs_opencode/formatters.md +142 -0
  14. package/.utils/docs_opencode/formatters.pdf +0 -0
  15. package/.utils/docs_opencode/keybinds.md +205 -0
  16. package/.utils/docs_opencode/keybinds.pdf +0 -0
  17. package/.utils/docs_opencode/lsp.md +202 -0
  18. package/.utils/docs_opencode/lsp.pdf +0 -0
  19. package/.utils/docs_opencode/mcp-servers.md +565 -0
  20. package/.utils/docs_opencode/mcp-servers.pdf +0 -0
  21. package/.utils/docs_opencode/models.md +234 -0
  22. package/.utils/docs_opencode/models.pdf +0 -0
  23. package/.utils/docs_opencode/permissions.md +248 -0
  24. package/.utils/docs_opencode/permissions.pdf +0 -0
  25. package/.utils/docs_opencode/plugins.md +409 -0
  26. package/.utils/docs_opencode/plugins.pdf +0 -0
  27. package/.utils/docs_opencode/rules.md +189 -0
  28. package/.utils/docs_opencode/rules.pdf +0 -0
  29. package/.utils/docs_opencode/sdk.md +522 -0
  30. package/.utils/docs_opencode/sdk.pdf +0 -0
  31. package/.utils/docs_opencode/server.md +324 -0
  32. package/.utils/docs_opencode/server.pdf +0 -0
  33. package/.utils/docs_opencode/skills.md +235 -0
  34. package/.utils/docs_opencode/skills.pdf +0 -0
  35. package/.utils/docs_opencode/themes.md +378 -0
  36. package/.utils/docs_opencode/themes.pdf +0 -0
  37. package/.utils/docs_opencode/tools.md +364 -0
  38. package/.utils/docs_opencode/tools.pdf +0 -0
  39. package/.utils/export_opencode_session.py +242 -0
  40. package/.utils/toggle_model.py +441 -0
  41. package/.utils/zugzweb/client/README.md +73 -0
  42. package/.utils/zugzweb/client/eslint.config.js +22 -0
  43. package/.utils/zugzweb/client/index.html +13 -0
  44. package/.utils/zugzweb/client/package-lock.json +3707 -0
  45. package/.utils/zugzweb/client/package.json +36 -0
  46. package/.utils/zugzweb/client/public/favicon.svg +1 -0
  47. package/.utils/zugzweb/client/public/icons.svg +24 -0
  48. package/.utils/zugzweb/client/src/App.tsx +1357 -0
  49. package/.utils/zugzweb/client/src/assets/hero.png +0 -0
  50. package/.utils/zugzweb/client/src/assets/react.svg +1 -0
  51. package/.utils/zugzweb/client/src/assets/vite.svg +1 -0
  52. package/.utils/zugzweb/client/src/index.css +185 -0
  53. package/.utils/zugzweb/client/src/main.tsx +10 -0
  54. package/.utils/zugzweb/client/tsconfig.app.json +25 -0
  55. package/.utils/zugzweb/client/tsconfig.json +7 -0
  56. package/.utils/zugzweb/client/tsconfig.node.json +24 -0
  57. package/.utils/zugzweb/client/vite.config.ts +11 -0
  58. package/.utils/zugzweb/daemon.js +297 -0
  59. package/README.md +40 -1
  60. package/bin/init.js +25 -6
  61. package/models.json +8 -0
  62. package/opencode.json +5 -7
  63. package/package.json +3 -1
@@ -0,0 +1,324 @@
1
+ # Servidor
2
+
3
+ Interactuar con el servidor opencode a través de HTTP.
4
+
5
+ El comando `opencode serve` ejecuta un servidor HTTP sin cabeza que expone un punto final OpenAPI que un cliente opencode puede usar.
6
+
7
+ ---
8
+
9
+ ### [Uso](#uso)
10
+
11
+ **File**: Ventana de terminal
12
+
13
+ ```bash
14
+ opencode serve [--port ] [--hostname ] [--cors ]
15
+ ```
16
+
17
+ #### [Opciones](#opciones)
18
+ ````````````````````
19
+
20
+ | Bandera Descripción Predeterminado |
21
+ | --- |
22
+ | --port Puerto para escuchar 4096 |
23
+ | --hostname Nombre de host para escuchar 127.0.0.1 |
24
+ | --mdns Habilitar el descubrimiento de mDNS false |
25
+ | --mdns-domain Nombre de dominio personalizado para el servicio mDNS opencode.local |
26
+ | --cors Orígenes de navegador adicionales para permitir [] |
27
+
28
+
29
+ `--cors` se puede pasar varias veces:
30
+
31
+ **File**: Ventana de terminal
32
+
33
+ ```bash
34
+ opencode serve --cors http://localhost:5173 --cors https://app.example.com
35
+ ```
36
+
37
+ ---
38
+
39
+ ### [Autenticación](#autenticación)
40
+
41
+ Configure `OPENCODE_SERVER_PASSWORD` para proteger el servidor con autenticación básica HTTP. El nombre de usuario predeterminado es `opencode`, o configure `OPENCODE_SERVER_USERNAME` para anularlo. Esto se aplica tanto a `opencode serve` como a `opencode web`.
42
+
43
+ **File**: Ventana de terminal
44
+
45
+ ```bash
46
+ OPENCODE_SERVER_PASSWORD=your-password opencode serve
47
+ ```
48
+
49
+ ---
50
+
51
+ ### [Cómo funciona](#cómo-funciona)
52
+
53
+ Cuando ejecuta `opencode`, inicia un TUI y un servidor. Donde el TUI es el Cliente que habla con el servidor. El servidor expone una especificación OpenAPI 3.1 punto final. Este punto final también se utiliza para generar un [SDK](https://opencode.ai/docs/sdk).
54
+
55
+ > [!TIP]
56
+ > Utilice el servidor opencode para interactuar con opencode mediante programación.
57
+
58
+ Esta arquitectura permite que opencode admita múltiples clientes y le permite interactuar con opencode mediante programación.
59
+
60
+ Puede ejecutar `opencode serve` para iniciar un servidor independiente. Si tienes el opencode TUI ejecutándose, `opencode serve` iniciará un nuevo servidor.
61
+
62
+ ---
63
+
64
+ #### [Conectarse a un servidor existente](#conectarse-a-un-servidor-existente)
65
+
66
+ Cuando inicia el TUI, asigna aleatoriamente un puerto y un nombre de host. En su lugar, puede pasar `--hostname` y `--port` [banderas](https://opencode.ai/docs/cli). Luego use esto para conectarse a su servidor.
67
+
68
+ El punto final ``[/tui](#tui) se puede utilizar para conducir el TUI a través del servidor. Por ejemplo, puede completar previamente o ejecutar un mensaje. Esta configuración es utilizada por los complementos OpenCode [IDE](https://opencode.ai/docs/ide).
69
+
70
+ ---
71
+
72
+ ## [Especificaciones](#especificaciones)
73
+
74
+ El servidor publica una especificación OpenAPI 3.1 que se puede ver en:
75
+
76
+ **File**:
77
+
78
+ ```plaintext
79
+ http://:/doc
80
+ ```
81
+
82
+ Por ejemplo, `http://localhost:4096/doc`. Utilice la especificación para generar clientes o inspeccionar tipos de solicitudes y respuestas. O verlo en un explorador Swagger.
83
+
84
+ ---
85
+
86
+ ## [API](#api)
87
+
88
+ El servidor opencode expone las siguientes API.
89
+
90
+ ---
91
+
92
+ ### [Global](#global)
93
+ ``````````
94
+
95
+ | Método Ruta Descripción Respuesta |
96
+ | --- |
97
+ | GET /global/health Obtener el estado y la versión del servidor { healthy: true, version: string } |
98
+ | GET /global/event Obtenga eventos globales (transmisión SSE) Flujo de eventos |
99
+
100
+
101
+ ---
102
+
103
+ ### [Proyecto](#proyecto)
104
+ ``````[Project[]](https://github.com/anomalyco/opencode/blob/dev/packages/sdk/js/src/gen/types.gen.ts)``````[Project](https://github.com/anomalyco/opencode/blob/dev/packages/sdk/js/src/gen/types.gen.ts)
105
+
106
+ | Método Ruta Descripción Respuesta |
107
+ | --- |
108
+ | GET /project Listar todos los proyectos |
109
+ | GET /project/current Obtener el proyecto actual |
110
+
111
+
112
+ ---
113
+
114
+ ### [Ruta y VCS](#ruta-y-vcs)
115
+ ``````[Path](https://github.com/anomalyco/opencode/blob/dev/packages/sdk/js/src/gen/types.gen.ts)``````[VcsInfo](https://github.com/anomalyco/opencode/blob/dev/packages/sdk/js/src/gen/types.gen.ts)
116
+
117
+ | Método Ruta Descripción Respuesta |
118
+ | --- |
119
+ | GET /path Obtener la ruta actual |
120
+ | GET /vcs Obtenga información de VCS para el proyecto actual |
121
+
122
+
123
+ ---
124
+
125
+ ### [Instancia](#instancia)
126
+ ``````
127
+
128
+ | Método Ruta Descripción Respuesta |
129
+ | --- |
130
+ | POST /instance/dispose Eliminar la instancia actual boolean |
131
+
132
+
133
+ ---
134
+
135
+ ### [Configuración](#configuración)
136
+ ``````[Config](https://github.com/anomalyco/opencode/blob/dev/packages/sdk/js/src/gen/types.gen.ts)``````[Config](https://github.com/anomalyco/opencode/blob/dev/packages/sdk/js/src/gen/types.gen.ts)``````[Proveedor[]](https://github.com/anomalyco/opencode/blob/dev/packages/sdk/js/src/gen/types.gen.ts)``
137
+
138
+ | Método Ruta Descripción Respuesta |
139
+ | --- |
140
+ | GET /config Obtener información de configuración |
141
+ | PATCH /config Actualizar configuración |
142
+ | GET /config/providers Lista de proveedores y modelos predeterminados { providers: , default: { [key: string]: string } } |
143
+
144
+
145
+ ---
146
+
147
+ ### [Proveedor](#proveedor)
148
+ ``````[Proveedor[]](https://github.com/anomalyco/opencode/blob/dev/packages/sdk/js/src/gen/types.gen.ts)````````[ProviderAuthMethod[]](https://github.com/anomalyco/opencode/blob/dev/packages/sdk/js/src/gen/types.gen.ts)````````[ProviderAuthAuthorization](https://github.com/anomalyco/opencode/blob/dev/packages/sdk/js/src/gen/types.gen.ts)``````
149
+
150
+ | Método Ruta Descripción Respuesta |
151
+ | --- |
152
+ | GET /provider Listar todos los proveedores { all: , default: {...}, connected: string[] } |
153
+ | GET /provider/auth Obtener métodos de autenticación de proveedores { [providerID: string]: } |
154
+ | POST /provider/{id}/oauth/authorize Autorizar a un proveedor usando OAuth |
155
+ | POST /provider/{id}/oauth/callback Manejar la devolución de llamada OAuth para un proveedor boolean |
156
+
157
+
158
+ ---
159
+
160
+ ### [Sesiones](#sesiones)
161
+ ``````[Session[]](https://github.com/anomalyco/opencode/blob/dev/packages/sdk/js/src/gen/types.gen.ts)````````[Session](https://github.com/anomalyco/opencode/blob/dev/packages/sdk/js/src/gen/types.gen.ts)``````[SessionStatus](https://github.com/anomalyco/opencode/blob/dev/packages/sdk/js/src/gen/types.gen.ts)````````[Session](https://github.com/anomalyco/opencode/blob/dev/packages/sdk/js/src/gen/types.gen.ts)``````````````[Session](https://github.com/anomalyco/opencode/blob/dev/packages/sdk/js/src/gen/types.gen.ts)``````[Session[]](https://github.com/anomalyco/opencode/blob/dev/packages/sdk/js/src/gen/types.gen.ts)``````[Todo[]](https://github.com/anomalyco/opencode/blob/dev/packages/sdk/js/src/gen/types.gen.ts)``````````````````[Session](https://github.com/anomalyco/opencode/blob/dev/packages/sdk/js/src/gen/types.gen.ts)````````````[Session](https://github.com/anomalyco/opencode/blob/dev/packages/sdk/js/src/gen/types.gen.ts)``````[Session](https://github.com/anomalyco/opencode/blob/dev/packages/sdk/js/src/gen/types.gen.ts)````````[FileDiff[]](https://github.com/anomalyco/opencode/blob/dev/packages/sdk/js/src/gen/types.gen.ts)``````````````````````````````
162
+
163
+ | Método Ruta Descripción Notas |
164
+ | --- |
165
+ | GET /session Listar todas las sesiones Devuelve |
166
+ | POST /session Crear una nueva sesión cuerpo: { parentID?, title? } , devuelve |
167
+ | GET /session/status Obtener el estado de la sesión para todas las sesiones Devuelve { [sessionID: string]: } |
168
+ | GET /session/:id Obtener detalles de la sesión Devuelve |
169
+ | DELETE /session/:id Eliminar una sesión y todos sus datos Devuelve boolean |
170
+ | PATCH /session/:id Actualizar propiedades de sesión cuerpo: { title? } , devuelve |
171
+ | GET /session/:id/children Obtener las sesiones secundarias de una sesión Devuelve |
172
+ | GET /session/:id/todo Obtener la lista de tareas pendientes para una sesión Devuelve |
173
+ | POST /session/:id/init Analizar aplicación y crear AGENTS.md cuerpo: { messageID, providerID, modelID } , devuelve boolean |
174
+ | POST /session/:id/fork Bifurca una sesión existente en un mensaje cuerpo: { messageID? } , devuelve |
175
+ | POST /session/:id/abort Cancelar una sesión en ejecución Devuelve boolean |
176
+ | POST /session/:id/share Compartir una sesión Devuelve |
177
+ | DELETE /session/:id/share Dejar de compartir una sesión Devuelve |
178
+ | GET /session/:id/diff Obtenga la diferencia para esta sesión consulta: messageID? , devuelve |
179
+ | POST /session/:id/summarize Resumir la sesión cuerpo: { providerID, modelID } , devuelve boolean |
180
+ | POST /session/:id/revert Revertir un mensaje cuerpo: { messageID, partID? } , devuelve boolean |
181
+ | POST /session/:id/unrevert Restaurar todos los mensajes revertidos Devuelve boolean |
182
+ | POST /session/:id/permissions/:permissionID Responder a una solicitud de permiso cuerpo: { response, remember? } , devuelve boolean |
183
+
184
+
185
+ ---
186
+
187
+ ### [Mensajes](#mensajes)
188
+ ````````[Mensaje](https://github.com/anomalyco/opencode/blob/dev/packages/sdk/js/src/gen/types.gen.ts)``[Parte[]](https://github.com/anomalyco/opencode/blob/dev/packages/sdk/js/src/gen/types.gen.ts)``````````[Mensaje](https://github.com/anomalyco/opencode/blob/dev/packages/sdk/js/src/gen/types.gen.ts)``[Parte[]](https://github.com/anomalyco/opencode/blob/dev/packages/sdk/js/src/gen/types.gen.ts)````````[Mensaje](https://github.com/anomalyco/opencode/blob/dev/packages/sdk/js/src/gen/types.gen.ts)``[Parte[]](https://github.com/anomalyco/opencode/blob/dev/packages/sdk/js/src/gen/types.gen.ts)``````````````````[Mensaje](https://github.com/anomalyco/opencode/blob/dev/packages/sdk/js/src/gen/types.gen.ts)``[Parte[]](https://github.com/anomalyco/opencode/blob/dev/packages/sdk/js/src/gen/types.gen.ts)``````````[Mensaje](https://github.com/anomalyco/opencode/blob/dev/packages/sdk/js/src/gen/types.gen.ts)``[Parte[]](https://github.com/anomalyco/opencode/blob/dev/packages/sdk/js/src/gen/types.gen.ts)``
189
+
190
+ | Método Ruta Descripción Notas |
191
+ | --- |
192
+ | GET /session/:id/message Listar mensajes en una sesión consulta: limit? , devuelve { info: , parts: }[] |
193
+ | POST /session/:id/message Envía un mensaje y espera respuesta cuerpo: { messageID?, model?, agent?, noReply?, system?, tools?, parts } , devuelve { info: , parts: } |
194
+ | GET /session/:id/message/:messageID Obtener detalles del mensaje Devuelve { info: , parts: } |
195
+ | POST /session/:id/prompt_async Enviar un mensaje de forma asincrónica (sin espera) cuerpo: igual que /session/:id/message , devuelve 204 No Content |
196
+ | POST /session/:id/command Ejecutar un comando de barra diagonal cuerpo: { messageID?, agent?, model?, command, arguments } , devuelve { info: , parts: } |
197
+ | POST /session/:id/shell Ejecute un comando de shell cuerpo: { agent, model?, command } , devuelve { info: , parts: } |
198
+
199
+
200
+ ---
201
+
202
+ ### [Comandos](#comandos)
203
+ ``````[Command[]](https://github.com/anomalyco/opencode/blob/dev/packages/sdk/js/src/gen/types.gen.ts)
204
+
205
+ | Método Ruta Descripción Respuesta |
206
+ | --- |
207
+ | GET /command Listar todos los comandos |
208
+
209
+
210
+ ---
211
+
212
+ ### [Archivos](#archivos)
213
+ ``````````````````````````[Symbol[]](https://github.com/anomalyco/opencode/blob/dev/packages/sdk/js/src/gen/types.gen.ts)``````[FileNode[]](https://github.com/anomalyco/opencode/blob/dev/packages/sdk/js/src/gen/types.gen.ts)``````[FileContent](https://github.com/anomalyco/opencode/blob/dev/packages/sdk/js/src/gen/types.gen.ts)``````[File[]](https://github.com/anomalyco/opencode/blob/dev/packages/sdk/js/src/gen/types.gen.ts)
214
+
215
+ | Método Ruta Descripción Respuesta |
216
+ | --- |
217
+ | GET /find?pattern= Buscar texto en archivos Matriz de objetos coincidentes con path , lines , line_number , absolute_offset , submatches |
218
+ | GET /find/file?query= Buscar archivos y directorios por nombre string[] (caminos) |
219
+ | GET /find/symbol?query= Buscar símbolos del espacio de trabajo |
220
+ | GET /file?path= Listar archivos y directorios |
221
+ | GET /file/content?path= Leer un archivo |
222
+ | GET /file/status Obtener el estado de los archivos rastreados |
223
+
224
+
225
+ #### [Parámetros de consulta de /find/file](#parámetros-de-consulta-de-findfile)
226
+
227
+ - `query` (obligatorio) — cadena de búsqueda (coincidencia aproximada)
228
+ - `type` (opcional): limita los resultados a `"file"` o `"directory"`
229
+ - `directory` (opcional): anula la raíz del proyecto para la búsqueda.
230
+ - `limit` (opcional) — resultados máximos (1–200)
231
+ - `dirs` (opcional): indicador heredado (`"false"` devuelve solo archivos)
232
+
233
+ ---
234
+
235
+ ### [Herramientas (experimentales)](#herramientas-experimentales)
236
+ ``````[ToolIDs](https://github.com/anomalyco/opencode/blob/dev/packages/sdk/js/src/gen/types.gen.ts)``````[ToolList](https://github.com/anomalyco/opencode/blob/dev/packages/sdk/js/src/gen/types.gen.ts)
237
+
238
+ | Método Ruta Descripción Respuesta |
239
+ | --- |
240
+ | GET /experimental/tool/ids Listar todos los ID de herramientas |
241
+ | GET /experimental/tool?provider=&model= Listar herramientas con esquemas JSON para un modelo |
242
+
243
+
244
+ ---
245
+
246
+ ### [LSP, formateadores y MCP](#lsp-formateadores-y-mcp)
247
+ ``````[LSPStatus[]](https://github.com/anomalyco/opencode/blob/dev/packages/sdk/js/src/gen/types.gen.ts)``````[FormatterStatus[]](https://github.com/anomalyco/opencode/blob/dev/packages/sdk/js/src/gen/types.gen.ts)``````[MCPStatus](https://github.com/anomalyco/opencode/blob/dev/packages/sdk/js/src/gen/types.gen.ts)````````
248
+
249
+ | Método Ruta Descripción Respuesta |
250
+ | --- |
251
+ | GET /lsp Obtener el estado del servidor LSP |
252
+ | GET /formatter Obtener estado del formateador |
253
+ | GET /mcp Obtener el estado del servidor MCP { [name: string]: } |
254
+ | POST /mcp Agregue el servidor MCP dinámicamente cuerpo: { name, config } , devuelve MCP objeto de estado |
255
+
256
+
257
+ ---
258
+
259
+ ### [Agentes](#agentes)
260
+ ``````[Agent[]](https://github.com/anomalyco/opencode/blob/dev/packages/sdk/js/src/gen/types.gen.ts)
261
+
262
+ | Método Ruta Descripción Respuesta |
263
+ | --- |
264
+ | GET /agent Listar todos los agentes disponibles |
265
+
266
+
267
+ ---
268
+
269
+ ### [Registro](#registro)
270
+ ````````
271
+
272
+ | Método Ruta Descripción Respuesta |
273
+ | --- |
274
+ | POST /log Escribir entrada de registro. Cuerpo: { service, level, message, extra? } boolean |
275
+
276
+
277
+ ---
278
+
279
+ ### [TUI](#tui)
280
+ ``````````````````````````````````````````````````````````````````````
281
+
282
+ | Método Ruta Descripción Respuesta |
283
+ | --- |
284
+ | POST /tui/append-prompt Agregar texto al mensaje boolean |
285
+ | POST /tui/open-help Abra el cuadro de diálogo de ayuda boolean |
286
+ | POST /tui/open-sessions Abrir el selector de sesiones boolean |
287
+ | POST /tui/open-themes Abra el selector de temas boolean |
288
+ | POST /tui/open-models Abrir el selector de modelo boolean |
289
+ | POST /tui/submit-prompt Enviar el mensaje actual boolean |
290
+ | POST /tui/clear-prompt Borrar el mensaje boolean |
291
+ | POST /tui/execute-command Ejecutar un comando ( { command } ) boolean |
292
+ | POST /tui/show-toast Mostrar brindis ( { title?, message, variant } ) boolean |
293
+ | GET /tui/control/next Espere la próxima solicitud de control Objeto de solicitud de control |
294
+ | POST /tui/control/response Responder a una solicitud de control ( { body } ) boolean |
295
+
296
+
297
+ ---
298
+
299
+ ### [Autenticación](#autenticación-1)
300
+ ``````
301
+
302
+ | Método Ruta Descripción Respuesta |
303
+ | --- |
304
+ | PUT /auth/:id Establecer credenciales de autenticación. El cuerpo debe coincidir con el esquema del proveedor boolean |
305
+
306
+
307
+ ---
308
+
309
+ ### [Eventos](#eventos)
310
+ ``````
311
+
312
+ | Método Ruta Descripción Respuesta |
313
+ | --- |
314
+ | GET /event Transmisión de eventos enviados por el servidor. El primer evento es server.connected , luego eventos de bus Transmisión de eventos enviados por el servidor |
315
+
316
+
317
+ ---
318
+
319
+ ### [Documentación](#documentación)
320
+ ````
321
+
322
+ | Método Ruta Descripción Respuesta |
323
+ | --- |
324
+ | GET /doc Especificación OpenAPI 3.1 Página HTML con especificación OpenAPI |
Binary file
@@ -0,0 +1,235 @@
1
+ # Habilidades del agente
2
+
3
+ Defina el comportamiento reutilizable mediante definiciones de SKILL.md
4
+
5
+ Las habilidades del agente permiten a OpenCode descubrir instrucciones reutilizables de su repositorio o directorio de inicio. Las habilidades se cargan bajo demanda a través de la herramienta nativa `skill`: los agentes ven las habilidades disponibles y pueden cargar el contenido completo cuando sea necesario.
6
+
7
+ ---
8
+
9
+ ## [Colocar archivos](#colocar-archivos)
10
+
11
+ Cree una carpeta por nombre de habilidad y coloque un `SKILL.md` dentro de ella. OpenCode busca estas ubicaciones:
12
+
13
+ - Configuración del proyecto: `.opencode/skills//SKILL.md`
14
+ - Configuración global: `~/.config/opencode/skills//SKILL.md`
15
+ - Compatible con Proyecto Claude: `.claude/skills//SKILL.md`
16
+ - Compatible con Claude global: `~/.claude/skills//SKILL.md`
17
+ - Compatible con agente de proyecto: `.agents/skills//SKILL.md`
18
+ - Compatible con agentes globales: `~/.agents/skills//SKILL.md`
19
+
20
+ ---
21
+
22
+ ## [Entender el descubrimiento](#entender-el-descubrimiento)
23
+
24
+ Para las rutas locales del proyecto, OpenCode sube desde su directorio de trabajo actual hasta llegar al árbol de trabajo de git. Carga cualquier `skills/*/SKILL.md` coincidente en `.opencode/` y cualquier `.claude/skills/*/SKILL.md` o `.agents/skills/*/SKILL.md` coincidente a lo largo del camino.
25
+
26
+ Las definiciones globales también se cargan desde `~/.config/opencode/skills/*/SKILL.md`, `~/.claude/skills/*/SKILL.md` y `~/.agents/skills/*/SKILL.md`.
27
+
28
+ ---
29
+
30
+ ## [Escribir la introducción](#escribir-la-introducción)
31
+
32
+ Cada `SKILL.md` debe comenzar con el frontmatter de YAML. Sólo se reconocen estos campos:
33
+
34
+ - `name` (obligatorio)
35
+ - `description` (obligatorio)
36
+ - `license` (opcional)
37
+ - `compatibility` (opcional)
38
+ - `metadata` (opcional, mapa de cadena a cadena)
39
+
40
+ Los campos desconocidos se ignoran.
41
+
42
+ ---
43
+
44
+ ## [Validar nombres](#validar-nombres)
45
+
46
+ `name` debe:
47
+
48
+ - Tener entre 1 y 64 caracteres.
49
+ - Ser alfanuméricos en minúsculas con separadores de guión simple
50
+ - No comienza ni termina con `-`
51
+ - No contener `--` consecutivos
52
+ - Coincide con el nombre del directorio que contiene `SKILL.md`
53
+
54
+ expresión regular equivalente:
55
+
56
+ **File**:
57
+
58
+ ```text
59
+ ^[a-z0-9]+(-[a-z0-9]+)*$
60
+ ```
61
+
62
+ ---
63
+
64
+ ## [Seguir las reglas de longitud](#seguir-las-reglas-de-longitud)
65
+
66
+ `description` debe tener entre 1 y 1024 caracteres. Manténgalo lo suficientemente específico para que el agente elija correctamente.
67
+
68
+ ---
69
+
70
+ ## [Usar un ejemplo](#usar-un-ejemplo)
71
+
72
+ Crea `.opencode/skills/git-release/SKILL.md` así:
73
+
74
+ **File**:
75
+
76
+ ```markdown
77
+ ---
78
+ name: git-release
79
+ description: Create consistent releases and changelogs
80
+ license: MIT
81
+ compatibility: opencode
82
+ metadata:
83
+ audience: maintainers
84
+ workflow: github
85
+ ---
86
+
87
+ ## What I do
88
+
89
+ - Draft release notes from merged PRs
90
+ - Propose a version bump
91
+ - Provide a copy-pasteable `gh release create` command
92
+
93
+ ## When to use me
94
+
95
+ Use this when you are preparing a tagged release.
96
+ Ask clarifying questions if the target versioning scheme is unclear.
97
+ ```
98
+
99
+ ---
100
+
101
+ ## [Reconocer la descripción de la herramienta](#reconocer-la-descripción-de-la-herramienta)
102
+
103
+ OpenCode enumera las habilidades disponibles en la descripción de la herramienta `skill`. Cada entrada incluye el nombre y la descripción de la habilidad:
104
+
105
+ **File**:
106
+
107
+ ```xml
108
+
109
+
110
+ git-release
111
+ Create consistent releases and changelogs
112
+
113
+
114
+ ```
115
+
116
+ El agente carga una habilidad llamando a la herramienta:
117
+
118
+ **File**:
119
+
120
+ ```plaintext
121
+ skill({ name: "git-release" })
122
+ ```
123
+
124
+ ---
125
+
126
+ ## [Configurar permisos](#configurar-permisos)
127
+
128
+ Controle a qué agentes de habilidades pueden acceder utilizando permisos basados ​​en patrones en `opencode.json`:
129
+
130
+ **File**:
131
+
132
+ ```json
133
+ {
134
+ "permission": {
135
+ "skill": {
136
+ "*": "allow",
137
+ "pr-review": "allow",
138
+ "internal-*": "deny",
139
+ "experimental-*": "ask"
140
+ }
141
+ }
142
+ }
143
+ ```
144
+ ``````
145
+
146
+ | Permiso Comportamiento |
147
+ | --- |
148
+ | allow La habilidad se carga inmediatamente |
149
+ | deny Habilidad oculta al agente, acceso rechazado |
150
+ | ask Se solicita al usuario aprobación antes de cargar |
151
+
152
+
153
+ Los patrones admiten comodines: `internal-*` coincide con `internal-docs`, `internal-tools`, etc.
154
+
155
+ ---
156
+
157
+ ## [Anulación por agente](#anulación-por-agente)
158
+
159
+ Otorgue a agentes específicos permisos diferentes a los predeterminados globales.
160
+
161
+ **Para agentes personalizados** (en el frente del agente):
162
+
163
+ **File**:
164
+
165
+ ```yaml
166
+ ---
167
+ permission:
168
+ skill:
169
+ "documents-*": "allow"
170
+ ---
171
+ ```
172
+
173
+ **Para agentes integrados** (en `opencode.json`):
174
+
175
+ **File**:
176
+
177
+ ```json
178
+ {
179
+ "agent": {
180
+ "plan": {
181
+ "permission": {
182
+ "skill": {
183
+ "internal-*": "allow"
184
+ }
185
+ }
186
+ }
187
+ }
188
+ }
189
+ ```
190
+
191
+ ---
192
+
193
+ ## [Deshabilitar la herramienta de habilidades](#deshabilitar-la-herramienta-de-habilidades)
194
+
195
+ Deshabilite completamente las habilidades para los agentes que no deberían usarlas:
196
+
197
+ **Para agentes personalizados**:
198
+
199
+ **File**:
200
+
201
+ ```yaml
202
+ ---
203
+ tools:
204
+ skill: false
205
+ ---
206
+ ```
207
+
208
+ **Para agentes integrados**:
209
+
210
+ **File**:
211
+
212
+ ```json
213
+ {
214
+ "agent": {
215
+ "plan": {
216
+ "tools": {
217
+ "skill": false
218
+ }
219
+ }
220
+ }
221
+ }
222
+ ```
223
+
224
+ Cuando está deshabilitada, la sección `` se omite por completo.
225
+
226
+ ---
227
+
228
+ ## [Solucionar problemas de carga](#solucionar-problemas-de-carga)
229
+
230
+ Si una habilidad no aparece:
231
+
232
+ 1. Verifique que `SKILL.md` esté escrito en mayúsculas.
233
+ 1. Verifique que el frontmatter incluya `name` y `description`
234
+ 1. Asegúrese de que los nombres de las habilidades sean únicos en todas las ubicaciones
235
+ 1. Verifique los permisos: las habilidades con `deny` están ocultas para los agentes
Binary file