vipcode 0.0.0-stage → 0.2.1

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Pablo Vicente Juan
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.en.md ADDED
@@ -0,0 +1,60 @@
1
+ # vipcode
2
+
3
+ [![npm](https://img.shields.io/npm/v/vipcode.svg)](https://www.npmjs.com/package/vipcode) [![Tests](https://github.com/PabloVip/vipcode/actions/workflows/ci.yml/badge.svg)](https://github.com/PabloVip/vipcode/actions/workflows/ci.yml) [![MIT License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) · [Español](README.md)
4
+
5
+ A coding agent for your terminal (command `vipcode`), in the style of opencode, that only uses **free AI models** and **automatically switches provider** when one runs out. The interface and messages are in Spanish.
6
+
7
+ - **Works right after installing, with no keys or sign-up**: it uses providers that allow anonymous access (Kilo Gateway, OVHcloud, LLM7 and Pollinations).
8
+ - For higher limits and better models, add free keys from the 20+ included providers (Gemini, NVIDIA, Mistral, Cerebras, OpenRouter, Groq, Z.ai…). With OpenRouter you just sign in through the browser: `vipcode auth login openrouter`.
9
+ - With a free [LLM Stats](https://llm-stats.com) key, the best models are tried first according to their ranking.
10
+ - Terminal UI with Markdown, syntax highlighting, diffs, permission prompts, `@file` and `/command` completion, a command palette (Ctrl+P) and `!command` to run shell commands.
11
+ - Tools: read, write and edit files, `list_dir`, `glob`, `grep`, `bash`, `webfetch`, `websearch`, todo list, subagents, LSP diagnostics, MCP tools and **skills** (the open Agent Skills format used by Claude Code and opencode).
12
+ - `/undo` and `/redo` backed by git snapshots, saved sessions, automatic context compaction, images, custom agents and commands.
13
+
14
+ ## Install
15
+
16
+ Requires Node.js 22 or later.
17
+
18
+ ```bash
19
+ npm install -g vipcode
20
+ ```
21
+
22
+ To update, type `/update` inside vipcode or run `vipcode update` (it installs the latest published version, or pulls the repository if you installed from source). Without the npm registry you can also install the latest GitHub release (`npm install -g https://github.com/PabloVip/vipcode/releases/latest/download/vipcode.tgz`) or run it from source:
23
+
24
+ ```bash
25
+ git clone https://github.com/PabloVip/vipcode.git
26
+ cd vipcode
27
+ npm install
28
+ npm run build
29
+ npm link # makes the «vipcode» command available everywhere
30
+ ```
31
+
32
+ ## Quick start
33
+
34
+ ```bash
35
+ cd my-project
36
+ vipcode # interactive UI
37
+ vipcode "fix the failing test" # UI, starting with that message
38
+ vipcode run "task" --yolo # non-interactive: does the task and exits
39
+ vipcode auth login # add a free key (or /connect inside the UI)
40
+ vipcode skills add anthropics/skills # install skills from GitHub
41
+ vipcode update # update vipcode
42
+ ```
43
+
44
+ Inside the UI: Enter sends, Tab switches between the `build` and `plan` agents, Ctrl+P opens the command palette, `@path` attaches files, `!command` runs a shell command, Esc interrupts and `/help` lists everything.
45
+
46
+ ## Security
47
+
48
+ vipcode asks before editing files, running commands, going online or using MCP tools; only a few read-only commands (`git status`, `git diff`, `git log`, `git show`, `ls`, `pwd`) are auto-approved, and never when they chain another command, write to a file or use `$(…)`. A project's own vipcode configuration (MCP servers, providers, permissions, agents with permissions, commands that run shell) is ignored until you trust the folder: vipcode shows what it would change and asks (`vipcode trust` / `vipcode untrust`). Tools can't leave the project folder, not even through symlinks; vipcode can't read or change its own data folder (`~/.vipcode`: keys, config, trusted folders) nor modify its own installation, and commands that mention them always ask. Terminal escape sequences from the model or tools are stripped. To report a vulnerability, see [SECURITY.md](SECURITY.md).
49
+
50
+ ## Privacy
51
+
52
+ Free plans have fine print: anonymous providers and several free tiers may store what you send or use it for training. The first time vipcode is about to use a provider that needs no key, it tells you and lets you continue, add a key first or never use them (`"keyless": false`). Don't send secrets or confidential code; for that, use a local model with Ollama or LM Studio. vipcode itself sends no telemetry; it only checks npm and GitHub once a day for a new version (`"checkUpdates": false` turns it off).
53
+
54
+ ## Ranking data
55
+
56
+ vipcode does not ship LLM Stats data, because their terms don't allow redistribution. Each user downloads it with their own free key (`vipcode auth login llm-stats`); it is only used locally. Data by LLM Stats (llm-stats.com).
57
+
58
+ ## License
59
+
60
+ [MIT](LICENSE) © Pablo Vicente Juan. The full documentation (in Spanish) is in [README.md](README.md).
package/README.md CHANGED
@@ -1,3 +1,402 @@
1
- # Temporary Holding Version
1
+ # vipcode
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ [![npm](https://img.shields.io/npm/v/vipcode.svg)](https://www.npmjs.com/package/vipcode) [![Pruebas](https://github.com/PabloVip/vipcode/actions/workflows/ci.yml/badge.svg)](https://github.com/PabloVip/vipcode/actions/workflows/ci.yml) [![Licencia MIT](https://img.shields.io/badge/licencia-MIT-blue.svg)](LICENSE) · [English](README.en.md)
4
+
5
+ Agente de programación para la terminal (comando `vipcode`), al estilo de opencode, que solo usa **modelos gratuitos** y **rota automáticamente** entre proveedores cuando uno se agota.
6
+
7
+ - **Funciona nada más instalarlo, sin claves ni registro**: usa los proveedores que permiten el acceso anónimo (Kilo Gateway, OVHcloud, LLM7 y Pollinations).
8
+ - Si quieres más límites y mejores modelos, añade claves gratuitas de los más de 20 proveedores incluidos (Gemini, NVIDIA, Mistral, Cerebras, OpenRouter, Groq, Z.ai…); con OpenRouter basta con iniciar sesión en el navegador. Los modelos gratis nuevos se descubren solos.
9
+ - Con una clave gratis de [LLM Stats](https://llm-stats.com), **usa primero los mejores modelos** según su ranking.
10
+ - Interfaz en la terminal con Markdown y código coloreado, diffs, diálogos de permiso, autocompletado de `@ficheros` y `/comandos`, paleta de comandos (Ctrl+P), `!comandos`, historial y barra de estado.
11
+ - Herramientas: leer, escribir y editar ficheros, `list_dir`, `glob`, `grep`, `bash`, `webfetch`, `websearch`, lista de tareas, subagentes, diagnósticos LSP, herramientas MCP y [skills](#skills).
12
+ - `/undo` y `/redo` con instantáneas de git (deshacen también lo que haya cambiado `bash`), sesiones guardadas, resumen automático del contexto, imágenes, agentes y comandos propios, y `/update` para actualizarlo.
13
+ - **Seguro por defecto**: pregunta antes de editar, ejecutar o salir a internet, no sale de la carpeta del proyecto y no usa la configuración que traiga un proyecto hasta que confías en él (ver [Seguridad](#seguridad)).
14
+
15
+ ## Instalación
16
+
17
+ Requiere Node.js 22 o superior.
18
+
19
+ ```bash
20
+ npm install -g vipcode
21
+ ```
22
+
23
+ Para actualizar, escribe `/update` dentro de vipcode o `vipcode update` en la terminal.
24
+
25
+ Sin el registro de npm, también puedes instalar el paquete de la última versión de GitHub (`npm install -g https://github.com/PabloVip/vipcode/releases/latest/download/vipcode.tgz`) o usarlo desde el código:
26
+
27
+ ```bash
28
+ git clone https://github.com/PabloVip/vipcode.git
29
+ cd vipcode
30
+ npm install
31
+ npm run build
32
+ npm link # deja el comando «vipcode» disponible en cualquier carpeta
33
+ ```
34
+
35
+ Probado sobre todo en macOS; las pruebas automáticas también pasan en Linux. Si algo falla, [abre un issue](https://github.com/PabloVip/vipcode/issues).
36
+
37
+ ## Primeros pasos
38
+
39
+ No hace falta configurar nada: abre `vipcode` en la carpeta de tu proyecto y escribe. Sin claves, vipcode usa los proveedores que permiten el acceso anónimo:
40
+
41
+ | Sin clave | Límite aproximado |
42
+ |---|---|
43
+ | Kilo Gateway (sus modelos gratis: Nemotron 3 Ultra, Beam, Laguna…) | 200 peticiones por hora por IP |
44
+ | OVHcloud AI Endpoints (gpt-oss-120b, Qwen 3.5/3.8, Llama 3.3…) | 2 peticiones por minuto en cada modelo |
45
+ | LLM7.io | ~60 peticiones por hora |
46
+ | Pollinations (GPT-OSS 20B) | límite por hora y por IP |
47
+
48
+ Cuando uno se agota, salta al siguiente. Para tareas largas se quedan cortos, y además pueden guardar lo que les envías (mira [Privacidad](#privacidad)). Por eso conviene añadir alguna clave gratuita; con una de Gemini, NVIDIA o Mistral se nota mucho. Hay tres formas, y se pueden combinar:
49
+
50
+ 1. **`/connect`** dentro de la interfaz: eliges el proveedor, pegas la clave y listo. Si aún no la tienes, pulsa Enter sin escribir nada y se abre en el navegador la página donde se consigue: inicias sesión, la copias y la pegas.
51
+ 2. **`vipcode auth login`** (o `vipcode auth login groq`), igual que `/connect` pero desde la terminal. La clave se guarda en `~/.vipcode/auth.json`, legible solo por tu usuario. `vipcode auth list` enseña qué tienes configurado y `vipcode auth logout <proveedor>` la borra.
52
+ 3. **Variables de entorno** en `~/.zshrc`, por ejemplo `export GEMINI_API_KEY="..."` (abre una terminal nueva después).
53
+
54
+ ### Iniciar sesión sin copiar claves
55
+
56
+ Con **OpenRouter** no hace falta copiar nada: `vipcode auth login openrouter` (o `/connect openrouter`) → «Iniciar sesión en el navegador». Entras con tu cuenta (Google, GitHub o correo), aceptas y vipcode recibe la clave sola. Usa el inicio de sesión oficial de OpenRouter para programas como este (OAuth con PKCE): la clave se llama «vipcode» en https://openrouter.ai/settings/keys y puedes borrarla desde ahí cuando quieras. Si estás conectado por SSH, vipcode te da un enlace para abrirlo en cualquier navegador y pegar el código que te enseñe.
57
+
58
+ Otros inicios de sesión no se incluyen porque sus dueños no permiten usarlos desde otros programas o ya no existen:
59
+
60
+ - **Google (Gemini CLI, Antigravity)**: Google bloquea las cuentas que los usan fuera de sus programas. La vía permitida es la clave gratis de https://aistudio.google.com/apikey.
61
+ - **GitHub Copilot**: solo está autorizado en opencode y en los editores oficiales, y además es de pago.
62
+ - **ChatGPT**: «Iniciar sesión con ChatGPT» existe, pero solo para Plus o Pro, pide que OpenAI dé de alta la aplicación y usa otra API.
63
+ - **Qwen Code**: su plan gratis con cuenta cerró el 15/04/2026.
64
+ - **Modelos gratis de opencode (Zen)**: solo funcionan dentro de opencode.
65
+
66
+ Para elegir el navegador, pon el comando en `VIPCODE_BROWSER` (por ejemplo `export VIPCODE_BROWSER=firefox`).
67
+
68
+ Si la misma clave está en `auth.json` y en el entorno, gana la de `auth.json`.
69
+
70
+ | Proveedor | Variable | Dónde conseguir la clave | Plan gratuito |
71
+ |---|---|---|---|
72
+ | Google Gemini | `GEMINI_API_KEY` | https://aistudio.google.com/apikey | Flash y Flash-Lite con límites por minuto y por día en cada modelo |
73
+ | NVIDIA NIM | `NVIDIA_API_KEY` | https://build.nvidia.com/settings/api-keys | ~40 peticiones/minuto para toda la cuenta; solo para desarrollo |
74
+ | Mistral | `MISTRAL_API_KEY` | https://console.mistral.ai/api-keys | Plan Experiment: ~1 petición/s y ~1.000 M tokens/mes |
75
+ | Cerebras | `CEREBRAS_API_KEY` | https://cloud.cerebras.ai | ~30/min y 14.400/día por modelo, contexto ~64k |
76
+ | OpenRouter | `OPENROUTER_API_KEY` | https://openrouter.ai/settings/keys | Modelos `:free`: 20/min y 50/día en total (1.000/día con 10 $ comprados) |
77
+ | Groq | `GROQ_API_KEY` | https://console.groq.com/keys | ~30/min y 1.000/día por modelo; pocos tokens por minuto |
78
+ | Z.ai | `ZAI_API_KEY` | https://z.ai/manage-apikey/apikey-list | GLM-4.7-Flash, GLM-4.6V-Flash y GLM-4.5-Flash |
79
+ | Zhipu (China) | `ZHIPU_API_KEY` | https://open.bigmodel.cn/usercenter/apikeys | Los mismos GLM Flash |
80
+ | Poolside | `POOLSIDE_API_KEY` | https://platform.poolside.ai | Modelos Laguna |
81
+ | Reflection AI | `REFLECTION_API_KEY` | https://developers.reflection.ai | Beam 1.0 |
82
+ | Amazon Nova | `NOVA_API_KEY` | https://nova.amazon.com/dev | Nova 2 Pro y Lite |
83
+ | Cohere | `COHERE_API_KEY` | https://dashboard.cohere.com/api-keys | Clave de prueba: 1.000 llamadas/mes, uso no comercial |
84
+ | SambaNova | `SAMBANOVA_API_KEY` | https://cloud.sambanova.ai/apis | Límite diario de tokens por modelo |
85
+ | Hetzner | `HETZNER_API_KEY` | https://experiments.hetzner.com | Beta gratuita |
86
+ | Vercel AI Gateway | `AI_GATEWAY_API_KEY` | https://vercel.com/ai-gateway | 5 $/mes de crédito; los modelos `-free` no gastan |
87
+ | Cloudflare Workers AI | `CLOUDFLARE_API_KEY` + `CLOUDFLARE_ACCOUNT_ID` | https://dash.cloudflare.com/profile/api-tokens | 10.000 «neuronas» al día |
88
+ | Hugging Face | `HF_TOKEN` | https://huggingface.co/settings/tokens | 0,10 $/mes de crédito |
89
+ | ModelScope (China) | `MODELSCOPE_API_KEY` | https://modelscope.cn/my/myaccesstoken | 2.000 llamadas al día |
90
+ | Ollama Cloud | `OLLAMA_API_KEY` | https://ollama.com/settings/keys | Límites por hora y por semana |
91
+ | UnoRouter | `UNOROUTER_API_KEY` | https://unorouter.com/en/token | Modelos `:free`, ~1 petición/min cada uno |
92
+ | Kilo Gateway | sin clave (opcional `KILO_API_KEY`) | https://app.kilo.ai | 200 peticiones/hora por IP sin clave |
93
+ | OVHcloud | sin clave (opcional `OVHCLOUD_API_KEY`) | https://www.ovhcloud.com/es-es/public-cloud/ai-endpoints/ | 2/min por modelo sin clave; 400/min con clave |
94
+ | LLM7.io | sin clave (opcional `LLM7_API_KEY`) | https://token.llm7.io | ~60/hora sin clave |
95
+ | Pollinations | sin clave (opcional `POLLINATIONS_API_KEY`) | https://auth.pollinations.ai | Límite por hora y por IP |
96
+ | Ollama, LM Studio, llama.cpp | sin clave | se detectan solos si están encendidos | En tu ordenador, sin límites |
97
+
98
+ GitHub Models ya no aparece: cerró el 30 de julio de 2026. Los modelos gratis de OpenCode Zen tampoco: opencode los paga y solo deja usarlos desde su propia aplicación.
99
+
100
+ ## Uso
101
+
102
+ ```bash
103
+ cd mi-proyecto
104
+ vipcode # interfaz
105
+ vipcode "arregla el test" # interfaz y empieza con ese mensaje
106
+ vipcode -c # continúa la última sesión de esta carpeta
107
+ vipcode run "tarea" --yolo # hace la tarea sin interfaz y termina
108
+ vipcode --plan # empieza en modo solo lectura
109
+ vipcode run "/review" # también acepta comandos y skills: vipcode run "/mi-skill tarea"
110
+ vipcode update # actualiza vipcode
111
+ vipcode trust # confiar en la configuración que trae esta carpeta (vipcode untrust lo deshace)
112
+ ```
113
+
114
+ ### Actualizar
115
+
116
+ `/update` (o `vipcode update`) se adapta a cómo lo instalaste:
117
+
118
+ - **Con npm** (`npm install -g vipcode` o el paquete de la release): mira cuál es la última versión publicada en npm y en GitHub y, si es más nueva que la tuya, la instala.
119
+ - **Desde el código** (`git clone` + `npm link`): trae lo último del repositorio con `git pull`, instala las dependencias y compila. Si tienes cambios sin guardar en esa carpeta, no toca nada y te avisa.
120
+
121
+ Después cierra vipcode y vuelve a abrirlo. Además, una vez al día vipcode mira si hay una versión nueva y te avisa al abrirlo; se desactiva con `"checkUpdates": false` en la configuración.
122
+
123
+ ### En la interfaz
124
+
125
+ - **Enter** envía. **Alt+Enter** o `\` al final de la línea añade una línea nueva.
126
+ - **@ruta** adjunta un fichero, una carpeta o una imagen (con autocompletado). **Ctrl+V** pega una imagen del portapapeles, y arrastrar una imagen a la terminal también la adjunta.
127
+ - **Tab** cambia entre los agentes principales (`build` y `plan`, más los tuyos). **↑/↓** recorren el historial.
128
+ - **Ctrl+P** abre la paleta con todos los comandos, tus comandos y tus skills; escribe para filtrar.
129
+ - **!comando** lo ejecuta en la terminal sin salir de vipcode (por ejemplo `!git status` o `!npm test`). La salida se ve en pantalla y le llega al agente junto con tu siguiente mensaje.
130
+ - **Esc** interrumpe al agente. Mientras trabaja puedes seguir escribiendo: el mensaje se le entrega al acabar el paso actual.
131
+ - **Ctrl+C** interrumpe, cierra el diálogo o borra lo escrito; dos veces seguidas sale.
132
+
133
+ Mientras trabaja ves qué modelo está pensando, cada herramienta con su acción en español («Lee», «Edita», «Ejecuta»…), las líneas añadidas y quitadas y lo que tarda. Debajo de cada respuesta aparece el modelo que ha contestado, su nota, el tiempo y los tokens. La barra de abajo muestra el agente, el modelo, cuánto contexto llevas gastado (▰▰▱▱), los modelos disponibles y los mensajes en cola.
134
+
135
+ Antes de editar un fichero, ejecutar un comando o salir a internet, vipcode pregunta enseñando el diff o el comando. Puedes contestar que sí una vez, que sí a todo lo de ese tipo durante la sesión, que sí siempre a un comando concreto (por ejemplo `npm test*`), que no, o que no y explicarle qué hacer.
136
+
137
+ ### Comandos
138
+
139
+ | Comando | Qué hace |
140
+ |---|---|
141
+ | `/models` | Lista de modelos y su estado; elige uno preferido. `/models refresh` busca modelos gratis nuevos |
142
+ | `/model <p/m>` | Fija un modelo (`/model auto` vuelve a la rotación) |
143
+ | `/connect`, `/disconnect`, `/providers` | Añadir, quitar y ver las claves de los proveedores |
144
+ | `/agents`, `/agent <nombre>`, `/plan`, `/build` | Cambiar de agente |
145
+ | `/undo`, `/redo`, `/diff [all]` | Deshacer y rehacer el último mensaje (ficheros y conversación); ver los cambios |
146
+ | `/todos` | Lista de tareas del agente |
147
+ | `/skills` | Skills instaladas; elige una para usarla (o escribe `/nombre-de-la-skill tarea`) |
148
+ | `/compact` | Resumir la conversación |
149
+ | `/new`, `/sessions`, `/load <n>`, `/delete <n>`, `/export` | Sesiones |
150
+ | `/usage` | Tokens usados |
151
+ | `/mcp`, `/lsp` | Estado de los servidores MCP y de lenguaje |
152
+ | `/yolo [on\|off]` | Aprobar todo sin preguntar durante la sesión |
153
+ | `/reset-limits` | Olvidar las pausas guardadas de los proveedores |
154
+ | `/update` | Actualizar vipcode (ver [Actualizar](#actualizar)) |
155
+ | `/init` | Crea o mejora `AGENTS.md` con las instrucciones del proyecto |
156
+ | `/review` | Revisa los cambios sin confirmar (sin tocar nada) |
157
+ | `/config`, `/help`, `/exit` | |
158
+
159
+ ### Agentes
160
+
161
+ - **build**: el principal; puede editar y ejecutar.
162
+ - **plan**: solo lectura; investiga y propone un plan. Los subagentes que lance tampoco pueden editar.
163
+ - **general** y **explore**: subagentes que el agente principal lanza con la herramienta `task` para investigar o hacer subtareas con su propio contexto. Si pide varios a la vez, trabajan en paralelo.
164
+
165
+ ## Cómo funciona la rotación
166
+
167
+ ### Qué modelo va primero
168
+
169
+ Sin configurar nada, los modelos van en el orden del catálogo de vipcode: primero los proveedores con mejores modelos gratis y, dentro de cada uno, los que mejor programan.
170
+
171
+ Si quieres que se ordenen de mejor a peor con datos reales, consigue una clave gratuita en https://llm-stats.com/developer (250 consultas al día; con una actualización diaria sobra) y guárdala con `vipcode auth login llm-stats` o con la variable `LLMSTATS_API_KEY`. vipcode descarga las notas en ese momento y luego una vez al día. vipcode no trae esos datos dentro porque las condiciones de LLM Stats no permiten redistribuirlos: cada persona los descarga con su propia clave y solo se usan en su ordenador.
172
+
173
+ Como vipcode es un agente de programación, la nota de cada modelo combina sus índices de programación (40 %), agentes (30 %), uso de herramientas (15 %) e índice general (15 %). Cada índice se pasa a percentil para que sean comparables, y la nota va de 0 a 100. La ves delante de cada modelo en `/models` y `vipcode models`.
174
+
175
+ Con las notas descargadas, el orden completo es:
176
+
177
+ 1. Los modelos que encajen con tus patrones de `order` (y el que fijes con `/model`).
178
+ 2. Tus proveedores propios (los que añades en `providers` y no vienen en el catálogo).
179
+ 3. Todos los demás, de mejor a peor nota, tengan clave o no: si un modelo sin clave es mejor que uno con clave, va antes.
180
+ 4. Al final, los modelos que LLM Stats no conoce (enrutadores como `kilo-auto/free` o modelos muy nuevos).
181
+
182
+ Si prefieres que los anónimos (sin clave) vayan siempre detrás, porque tienen límites por IP y pueden guardar lo que envías, pon `"ranking": { "anonymousLast": true }`.
183
+
184
+
185
+ ### Cuando un modelo falla
186
+
187
+ vipcode salta al siguiente de la lista. Lo que pasa con el que ha fallado depende del error:
188
+
189
+ - **Límite por minuto**: se pausa el tiempo que diga el proveedor (o 60 s). Si el límite es de toda la cuenta (NVIDIA, Mistral, OpenRouter…), se pausan todos sus modelos.
190
+ - **Límite diario o sin créditos**: se pausa hasta medianoche UTC o hasta cuando diga el proveedor.
191
+ - **Modelo que no existe, sin herramientas o fuera del plan gratis**: se descarta durante un día o una semana.
192
+ - **Clave inválida**: se descarta el proveedor durante la sesión.
193
+ - **Conversación demasiado larga para ese modelo** o error raro: se prueba otro solo para esa petición.
194
+ - **Error del servidor o sin respuesta durante 2 minutos**: se pausa 30 s.
195
+
196
+ Las pausas se guardan en `~/.vipcode/state.json`, así que se recuerdan entre ejecuciones. Si todos están en pausa menos de 90 s, vipcode espera; si no, te dice cuándo vuelve el primero.
197
+
198
+ Una vez al día (o con `/models refresh`, o `vipcode models refresh` desde la terminal) vipcode pregunta a cada proveedor qué modelos tiene, también a los que no piden clave (Kilo, OVHcloud y LLM7), añade los gratis nuevos y quita los que ya no existen.
199
+
200
+ ## Configuración
201
+
202
+ - Global: `~/.vipcode/config.json` (se crea la primera vez).
203
+ - Por proyecto: `vipcode.json` o `.vipcode/config.json` en la carpeta del proyecto (se mezcla con la global). Solo se usa si confías en la carpeta: ver [Seguridad](#seguridad).
204
+
205
+ ```json
206
+ {
207
+ "model": "",
208
+ "order": ["groq/*", "gemini/gemini-3.8-flash"],
209
+ "disabledProviders": ["cohere"],
210
+ "enabledProviders": [],
211
+ "providers": [
212
+ {
213
+ "name": "mi-servidor",
214
+ "baseURL": "http://192.168.1.10:8000/v1",
215
+ "apiKeyEnv": "MI_CLAVE",
216
+ "models": [{ "id": "qwen3-coder", "context": 32000 }]
217
+ },
218
+ { "name": "groq", "models": [{ "id": "openai/gpt-oss-120b", "context": 6000 }] }
219
+ ],
220
+ "permission": {
221
+ "edit": "ask",
222
+ "bash": { "*": "ask", "git status*": "allow", "npm test*": "allow", "rm *": "deny" },
223
+ "webfetch": "allow",
224
+ "mcp": { "*": "ask", "github_list_*": "allow" }
225
+ },
226
+ "mcp": {
227
+ "github": { "type": "local", "command": ["npx", "-y", "@modelcontextprotocol/server-github"], "environment": { "GITHUB_PERSONAL_ACCESS_TOKEN": "..." } },
228
+ "docs": { "type": "remote", "url": "https://ejemplo.com/mcp", "headers": { "Authorization": "Bearer ..." } }
229
+ },
230
+ "lsp": {
231
+ "pyright": false,
232
+ "mi-lsp": { "command": ["mi-lsp", "--stdio"], "extensions": [".foo"] }
233
+ },
234
+ "agents": { "plan": { "model": "gemini/*" } },
235
+ "commands": { "tests": { "template": "Ejecuta los tests y arregla lo que falle. $ARGUMENTS", "description": "Arregla los tests" } },
236
+ "instructions": ["docs/estilo.md", ".cursor/rules/*.md"],
237
+ "maxSteps": 50,
238
+ "autoCompactTokens": 90000,
239
+ "bashTimeoutMs": 120000,
240
+ "maxWaitMs": 90000,
241
+ "snapshot": true,
242
+ "autoUpdateModels": true,
243
+ "checkUpdates": true,
244
+ "keyless": true,
245
+ "ranking": { "enabled": true, "metric": "coding", "anonymousLast": false },
246
+ "skills": { "enabled": true, "paths": [], "disabled": [], "external": true },
247
+ "showReasoning": true
248
+ }
249
+ ```
250
+
251
+ - **keyless**: `false` para no usar nunca los proveedores anónimos (Kilo, OVHcloud, LLM7, Pollinations) salvo que les pongas clave.
252
+ - **ranking**: `enabled: false` vuelve al orden del catálogo; `metric: "general"` ordena por el índice general de LLM Stats en vez de por programación; `anonymousLast: true` pone los anónimos (sin clave) detrás de los que tienen clave aunque tengan mejor nota.
253
+ - **providers**: si el nombre coincide con uno del catálogo, solo cambia lo que pongas (los modelos se añaden o se sobrescriben por id; con `"replaceModels": true` se usan solo los tuyos). Si es nuevo, es un proveedor propio compatible con la API de OpenAI y va el primero en la rotación. Admite `apiKeyEnv`, `apiKey`, `headers`, `noKey`, `discover: "openai"` para descubrir sus modelos, y en cada modelo `context`, `vision` y `disabled`.
254
+ - **order**: patrones `proveedor/modelo` que van primero. **model**: modelo fijado al arrancar.
255
+ - **permission**: `allow`, `ask` o `deny`. En `bash` y `mcp` gana el patrón más concreto, y los comandos encadenados (`&&`, `&`, `|`, `;`, saltos de línea) se comprueban por separado. Aunque un comando esté permitido, se pregunta siempre si escribe en un fichero (`>`, `--output`) o lleva `$(…)` o comillas invertidas. Las reglas `deny` se respetan incluso con `--yolo`.
256
+ - **mcp**: servidores locales (`command`) o remotos (`url`, con HTTP o SSE). Sus herramientas aparecen como `servidor_herramienta`. En modo plan solo se usan las marcadas como de solo lectura.
257
+ - **lsp**: `false` desactiva los diagnósticos; `"id": false` desactiva un servidor concreto.
258
+
259
+ ### Agentes y comandos propios
260
+
261
+ Ficheros Markdown en `~/.vipcode/agents/`, `.vipcode/agents/` o `.opencode/agent/` (compatible con opencode):
262
+
263
+ ```markdown
264
+ ---
265
+ description: Revisa la seguridad del código
266
+ mode: subagent # primary (se elige con Tab), subagent (solo con task) o all
267
+ model: gemini/* # opcional
268
+ temperature: 0.2 # opcional
269
+ tools:
270
+ write: false
271
+ edit: false
272
+ bash: false
273
+ ---
274
+ Eres un experto en seguridad. Busca inyecciones, secretos en el código y permisos mal puestos.
275
+ ```
276
+
277
+ Comandos en `~/.vipcode/commands/`, `.vipcode/commands/` o `.opencode/command/`. Se lanzan con `/nombre argumentos`:
278
+
279
+ ```markdown
280
+ ---
281
+ description: Arregla los tests que fallan
282
+ agent: build
283
+ ---
284
+ Estos son los tests que fallan ahora mismo:
285
+ !`npm test 2>&1 | tail -40`
286
+
287
+ Arréglalos. Céntrate en $ARGUMENTS.
288
+ ```
289
+
290
+ `$ARGUMENTS` es todo lo que escribes detrás del comando, `$1`…`$9` cada palabra (respetando comillas), y `` !`comando` `` se sustituye por su salida. Con `subtask: true` el comando se ejecuta como subagente y no llena la conversación.
291
+
292
+ Los agentes y comandos que traiga un proyecto se cargan siempre, pero hasta que confías en la carpeta un agente del proyecto no puede cambiar sus permisos (`permission`, `readOnly`) y los `` !`comando` `` de sus comandos no se ejecutan.
293
+
294
+ ### Skills
295
+
296
+ Una skill es una carpeta con un `SKILL.md`: instrucciones (y, si hace falta, scripts y documentos) para un tipo de tarea concreto, como rellenar PDF, seguir la guía de estilo de la empresa o preparar un informe. Es el formato abierto [Agent Skills](https://agentskills.io), el mismo que usan Claude Code y opencode, así que las que encuentres para ellos también sirven aquí.
297
+
298
+ ```markdown
299
+ ---
300
+ name: informes-semanales
301
+ description: Úsala cuando el usuario pida el informe semanal del equipo.
302
+ ---
303
+
304
+ # Informe semanal
305
+
306
+ 1. Lee las notas de `notas/` de esta semana.
307
+ 2. Rellena la plantilla de `references/plantilla.md` (está en la carpeta de la skill).
308
+ ```
309
+
310
+ El agente solo ve el nombre y la descripción de cada skill. Cuando la tarea encaja, la carga él solo con la herramienta `skill` y lee sus documentos cuando los necesita. También puedes usarla tú: `/informes-semanales el de esta semana` en la interfaz, o `vipcode run "/informes-semanales el de esta semana"`.
311
+
312
+ ```bash
313
+ vipcode skills # las que tienes y de dónde vienen
314
+ vipcode skills add anthropics/skills # todas las de un repositorio de GitHub
315
+ vipcode skills add https://github.com/usuario/repo/tree/main/skills/pdf # solo una carpeta
316
+ vipcode skills add ./mis-skills # desde una carpeta de tu ordenador
317
+ vipcode skills add <origen> --project # en .vipcode/skills del proyecto (para compartirla con el equipo)
318
+ vipcode skills new informes-semanales # crea una vacía para rellenar
319
+ vipcode skills remove informes-semanales
320
+ ```
321
+
322
+ `vipcode skills add` copia las skills a `~/.vipcode/skills`, o con `--project` a `.vipcode/skills`. Si ya existe una con el mismo nombre la deja como está, salvo que añadas `--force`. Para los repositorios hace falta tener `git` instalado.
323
+
324
+ vipcode también lee las skills de `~/.claude/skills`, `~/.config/opencode/skill`, `~/.agents/skills` y las mismas carpetas dentro del proyecto. Si dos tienen el mismo nombre, gana la del proyecto. En la configuración:
325
+
326
+ ```json
327
+ "skills": { "enabled": true, "paths": ["~/mis-skills"], "disabled": ["una-que-no-quiero"], "external": true }
328
+ ```
329
+
330
+ `paths` añade carpetas, `disabled` ignora skills por nombre y `external: false` deja de leer las carpetas de Claude Code, opencode y `.agents`. En la cabecera de la skill, `user-invocable: false` hace que solo la use el agente, y `disable-model-invocation: true` que solo la uses tú con `/nombre`.
331
+
332
+ Las skills pueden traer scripts: revisa las que instales si no conoces su origen. vipcode no ejecuta nada por su cuenta; si la skill pide lanzar un script, el agente usa `bash` y te pide permiso igual que con cualquier otro comando.
333
+
334
+ ### Instrucciones del proyecto
335
+
336
+ vipcode lee `AGENTS.md` (o `CLAUDE.md`, o `.vipcode.md`) de la raíz del proyecto, tus instrucciones generales de `~/.vipcode/AGENTS.md` y los ficheros de `instructions`. `/init` crea un `AGENTS.md` analizando el proyecto.
337
+
338
+ ### Diagnósticos (LSP)
339
+
340
+ Después de cada edición, vipcode pregunta al servidor de lenguaje si hay errores y se los pasa al modelo. Para TypeScript y JavaScript no hace falta instalar nada: usa el servidor que trae TypeScript 7. Para otros lenguajes usa el servidor si lo tienes instalado: pyright o basedpyright, pylsp, gopls, rust-analyzer, clangd, intelephense o phpactor, ruby-lsp, bash-language-server, yaml-language-server, los de VS Code para CSS, HTML y JSON, lua-language-server, zls, dart, csharp-ls, sourcekit-lsp, kotlin-language-server y svelte.
341
+
342
+ ## Seguridad
343
+
344
+ vipcode ejecuta lo que le pide un modelo de IA, así que está hecho para que nada importante pase sin que lo veas:
345
+
346
+ - **Permisos.** Antes de editar un fichero, ejecutar un comando, salir a internet o usar una herramienta MCP, pregunta enseñando el diff o el comando. De serie solo se aprueban solos unos pocos comandos que no cambian nada (`git status`, `git diff`, `git log`, `git show`, `ls`, `pwd`), y ni siquiera esos si llevan otro comando detrás (`&`, `;`, `&&`, `|`), escriben en un fichero (`>`, `--output`) o llevan `$(…)`. Con `--yolo` o `/yolo` se aprueba todo menos lo que tengas en `deny`: úsalo solo en carpetas sin nada que perder.
347
+ - **Carpetas en las que confías.** Un proyecto puede traer su propia configuración de vipcode (`vipcode.json`, `.vipcode/config.json`, agentes con permisos propios, comandos con `` !`órdenes` ``). Como eso podría arrancar programas, mandar tus claves a otro servidor o quitar las preguntas de permiso, vipcode no lo usa hasta que confías en la carpeta. Al abrirlo te enseña qué cambiaría y te pregunta; con `vipcode run` solo avisa. Si la configuración cambia después (por ejemplo tras un `git pull`), vuelve a preguntar. `vipcode trust` y `vipcode untrust` lo cambian a mano.
348
+ - **Ficheros.** Las herramientas solo leen y escriben dentro de la carpeta del proyecto. Un enlace simbólico que lleve fuera (por ejemplo a `~/.ssh` o a tus claves) se rechaza.
349
+ - **vipcode no puede tocarse a sí mismo.** Aunque lo abras en una carpeta que las contenga (por ejemplo tu carpeta personal), el agente no puede leer ni cambiar `~/.vipcode` (tus claves, tu configuración y las carpetas en las que confías) ni modificar la carpeta donde está instalado vipcode, así que tampoco puede desactivar estas protecciones. Los comandos que nombran esas carpetas se preguntan siempre, aunque tengas una regla `allow` o hayas dicho «sí a todo», y con `--yolo` sin nadie delante se rechazan.
350
+ - **Terminal.** Lo que escriben el modelo o las herramientas no puede manejar tu terminal (borrar líneas, cambiar el portapapeles, falsear enlaces). En los diálogos de permiso esos caracteres se ven como `␛` en vez de actuar, para que nadie pueda disfrazar un comando.
351
+ - **Tus datos.** `~/.vipcode` solo lo puede abrir tu usuario y `auth.json` tiene permisos 600. vipcode no envía datos de uso a nadie.
352
+
353
+ Si encuentras un fallo de seguridad, avísalo en privado como explica [SECURITY.md](SECURITY.md).
354
+
355
+ ## Privacidad
356
+
357
+ La primera vez que vipcode va a usar un proveedor que no pide clave, te lo avisa y te deja elegir entre seguir, añadir antes una clave o no usarlos nunca.
358
+
359
+ Los planes gratuitos tienen letra pequeña: los proveedores anónimos (Kilo, OVHcloud, LLM7, Pollinations), Mistral (plan Experiment), varios modelos `:free` de OpenRouter, NVIDIA y otros pueden guardar lo que envías o usarlo para entrenar sus modelos. No mandes secretos ni código confidencial. Para eso usa un modelo local con Ollama o LM Studio y pon `"keyless": false` en la configuración.
360
+
361
+ ## Ficheros de datos
362
+
363
+ Todo está en `~/.vipcode` (o en `VIPCODE_HOME` si la defines):
364
+
365
+ - `config.json`: tu configuración. `auth.json`: claves (permisos 600). `state.json`: pausas de los proveedores. `notices.json`: avisos que ya has visto. `update.json`: última comprobación de versiones nuevas. `trusted.json`: carpetas en las que confías.
366
+ - `models.json`: modelos descubiertos. `ranking.json`: puntuaciones de LLM Stats descargadas con tu clave. `sessions/`: conversaciones. `history.jsonl`: lo que has escrito.
367
+ - `snapshots/`: instantáneas para `/undo` (un repositorio git aparte por proyecto; no toca tu `.git`).
368
+ - `exports/`: conversaciones exportadas. `agents/`, `commands/` y `skills/`: tus agentes, comandos y skills globales.
369
+
370
+ ## Desarrollo
371
+
372
+ ```bash
373
+ npm run build # compila a dist/
374
+ npm test # compila y pasa las pruebas (servidor de IA simulado, sin claves ni internet)
375
+ VIPCODE_DEBUG=1 vipcode # apunta los detalles internos en ~/.vipcode/debug.log
376
+ ```
377
+
378
+ vipcode no se deja modificar a sí mismo. Si quieres trabajar en su código con un vipcode instalado desde esa misma carpeta (`npm link`), arráncalo con `VIPCODE_ALLOW_SELF_EDIT=1 vipcode`; o usa el instalado con npm para trabajar en tu copia del código.
379
+
380
+ ### Publicar una versión
381
+
382
+ ```bash
383
+ npm login # la primera vez (y gh auth login si no lo tienes)
384
+ npm run release -- 0.3.0 --dry-run # comprueba que todo está listo y enseña lo que haría
385
+ npm run release -- 0.3.0 # o patch, minor o major
386
+ ```
387
+
388
+ Sube el número en `package.json`, pasa las pruebas, crea el commit y la etiqueta, lo sube a GitHub, crea la release con el paquete compilado y lo publica en npm. Quien ya tenga vipcode verá el aviso de versión nueva en menos de un día.
389
+
390
+ ## Lo que aún no tiene respecto a opencode
391
+
392
+ - La interfaz se dibuja en la propia terminal, no en pantalla completa con paneles.
393
+ - No hay `/share` para publicar la conversación en la web: `/export` la guarda en Markdown.
394
+ - Los servidores MCP remotos con OAuth no funcionan; sí los que usan una cabecera con token.
395
+ - No tiene integración con GitHub (responder a issues o PR) ni cliente/servidor para controlarlo desde otras aplicaciones.
396
+ - `bash` no está aislado en un sandbox: se protege con los permisos.
397
+
398
+ ## Licencia
399
+
400
+ [MIT](LICENSE) © Pablo Vicente Juan.
401
+
402
+ vipcode no envía datos de uso a nadie. Solo se conecta a los proveedores de IA que uses, a las webs que consulte el agente con `webfetch` y `websearch`, a tus servidores MCP, a npm y a GitHub una vez al día para ver si hay versión nueva (`"checkUpdates": false` lo desactiva) y, si le das tu clave, a LLM Stats para descargar el ranking (datos de LLM Stats, llm-stats.com).