skillctl 0.0.6 → 0.0.7

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.
package/README.md CHANGED
@@ -1,236 +1,118 @@
1
- # Skillctl: Agent Skill Manager
1
+ # SkillCtl: The Agent Skill Manager
2
2
 
3
- Gestor de Skills para Agentes de IA (Cursor, Antigravity, VSCode Copilot)
3
+ **SkillCtl** is the professional standard for managing AI Agent Skills. It allows you to discover, install, and synchronize robust agent behaviors across multiple AI editors (Cursor, Windsurf, Antigravity, VS Code, and more).
4
4
 
5
- ## 🚀 Inicio Rápido para Usuarios
5
+ > **Concept**: Think of it as `npm` or `cargo`, but for your AI's brain. Instead of packages, you install **skills**—specialized prompts and instructions that give your agent new capabilities.
6
6
 
7
- ### Instalación y Uso
7
+ ---
8
8
 
9
- No necesitas instalar nada globalmente. Simplemente usa `npx`:
9
+ ## 🚀 Key Features
10
10
 
11
- ```bash
12
- # 1. Inicializar un nuevo proyecto
13
- npx skillctl init
11
+ - **🛡️ Secure by Design**: Integrity checks (SHA-256) ensure the skills you install are exactly what you expect. No silent changes.
12
+ - **🌐 Universal Compatibility**: One tool to rule them all. Works with:
13
+ - Cursor (`.cursorrules`)
14
+ - Windsurf (`.windsurfrules`)
15
+ - Antigravity (`.agent/`)
16
+ - VS Code, GitHub Copilot, Cline, Roo, OpenHands, and more.
17
+ - **⚡ Supercharged Workflow**:
18
+ - `search`: Find skills from the community registry instantly.
19
+ - `add`: Install skills directly from GitHub URLs.
20
+ - `list`: Keep track of your installed capabilities.
21
+ - **✨ Zero Config**: Smart defaults that just work.
14
22
 
15
- # 2. Añadir una skill
16
- npx skillctl add https://github.com/wshobson/agents --skill typescript
23
+ ---
17
24
 
18
- # 3. Listar skills instaladas
19
- npx skillctl list
25
+ ## 📦 Installation
20
26
 
21
- # 4. Actualizar todas las skills
22
- npx skillctl update
23
-
24
- # 5. Sincronizar con editores
25
- npx skillctl sync --editors cursor,antigravity
26
- ```
27
+ You don't need to install anything globally. Run it directly with `npx` (Node.js) or `cargo` (Rust).
27
28
 
28
- ## 🔧 Desarrollo: Ciclo de Vida del Proyecto
29
+ ### Using Node.js (Recommended)
29
30
 
30
- ### Estructura del Proyecto
31
-
32
- ```
33
- agent-skill/
34
- ├── src/ # Código Rust
35
- │ └── main.rs
36
- ├── bin/ # Wrapper Node.js
37
- │ └── run.js
38
- ├── scripts/ # Scripts de instalación
39
- │ └── install.js
40
- ├── Cargo.toml # Configuración Rust
41
- └── package.json # Configuración NPM
31
+ ```bash
32
+ npx skillctl init
42
33
  ```
43
34
 
44
- ### Paso 1: Compilar el Binario Rust
35
+ ### Using Rust
45
36
 
46
37
  ```bash
47
- # Instalar Rust si no lo tienes
48
- curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
49
-
50
- # Compilar en modo release
51
- cargo build --release
52
-
53
- # El binario estará en: target/release/skillctl
38
+ cargo install skillctl
39
+ skillctl init
54
40
  ```
55
41
 
56
- ### Paso 2: Crear el Release en GitHub (Primera vez)
57
-
58
- 1. **Asegúrate de que `Cargo.toml` tenga la versión `0.0.1`**
59
- 2. **Compila el binario** (paso anterior)
60
- 3. **Sube tus cambios a GitHub:**
61
-
62
- ```bash
63
- git add .
64
- git commit -m "Initial release v0.0.1"
65
- git push origin main
66
- ```
42
+ ---
67
43
 
68
- 4. **Crea el Release en GitHub:**
69
- - Ve a tu repositorio en GitHub
70
- - Click en "Releases" → "Draft a new release"
71
- - Tag: `v0.0.1`
72
- - Title: `v0.0.1 - Initial Release`
73
- - **Sube los binarios compilados:**
74
- - `target/release/skillctl` → Renombrar a `skillctl-linux`
75
- - Para Windows: `target/release/skillctl.exe` → Renombrar a `skillctl-win.exe`
76
- - Para macOS: compilar en Mac y renombrar a `skillctl-macos`
77
- - Publica la Release
44
+ ## 📖 Usage Guide
78
45
 
79
- ### Paso 3: Probar la Descarga Localmente
46
+ ### 1. Initialize your Project
80
47
 
81
- Antes de publicar en NPM, prueba que el script de descarga funciona:
48
+ Sets up the necessary configuration files and detects your AI editor automatically.
82
49
 
83
50
  ```bash
84
- # Ejecutar el script de instalación manualmente
85
- node scripts/install.js
86
-
87
- # Verificar que se descargó el binario
88
- ls -la bin/
89
-
90
- # Probar el comando
91
- node bin/run.js init
92
- node bin/run.js list
51
+ npx skillctl init
93
52
  ```
94
53
 
95
- ### Paso 4: Publicar en NPM
54
+ ### 2. Discover Capabilities
96
55
 
97
- ```bash
98
- # Login en NPM (primera vez)
99
- npm login
56
+ Search the decentralized registry for new skills.
100
57
 
101
- # Publicar el paquete
102
- npm publish
103
- ```
104
-
105
- ### Paso 5: Automatización con GitHub Actions
106
-
107
- El archivo `.github/workflows/release.yml` automatiza la compilación y publicación:
108
-
109
- ```yaml
110
- name: Release
111
-
112
- on:
113
- push:
114
- tags:
115
- - "v*"
116
-
117
- jobs:
118
- build:
119
- strategy:
120
- matrix:
121
- os: [ubuntu-latest, windows-latest, macos-latest]
122
- runs-on: ${{ matrix.os }}
123
-
124
- steps:
125
- - uses: actions/checkout@v3
126
-
127
- - name: Install Rust
128
- uses: actions-rs/toolchain@v1
129
- with:
130
- toolchain: stable
131
-
132
- - name: Build
133
- run: cargo build --release
134
-
135
- - name: Upload Release Asset
136
- uses: actions/upload-release-asset@v1
137
- env:
138
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
139
- with:
140
- upload_url: ${{ github.event.release.upload_url }}
141
- asset_path: ./target/release/skill-cli${{ matrix.os == 'windows-latest' && '.exe' || '' }}
142
- asset_name: skill-cli-${{ matrix.os == 'ubuntu-latest' && 'linux' || matrix.os == 'windows-latest' && 'win.exe' || 'macos' }}
143
- asset_content_type: application/octet-stream
58
+ ```bash
59
+ npx skillctl search
144
60
  ```
145
61
 
146
- ## 🔄 Flujo de Actualización de Versiones
147
-
148
- 1. **Actualiza la versión en ambos archivos:**
149
- - `Cargo.toml`: `version = "0.0.2"`
150
- - `package.json`: `"version": "0.0.2"`
151
- - `scripts/install.js`: `const VERSION = "v0.0.2"`
62
+ > _Select a skill from the list to install it immediately._
152
63
 
153
- 2. **Compila y crea el tag:**
64
+ ### 3. Add a Skill Manually
154
65
 
155
- ```bash
156
- cargo build --release
157
- git add .
158
- git commit -m "Bump version to 0.0.2"
159
- git tag v0.0.2
160
- git push origin main --tags
161
- ```
66
+ Install a skill directly from a Git repository or URL.
162
67
 
163
- 3. **Crea el Release en GitHub** (o usa GitHub Actions)
164
-
165
- 4. **Publica en NPM:**
166
- ```bash
167
- npm publish
168
- ```
169
-
170
- ## 📦 Comandos Disponibles
68
+ ```bash
69
+ npx skillctl add <url> --skill <name>
70
+ ```
171
71
 
172
- | Comando | Descripción |
173
- | ---------------------------- | ----------------------------------------------------- |
174
- | `init` | Inicializa un nuevo proyecto (crea `skills.toml`) |
175
- | `add <url> --skill <nombre>` | Añade una nueva skill |
176
- | `list` | Lista todas las skills instaladas |
177
- | `update` | Actualiza todas las skills desde sus URLs |
178
- | `sync --editors <lista>` | Sincroniza con editores (cursor, antigravity, vscode) |
72
+ ### 4. Verify Installation
179
73
 
180
- ## 🛠️ Desarrollo Local
74
+ See what skills are currently active in your environment.
181
75
 
182
76
  ```bash
183
- # Compilar en modo desarrollo
184
- cargo build
185
-
186
- # Ejecutar directamente
187
- cargo run -- init
188
- cargo run -- list
189
-
190
- # Probar el wrapper NPM
191
- node bin/run.js init
77
+ npx skillctl list
192
78
  ```
193
79
 
194
- ## 📝 Notas Importantes
195
-
196
- - **El binario debe estar en GitHub Releases** antes de que el script de NPM pueda descargarlo
197
- - **La versión en `scripts/install.js`** debe coincidir con el tag de GitHub
198
- - **Los nombres de los binarios** deben seguir el formato: `skill-cli-{platform}.exe`
199
- - Linux: `skill-cli-linux`
200
- - Windows: `skill-cli-win.exe`
201
- - macOS: `skill-cli-macos`
80
+ ### 5. Restore & Sync
202
81
 
203
- ## 🤝 Contribuir
82
+ Downloading a project? Restore all skills defined in `skills.json` with a single command.
204
83
 
205
- **IMPORTANTE:** Este es un proyecto de código propietario. Las contribuciones están sujetas a términos especiales:
84
+ ```bash
85
+ npx skillctl install
86
+ ```
206
87
 
207
- 1. Todas las contribuciones se considerarán cedidas al titular de los derechos de autor
208
- 2. Al contribuir, aceptas que tu código se licenciará bajo la misma licencia propietaria
209
- 3. No se permite el uso de contribuciones en proyectos competidores
210
- 4. Contacta con el titular de los derechos antes de realizar contribuciones significativas
88
+ ---
211
89
 
212
- Para contribuir:
90
+ ## 🔧 Architecture
213
91
 
214
- 1. Contacta primero para discutir los cambios propuestos
215
- 2. Fork el proyecto (solo para desarrollo autorizado)
216
- 3. Crea una rama para tu feature (`git checkout -b feature/AmazingFeature`)
217
- 4. Commit tus cambios (`git commit -m 'Add some AmazingFeature'`)
218
- 5. Push a la rama (`git push origin feature/AmazingFeature`)
219
- 6. Abre un Pull Request (sujeto a revisión y aceptación de términos)
92
+ SkillCtl creates a `.agent/skills` (or editor-specific) directory and injects a reference into your editor's rule file.
220
93
 
221
- ## 📄 Licencia
94
+ **Directory Structure:**
222
95
 
223
- **LICENCIA PROPIETARIA - Todos los derechos reservados**
96
+ ```
97
+ my-project/
98
+ ├── .agent/
99
+ │ ├── skills/
100
+ │ │ └── find-files/
101
+ │ │ └── SKILL.md <-- The Brain
102
+ │ └── rules/
103
+ │ └── rules.md <-- The Context Linker
104
+ ├── skills.json <-- Lockfile (Registry & Integrity)
105
+ └── src/
106
+ ```
224
107
 
225
- Este software está protegido por derechos de autor y se distribuye bajo una licencia propietaria restrictiva.
108
+ ---
226
109
 
227
- **Restricciones principales:**
110
+ ## 🤝 Contributing
228
111
 
229
- - No se permite uso comercial sin licencia
230
- - No se permite modificación o redistribución
231
- - ❌ No se permite ingeniería inversa
232
- - ✅ Uso personal y no comercial permitido
112
+ We welcome contributions to the **Registry**!
113
+ To add your skill, submit a PR to `registry.json` with your skill's details.
233
114
 
234
- Para uso comercial o permisos especiales, consulta el archivo `LICENSE` o contacta al titular de los derechos.
115
+ ## 📄 License
235
116
 
236
- Ver el archivo [LICENSE](LICENSE) para los términos completos.
117
+ Proprietary Software. See [LICENSE](LICENSE) for details.
118
+ Built with ❤️ for the AI Engineering Community.
package/package.json CHANGED
@@ -1,10 +1,16 @@
1
1
  {
2
2
  "name": "skillctl",
3
- "version": "0.0.6",
3
+ "version": "0.0.7",
4
4
  "description": "Gestor de Skills para Agentes de IA",
5
5
  "bin": {
6
6
  "skillctl": "bin/run.js"
7
7
  },
8
+ "files": [
9
+ "bin",
10
+ "scripts",
11
+ "README.md",
12
+ "LICENSE"
13
+ ],
8
14
  "scripts": {
9
15
  "postinstall": "node scripts/install.js"
10
16
  },
@@ -5,7 +5,7 @@ const os = require('os');
5
5
 
6
6
  // Configuración
7
7
  const REPO = "joeldevz/agent-skill";
8
- const VERSION = "v0.0.6"; // ¡CAMBIA ESTO PARA QUE COINCIDA CON TU TAG DE GITHUB!
8
+ const VERSION = "v0.0.7"; // ¡CAMBIA ESTO PARA QUE COINCIDA CON TU TAG DE GITHUB!
9
9
  const BIN_NAME = "skillctl";
10
10
 
11
11
  // Detectar plataforma
@@ -1,42 +0,0 @@
1
- name: Release
2
-
3
- on:
4
- push:
5
- tags:
6
- - 'v*' # Se activa cuando subes un tag como v0.0.1
7
- permissions:
8
- contents: write
9
- jobs:
10
- build:
11
- name: Build for ${{ matrix.os }}
12
- runs-on: ${{ matrix.os }}
13
- strategy:
14
- matrix:
15
- include:
16
- - os: ubuntu-latest
17
- artifact_name: skillctl
18
- asset_name: skillctl-linux
19
- - os: macos-latest
20
- artifact_name: skillctl
21
- asset_name: skillctl-macos
22
- - os: windows-latest
23
- artifact_name: skillctl.exe
24
- asset_name: skillctl-win.exe
25
-
26
- steps:
27
- - uses: actions/checkout@v3
28
-
29
- - name: Install Rust
30
- uses: dtolnay/rust-toolchain@stable
31
-
32
- - name: Build
33
- run: cargo build --release --verbose
34
-
35
- - name: Upload binaries to Release
36
- uses: svenstaro/upload-release-action@v2
37
- with:
38
- repo_token: ${{ secrets.GITHUB_TOKEN }}
39
- file: target/release/${{ matrix.artifact_name }}
40
- asset_name: ${{ matrix.asset_name }}
41
- tag: ${{ github.ref }}
42
- overwrite: true
package/BOOTSTRAP.md DELETED
@@ -1,308 +0,0 @@
1
- # Guía de Bootstrap: Primera Publicación
2
-
3
- Esta guía te ayudará a publicar la primera versión del proyecto y resolver el problema del "huevo y la gallina".
4
-
5
- ## 🎯 Objetivo
6
-
7
- Publicar la versión `v0.0.1` del proyecto para que los usuarios puedan ejecutar:
8
-
9
- ```bash
10
- npx skillctl init
11
- ```
12
-
13
- ## 📋 Pre-requisitos
14
-
15
- - [x] Cuenta de GitHub
16
- - [x] Cuenta de NPM (crear en https://www.npmjs.com/signup)
17
- - [x] Rust instalado (`curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh`)
18
- - [x] Node.js instalado
19
- - [x] Git configurado
20
-
21
- ## 🚀 Pasos para la Primera Publicación
22
-
23
- ### Paso 1: Compilar el Binario Rust
24
-
25
- ```bash
26
- # Asegúrate de estar en la raíz del proyecto
27
- cd /home/clasing/proyects/umibu/agent-skill
28
-
29
- # Compilar en modo release
30
- cargo build --release
31
-
32
- # Verificar que el binario se creó correctamente
33
- ls -lh target/release/skill-cli
34
- ```
35
-
36
- **Resultado esperado:**
37
-
38
- ```
39
- -rwxr-xr-x 1 user user 3.2M Feb 8 22:30 target/release/skillctl
40
- ```
41
-
42
- ### Paso 2: Probar el Binario Localmente
43
-
44
- ```bash
45
- # Ejecutar el binario directamente
46
- ./target/release/skillctl --help
47
-
48
- # Probar el comando init
49
- ./target/release/skillctl init
50
-
51
- # Verificar que se creó skills.toml
52
- cat skills.toml
53
- ```
54
-
55
- ### Paso 3: Preparar el Repositorio
56
-
57
- ```bash
58
- # Asegúrate de que todos los cambios están commiteados
59
- git status
60
-
61
- # Si hay cambios pendientes:
62
- git add .
63
- git commit -m "Prepare for v0.0.1 release"
64
-
65
- # Subir a GitHub
66
- git push origin main
67
- ```
68
-
69
- ### Paso 4: Crear el Release en GitHub (CRÍTICO)
70
-
71
- Este es el paso más importante. **Sin este paso, el script de NPM no podrá descargar el binario.**
72
-
73
- #### Opción A: Manual (Recomendado para la primera vez)
74
-
75
- 1. Ve a tu repositorio: https://github.com/joeldevz/agent-skill
76
- 2. Click en "Releases" (en la barra lateral derecha)
77
- 3. Click en "Draft a new release"
78
- 4. Completa el formulario:
79
- - **Tag version:** `v0.0.1`
80
- - **Release title:** `v0.0.1 - Initial Release`
81
- - **Description:**
82
-
83
- ````markdown
84
- ## 🎉 Primera versión de Skill CLI Tool
85
-
86
- Gestor de Skills para Agentes de IA.
87
-
88
- ### Características
89
-
90
- - ✅ Comando `init` para inicializar proyectos
91
- - ✅ Comando `list` para listar skills
92
- - ✅ Soporte para Cursor, Antigravity y VSCode
93
-
94
- ### Instalación
95
-
96
- ```bash
97
- npx skillctl init
98
- ```
99
- ````
100
-
101
- ```
102
-
103
- ```
104
-
105
- 5. **IMPORTANTE: Subir los binarios**
106
- - Click en "Attach binaries by dropping them here or selecting them"
107
- - Sube el archivo: `target/release/skillctl`
108
- - **RENOMBRA el archivo a:** `skillctl-linux` (sin extensión)
109
-
110
- > **Nota:** Para Windows y macOS, necesitarás compilar en esas plataformas o usar GitHub Actions (ver Opción B)
111
-
112
- 6. Click en "Publish release"
113
-
114
- #### Opción B: Automático con GitHub Actions
115
-
116
- ```bash
117
- # Crear y subir el tag
118
- git tag v0.0.1
119
- git push origin v0.0.1
120
- ```
121
-
122
- Esto activará el workflow `.github/workflows/release.yml` que:
123
-
124
- 1. Compilará el binario en Linux, Windows y macOS
125
- 2. Subirá automáticamente los binarios al release
126
-
127
- **Espera a que termine el workflow** (ve a la pestaña "Actions" en GitHub)
128
-
129
- ### Paso 5: Verificar que el Release está Correcto
130
-
131
- 1. Ve a: https://github.com/joeldevz/agent-skill/releases/tag/v0.0.1
132
- 2. Verifica que aparezcan los binarios:
133
- - `skill-cli-linux`
134
- - `skill-cli-win.exe` (si usaste GitHub Actions)
135
- - `skill-cli-macos` (si usaste GitHub Actions)
136
-
137
- 3. **Prueba la URL de descarga:**
138
-
139
- ```bash
140
- # Debería descargar el binario (no dar error 404)
141
- curl -L https://github.com/joeldevz/agent-skill/releases/download/v0.0.1/skillctl-linux -o test-binary
142
-
143
- # Verificar que se descargó
144
- ls -lh test-binary
145
-
146
- # Limpiar
147
- rm test-binary
148
- ```
149
-
150
- ### Paso 6: Probar el Script de Instalación NPM
151
-
152
- ```bash
153
- # Probar el script de descarga
154
- node scripts/install.js
155
- ```
156
-
157
- **Resultado esperado:**
158
-
159
- ```
160
- ⬇️ Descargando skillctl desde: https://github.com/joeldevz/agent-skill/releases/download/v0.0.1/skillctl-linux
161
- ✅ Instalación completada.
162
- ```
163
-
164
- **Verificar:**
165
-
166
- ```bash
167
- ls -lh bin/skillctl
168
- # Debería mostrar el binario descargado
169
- ```
170
-
171
- ### Paso 7: Probar el Wrapper Completo
172
-
173
- ```bash
174
- # Probar el wrapper de Node.js
175
- node bin/run.js --help
176
- node bin/run.js init
177
- node bin/run.js list
178
- ```
179
-
180
- ### Paso 8: Publicar en NPM
181
-
182
- ```bash
183
- # Login en NPM (primera vez)
184
- npm login
185
- # Introduce tu usuario, contraseña y email
186
-
187
- # Verificar que estás logueado
188
- npm whoami
189
-
190
- # Publicar el paquete
191
- npm publish
192
- ```
193
-
194
- **Resultado esperado:**
195
-
196
- ```
197
- + skillctl@0.0.1
198
- ```
199
-
200
- ### Paso 9: Probar la Instalación desde NPM
201
-
202
- ```bash
203
- # Crear una carpeta de prueba
204
- mkdir /tmp/test-skill-cli
205
- cd /tmp/test-skill-cli
206
-
207
- # Probar con npx (sin instalar)
208
- npx skillctl init
209
-
210
- # Verificar que funcionó
211
- ls -la
212
- # Debería mostrar skills.toml y .cursor/
213
- ```
214
-
215
- ## ✅ Checklist de Verificación
216
-
217
- - [ ] Binario compilado correctamente
218
- - [ ] Release v0.0.1 creado en GitHub
219
- - [ ] Binarios subidos al release (al menos Linux)
220
- - [ ] URL de descarga funciona (no da 404)
221
- - [ ] Script `install.js` descarga correctamente
222
- - [ ] Wrapper `run.js` ejecuta el binario
223
- - [ ] Publicado en NPM
224
- - [ ] `npx skill-cli-tool init` funciona
225
-
226
- ## 🐛 Troubleshooting
227
-
228
- ### Error: "404 Not Found" al descargar
229
-
230
- **Causa:** El release no existe o los binarios no están subidos.
231
-
232
- **Solución:**
233
-
234
- 1. Verifica que el release existe: https://github.com/joeldevz/agent-skill/releases
235
- 2. Verifica que el tag es exactamente `v0.0.1`
236
- 3. Verifica que el binario se llama exactamente `skillctl-linux`
237
-
238
- ### Error: "Permission denied" al ejecutar el binario
239
-
240
- **Causa:** El binario no tiene permisos de ejecución.
241
-
242
- **Solución:**
243
-
244
- ```bash
245
- chmod +x bin/skillctl
246
- ```
247
-
248
- ### Error: "Package name already exists" en NPM
249
-
250
- **Causa:** El nombre `skill-cli-tool` ya está tomado.
251
-
252
- **Solución:**
253
-
254
- 1. Cambia el nombre en `package.json`:
255
- ```json
256
- "name": "@tu-usuario/skillctl"
257
- ```
258
- 2. Publica de nuevo:
259
- ```bash
260
- npm publish --access public
261
- ```
262
-
263
- ### Error: "GITHUB_TOKEN" en GitHub Actions
264
-
265
- **Causa:** El token no tiene permisos suficientes.
266
-
267
- **Solución:**
268
-
269
- 1. Ve a Settings → Actions → General
270
- 2. En "Workflow permissions", selecciona "Read and write permissions"
271
- 3. Guarda y vuelve a ejecutar el workflow
272
-
273
- ## 🎉 ¡Éxito!
274
-
275
- Si llegaste aquí, tu proyecto está publicado y funcionando. Los usuarios ahora pueden ejecutar:
276
-
277
- ```bash
278
- npx skillctl init
279
- ```
280
-
281
- ## 📚 Próximos Pasos
282
-
283
- 1. **Implementar el comando `add`** para añadir skills
284
- 2. **Añadir tests** para asegurar calidad
285
- 3. **Mejorar la documentación** con más ejemplos
286
- 4. **Crear un video tutorial** de uso
287
- 5. **Compartir en redes sociales** y comunidades
288
-
289
- ## 🔄 Para Futuras Versiones
290
-
291
- Cuando quieras publicar `v0.0.2`:
292
-
293
- 1. Actualiza las versiones:
294
- - `Cargo.toml`: `version = "0.0.2"`
295
- - `package.json`: `"version": "0.0.2"`
296
- - `scripts/install.js`: `const VERSION = "v0.0.2"`
297
-
298
- 2. Compila y publica:
299
- ```bash
300
- cargo build --release
301
- git add .
302
- git commit -m "Bump version to 0.0.2"
303
- git tag v0.0.2
304
- git push origin main --tags
305
- npm publish
306
- ```
307
-
308
- El workflow de GitHub Actions se encargará del resto automáticamente.
package/Cargo.toml DELETED
@@ -1,26 +0,0 @@
1
- [package]
2
- name = "skillctl"
3
- version = "0.0.6"
4
- edition = "2021"
5
- authors = ["Your Name <your.email@example.com>"]
6
- description = "Gestor de Skills para Agentes de IA"
7
- license-file = "LICENSE"
8
-
9
- [[bin]]
10
- name = "skillctl"
11
- path = "src/main.rs"
12
-
13
- [dependencies]
14
- clap = { version = "4.4", features = ["derive"] }
15
- colored = "2.0"
16
- anyhow = "1.0"
17
- reqwest = { version = "0.11", features = ["blocking", "json"] }
18
- serde = { version = "1.0", features = ["derive"] }
19
- serde_json = "1.0"
20
- dialoguer = "0.11"
21
-
22
- [profile.release]
23
- opt-level = "z" # Optimizar para tamaño
24
- lto = true # Link Time Optimization
25
- codegen-units = 1 # Mejor optimización
26
- strip = true # Eliminar símbolos de debug
package/EXAMPLES.md DELETED
@@ -1,236 +0,0 @@
1
- # Ejemplo de Uso: Skillctl
2
-
3
- ## Escenario: Configurar un Proyecto Nuevo
4
-
5
- ### 1. Inicializar el Proyecto
6
-
7
- ```bash
8
- # Crear una nueva carpeta para tu proyecto
9
- mkdir mi-proyecto-ia
10
- cd mi-proyecto-ia
11
-
12
- # Inicializar el gestor de skills
13
- npx skill-cli-tool init
14
- ```
15
-
16
- **Resultado:**
17
-
18
- ```
19
- ✅ Proyecto inicializado. Se ha creado 'skills.toml'.
20
- 🚀 Prueba ahora: npx skillctl add <url> --skill <nombre>
21
- ```
22
-
23
- **Archivos creados:**
24
-
25
- - `skills.toml` - Manifiesto de skills
26
- - `.cursor/skills/` - Carpeta para skills descargadas
27
-
28
- ### 2. Añadir Skills
29
-
30
- ```bash
31
- # Añadir skill de TypeScript
32
- npx skillctl add https://github.com/wshobson/agents --skill typescript
33
-
34
- # Añadir skill de Python
35
- npx skillctl add https://github.com/wshobson/agents --skill python
36
-
37
- # Añadir skill personalizada
38
- npx skillctl add https://github.com/tu-usuario/tu-repo --skill custom-skill
39
- ```
40
-
41
- ### 3. Ver Skills Instaladas
42
-
43
- ```bash
44
- npx agent-skill list
45
- ```
46
-
47
- **Resultado:**
48
-
49
- ```
50
- 📦 Skills instaladas (2):
51
- • typescript (https://github.com/wshobson/agents)
52
- └─ Branch: main | Path: .cursor/skills/typescript/SKILL.md
53
- • python (https://github.com/wshobson/agents)
54
- └─ Branch: main | Path: .cursor/skills/python/SKILL.md
55
- ```
56
-
57
- ### 4. Sincronizar con Editores
58
-
59
- ```bash
60
- # Sincronizar con Cursor
61
- npx agent-skill sync --editors cursor
62
-
63
- # Sincronizar con múltiples editores
64
- npx agent-skill sync --editors cursor,antigravity,vscode
65
- ```
66
-
67
- **Archivos generados:**
68
-
69
- - `.cursorrules` - Configuración para Cursor
70
- - `.antigravity` - Configuración para Antigravity
71
- - `.github/copilot-instructions.md` - Instrucciones para GitHub Copilot
72
-
73
- ### 5. Actualizar Skills
74
-
75
- ```bash
76
- # Actualizar todas las skills a sus últimas versiones
77
- npx agent-skill update
78
- ```
79
-
80
- **Resultado:**
81
-
82
- ```
83
- 🔄 Buscando actualizaciones para 2 skills...
84
- ⬇️ Actualizando typescript...
85
- ⬇️ Actualizando python...
86
- ✅ Todas las skills están al día.
87
- ✅ .cursorrules actualizado.
88
- ✅ .antigravity actualizado.
89
- ```
90
-
91
- ## Estructura del Proyecto Resultante
92
-
93
- ```
94
- mi-proyecto-ia/
95
- ├── .cursor/
96
- │ └── skills/
97
- │ ├── typescript/
98
- │ │ └── SKILL.md
99
- │ └── python/
100
- │ └── SKILL.md
101
- ├── .github/
102
- │ └── copilot-instructions.md
103
- ├── .cursorrules
104
- ├── .antigravity
105
- └── skills.toml
106
- ```
107
-
108
- ## Contenido de `skills.toml`
109
-
110
- ```toml
111
- # Manifiesto de Skills
112
- version = "1.0"
113
-
114
- [skills.typescript]
115
- url = "https://github.com/wshobson/agents"
116
- branch = "main"
117
- local_path = ".cursor/skills/typescript/SKILL.md"
118
- last_updated = "2026-02-08T22:30:00Z"
119
-
120
- [skills.python]
121
- url = "https://github.com/wshobson/agents"
122
- branch = "main"
123
- local_path = ".cursor/skills/python/SKILL.md"
124
- last_updated = "2026-02-08T22:30:00Z"
125
- ```
126
-
127
- ## Integración con Cursor
128
-
129
- Una vez sincronizado, Cursor automáticamente:
130
-
131
- 1. Lee el archivo `.cursorrules`
132
- 2. Carga las skills referenciadas
133
- 3. Usa las instrucciones de las skills en sus respuestas
134
-
135
- **Ejemplo de `.cursorrules` generado:**
136
-
137
- ```markdown
138
- # Rules generadas por Skillctl
139
-
140
- ## Skill: typescript
141
-
142
- Reference: .cursor/skills/typescript/SKILL.md
143
-
144
- ## Skill: python
145
-
146
- Reference: .cursor/skills/python/SKILL.md
147
- ```
148
-
149
- ## Flujo de Trabajo Diario
150
-
151
- ```bash
152
- # Mañana: Actualizar skills
153
- npx skillctl update
154
-
155
- # Durante el día: Añadir nueva skill si es necesario
156
- npx skillctl add <url> --skill <nombre>
157
-
158
- # Verificar configuración
159
- npx skillctl list
160
- ```
161
-
162
- ## Compartir Configuración con el Equipo
163
-
164
- 1. **Commitear `skills.toml`** al repositorio:
165
-
166
- ```bash
167
- git add skills.toml
168
- git commit -m "Add skill configuration"
169
- git push
170
- ```
171
-
172
- 2. **Otros miembros del equipo** solo necesitan:
173
- ```bash
174
- git pull
175
- npx agent-skill update # Descarga todas las skills del manifiesto
176
- ```
177
-
178
- ## Troubleshooting
179
-
180
- ### Problema: "El binario no se encuentra"
181
-
182
- ```bash
183
- # Solución: Reinstalar el paquete
184
- npm install --force skill-cli-tool
185
- ```
186
-
187
- ### Problema: "No se encontró skills.toml"
188
-
189
- ```bash
190
- # Solución: Inicializar el proyecto
191
- npx skill-cli-tool init
192
- ```
193
-
194
- ### Problema: Skills desactualizadas
195
-
196
- ```bash
197
- # Solución: Forzar actualización
198
- npx skill-cli-tool update
199
- ```
200
-
201
- ## Casos de Uso Avanzados
202
-
203
- ### Usar diferentes branches
204
-
205
- ```bash
206
- # Editar skills.toml manualmente
207
- [skills.typescript-beta]
208
- url = "https://github.com/wshobson/agents"
209
- branch = "beta" # <-- Cambiar branch
210
- local_path = ".cursor/skills/typescript-beta/SKILL.md"
211
- last_updated = "2026-02-08T22:30:00Z"
212
-
213
- # Actualizar
214
- npx skill-cli-tool update
215
- ```
216
-
217
- ### Crear skills personalizadas
218
-
219
- 1. Crear un repositorio con la estructura:
220
-
221
- ```
222
- mi-skill/
223
- └── SKILL.md
224
- ```
225
-
226
- 2. Añadir la skill:
227
- ```bash
228
- npx skill-cli-tool add https://github.com/mi-usuario/mi-skill --skill mi-skill
229
- ```
230
-
231
- ## Próximos Pasos
232
-
233
- - Explorar skills disponibles en GitHub
234
- - Crear tus propias skills personalizadas
235
- - Compartir configuración con tu equipo
236
- - Automatizar actualizaciones en CI/CD
package/src/main.rs DELETED
@@ -1,227 +0,0 @@
1
- use clap::{Parser, Subcommand};
2
- use colored::*;
3
- use anyhow::{Context, Result};
4
- use std::fs;
5
- use std::path::Path;
6
- use serde::{Deserialize, Serialize};
7
- use dialoguer::{Select, theme::ColorfulTheme};
8
- use std::collections::HashMap;
9
-
10
- // --- MODELO DE DATOS (JSON) ---
11
- #[derive(Serialize, Deserialize, Debug)]
12
- struct SkillConfig {
13
- editor: String, // "cursor", "antigravity", "vscode"
14
- skills: HashMap<String, SkillEntry>,
15
- }
16
-
17
- #[derive(Serialize, Deserialize, Debug)]
18
- struct SkillEntry {
19
- url: String,
20
- local_path: String,
21
- }
22
-
23
- impl Default for SkillConfig {
24
- fn default() -> Self {
25
- Self {
26
- editor: "cursor".to_string(),
27
- skills: HashMap::new(),
28
- }
29
- }
30
- }
31
-
32
- // --- CLI ARGUMENTS ---
33
- #[derive(Parser)]
34
- #[command(name = "skillctl")]
35
- #[command(version = "1.0.0")]
36
- #[command(about = "Gestor de Skills tipo Vercel", long_about = None)]
37
- struct Cli {
38
- #[command(subcommand)]
39
- command: Commands,
40
- }
41
-
42
- #[derive(Subcommand)]
43
- enum Commands {
44
- /// Inicializa el proyecto y elige editor
45
- Init,
46
- /// Añade una skill. Uso: skillctl add <URL> --skill <NOMBRE>
47
- Add {
48
- url: String,
49
- /// Nombre de la skill a extraer
50
- #[arg(long)] // Esto hace que sea --skill <nombre>
51
- skill: String,
52
- },
53
- /// Instala todas las skills definidas en skills.json
54
- Install,
55
- }
56
-
57
- fn main() -> Result<()> {
58
- let cli = Cli::parse();
59
-
60
- match &cli.command {
61
- Commands::Init => init_project()?,
62
- Commands::Add { url, skill } => add_skill(url, skill)?,
63
- Commands::Install => install_all()?,
64
- }
65
- Ok(())
66
- }
67
-
68
- // --- COMANDO: INIT (Interactivo) ---
69
- fn init_project() -> Result<()> {
70
- let config_path = Path::new("skills.json");
71
- if config_path.exists() {
72
- println!("⚠️ Ya existe 'skills.json'.");
73
- return Ok(());
74
- }
75
-
76
- println!("{}", "🚀 Inicializando Skill Controller...".bold().cyan());
77
-
78
- // Menú interactivo
79
- let editors = vec!["Cursor (.cursor/skills)", "Antigravity (.antigravity)", "VSCode (.vscode)"];
80
- let selection = Select::with_theme(&ColorfulTheme::default())
81
- .with_prompt("¿Qué editor vas a usar?")
82
- .default(0)
83
- .items(&editors)
84
- .interact()
85
- .unwrap();
86
-
87
- let editor_key = match selection {
88
- 0 => "cursor",
89
- 1 => "antigravity",
90
- _ => "vscode",
91
- };
92
-
93
- let config = SkillConfig {
94
- editor: editor_key.to_string(),
95
- skills: HashMap::new(),
96
- };
97
-
98
- save_config(&config)?;
99
-
100
- // Crear carpeta base según editor
101
- let base_dir = get_skills_dir(editor_key);
102
- fs::create_dir_all(&base_dir)?;
103
-
104
- println!("✅ Configuración guardada en 'skills.json'. Editor: {}", editor_key.green());
105
- Ok(())
106
- }
107
-
108
- // --- COMANDO: ADD ---
109
- fn add_skill(repo_url: &str, skill_name: &str) -> Result<()> {
110
- // 1. Cargar config para saber dónde guardar
111
- let mut config = load_config()?;
112
- let skills_dir = get_skills_dir(&config.editor);
113
-
114
- println!("{} {}...", "📦 Añadiendo skill:".blue(), skill_name);
115
-
116
- // 2. Lógica de descarga (GitHub Raw)
117
- let raw_base = repo_url
118
- .replace("github.com", "raw.githubusercontent.com")
119
- .trim_end_matches('/')
120
- .to_string();
121
-
122
- // URL: .../main/skills/{nombre}/SKILL.md (Ajustar según estructura real del repo)
123
- let target_url = format!("{}/main/skills/{}/SKILL.md", raw_base, skill_name);
124
-
125
- // 3. Descargar
126
- let content = download_file(&target_url)?;
127
-
128
- // 4. Guardar archivo
129
- let skill_folder = skills_dir.join(skill_name);
130
- fs::create_dir_all(&skill_folder)?;
131
- let file_path = skill_folder.join("SKILL.md");
132
- fs::write(&file_path, &content)?;
133
-
134
- println!("✅ Skill guardada en: {:?}", file_path);
135
-
136
- // 5. Actualizar JSON
137
- config.skills.insert(skill_name.to_string(), SkillEntry {
138
- url: repo_url.to_string(),
139
- local_path: file_path.to_string_lossy().to_string(),
140
- });
141
- save_config(&config)?;
142
-
143
- // 6. Actualizar configuración del editor (Integración)
144
- update_editor_config(&config.editor, skill_name, &file_path)?;
145
-
146
- Ok(())
147
- }
148
-
149
- // --- COMANDO: INSTALL ---
150
- fn install_all() -> Result<()> {
151
- let config = load_config().context("No se encontró skills.json. Ejecuta 'init' primero.")?;
152
-
153
- println!("🔄 Restaurando {} skills para {}...", config.skills.len(), config.editor);
154
-
155
- for (name, entry) in &config.skills {
156
- // Re-usamos la lógica de add pero sin duplicar entradas en el json
157
- // (Aquí simplificado: solo descargamos el archivo de nuevo)
158
-
159
- let raw_base = entry.url
160
- .replace("github.com", "raw.githubusercontent.com")
161
- .trim_end_matches('/')
162
- .to_string();
163
- let target_url = format!("{}/main/skills/{}/SKILL.md", raw_base, name);
164
-
165
- match download_file(&target_url) {
166
- Ok(content) => {
167
- let path = Path::new(&entry.local_path);
168
- if let Some(parent) = path.parent() {
169
- fs::create_dir_all(parent)?;
170
- }
171
- fs::write(path, content)?;
172
- println!(" - ✅ {}", name);
173
- },
174
- Err(_) => println!(" - ❌ Error descargando {}", name),
175
- }
176
- }
177
- println!("✨ Instalación completada.");
178
- Ok(())
179
- }
180
-
181
- // --- HELPERS ---
182
-
183
- fn get_skills_dir(editor: &str) -> std::path::PathBuf {
184
- match editor {
185
- "antigravity" => Path::new(".antigravity/skills").to_path_buf(),
186
- "vscode" => Path::new(".vscode/skills").to_path_buf(),
187
- _ => Path::new(".cursor/skills").to_path_buf(), // Default
188
- }
189
- }
190
-
191
- fn load_config() -> Result<SkillConfig> {
192
- let content = fs::read_to_string("skills.json")?;
193
- let config: SkillConfig = serde_json::from_str(&content)?;
194
- Ok(config)
195
- }
196
-
197
- fn save_config(config: &SkillConfig) -> Result<()> {
198
- let content = serde_json::to_string_pretty(config)?;
199
- fs::write("skills.json", content)?;
200
- Ok(())
201
- }
202
-
203
- fn download_file(url: &str) -> Result<String> {
204
- let resp = reqwest::blocking::get(url)?;
205
- if !resp.status().is_success() {
206
- anyhow::bail!("404 Not Found");
207
- }
208
- Ok(resp.text()?)
209
- }
210
-
211
- fn update_editor_config(editor: &str, skill_name: &str, path: &Path) -> Result<()> {
212
- // Aquí implementas la lógica específica para inyectar en .cursorrules o .antigravity
213
- // Ejemplo simple para cursor:
214
- if editor == "cursor" {
215
- let rule_file = Path::new(".cursorrules");
216
- let line = format!("\n# Skill: {}\nReference: {}\n", skill_name, path.display());
217
-
218
- // Append
219
- let mut file = fs::OpenOptions::new()
220
- .create(true)
221
- .append(true)
222
- .open(rule_file)?;
223
- use std::io::Write;
224
- write!(file, "{}", line)?;
225
- }
226
- Ok(())
227
- }