@iaforged/context-code 1.0.84 → 1.0.86

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,13 +1,12 @@
1
1
  # Context Code
2
2
 
3
- Context Code es una herramienta de programacion agentica que se ejecuta en tu terminal, entiende tu base de codigo y te ayuda a avanzar mas rapido con comandos en lenguaje natural.
3
+ Context Code es una herramienta de programación agéntica que se ejecuta en tu terminal, entiende tu base de código y te ayuda a avanzar más rápido con comandos en lenguaje natural.
4
4
 
5
5
  Puede:
6
-
7
6
  - Leer y entender tu proyecto
8
7
  - Editar archivos y aplicar cambios
9
8
  - Ejecutar comandos de terminal
10
- - Ayudarte con depuracion, refactors y flujos de trabajo
9
+ - Ayudarte con depuración, refactors y flujos de trabajo
11
10
 
12
11
  ## Primeros pasos
13
12
 
@@ -23,1127 +22,18 @@ Luego abre tu proyecto y ejecuta:
23
22
  context
24
23
  ```
25
24
 
26
- ## Documentacion
27
-
28
- - [Resumen general](https://code.iaforged.com/docs/en/overview)
29
-
30
- ## Skills de Context
31
-
32
- Context usa `.context/skills` como carpeta oficial de skills del proyecto y `~/.context/skills` como carpeta global de usuario.
33
-
34
- Formato:
35
-
36
- ```text
37
- .context/skills/<nombre-skill>/SKILL.md
38
- ```
39
-
40
- Comandos:
41
-
42
- ```sh
43
- /skills
44
- /skills import
45
- /skills import .claude
46
- /skills import .codex
47
- /skills import .agents
48
- ```
49
-
50
- Uso practico:
51
-
52
- - `/skills` lista las skills disponibles.
53
- - `/skills import` busca skills legacy en `.claude/skills`, `.codex/skills` y `.agents/skills`, y las copia a `.context/skills`.
54
- - `/skills import .claude` importa solo desde `.claude/skills`.
55
- - Las nuevas skills deben crearse en `.context/skills/<nombre>/SKILL.md`.
56
- - `CONTEXT_CONFIG_DIR` es la variable principal para cambiar la carpeta global; `CLAUDE_CONFIG_DIR` queda como fallback temporal de compatibilidad.
57
-
58
- ## Sistema multi-proveedor y multi-perfil
59
-
60
- Context Code ya funciona con una capa de proveedores mas flexible. La idea base es separar:
61
-
62
- - el `provider` como backend de inferencia
63
- - el `provider profile` como perfil guardado dentro de ese proveedor
64
- - el `agentName` como nombre operativo pensado para futuros subagentes
65
-
66
- ### Provider profile
67
-
68
- Un `provider profile` es una configuracion persistida para un proveedor concreto. Sirve para guardar datos que quieres recordar por separado, por ejemplo:
69
-
70
- - base URL
71
- - ultimo modelo usado
72
- - credenciales o token, cuando el proveedor lo soporta
73
-
74
- El nombre del perfil es el identificador humano que ves en el comando. El `agentName` es el nombre tecnico que queda preparado para el futuro sistema de subagentes. Por ejemplo:
75
-
76
- ```sh
77
- /provider ollama profile local
78
- ```
79
-
80
- Puede guardar un perfil llamado `local` con un `agentName` del estilo `ollama-local`.
81
-
82
- ### Comando `/provider`
83
-
84
- El comando `/provider` ahora sirve para cambiar de proveedor y tambien para activar un perfil concreto.
85
-
86
- ```sh
87
- /provider
88
- /provider list
89
- /provider ollama
90
- /provider zai profile main
91
- /provider ollama profile local
92
- ```
93
-
94
- Comportamiento de `/provider`:
95
-
96
- - `/provider` (sin argumentos) abre el selector interactivo de proveedores.
97
- - `/provider list` muestra una tabla detallada con todos tus proveedores, perfiles guardados, estado de conexión (Conectado/Desconectado) y perfiles activos.
98
- - `/provider <proveedor>` cambia al proveedor especificado.
99
- - `/provider <proveedor> profile <nombre>` activa (o crea) un perfil específico para ese proveedor.
100
- - `/provider <proveedor> <URL>` cambia la Base URL del proveedor (ej. `/provider ollama http://localhost:11434/v1`).
101
- - `/provider <proveedor> clear` restaura la URL por defecto del proveedor.
102
-
103
- Tambien existe `/profile` para inspeccionar y navegar perfiles ya guardados:
104
-
105
- ```sh
106
- /profile
107
- /profile list
108
- /profile current
109
- /profile use ollama local
110
- /profile rename ollama local gpu-lab
111
- /profile model ollama gpu-lab llama3.2
112
- /profile model ollama gpu-lab clear
113
- /profile agent ollama gpu-lab ollama-lab
114
- /profile remove all
115
- /profile remove ollama gpu-lab
116
- ```
117
-
118
- Comportamiento de `/profile`:
119
-
120
- - `/profile` o `/profile list` muestra todos los perfiles guardados por proveedor.
121
- - `/profile current` muestra el perfil activo.
122
- - `/profile use <proveedor> <perfil>` activa el perfil y restaura su ultimo modelo si existe.
123
- - `/profile rename <proveedor> <actual> <nuevo>` renombra el perfil.
124
- - `/profile model <proveedor> <perfil> <modelo>` corrige o fija el ultimo modelo guardado para ese perfil.
125
- - `/profile model <proveedor> <perfil> clear` limpia el modelo guardado.
126
- - `/profile agent <proveedor> <perfil> <agentName>` cambia el nombre tecnico del perfil para futuros subagentes.
127
- - `/profile remove <proveedor> <perfil>` elimina el perfil.
128
- - `/profile remove all` elimina todos los perfiles guardados de una sola vez.
129
-
130
- Notas importantes:
131
-
132
- - El nombre visible del perfil y el `agentName` no son lo mismo.
133
- - El nombre visible sirve para navegar con `/provider ... profile ...` o `/profile use ...`.
134
- - `agentName` queda reservado como identificador operativo para el futuro sistema de subagentes.
135
- - Al renombrar un perfil, sus credenciales por perfil tambien se mueven al nuevo identificador para no perder API keys u OAuth.
136
- - Al borrar un perfil, tambien se limpian sus credenciales scoped cuando existen.
137
- - `/profile remove all` limpia todos los perfiles y sus credenciales scoped asociadas, pero no toca los fallbacks legacy de compatibilidad.
138
-
139
- Comportamiento esperado:
140
-
141
- - `/provider` abre la seleccion de proveedor.
142
- - `/provider <proveedor>` cambia al proveedor activo.
143
- - `/provider <proveedor> profile <nombre>` selecciona o crea ese perfil y lo deja activo.
144
- - La configuracion de ese perfil se reutiliza la proxima vez que vuelvas al mismo proveedor o perfil.
145
-
146
- Despues de activar un perfil, puedes seguir ajustando sus valores con los comandos normales del proveedor:
147
-
148
- ```sh
149
- /provider ollama http://localhost:11434/v1
150
- /provider ollama clear
151
- /provider list
152
- /model
153
- ```
154
-
155
- ### Soporte Multi-cuenta real
156
-
157
- Context Code permite gestionar múltiples cuentas del mismo proveedor (como varias cuentas de Claude o OpenAI) de forma independiente.
158
-
159
- ```sh
160
- /login --profile personal
161
- /login --profile trabajo
162
- ```
163
-
164
- - Al usar el flag `--profile` (o `-p`), las credenciales se guardan específicamente en ese perfil.
165
- - El sistema detecta automáticamente si el perfil ya existe o crea uno nuevo.
166
- - Puedes saltar entre cuentas fácilmente usando `/provider claude profile personal` o listarlas todas con `/provider list`.
167
-
168
- ### Persistencia por perfil
169
-
170
- La persistencia queda separada por perfil cuando el proveedor lo soporta.
171
-
172
- - `base URL` queda guardada por perfil.
173
- - `ultimo modelo` queda guardado por perfil.
174
- - `credenciales` quedan guardadas por perfil cuando aplica, incluyendo OAuth y API keys.
175
- - Si no existe un perfil nuevo, el sistema intenta reutilizar o migrar la configuracion vieja para no romper instalaciones existentes.
176
-
177
- ### SQLite autogenerable
178
-
179
- La metadata de proveedores y perfiles ahora se apoya en una base SQLite autogenerable:
180
-
181
- - archivo: `~/.context/provider-state.sqlite3`
182
- - se crea sola al arrancar si no existe
183
- - si hay configuracion legacy previa, puede migrarla con `/profile migrate`
184
- - en Windows/Linux, las credenciales de proveedores tambien se almacenan en esta misma DB
185
- - esas credenciales se guardan cifradas localmente antes de persistirse en `secure_storage`
186
-
187
- Que se guarda ahi:
188
-
189
- - perfiles por proveedor
190
- - perfil activo
191
- - proveedor activo
192
- - ultimo modelo por proveedor
193
- - estado runtime necesario para restaurar contexto rapido
194
- - API keys, tokens OAuth y credenciales scoped por perfil, mediante la tabla `secure_storage`
195
- - el contenido de `secure_storage.value` ya no queda en JSON legible; se cifra localmente antes de escribirse
196
-
197
- Migracion de credenciales:
198
-
199
- - si existe `~/.context/.credentials.json`, se importa automaticamente a SQLite la primera vez que se lee el storage seguro
200
- - si la importacion termina bien, el archivo legacy `.credentials.json` se elimina para evitar dos fuentes de verdad
201
- - en macOS se mantiene el flujo de keychain con fallback, segun el backend disponible
202
-
203
- Estado actual:
204
-
205
- - Windows/Linux ya trabajan en modo `SQLite-only` para providers, perfiles, modelos, base URLs y credenciales
206
- - `/status` y `/profile migrate` muestran si el runtime quedo completamente migrado
207
- - macOS sigue usando keychain/fallback por diseno; esa ruta queda fuera de esta migracion
208
-
209
- ### Proveedores actuales
210
-
211
- Estos son los proveedores visibles hoy y su estado general:
212
-
213
- - `Claude (Anthropic)`: usa OAuth y ahora puede resolver sesion por perfil, manteniendo fallback al storage anterior.
214
- - `OpenAI / Codex`: usa OAuth por perfil con compatibilidad hacia atras.
215
- - `OpenRouter`: usa API key y endpoint configurable por perfil.
216
- - `Ollama Local`: ya trabaja con perfiles; no usa API key y guarda base URL y modelo por perfil.
217
- - `Ollama Cloud`: usa endpoint configurable y queda alineado con la capa de perfiles.
218
- - `Z.AI`: ya trabaja con perfiles; guarda API key, base URL y modelo por perfil.
219
- - `MiniMax`: usa API key y endpoint compatible con Anthropic por perfil.
220
-
221
- ### Compatibilidad hacia atras
222
-
223
- La migracion esta pensada para no romper la configuracion anterior:
224
-
225
- - los valores anteriores pueden servir de base para crear el perfil por defecto durante la migracion inicial
226
- - `/profile migrate` limpia el remanente legacy cuando la DB ya quedo consistente
227
- - en Windows/Linux el objetivo final ya es `SQLite-only`
228
-
229
- ### Notas de uso
230
-
231
- - `Ollama` esta pensado como backend local, con el default en `http://localhost:11434/v1`.
232
- - `Z.AI` requiere API key por perfil y es el primer proveedor no local con soporte real de perfiles.
233
- - `Claude`, `OpenAI`, `OpenRouter`, `MiniMax` y `Ollama Cloud` ya resuelven su estado desde la arquitectura nueva con fallback a la configuracion anterior.
234
- - El comando `/model` sigue existiendo y ahora debe entenderse junto con el perfil activo.
235
-
236
- ## Equipos con varios proveedores
237
-
238
- Esta parte permite usar varios proveedores como si fueran un equipo de trabajo. No necesitas aprender terminos internos: piensa en cuatro niveles simples.
239
-
240
- - `workspace`: representa un proveedor dentro del sistema de equipos, por ejemplo `claude`, `openai`, `minimax` u `ollama`.
241
- - `agent`: es un perfil operativo dentro de un proveedor. Ejemplo: `claude/frontend-lead` o `openai/backend-lead`.
242
- - `team`: es el equipo completo para un objetivo. Ejemplo: `core-dev`.
243
- - `equipo interno`: es un grupo de trabajo dentro del team. Ejemplos: `frontend`, `backend`, `docs`, `planning`, `tests`, `review`, `database`. Cuando creas un team con `/workspace setup`, el sistema arma 4 equipos internos por defecto (`frontend`, `backend`, `docs`, `planning`); los que no asignes a un agente quedaran como warnings al ejecutar.
244
- - `ejecucion` (`run` internamente): es una ejecucion guardada de un objetivo. Tiene tareas, mensajes, resultados y estado. En los comandos veras `<run-id>` porque es el identificador tecnico.
245
-
246
- Mini glosario para no confundirse con los roles internos:
247
-
248
- - `orquestador global`: el agente que coordina todo el team. Lee el objetivo del usuario, lo descompone, asigna trabajo a cada equipo interno y consolida los reportes finales para entregartelos a ti.
249
- - `orquestador local`: por equipo interno. Recibe la parte del objetivo que le toca, decide como dividirla entre los miembros del equipo (o como hacerla solo en `modo autonomo`) y reporta de vuelta al orquestador global.
250
- - `lead`: el agente principal de un equipo interno. En la mayoria de los flujos, el `orquestador local` y el `lead` son el mismo agente.
251
- - `modo autonomo`: cuando un equipo interno no tiene miembros extra, el orquestador local asume internamente los roles que necesite (planner, executor, reviewer, etc.) sin necesitar mas agentes configurados.
252
- - `global-plan` / `squad-plan` / `task.completed` / `run-report`: tipos de mensajes que se guardan en la ejecucion. El primero lo emite el orquestador global al planear, el segundo cada orquestador local cuando recibe su tarea, y los reportes son lo que devuelven cuando terminan. Los puedes ver con `/run messages <run-id>`.
253
-
254
- Orden normal de uso:
255
-
256
- 1. Configuras un proveedor y un perfil con `/provider`, `/login` y `/model`.
257
- 2. Ejecutas `/workspace setup` para crear el equipo base sin hacer todo a mano.
258
- 3. Revisas el equipo con `/team show`.
259
- 4. Generas una ejecucion con `/orchestrate`.
260
- 5. Ejecutas o revisas la ejecucion con `/run`.
261
- 6. Si quieres seleccion automatica o fallback, usas `/policy`.
262
-
263
- ### `/workspace`
264
-
265
- `/workspace` sirve para revisar que proveedores pueden participar en equipos. Un workspace no es una carpeta del proyecto; aqui significa "este proveedor esta disponible para tener agentes".
266
-
267
- Comandos:
268
-
269
- ```sh
270
- /workspace
271
- /workspace list
272
- /workspace show minimax
273
- /workspace enable claude
274
- /workspace disable openrouter
275
- /workspace setup
276
- /workspace orchestrator
277
- /workspace setup core-dev orchestrator=backend claude/main:frontend openai/work:backend
278
- ```
279
-
280
- Uso practico:
281
-
282
- - `/workspace list` muestra los proveedores registrados para equipos.
283
- - `/workspace show minimax` muestra si MiniMax esta habilitado para equipos.
284
- - `/workspace enable claude` permite que agentes de Claude participen en equipos.
285
- - `/workspace disable openrouter` evita que OpenRouter sea usado por la orquestacion.
286
- - `/workspace setup` abre el wizard interactivo.
287
- - `/workspace orchestrator` abre un selector para elegir equipo y cambiar su orquestador principal.
288
- - `/workspace setup core-dev orchestrator=backend claude/main:frontend openai/work:backend` salta el wizard y crea una base de equipo lista para usar.
289
-
290
- El wizard de `/workspace setup` tiene opciones para:
291
-
292
- - preparar un proveedor/perfil
293
- - abrir login o configuracion si faltan credenciales
294
- - llevarte a seleccionar modelo usando `/model`
295
- - escribir el nombre del equipo
296
- - escoger el orquestador principal desde perfiles existentes, crear/activar un perfil nuevo, elegir un area o usar un valor personalizado
297
- - crear el comando base para armar el equipo con autocompletado
298
- - mostrar workspaces disponibles
299
- - mostrar ayuda y ejemplo
300
-
301
- Cuando ya tienes perfiles listos, el modo rapido hace esto por ti:
302
-
303
- 1. Habilita cada proveedor como workspace.
304
- 2. Crea un agente por area con nombre `<area>-lead`.
305
- 3. Conecta cada agente al perfil que escribiste.
306
- 4. Crea el equipo si todavia no existe.
307
- 5. Usa `orchestrator=...` como coordinador principal, o el primer agente si no lo indicas.
308
- 6. Crea o actualiza las areas del equipo.
309
-
310
- El input tambien ayuda con autocompletado para `/workspace`: subcomandos, proveedores, perfiles guardados y areas comunes como `frontend`, `backend`, `docs`, `tests`, `review`, `database` y `devops`.
311
-
312
- Para cambiar el orquestador principal despues de crear el equipo:
313
-
314
- ```sh
315
- /workspace orchestrator
316
- ```
317
-
318
- Ese wizard primero muestra los equipos guardados y luego los agentes disponibles para asignar uno como coordinador global. Si prefieres hacerlo directo:
319
-
320
- ```sh
321
- /workspace orchestrator core-dev openai/backend-lead
322
- ```
323
-
324
- Formato rapido:
325
-
326
- ```text
327
- /workspace setup <equipo> [orchestrator=<area|proveedor/agente>] <proveedor/perfil:area> [...]
328
- ```
329
-
330
- Ejemplo:
331
-
332
- ```sh
333
- /workspace setup core-dev orchestrator=backend claude/main:frontend openai/work:backend minimax/main:docs
334
- ```
335
-
336
- En ese ejemplo:
337
-
338
- - `core-dev` es el equipo.
339
- - `claude/main:frontend` crea o reutiliza `claude/frontend-lead`.
340
- - `openai/work:backend` crea o reutiliza `openai/backend-lead`.
341
- - `minimax/main:docs` crea o reutiliza `minimax/docs-lead`.
342
- - `orchestrator=backend` pone a `openai/backend-lead` como coordinador principal.
343
-
344
- Cuando usarlo:
345
-
346
- - si un proveedor no aparece como opcion para agentes
347
- - si quieres desactivar temporalmente un proveedor
348
- - si quieres confirmar que el sistema reconoce un proveedor antes de crear agentes
349
- - si quieres armar un equipo rapido sin recordar `/agent` y `/team`
350
-
351
- ### `/team-auto` — wizard automatico
352
-
353
- Si todavia no sabes que equipo asignar a cada proveedor, `/team-auto` lo decide por ti. Detecta los perfiles ya logueados y arma un team con equipos internos estandar (`frontend`, `backend`, `docs`, `planning`):
354
-
355
- ```sh
356
- /team-auto # crea un team llamado "default-team"
357
- /team-auto core-dev # crea (o actualiza) un team llamado "core-dev"
358
- ```
359
-
360
- Que pasa al ejecutarlo:
361
-
362
- 1. Detecta los `provider profile` activos (los que ya tienen credencial).
363
- 2. Aplica una heuristica de reparto: Claude -> `frontend`, OpenAI -> `backend`, MiniMax/Z.AI -> `docs`, Ollama/OpenRouter -> `planning`. Si solo tienes 1 proveedor, ese hace TODOS los equipos internos en `modo autonomo`.
364
- 3. Te muestra el plan en pantalla (que equipos va a crear, que agentes va a reusar, quien sera el orquestador global).
365
- 4. Pulsas `Enter` y aplica los cambios, o `Esc` y cancela sin tocar nada.
366
-
367
- Cuando un equipo interno queda sin agente compatible (por ejemplo no tienes ningun proveedor que mapee a `docs`), se reporta `sin asignar` en el plan y queda como warning. Despues puedes asignarlo manualmente con `/team equipo <team> docs <provider>/<agent>`.
368
-
369
- Si el team ya existe, `/team-auto` solo lo actualiza: no borra agentes ni miembros que ya tuvieras.
370
-
371
- Cuando quieras configurarlo todo a mano, sigue habiendo `/workspace setup` (wizard guiado, mas detallado) o el formato corto `/workspace setup <team> orchestrator=... <provider/profile:equipo>...`.
372
-
373
- ### `/agent`
374
-
375
- `/agent` crea nombres de trabajo dentro de cada proveedor. Un agente siempre apunta a un provider profile real.
376
-
377
- Ejemplo: si tienes `claude/main`, puedes crear `claude/frontend-lead`. Ese agente usara las credenciales y modelo del perfil `main`, salvo que le pongas un modelo propio.
378
-
379
- Comandos:
380
-
381
- ```sh
382
- /agent
383
- /agent list
384
- /agent list claude
385
- /agent create claude frontend-lead main
386
- /agent show claude frontend-lead
387
- /agent set-role claude frontend-lead frontend
388
- /agent set-orchestrator claude frontend-lead true
389
- /agent set-model claude frontend-lead claude-sonnet-4-6
390
- ```
391
-
392
- Uso practico:
393
-
394
- - `/agent create claude frontend-lead main` crea un agente llamado `frontend-lead` dentro de Claude usando el perfil `main`.
395
- - `/agent set-role claude frontend-lead frontend` indica que ese agente se especializa en frontend.
396
- - `/agent set-orchestrator claude frontend-lead true` permite que ese agente coordine trabajo.
397
- - `/agent set-model claude frontend-lead <modelo>` fuerza un modelo solo para ese agente.
398
-
399
- Formato para referirse a un agente:
400
-
401
- ```text
402
- provider/agent
403
- ```
404
-
405
- Ejemplos:
406
-
407
- ```text
408
- claude/frontend-lead
409
- openai/backend-lead
410
- minimax/docs-runner
411
- ollama/local-coder
412
- ```
413
-
414
- ### `/team`
415
-
416
- `/team` arma un equipo usando agentes. El team tiene un coordinador principal y puede dividir el trabajo por areas.
417
-
418
- En esta documentacion llamamos `equipo interno` a cada grupo de trabajo. Ejemplos: `frontend`, `backend`, `docs`, `review`, `tests`, `database`.
419
-
420
- Comandos:
421
-
422
- ```sh
423
- /team
424
- /team list
425
- /team create core-dev
426
- /team orchestrator
427
- /team orchestrator core-dev claude/frontend-lead
428
- /team equipo core-dev frontend claude/frontend-lead
429
- /team equipo core-dev backend openai/backend-lead
430
- /team add-member core-dev frontend claude/ui-reviewer reviewer
431
- /team show core-dev
432
- ```
433
-
434
- Uso practico:
435
-
436
- - `/team create core-dev` crea un equipo llamado `core-dev`.
437
- - `/team orchestrator` abre un selector para escoger equipo y luego orquestador principal.
438
- - `/team orchestrator core-dev claude/frontend-lead` define quien coordina todo el equipo.
439
- - `/team equipo core-dev frontend claude/frontend-lead` dice que el area frontend la lidera `claude/frontend-lead`.
440
- - `/team equipo core-dev backend openai/backend-lead` dice que backend lo lidera `openai/backend-lead`.
441
- - `/team add-member core-dev frontend claude/ui-reviewer reviewer` agrega un miembro extra al area frontend.
442
- - `/team show core-dev` muestra como quedo armado el equipo.
443
-
444
- Cuando usas `/team equipo`, ese agente queda como orquestador local y lead del equipo interno al mismo tiempo. Eso significa que usa el perfil/modelo vinculado a ese agente para coordinar su propia area. Por ejemplo, `openai/backend-lead` puede ser el equipo autonomo de backend aunque no tenga miembros extra.
445
-
446
- Si un equipo interno no tiene miembros extra, no esta roto. En ese caso opera en modo autonomo: el orquestador local divide internamente el trabajo segun su funcion principal. Backend puede asumir roles temporales como API, base de datos, validaciones y pruebas; frontend puede asumir UI, componentes, estado y pruebas; docs puede asumir guia tecnica y README. Los miembros extra son opcionales cuando quieres dividir mas el trabajo.
447
-
448
- Ejemplo mental simple:
449
-
450
- - Claude puede coordinar frontend.
451
- - OpenAI puede coordinar backend.
452
- - MiniMax puede hacer documentacion o tareas rapidas.
453
- - Ollama puede actuar como ejecutor local.
454
- - El coordinador principal mira el objetivo completo y recibe reportes de cada area.
455
-
456
- ## Crear y ejecutar una ejecucion
457
-
458
- Una ejecucion es un objetivo guardado con sus tareas, mensajes, resultados y estado. Por ejemplo: "crear login con UI y API". Internamente se guarda como `run` en SQLite, por eso puedes cerrar la app y luego volver a revisarla.
459
-
460
- ### `/orchestrate`
461
-
462
- `/orchestrate` toma un team y un objetivo, planifica el trabajo, **te muestra el plan en pantalla** y te pregunta si quieres ejecutarlo ya:
463
-
464
- ```sh
465
- /orchestrate core-dev crear endpoint de login y UI de acceso
466
- ```
467
-
468
- Que pasa cuando lo ejecutas:
469
-
470
- 1. El sistema valida el team, el orquestador global y los equipos internos.
471
- 2. Crea la ejecucion y todas sus tareas en estado `ready` o `blocked` segun la configuracion del equipo.
472
- 3. **Te muestra el plan**: tareas por equipo, agentes asignados, advertencias de configuracion.
473
- 4. Te ofrece dos teclas:
474
- - **`Enter`**: ejecuta inmediatamente las tareas `ready`. Veras progreso en vivo (equipo que esta trabajando, agente activo, fase) y al final un reporte consolidado.
475
- - **`Esc`**: deja la ejecucion en `planned`. Puedes revisar con `/run show <run-id>` o ejecutar mas tarde con `/run resume <run-id>`.
476
-
477
- Cuando confirmas con Enter, el flujo interno es: orquestador global delega a cada orquestador local -> cada orquestador local ejecuta o subdelega en `modo autonomo` -> cada uno devuelve su reporte de tarea -> el orquestador global consolida y emite el `run-report` final que ves tu.
478
-
479
- Si pulsas Esc o no hay tareas `ready` (todo quedo bloqueado), la ejecucion se queda en estado `planned` y el comando termina mostrando los siguientes pasos sugeridos. En ese caso normalmente sigues con:
480
-
481
- ```sh
482
- /run show <run-id> # revisar el plan en detalle
483
- /run resume <run-id> # ejecutar despues
484
- ```
485
-
486
- ### `/run`
487
-
488
- `/run` sirve para revisar, ejecutar, reintentar, reasignar o cancelar una ejecucion.
489
-
490
- Comandos principales:
491
-
492
- ```sh
493
- /run
494
- /run list
495
- /run show <run-id>
496
- /run messages <run-id>
497
- /run tasks <run-id>
498
- /run task <task-id>
499
- /run equipo <run-id> <equipo>
500
- /run resume <run-id>
501
- /run cancel <run-id>
502
- ```
503
-
504
- Comandos de recuperacion:
505
-
506
- ```sh
507
- /run retry <run-id> [task-id]
508
- /run cancel-task <task-id>
509
- /run reassign <task-id> <provider>/<agent>
510
- ```
511
-
512
- Que hace cada comando:
513
-
514
- - `/run list` muestra las ejecuciones guardadas.
515
- - `/run show <run-id>` muestra resumen, estado, tareas y ultimos mensajes.
516
- - `/run tasks <run-id>` muestra todas las tareas de la ejecucion.
517
- - `/run task <task-id>` muestra una tarea concreta con sus mensajes y resultados.
518
- - `/run equipo <run-id> frontend` muestra solo el area `frontend`.
519
- - `/run messages <run-id>` muestra la bitacora completa.
520
- - `/run resume <run-id>` ejecuta tareas listas.
521
- - `/run cancel <run-id>` detiene la ejecucion.
522
- - `/run retry <run-id>` reintenta tareas fallidas o bloqueadas.
523
- - `/run retry <run-id> <task-id>` reintenta una tarea concreta.
524
- - `/run cancel-task <task-id>` bloquea una tarea para que no continue.
525
- - `/run reassign <task-id> openai/backend-lead` cambia el agente responsable.
526
-
527
- Estados de una ejecucion:
528
-
529
- - `planned`: fue creada pero aun no se ejecuto.
530
- - `in_progress`: esta en ejecucion.
531
- - `completed`: termino sin tareas abiertas.
532
- - `failed`: alguna tarea fallo o quedo bloqueada.
533
- - `cancelled`: fue cancelada por el usuario.
534
-
535
- Estados de una tarea:
536
-
537
- - `pending`: aun no esta lista.
538
- - `ready`: puede ejecutarse.
539
- - `in_progress`: esta ejecutandose.
540
- - `completed`: termino con resultado.
541
- - `failed`: fallo al ejecutar.
542
- - `blocked`: falta configuracion, credenciales, modelo, endpoint o agente valido.
543
-
544
- ### Ejemplo completo
545
-
546
- ```sh
547
- # 1. Configurar dos proveedores y sus perfiles
548
- /provider claude profile main
549
- /login
550
- /model
551
-
552
- /provider openai profile work
553
- /login
554
- /model
555
-
556
- # 2. Crear el team con frontend en Claude y backend en OpenAI
557
- /workspace setup core-dev orchestrator=backend claude/main:frontend openai/work:backend
558
- /team show core-dev
559
-
560
- # 3. Pedir el objetivo. /orchestrate planifica, muestra el plan
561
- # en pantalla y pregunta si ejecutar ya:
562
- # [Enter] = ejecuta y veras progreso + reporte final
563
- # [Esc] = solo planifica, queda en estado 'planned'
564
- /orchestrate core-dev crear login con UI y API
565
-
566
- # 4. (Opcional) revisar la bitacora completa de mensajes
567
- /run list
568
- /run messages <run-id>
569
- ```
570
-
571
- Notas importantes:
572
-
573
- - Si `/workspace setup` solo asigno agente a `frontend` y `backend`, los equipos `docs` y `planning` apareceran como `blocked` con warnings al planear. **No es un error**: las tareas ready se ejecutan igual al pulsar Enter, y las bloqueadas las puedes asignar despues con `/team equipo core-dev docs <provider>/<agent>` y reintentar con `/run retry <run-id>`.
574
- - El reporte final que ves al terminar viene del orquestador global. Si quieres ver lo que cada orquestador local respondio, usa `/run messages <run-id>` o `/run equipo <run-id> <equipo>`.
575
-
576
- ## Seleccion automatica y fallback
577
-
578
- La seleccion automatica permite que Context Code recomiende o aplique que agente debe tomar una tarea. El fallback permite cambiar una tarea fallida o bloqueada a otro agente compatible.
579
-
580
- ### `/policy`
581
-
582
- `/policy` muestra politicas predefinidas. Una politica indica como elegir agentes.
583
-
584
- ```sh
585
- /policy list
586
- /policy show score-with-fallback:quality
587
- ```
588
-
589
- Modos disponibles:
590
-
591
- - `manual`: usa el agente que ya estaba asignado.
592
- - `score`: elige el mejor agente por puntaje.
593
- - `score-with-fallback`: elige el mejor agente y guarda candidatos alternos.
594
- - `fallback-only`: mantiene la asignacion inicial y solo cambia si algo falla.
595
-
596
- Objetivos disponibles:
597
-
598
- - `balanced`: equilibrio general.
599
- - `cost`: prioriza costo.
600
- - `latency`: prioriza velocidad.
601
- - `quality`: prioriza calidad.
602
- - `capability`: prioriza especialidad declarada.
603
- - `resilience`: prioriza estabilidad y opciones de recuperacion.
604
-
605
- Formato:
606
-
607
- ```text
608
- modo:objetivo
609
- ```
610
-
611
- Ejemplos:
612
-
613
- ```text
614
- score-with-fallback:quality
615
- score:capability
616
- score-with-fallback:resilience
617
- manual:balanced
618
- ```
619
-
620
- ### Comandos de Fase 4
621
-
622
- ```sh
623
- /run optimize <run-id> [policy]
624
- /run assign <run-id> [policy]
625
- /run fallback <run-id> [task-id] [policy]
626
- /run explain <run-id>
627
- ```
628
-
629
- Que hace cada uno:
630
-
631
- - `/run optimize <run-id> score-with-fallback:quality` simula la seleccion y muestra candidatos. No cambia tareas.
632
- - `/run assign <run-id> score:capability` aplica la seleccion y asigna tareas abiertas.
633
- - `/run fallback <run-id> <task-id> score-with-fallback:resilience` busca otro agente para una tarea fallida o bloqueada.
634
- - `/run explain <run-id>` muestra las decisiones guardadas como mensajes `policy.*`.
635
-
636
- Reglas importantes:
637
-
638
- - cada decision automatica queda guardada en SQLite
639
- - `/run optimize` es seguro porque solo muestra recomendaciones
640
- - `/run assign` y `/run fallback` si cambian tareas
641
- - un agente deshabilitado no debe ser elegido
642
- - si falta perfil, modelo o credenciales, la tarea puede quedar `blocked`
643
- - errores de autenticacion no deben reintentarse agresivamente
644
-
645
- ## Datos guardados en SQLite
646
-
647
- La base se crea automaticamente en:
648
-
649
- ```text
650
- ~/.context/provider-state.sqlite3
651
- ```
652
-
653
- Ademas de perfiles y credenciales de providers, ahi se guardan:
654
-
655
- - `provider_workspaces`: proveedores disponibles para equipos
656
- - `provider_agents`: agentes por proveedor/perfil
657
- - `provider_agent_capabilities`: capacidades declaradas de agentes
658
- - `teams`: equipos
659
- - `team_units`: equipos internos dentro de un team
660
- - `team_unit_members`: miembros de cada equipo interno
661
- - `orchestration_runs`: ejecuciones
662
- - `orchestration_tasks`: tareas
663
- - `orchestration_messages`: bitacora de decisiones y eventos
664
- - `orchestration_task_results`: resultados por tarea
665
- - `orchestration_team_reports`: reportes por equipo interno
666
- - `orchestration_run_reports`: reporte consolidado de una ejecucion
667
- - `secure_storage`: credenciales cifradas y configuracion sensible de providers, Telegram y WhatsApp en Windows/Linux
668
-
669
- ## Limitaciones actuales
670
-
671
- - La calidad de la ejecucion depende de que cada agente tenga perfil, modelo y credenciales validas.
672
- - La seleccion automatica ya existe, pero las politicas personalizadas editables todavia no estan persistidas con `/policy create`.
673
- - El fallback es auditable y controlado, no un sistema de retries infinitos.
674
- - Si varios proveedores producen respuestas incompatibles, el usuario debe revisar el consolidado antes de cerrar la ejecucion.
675
-
676
- ## Puentes con mensajería móvil
677
-
678
- Context Code puede conectarse con **Telegram** y **WhatsApp** para que veas y respondas la conversación completa desde tu móvil. Cada mensaje que escribes en la terminal se refleja en el chat, cada respuesta del modelo llega de vuelta, y cada herramienta que ejecuta el asistente (Bash, Read, Edit…) se resume en una línea. También puedes escribir **desde el móvil** y el texto se inyecta al REPL como si lo hubieras tecleado en la terminal — la conversación es la misma, da igual por dónde entres.
679
-
680
- Los dos puentes funcionan de forma independiente: puedes usar solo Telegram, solo WhatsApp, o los dos a la vez.
681
-
682
- ### Qué se sincroniza
683
-
684
- - **De la terminal al móvil:** tus prompts (`👤`), las respuestas de texto del modelo (`🤖`) y una línea por cada tool call (`🔧 Bash: npm test`, `🔧 Read: src/foo.ts`, etc.). No se manda el output crudo de las herramientas para no saturar el chat.
685
- - **Del móvil a la terminal:** cualquier texto que envíes aterriza en la cola de entrada del REPL con la misma prioridad que si lo hubieras escrito en la CLI.
686
- - **Antiduplicado:** si escribes desde el móvil, ese texto no se reenvía de vuelta al mismo canal. El otro canal sí lo recibe (si está activo).
687
- - **Código no sincronizado:** mensajes internos del sistema, salidas de slash commands y otros eventos auxiliares no se envían a los canales.
688
-
689
- ### `/telegram` — Bridge con Telegram
690
-
691
- Usa la [Bot API oficial de Telegram](https://core.telegram.org/bots/api) vía `grammy`. Requiere crear un bot en **@BotFather** y darle al wizard el token.
692
-
693
- Flujo en 3 pasos:
694
-
695
- 1. **Intro** con instrucciones para crear el bot en `@BotFather` (`/newbot`, nombre, username, token).
696
- 2. **Pegar el token** — input con validación de formato `123456789:ABC-...`.
697
- 3. **Iniciar bot** — el bridge queda corriendo.
698
-
699
- Desde el móvil, envía `/start` al bot y ese chat queda registrado como destinatario primario. El bot también responde a `/status`, `/model <nombre>` y `/provider <nombre>` para cambiar proveedor o modelo desde Telegram.
700
-
701
- Comandos dentro de la CLI:
702
-
703
- ```
704
- /telegram # abre el wizard (alias: /tele, /bot)
705
- ```
706
-
707
- El token queda guardado localmente en la config (`~/.context/...`) y nunca sale del equipo.
708
-
709
- ### `/whatsapp` — Bridge con WhatsApp
710
-
711
- Usa **Baileys** (`@whiskeysockets/baileys`) vía WhatsApp Web para vincular una cuenta como dispositivo enlazado. Baileys es **opcional**: solo se carga cuando ejecutas `/whatsapp` por primera vez, así no pesa en la instalación base. El QR se dibuja en la terminal usando el paquete `qrcode`, ya incluido en el proyecto.
712
-
713
- > ⚠️ **Aviso importante.** Baileys es una librería no-oficial. Conectarse por esta vía viola los Términos de Servicio de WhatsApp. Para uso personal en un proyecto privado rara vez pasa nada, pero el número que uses podría ser baneado por WhatsApp en casos extremos. Se recomienda usar un **número dedicado para el bot** (eSIM, número secundario, etc.), no tu WhatsApp personal.
714
-
715
- Flujo en 5 pasos:
716
-
717
- 1. **Intro + aviso de riesgo.**
718
- 2. **Escanear QR** — el wizard dibuja el QR en la terminal. En el móvil del bot: WhatsApp → *Dispositivos Vinculados* → *Vincular un dispositivo* → escaneas.
719
- 3. **Tu número (destinatario primario)** — el número en formato E.164 (`+573001234567`) donde quieres recibir el espejo. También puedes saltar y el primer número que escriba al bot se auto-registra.
720
- 4. **Allowlist de números autorizados** — agregas los números que pueden escribirle al bot. Los mensajes de números fuera de la lista se ignoran en silencio.
721
- 5. **Iniciar bridge** — el bridge queda corriendo.
722
-
723
- Desde el panel de ejecución puedes detener el bridge, gestionar la lista de autorizados o cambiar el destinatario sin reiniciar.
724
-
725
- Comandos dentro de la CLI:
726
-
727
- ```
728
- /whatsapp # abre el wizard (alias: /wa, /whats)
729
- ```
730
-
731
- Las credenciales de sesión de WhatsApp Web se guardan como archivos en `~/.context/whatsapp-auth/` (respetando `CLAUDE_CONFIG_DIR` si está definido), porque Baileys necesita manejar ese directorio de auth. La configuracion lógica del bridge, como destinatario primario, allowlist, identidad vinculada y estado `running`, se guarda en SQLite mediante `secure_storage` en Windows/Linux.
732
-
733
- ### Configuración guardada
734
-
735
- Ambos bridges persisten su configuracion en el storage seguro. En Windows/Linux esto vive cifrado dentro de `~/.context/provider-state.sqlite3`; en macOS se mantiene el backend de keychain/fallback disponible.
736
-
737
- ```jsonc
738
- {
739
- "telegramBot": {
740
- "token": "…",
741
- "allowedUserIds": [123456],
742
- "primaryChatId": 123456,
743
- "isRunning": true
744
- },
745
- "whatsappBot": {
746
- "authDir": "~/.context/whatsapp-auth",
747
- "primaryRecipient": "+573001234567",
748
- "allowedNumbers": ["+573001234567", "+573109876543"],
749
- "selfJid": "573...@s.whatsapp.net",
750
- "selfE164": "+573...",
751
- "running": true
752
- }
753
- }
754
- ```
755
-
756
- Si existe configuracion vieja en el archivo JSON global, se migra automaticamente al leer o actualizar el bridge y se elimina esa clave legacy para evitar dos fuentes de verdad.
757
-
758
- ### Ritmo de envío
759
-
760
- Cada canal usa una cola con throttling para no dispararse contra los rate limits de la plataforma:
761
-
762
- - **Telegram:** 150 ms entre mensajes (~6 msg/s, bien por debajo del límite oficial de 30 msg/s por bot).
763
- - **WhatsApp:** 500 ms entre mensajes (más conservador — Baileys no publica límites formales y enviar demasiado rápido puede disparar shadow-bans).
764
-
765
- Si escribes prompts muy rápido la cola se llena hasta 200 items, y a partir de ahí descarta el más viejo para no crecer sin límite.
766
-
767
- ## Ejemplo completo de flujo de trabajo
768
-
769
- Este ejemplo muestra un flujo real de principio a fin. Puedes cambiar `claude`, `openai`, `minimax` u `ollama` por los proveedores que tengas configurados.
770
-
771
- ### 1. Preparar el primer proveedor
772
-
773
- Activa el proveedor, inicia sesion y elige modelo.
774
-
775
- ```sh
776
- /provider claude profile main
777
- /login
778
- /model
779
- ```
780
-
781
- Verifica que quedo activo:
782
-
783
- ```sh
784
- /status
785
- ```
786
-
787
- Debes revisar que aparezcan proveedor, perfil activo, modelo guardado y credenciales configuradas.
788
-
789
- ### 2. Preparar otro proveedor
790
-
791
- Repite el proceso para otro proveedor. En este ejemplo OpenAI sera backend.
792
-
793
- ```sh
794
- /provider openai profile work
795
- /login
796
- /model
797
- /status
798
- ```
799
-
800
- Si usas Ollama local, normalmente seria:
801
-
802
- ```sh
803
- /provider ollama profile local
804
- /model
805
- /status
806
- ```
807
-
808
- ### 3. Crear el equipo con el wizard
809
-
810
- Abre el wizard:
811
-
812
- ```sh
813
- /workspace setup
814
- ```
815
-
816
- Desde ahi puedes elegir:
817
-
818
- - `Preparar proveedor/perfil`: seleccionas proveedor, escribes perfil y el sistema lanza `/provider`. Si faltan credenciales, se abre login/configuracion; despues te lleva a `/model`.
819
- - `Crear equipo y elegir orquestador`: escribes el nombre del equipo, eliges si el orquestador sale de un perfil existente, de un perfil nuevo, de un area o de un agente ya creado, y luego el input queda listo para completar proveedores, perfiles y areas con autocompletado.
820
-
821
- Si ya sabes los perfiles y areas, puedes saltarte el wizard y crear el equipo base en un solo comando:
822
-
823
- ```sh
824
- /workspace setup core-dev orchestrator=backend claude/main:frontend openai/work:backend
825
- /team show core-dev
826
- ```
827
-
828
- En este ejemplo:
829
-
830
- - `core-dev` es el equipo.
831
- - `claude/frontend-lead` coordina el equipo completo.
832
- - `frontend` queda asignado a Claude.
833
- - `backend` queda asignado a OpenAI.
834
-
835
- Si quieres hacerlo a mano, todavia puedes usar `/workspace enable`, `/agent create`, `/agent set-role`, `/team create`, `/team orchestrator` y `/team equipo`. El wizard solo junta esos pasos para evitar errores.
836
-
837
- ### 4. Crear una ejecucion y revisar el plan en pantalla
838
-
839
- ```sh
840
- /orchestrate core-dev crear login con UI y API
841
- ```
842
-
843
- A diferencia de versiones anteriores, **`/orchestrate` no se queda en silencio**: te muestra una vista resumen con la ejecucion creada, las tareas por equipo, advertencias y un prompt:
25
+ ## 📚 Documentación
844
26
 
845
- ```text
846
- Plan listo para core-dev
847
- Ejecucion: 1b4fb901-...
848
- Objetivo: crear login con UI y API
849
- Orquestador global: openai/backend-lead
27
+ Hemos organizado toda la documentación técnica, guías operativas y arquitectura en la carpeta `docs/`.
850
28
 
851
- Tareas por equipo
852
- - backend -> ready | assigned=openai/backend-lead
853
- - docs -> blocked | assigned=sin asignar
854
- - frontend -> ready | assigned=claude/frontend-lead
855
- - planning -> blocked | assigned=sin asignar
856
-
857
- Listas: 2 | Bloqueadas: 2
858
-
859
- Advertencias
860
- - docs: warning -> No hay agente asignable para este equipo.
861
- - planning: warning -> No hay agente asignable para este equipo.
862
-
863
- [Enter] Ejecutar ahora (las bloqueadas se omiten) | [Esc] Solo planificar
864
- ```
865
-
866
- ### 5. Decidir: ejecutar ya, o revisar y ejecutar despues
867
-
868
- - **Pulsa `Enter`** y empezara la ejecucion al instante. Solo se disparan las tareas `ready`. Mientras corren, veras lineas de progreso por equipo. Al final llega el reporte consolidado.
869
- - **Pulsa `Esc`** si prefieres revisar antes. La ejecucion queda en `planned`. Despues puedes inspeccionarla con:
870
-
871
- ```sh
872
- /run show <run-id>
873
- /run tasks <run-id>
874
- /run equipo <run-id> frontend
875
- /run equipo <run-id> backend
876
- ```
877
-
878
- Si una tarea aparece `blocked`, normalmente falta agente, workspace, perfil, modelo o credencial. Asigna lo que falte y vuelve.
879
-
880
- ### 6. Ejecutar manualmente cuando hayas pulsado Esc
881
-
882
- ```sh
883
- /run resume <run-id>
884
- ```
885
-
886
- Luego revisa resultados:
887
-
888
- ```sh
889
- /run show <run-id>
890
- /run messages <run-id>
891
- ```
892
-
893
- Si quieres ver una tarea concreta:
894
-
895
- ```sh
896
- /run task <task-id>
897
- ```
898
-
899
- ### 7. Usar seleccion automatica antes de reasignar
900
-
901
- Si quieres ver que agente recomienda el sistema sin cambiar nada:
902
-
903
- ```sh
904
- /policy list
905
- /policy show score-with-fallback:quality
906
- /run optimize <run-id> score-with-fallback:quality
907
- ```
908
-
909
- Si la recomendacion te parece correcta, puedes aplicarla:
910
-
911
- ```sh
912
- /run assign <run-id> score:capability
913
- ```
914
-
915
- Para ver por que se tomaron decisiones:
916
-
917
- ```sh
918
- /run explain <run-id>
919
- ```
920
-
921
- ### 8. Recuperar errores o bloqueos
922
-
923
- Si una tarea fallo o quedo bloqueada, puedes reintentar:
924
-
925
- ```sh
926
- /run retry <run-id>
927
- ```
928
-
929
- O reintentar solo una tarea:
930
-
931
- ```sh
932
- /run retry <run-id> <task-id>
933
- ```
934
-
935
- Si quieres cambiarla a otro agente manualmente:
936
-
937
- ```sh
938
- /run reassign <task-id> claude/frontend-lead
939
- /run resume <run-id>
940
- ```
941
-
942
- Si quieres que el sistema busque otro agente compatible:
943
-
944
- ```sh
945
- /run fallback <run-id> <task-id> score-with-fallback:resilience
946
- /run resume <run-id>
947
- ```
948
-
949
- ### 9. Cerrar o cancelar
950
-
951
- Si todo termino bien:
952
-
953
- ```sh
954
- /run show <run-id>
955
- ```
956
-
957
- Si necesitas detener la ejecucion:
958
-
959
- ```sh
960
- /run cancel <run-id>
961
- ```
962
-
963
- ### Resumen corto
964
-
965
- ```sh
966
- /provider claude profile main
967
- /login
968
- /model
969
-
970
- /provider openai profile work
971
- /login
972
- /model
973
-
974
- /workspace setup core-dev orchestrator=backend claude/main:frontend openai/work:backend
975
- /team show core-dev
976
-
977
- /orchestrate core-dev crear login con UI y API
978
- # Aqui ves el plan en pantalla.
979
- # [Enter] ejecuta ya y muestra el reporte final.
980
- # [Esc] te deja la ejecucion en 'planned'; ejecuta despues con /run resume <run-id>.
981
-
982
- /run messages <run-id> # bitacora completa cuando quieras revisarla
983
- ```
984
-
985
- ## Cuando algo no avanza
986
-
987
- Sintomas comunes despues de `/orchestrate` o `/run resume`, y como salir de cada uno.
988
-
989
- ### "El plan se quedo en `planned` y no pasa nada"
990
-
991
- Pulsaste `Esc` (o cerraste la vista) en lugar de `Enter`. La ejecucion existe pero no se ejecuto. Reanuda cuando quieras:
992
-
993
- ```sh
994
- /run resume <run-id>
995
- ```
996
-
997
- ### "Aparecen equipos `blocked` que yo no pedi"
998
-
999
- Cuando creas un team con `/workspace setup` y solo das agente a algunos equipos (por ejemplo `frontend` y `backend`), los demas (`docs`, `planning`, etc.) se crean igual y quedan sin asignar. Al planear se reportan como `blocked` con el warning `No hay agente asignable para este equipo.`. Tienes dos salidas:
1000
-
1001
- - **Ignorarlos**: pulsas Enter, las tareas `ready` se ejecutan y las `blocked` se quedan asi. La ejecucion se reporta como `failed` o `completed` segun lo que avance.
1002
- - **Asignar agente y reintentar**:
1003
- ```sh
1004
- /team equipo <team> docs <provider>/<agent>
1005
- /team equipo <team> planning <provider>/<agent>
1006
- /run retry <run-id>
1007
- ```
1008
-
1009
- ### "Mi proveedor devolvio `usage_limit_reached` o `rate_limit`"
1010
-
1011
- Pasa cuando un proveedor alcanza el limite de tokens/segundo o de plan. La tarea afectada queda `failed`. Opciones:
1012
-
1013
- - Cambiar de perfil del mismo proveedor con `/profile use <proveedor> <otro-perfil>` y reintentar.
1014
- - Reasignar la tarea a otro agente:
1015
- ```sh
1016
- /run reassign <task-id> <provider>/<agent>
1017
- /run resume <run-id>
1018
- ```
1019
- - Pedir al sistema que busque un agente alterno:
1020
- ```sh
1021
- /run fallback <run-id> <task-id> score-with-fallback:resilience
1022
- /run resume <run-id>
1023
- ```
1024
-
1025
- ### "Faltan credenciales o el modelo no esta configurado"
1026
-
1027
- Verifica el estado del perfil:
1028
-
1029
- ```sh
1030
- /status
1031
- ```
1032
-
1033
- Si falta token, modelo o base URL, vuelve a `/login` y `/model` para ese perfil. La tarea queda `blocked` hasta que el agente tenga todo lo que necesita.
1034
-
1035
- ### "Quiero detener una ejecucion en marcha"
1036
-
1037
- ```sh
1038
- /run cancel <run-id>
1039
- ```
1040
-
1041
- ### "Quiero ver que dijo cada orquestador local antes del reporte final"
1042
-
1043
- ```sh
1044
- /run messages <run-id>
1045
- /run equipo <run-id> <equipo>
1046
- /run task <task-id>
1047
- ```
1048
-
1049
- `/run messages` te lista en orden cronologico todos los `global-plan`, `squad-plan`, `task.completed`, `run-report` y eventos de policy de la ejecucion.
1050
-
1051
- ## Servidores MCP externos
1052
-
1053
- Context Code soporta el [Model Context Protocol](https://modelcontextprotocol.io). Puedes conectar servidores MCP de terceros para dar a los agentes herramientas extra: leer una base de datos, consultar Sentry, hablar con tu wiki interna, etc.
1054
-
1055
- Comandos:
1056
-
1057
- ```sh
1058
- /mcp # abre el panel de servidores configurados
1059
- /mcp add <name> -- <command> [args...] # registra un servidor stdio
1060
- /mcp add --transport http <name> <url> # registra un servidor HTTP
1061
- /mcp add --transport sse <name> <url> # registra un servidor SSE
1062
- ```
1063
-
1064
- Tambien puedes registrar servidores con `--scope project` (escribe en `.mcp.json` del proyecto) o `--scope user` (queda solo para tu usuario). El default es `project` cuando estas dentro de un repo y `user` cuando no.
1065
-
1066
- ### Ejemplo: conectar una base de datos SQLite
1067
-
1068
- Existen servidores MCP listos para hablar con bases de datos. El mas conocido es `mcp-server-sqlite`. Lo instalas y lo registras:
1069
-
1070
- ```sh
1071
- # 1. Instalar el servidor (o usar npx para no instalar)
1072
- pip install mcp-server-sqlite
1073
-
1074
- # 2. Registrarlo en Context Code apuntando a tu DB
1075
- /mcp add sqlite-local -- mcp-server-sqlite --db-path ./data/app.sqlite
1076
- ```
1077
-
1078
- A partir de ese momento, los agentes que ejecuten en este proyecto pueden listar tablas, hacer SELECT y describir el esquema sin que tu tengas que escribir SQL ni copiar/pegar resultados.
1079
-
1080
- ### Ejemplo: conectar Postgres
1081
-
1082
- ```sh
1083
- # Con uvx (recomendado, sin instalacion previa)
1084
- /mcp add postgres-prod --transport stdio -- uvx mcp-server-postgres \
1085
- --connection-string "postgres://user:pass@localhost:5432/mydb"
1086
-
1087
- # O con un servidor HTTP ya desplegado
1088
- /mcp add postgres-prod --transport http https://mcp.midominio.com/postgres \
1089
- --header "Authorization: Bearer $TOKEN"
1090
- ```
1091
-
1092
- Pasos a tener en cuenta:
1093
-
1094
- - Los servidores MCP corren con tus permisos. Si conectas a una DB de produccion, considera dar al servidor solo credenciales de lectura.
1095
- - Variables sensibles: usa `-e VAR=valor` al registrar el server stdio para inyectar tokens sin que queden en el comando visible.
1096
- - Las herramientas MCP aparecen en los agentes con prefijo `mcp__<name>__<tool>`. Puedes restringir cuales se autorizan con `--allowedTools` al iniciar la sesion.
1097
- - Si un equipo (`database`, por ejemplo) tendria que usar este MCP, asignale un agente con `/team equipo <team> database <provider>/<agent>` y el orquestador local lo invocara cuando el plan lo requiera.
1098
-
1099
- ### Diferencia con el storage interno
1100
-
1101
- El archivo `~/.context/provider-state.sqlite3` es persistencia interna del CLI (perfiles, runs, credenciales). **No es un MCP** y los agentes no lo consultan directamente; solo el runtime lo lee/escribe. Si quieres exponer datos de una base **a los agentes**, registra un servidor MCP como en los ejemplos de arriba.
1102
-
1103
- ## Limites y uso por proveedor
1104
-
1105
- `/limites` (alias `/limits`) consulta cada proveedor configurado y te muestra cuanto has consumido, cuanto te queda y los limites de tu plan, en una sola vista.
1106
-
1107
- ```sh
1108
- /limites
1109
- ```
1110
-
1111
- Que hace:
1112
-
1113
- 1. Itera sobre todos los `provider profile` que tienes guardados.
1114
- 2. Para cada uno, si hay un adapter implementado, llama a su API real en paralelo (con timeout).
1115
- 3. Suma a la respuesta el contador local de tokens del CLI: cuantos tokens ha consumido este perfil en la sesion actual y en el historico persistido en SQLite.
1116
-
1117
- Estado de cada proveedor:
1118
-
1119
- | Proveedor | Que se consulta |
1120
- |----------------|-----------------------------------------------------------------------------------------------------------------------|
1121
- | Claude (OAuth) | `GET /api/oauth/usage` -> ventanas (5h/7d/Opus/Sonnet) y extra usage. Reusa el cliente que alimenta a `/usage` |
1122
- | Anthropic API | `no-data` — solo headers `anthropic-ratelimit-*` por llamada |
1123
- | OpenAI OAuth | `no-data` — Codex/ChatGPT solo exponen rate limits dentro del `TokenCountEvent` de cada respuesta del modelo |
1124
- | OpenAI API | `GET /v1/usage` (requiere admin key); si la key no tiene permiso, `no-data` |
1125
- | OpenRouter | `GET /api/v1/auth/key` -> creditos, limite, rate limit |
1126
- | MiniMax | `GET /v1/token_plan/remains` -> uso por modelo (endpoint reverse-engineered desde MiniMax-AI/cli `mmx quota show`) |
1127
- | Z.AI | `GET /api/monitor/usage/quota/limit` -> tokens usados/limite del coding plan |
1128
- | Ollama local | Siempre `ok` (ilimitado, corre en tu maquina); cuenta modelos disponibles |
1129
- | Ollama Cloud | `no-data` salvo localhost |
1130
-
1131
- El contador local de tokens funciona para todos los proveedores por igual: se persiste en `~/.context/provider-state.sqlite3` y te permite saber cuanto has gastado aunque el proveedor no exponga API. La cuenta empieza en cero la primera vez que ejecutas `/limites` despues de instalar.
1132
-
1133
- Comandos relacionados:
1134
-
1135
- ```sh
1136
- /limites # vista interactiva por proveedor
1137
- /usage # solo Claude: limites del plan vistos por Settings
1138
- /cost # costo de la sesion actual
1139
- ```
29
+ **👉 [Ver el Índice de Documentación](docs/index.md)**
1140
30
 
1141
31
  ## Reporte de errores
1142
32
 
1143
33
  Usa el comando `/bug` dentro de Context Code.
1144
34
 
1145
- ## Recoleccion, uso y retencion de datos
35
+ ## Recolección, uso y retención de datos
1146
36
 
1147
- Cuando usas Context Code, pueden recopilarse datos de uso y retroalimentacion como se describe en la documentacion.
37
+ Cuando usas Context Code, pueden recopilarse datos de uso y retroalimentación como se describe en la documentación.
1148
38
 
1149
- - [Politicas de uso de datos](https://code.iaforged.com/docs/en/data-usage)
39
+ - [Políticas de uso de datos](https://code.iaforged.com/docs/en/data-usage)