agents-city 0.3.0-beta.22 → 0.4.0
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/.claude-plugin/marketplace.json +1 -1
- package/README.es.md +309 -44
- package/README.md +295 -43
- package/bin/agents-city.js +7 -0
- package/bin/doctor +3 -0
- package/bin/hall.html +252 -25
- package/bin/navegador.mjs +544 -0
- package/bin/serve.py +442 -130
- package/bin/shortcut +3 -0
- package/bin/test +10 -4
- package/bin/test-actualiza.py +130 -0
- package/bin/test-atajos.py +301 -0
- package/bin/test-busca.py +216 -0
- package/bin/test-cage.py +170 -2
- package/bin/test-card.py +2 -2
- package/bin/test-cities.py +45 -0
- package/bin/test-contracts.py +2 -2
- package/bin/test-demo.py +67 -0
- package/bin/test-desinstala.py +170 -0
- package/bin/test-doctor.py +33 -0
- package/bin/test-navegador.py +166 -0
- package/bin/test-seat.py +245 -25
- package/bin/test-serve.py +336 -11
- package/bin/test-workspace.py +63 -0
- package/bin/testlib.py +23 -0
- package/bin/uninstall +5 -0
- package/bin/update +3 -0
- package/city/web/dist/city.js +65 -65
- package/city/web/dist/index.html +18 -5
- package/city/web/dist-hall/hall.js +2749 -174
- package/city/web/index.html +17 -4
- package/city/web/src/bienvenida.ts +392 -0
- package/city/web/src/casa.ts +282 -0
- package/city/web/src/demo.ts +247 -0
- package/city/web/src/dialogo.ts +178 -0
- package/city/web/src/es.ts +276 -0
- package/city/web/src/explorador.ts +189 -0
- package/city/web/src/hall.ts +626 -171
- package/city/web/src/idioma.ts +86 -0
- package/city/web/src/main.ts +53 -3
- package/city/web/src/motores.ts +54 -0
- package/demo/graba.py +132 -0
- package/demo/grabaciones/legal.jsonl +22 -0
- package/demo/grabaciones/medicina.jsonl +22 -0
- package/demo/grabaciones/software.jsonl +22 -0
- package/docs/agents-first.md +8 -1
- package/docs/security.md +46 -12
- package/package.json +1 -1
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/channel/bus.js +1 -1
- package/plugin/channel/bus.ts +1 -1
- package/plugin/channel/runtime/codex.ts +1 -1
- package/plugin/channel/runtime-gateway.js +1 -1
- package/plugin/scripts/actualiza.py +198 -0
- package/plugin/scripts/atajos.py +506 -0
- package/plugin/scripts/busca.py +436 -0
- package/plugin/scripts/cage.py +266 -26
- package/plugin/scripts/capabilities.py +17 -10
- package/plugin/scripts/card.py +10 -0
- package/plugin/scripts/cities.py +34 -0
- package/plugin/scripts/city-session.sh +33 -7
- package/plugin/scripts/demos.py +107 -0
- package/plugin/scripts/desinstala.py +222 -0
- package/plugin/scripts/doctor.py +122 -0
- package/plugin/scripts/find-repos.sh +12 -105
- package/plugin/scripts/read-card.py +6 -2
- package/plugin/scripts/report.py +5 -6
- package/plugin/scripts/reset.py +50 -14
- package/plugin/scripts/seat.py +445 -103
- package/plugin/scripts/workspace.py +197 -0
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
{
|
|
10
10
|
"name": "city",
|
|
11
11
|
"source": "./plugin",
|
|
12
|
-
"version": "0.
|
|
12
|
+
"version": "0.4.0",
|
|
13
13
|
"description": "Operate one autonomous city seat, its domain, role, repo support agents, goal, recognised skills and explicit roads to other cities."
|
|
14
14
|
}
|
|
15
15
|
]
|
package/README.es.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
las que deban hablar.**
|
|
7
7
|
|
|
8
8
|
```bash
|
|
9
|
-
npm install -g agents-city
|
|
9
|
+
npm install -g agents-city
|
|
10
10
|
agents-city
|
|
11
11
|
```
|
|
12
12
|
|
|
@@ -98,22 +98,23 @@ Las fronteras importantes son:
|
|
|
98
98
|
### Instalar desde npm
|
|
99
99
|
|
|
100
100
|
```bash
|
|
101
|
-
npm install -g agents-city
|
|
101
|
+
npm install -g agents-city
|
|
102
102
|
agents-city --version
|
|
103
103
|
```
|
|
104
104
|
|
|
105
|
+
Esto es `0.x` a propósito: los comandos ya se usan hoy, pero los formatos de
|
|
106
|
+
fichero y las APIs todavía pueden cambiar entre versiones menores. Aquí nada
|
|
107
|
+
pretende estar congelado.
|
|
108
|
+
|
|
105
109
|
Necesitas Node.js 22 o superior, Python 3 y tmux; los detalles están en la
|
|
106
110
|
[tabla de requisitos](#requisitos-base), y `agents-city seat` se ofrece a
|
|
107
111
|
instalar tmux si falta. No se instala nada en el sistema más allá de la carpeta
|
|
108
112
|
global de npm de tu Node activo.
|
|
109
113
|
|
|
110
|
-
El `@beta` es deliberado: esto es una prerelease, y fijarla significa que una
|
|
111
|
-
futura versión estable no puede cambiarte la máquina sin que tú lo pidas.
|
|
112
|
-
|
|
113
114
|
### Probarlo sin instalar nada
|
|
114
115
|
|
|
115
116
|
```bash
|
|
116
|
-
npx agents-city
|
|
117
|
+
npx agents-city
|
|
117
118
|
```
|
|
118
119
|
|
|
119
120
|
`npx` descarga el paquete en su caché, lo ejecuta y deja intacta tu carpeta
|
|
@@ -134,7 +135,7 @@ por debajo, así que ninguno de los dos es el camino "menor".
|
|
|
134
135
|
### Actualizar o quitar
|
|
135
136
|
|
|
136
137
|
```bash
|
|
137
|
-
npm install -g agents-city
|
|
138
|
+
npm install -g agents-city # actualizar a la última versión
|
|
138
139
|
npm uninstall -g agents-city # quitar el programa
|
|
139
140
|
```
|
|
140
141
|
|
|
@@ -197,7 +198,7 @@ Agents City usa el CLI independiente `gh`:
|
|
|
197
198
|
### Actualizar una instalación
|
|
198
199
|
|
|
199
200
|
```bash
|
|
200
|
-
npm install -g agents-city
|
|
201
|
+
npm install -g agents-city # desde el registro
|
|
201
202
|
agents-city --version
|
|
202
203
|
```
|
|
203
204
|
|
|
@@ -231,7 +232,7 @@ una ciudad concreta.
|
|
|
231
232
|
|
|
232
233
|
## Primer arranque, paso a paso
|
|
233
234
|
|
|
234
|
-
`agents-city seat` crea `home` si todavía no existe y hace
|
|
235
|
+
`agents-city seat` crea `home` si todavía no existe y hace siete preguntas.
|
|
235
236
|
|
|
236
237
|
### 1. Dominio de trabajo
|
|
237
238
|
|
|
@@ -255,22 +256,39 @@ opciones incorporadas son:
|
|
|
255
256
|
Es la responsabilidad del jefe de esa ciudad, no el nombre de la ciudad ni el
|
|
256
257
|
motor. El asiento sigue siendo presidente aunque elijas `blank`.
|
|
257
258
|
|
|
258
|
-
### 3.
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
259
|
+
### 3. Los agentes, de uno en uno
|
|
260
|
+
|
|
261
|
+
Esta es la ciudad en sí, y es un bucle, no una lista de carpetas que marcar. Cada
|
|
262
|
+
agente se pregunta entero, y después se te ofrece otro, hasta que digas que la
|
|
263
|
+
ciudad está completa:
|
|
264
|
+
|
|
265
|
+
1. **Su nombre** — cómo lo llamas en su ventana, en el mapa y en el bus.
|
|
266
|
+
2. **Qué tipo de trabajo hace** — `code`, `knowledge` o `coordinator`. No es un
|
|
267
|
+
permiso: decide cómo crece su casa en el mapa, para que a quien trabaja con
|
|
268
|
+
documentos no se le mida en pull requests.
|
|
269
|
+
3. **Su rol** — su especialidad, del dominio de esta ciudad o de otro. Una ciudad
|
|
270
|
+
de software puede dar `po` a un agente de producto, `seo` al del portfolio y
|
|
271
|
+
`data-engineer` al del pipeline. Ninguno se convierte en presidente.
|
|
272
|
+
4. **Todo aquello sobre lo que trabaja** — cuantos repos quiera (leídos del
|
|
273
|
+
disco, de tu cuenta GitHub o de una organización) **más** cuantas carpetas de
|
|
274
|
+
documentos quiera. Un agente puede responder por tres servicios y un manual a
|
|
275
|
+
la vez, y un agente sin git en ninguna parte es un agente de primera. Todo se
|
|
276
|
+
monta dentro de su workspace, no se convierte en agentes distintos.
|
|
277
|
+
5. **Qué lo ejecuta** — Claude con su propio modelo y esfuerzo, o Codex,
|
|
278
|
+
OpenCode, Kimi, o un fallback explícito de terminal.
|
|
279
|
+
6. **Las skills con las que empieza** — una carpeta de skill o un `.zip`
|
|
280
|
+
instalado en la casa de ese agente. Sólo se ofrece para motores que leen
|
|
281
|
+
skills: a un agente en Codex se le dice que su motor las ignora, en vez de
|
|
282
|
+
venderle algo que no hace nada.
|
|
283
|
+
|
|
284
|
+
Cada agente recibe entonces una ventana tmux, un actor privado del bus, su
|
|
285
|
+
workspace como directorio de trabajo y las skills que su runtime ya sea capaz de
|
|
286
|
+
descubrir en lo que monta.
|
|
287
|
+
|
|
288
|
+
Decir que la ciudad no tiene agentes también es válido: abre con sólo su asiento,
|
|
289
|
+
y las carreteras la conectan con otras ciudades.
|
|
290
|
+
|
|
291
|
+
Cambia el reparto cuando quieras con `agents-city seat --agents`.
|
|
274
292
|
|
|
275
293
|
### 4. Objetivo
|
|
276
294
|
|
|
@@ -286,19 +304,52 @@ Un objetivo puede ser cuantitativo o cualitativo. Guarda:
|
|
|
286
304
|
|
|
287
305
|
Puedes omitirlo y configurarlo después con `agents-city seat --goal`.
|
|
288
306
|
|
|
289
|
-
### 5. Motor de
|
|
290
|
-
|
|
291
|
-
Enter conserva Claude en todas. También puedes elegir por ventana:
|
|
307
|
+
### 5. Motor de tu propia silla
|
|
292
308
|
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
309
|
+
El motor de cada agente ya se decidió sobre el agente, en la pregunta 3. Queda tu
|
|
310
|
+
ventana: la que sostiene el rol de presidente, los comandos `/city:` y el plugin.
|
|
311
|
+
Enter la deja en tu Claude; también puedes elegir Claude con modelo y esfuerzo,
|
|
312
|
+
Codex, OpenCode, Kimi, o un comando desconocido mediante el fallback explícito de
|
|
313
|
+
terminal.
|
|
298
314
|
|
|
299
315
|
La configuración persistente queda en la ficha del propietario. Los flags
|
|
300
316
|
`--model` y `--effort` de `seat` son overrides sólo para ese arranque.
|
|
301
317
|
|
|
318
|
+
### 6. Si tu silla pide permiso
|
|
319
|
+
|
|
320
|
+
Por ciudad, en `city.yml` como `seat_yolo`. En local el asiento son tus propias
|
|
321
|
+
manos en tu propia máquina, así que pedirte permiso en tu propia silla es una
|
|
322
|
+
elección, no una ley. Las ventanas de los agentes conservan su jaula igualmente,
|
|
323
|
+
y arrancar con `--no-yolo` sigue frenando toda la sesión, asiento incluido.
|
|
324
|
+
|
|
325
|
+
### 7. La ciudad en tu escritorio
|
|
326
|
+
|
|
327
|
+
Se ofrece una vez, cuando la ciudad es nueva: un acceso directo de verdad con el
|
|
328
|
+
nombre de la ciudad y un icono coloreado a partir de su propia identidad — un
|
|
329
|
+
`.app` en macOS o una entrada `.desktop` en Linux. Doble clic y la ciudad se
|
|
330
|
+
abre.
|
|
331
|
+
|
|
332
|
+
Ejecuta la misma línea que escribirías tú, así que es un botón etiquetado sobre
|
|
333
|
+
la puerta que ya existe, no una segunda forma de entrar. Añádelo o quítalo cuando
|
|
334
|
+
quieras:
|
|
335
|
+
|
|
336
|
+
```bash
|
|
337
|
+
agents-city shortcut # esta ciudad, en tu escritorio
|
|
338
|
+
agents-city shortcut home --hall # una puerta que abre el mapa en su lugar
|
|
339
|
+
agents-city shortcut --remove # quitarlo otra vez
|
|
340
|
+
agents-city shortcut --to ~/bin # en otro sitio que no sea el escritorio
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
**En Windows** la ciudad vive dentro de WSL, y un `~/Desktop` de WSL es el
|
|
344
|
+
escritorio del home de Linux: uno que nadie mira nunca. Por eso el acceso directo
|
|
345
|
+
se escribe en el escritorio **de Windows**, preguntándoselo a Windows en vez de
|
|
346
|
+
adivinarlo a partir del nombre de usuario (un escritorio redirigido a OneDrive o
|
|
347
|
+
a un perfil de dominio no está bajo `C:\Users\<nombre>\Desktop`). Es un `.lnk` de
|
|
348
|
+
verdad, construido con la propia PowerShell de Windows para que pueda llevar un
|
|
349
|
+
`.ico`, y arranca `wsl.exe` ejecutando el mismo comando en una shell de login. Si
|
|
350
|
+
no hay interoperabilidad, se escribe un `.cmd` que también se abre con doble
|
|
351
|
+
clic: la misma puerta, con icono genérico.
|
|
352
|
+
|
|
302
353
|
### Qué se crea
|
|
303
354
|
|
|
304
355
|
```text
|
|
@@ -442,8 +493,10 @@ agents-city cities
|
|
|
442
493
|
agents-city road
|
|
443
494
|
agents-city bus
|
|
444
495
|
agents-city committee
|
|
496
|
+
agents-city agents
|
|
445
497
|
agents-city skills
|
|
446
498
|
agents-city city
|
|
499
|
+
agents-city shortcut
|
|
447
500
|
agents-city demo
|
|
448
501
|
agents-city report
|
|
449
502
|
agents-city tokens
|
|
@@ -451,6 +504,8 @@ agents-city logs
|
|
|
451
504
|
agents-city benchmark
|
|
452
505
|
agents-city reset
|
|
453
506
|
agents-city exit
|
|
507
|
+
agents-city doctor
|
|
508
|
+
agents-city update
|
|
454
509
|
agents-city test
|
|
455
510
|
```
|
|
456
511
|
|
|
@@ -501,6 +556,33 @@ se escriben en el registro de actividad. El token de observador rota con el hub,
|
|
|
501
556
|
sólo acepta un origen de este ordenador y es de sólo lectura: el navegador no
|
|
502
557
|
puede dirigir el comité. `Ctrl-c` detiene el Hall.
|
|
503
558
|
|
|
559
|
+
**Demos**, en el rail, reproduce un comité entero sin montar nada: una historia
|
|
560
|
+
por dominio de trabajo — un estudio, una clínica, un despacho — con play, pausa,
|
|
561
|
+
repetir y velocidad. Lo que reproduce son *grabaciones*: `demo/graba.py` ejecuta
|
|
562
|
+
cada historia sobre el bus local real, a través de la máquina de estados real del
|
|
563
|
+
comité, y guarda el flujo exacto de eventos que vio un espectador; el Hall los
|
|
564
|
+
reproduce con el mismo renderizador que usa el rail en vivo. Lo dice en pantalla,
|
|
565
|
+
porque una demo que finge estar en vivo es justo la que este producto no debe
|
|
566
|
+
publicar. Para lanzar una en vivo desde terminal: `agents-city demo --domain
|
|
567
|
+
software`.
|
|
568
|
+
|
|
569
|
+
Regenera las grabaciones tras editar `demo/stories.py`:
|
|
570
|
+
|
|
571
|
+
```bash
|
|
572
|
+
demo/graba.py # todas las historias
|
|
573
|
+
demo/graba.py medicina # sólo una
|
|
574
|
+
```
|
|
575
|
+
|
|
576
|
+
La suite de demo falla cuando una grabación deja de corresponderse con la
|
|
577
|
+
historia que dice ser, así que una obsoleta es un build en rojo y no un navegador
|
|
578
|
+
reproduciendo en silencio el comité del mes pasado.
|
|
579
|
+
|
|
580
|
+
Bajo la marca hay dos botones: **día/noche** e **ES/EN**. El Hall habla español e
|
|
581
|
+
inglés, arranca en el idioma del navegador y recuerda la elección explícita. Las
|
|
582
|
+
traducciones se indexan por la frase en inglés, así que lo que aún no esté
|
|
583
|
+
traducido cae en un inglés legible y no en un identificador — un texto nuevo
|
|
584
|
+
nunca se queda bloqueado esperando a la traducción.
|
|
585
|
+
|
|
504
586
|
### `agents-city setup`
|
|
505
587
|
|
|
506
588
|
Crea o selecciona una ciudad y abre el Hall; con `--tui` entrega el flujo a
|
|
@@ -742,6 +824,31 @@ La capacidad real de invocar una skill depende del runtime. Agents City la
|
|
|
742
824
|
anuncia como capacidad del miembro y deja al proveedor aplicar sus propias reglas
|
|
743
825
|
de descubrimiento y uso.
|
|
744
826
|
|
|
827
|
+
### `agents-city agents`
|
|
828
|
+
|
|
829
|
+
Lista los agentes de esta ciudad y gestiona sobre qué trabaja cada uno. Los
|
|
830
|
+
montajes de un agente son symlinks dentro de su workspace, así que esto es el
|
|
831
|
+
equivalente en terminal de la fila **works on** del Hall y de la pregunta 3 del
|
|
832
|
+
asistente.
|
|
833
|
+
|
|
834
|
+
```bash
|
|
835
|
+
agents-city agents list --card ~/.agents-city/alice/home/alice.md --data ~/.agents-city/alice/home
|
|
836
|
+
agents-city agents mounts --agent urgencias --data ~/.agents-city/alice/home
|
|
837
|
+
agents-city agents mount --agent urgencias --src ~/documentos/manual --data …
|
|
838
|
+
agents-city agents unmount --agent urgencias --name manual --data …
|
|
839
|
+
```
|
|
840
|
+
|
|
841
|
+
| Comando | Efecto |
|
|
842
|
+
|---|---|
|
|
843
|
+
| `list` | cada agente: nombre, slug, rol, runtime, tipo, directorio de trabajo |
|
|
844
|
+
| `mounts` | los montajes de un agente, como etiqueta y destino real |
|
|
845
|
+
| `mount --src RUTA` | monta un repo, un worktree o una carpeta de documentos |
|
|
846
|
+
| `unmount --name ETIQUETA` | quita ese montaje; la carpeta en sí no se toca |
|
|
847
|
+
| `sync` / `sync-all` | reconstruye los workspaces desde la ficha, como hace el lanzador |
|
|
848
|
+
|
|
849
|
+
Desmontar quita un symlink y una clave de la ficha. Nunca borra aquello a lo que
|
|
850
|
+
apuntaba el enlace.
|
|
851
|
+
|
|
745
852
|
### `agents-city city`
|
|
746
853
|
|
|
747
854
|
Abre el mapa local de una ciudad, sin arrancar una sesión de agentes.
|
|
@@ -769,6 +876,46 @@ clicables, `P` (o el control ⛶) alterna pantalla completa, y el rail en vivo
|
|
|
769
876
|
del Hall se redimensiona arrastrando su borde. El contrato completo está en
|
|
770
877
|
[docs/map-live-layers.md](docs/map-live-layers.md).
|
|
771
878
|
|
|
879
|
+
### `agents-city shortcut`
|
|
880
|
+
|
|
881
|
+
Pone una ciudad en tu escritorio: su nombre, un icono coloreado a partir de su
|
|
882
|
+
propia identidad, y un doble clic que la abre.
|
|
883
|
+
|
|
884
|
+
```bash
|
|
885
|
+
agents-city shortcut # la ciudad seleccionada
|
|
886
|
+
agents-city shortcut product # una concreta
|
|
887
|
+
agents-city shortcut --hall # una puerta que abre el mapa en vez del asiento
|
|
888
|
+
agents-city shortcut --remove # quitarlo del escritorio
|
|
889
|
+
agents-city shortcut --to ~/bin # escribirlo en otro sitio
|
|
890
|
+
```
|
|
891
|
+
|
|
892
|
+
| Opción | Efecto |
|
|
893
|
+
|---|---|
|
|
894
|
+
| `--hall` | el acceso directo abre el mapa en el navegador en vez de la ciudad tmux |
|
|
895
|
+
| `--remove` | quita el acceso directo de esta ciudad |
|
|
896
|
+
| `--to DIR` | lo escribe en otra carpeta que no sea el escritorio |
|
|
897
|
+
|
|
898
|
+
Lo que se escribe depende del escritorio, y en cada uno es de verdad, no un
|
|
899
|
+
script disfrazado:
|
|
900
|
+
|
|
901
|
+
| Plataforma | Acceso directo | Icono |
|
|
902
|
+
|---|---|---|
|
|
903
|
+
| macOS | bundle `.app` que abre la ciudad en Terminal | `.icns`, construido con el `iconutil` del sistema |
|
|
904
|
+
| Linux | entrada `.desktop`, marcada como confiable donde hay `gio` | `.png` bajo `XDG_DATA_HOME` |
|
|
905
|
+
| Windows (WSL) | `.lnk` en el escritorio **de Windows**, que lanza `wsl.exe` | `.ico`, cuando hay interoperabilidad con PowerShell |
|
|
906
|
+
|
|
907
|
+
Todos ejecutan la misma línea que escribirías tú, así que el acceso directo es un
|
|
908
|
+
botón etiquetado sobre la puerta que ya existe, no una segunda forma de entrar. El
|
|
909
|
+
icono se genera sin ninguna librería de imagen: un PNG escrito a mano, envuelto
|
|
910
|
+
como `.ico` para Windows y convertido con `iconutil` en macOS.
|
|
911
|
+
|
|
912
|
+
En Windows la ciudad vive dentro de WSL, y un `~/Desktop` de ahí es el escritorio
|
|
913
|
+
del home de Linux que nadie mira: por eso el escritorio de Windows se le pregunta
|
|
914
|
+
a Windows, nunca se arma a partir del nombre de usuario, porque un escritorio
|
|
915
|
+
redirigido a OneDrive o a un perfil de dominio no está bajo
|
|
916
|
+
`C:\Users\<nombre>\Desktop`. Sin interoperabilidad se escribe un `.cmd` que
|
|
917
|
+
también se abre con doble clic: la misma puerta, con icono genérico.
|
|
918
|
+
|
|
772
919
|
### `agents-city demo`
|
|
773
920
|
|
|
774
921
|
Abre una ciudad ficticia y desechable en el Hall completo. El centro contiene
|
|
@@ -938,13 +1085,22 @@ demuestra por sí solo mayor calidad de respuesta ni una afirmación SOTA.
|
|
|
938
1085
|
|
|
939
1086
|
### `agents-city reset`
|
|
940
1087
|
|
|
941
|
-
Reinicia
|
|
1088
|
+
Reinicia ciudades gestionadas conservando su identidad estable y sus repos.
|
|
942
1089
|
|
|
943
1090
|
```bash
|
|
944
|
-
agents-city reset
|
|
945
|
-
agents-city reset
|
|
1091
|
+
agents-city reset product --dry-run # muestra cada efecto, no cambia nada
|
|
1092
|
+
agents-city reset product
|
|
1093
|
+
agents-city reset product cliente-a # varias, separadas por espacios
|
|
1094
|
+
agents-city reset all # todas las de este propietario
|
|
946
1095
|
```
|
|
947
1096
|
|
|
1097
|
+
Un nombre desconocido aborta la ejecución **entera** antes de tocar nada:
|
|
1098
|
+
reiniciar tres ciudades y pararse en una errata es el peor final posible para un
|
|
1099
|
+
comando destructivo. El Hall tiene lo mismo como botón, en **Cities** — primero
|
|
1100
|
+
enseña qué desaparece, qué sobrevive y dónde queda la copia, y te pide escribir
|
|
1101
|
+
el nombre de la ciudad.
|
|
1102
|
+
|
|
1103
|
+
|
|
948
1104
|
El plan de reset:
|
|
949
1105
|
|
|
950
1106
|
1. valida que el destino sea una ciudad gestionada, no una ruta arbitraria;
|
|
@@ -975,6 +1131,44 @@ seguir activo. Sin ciudad, muestra o cierra todo lo gestionado por Agents City.
|
|
|
975
1131
|
Una sesión tmux puede contener trabajo sin guardar, por lo que el dry-run es la
|
|
976
1132
|
forma segura de comprobar el alcance.
|
|
977
1133
|
|
|
1134
|
+
### `agents-city doctor`
|
|
1135
|
+
|
|
1136
|
+
Revisa esta máquina y dice qué parte falta, en una pantalla.
|
|
1137
|
+
|
|
1138
|
+
```bash
|
|
1139
|
+
agents-city doctor
|
|
1140
|
+
```
|
|
1141
|
+
|
|
1142
|
+
Informa de las herramientas que necesita (python3, tmux, bash, git, node, y `gh`
|
|
1143
|
+
como opcional), qué runtimes de agente hay instalados, **qué jaula te da este
|
|
1144
|
+
kernel** —seatbelt, bubblewrap, o ninguna y por qué—, la ciudad seleccionada y su
|
|
1145
|
+
ficha, si el bundle del Hall está construido, y si hay una versión más nueva
|
|
1146
|
+
publicada. Sale con código distinto de cero cuando algo está roto, así que
|
|
1147
|
+
también sirve dentro de un script.
|
|
1148
|
+
|
|
1149
|
+
Si le pasas un fichero de configuración, conserva su trabajo anterior: detectar
|
|
1150
|
+
una forma antigua, explicarla y migrarla con `--fix` (dejando copia de
|
|
1151
|
+
seguridad).
|
|
1152
|
+
|
|
1153
|
+
### `agents-city update`
|
|
1154
|
+
|
|
1155
|
+
```bash
|
|
1156
|
+
agents-city update # instala la versión publicada más nueva
|
|
1157
|
+
agents-city update --check # sólo pregunta: instalada frente a publicada
|
|
1158
|
+
agents-city update --tag beta # sigue una dist-tag
|
|
1159
|
+
```
|
|
1160
|
+
|
|
1161
|
+
La comprobación es **un GET al registro público de npm**, cacheado un día bajo
|
|
1162
|
+
`~/.agents-city/.runtime/`. No se envía nada de tu máquina —ni identificador, ni
|
|
1163
|
+
contador, ni telemetría— y `CITY_UPDATE_CHECK=0` lo desactiva por completo. Sólo
|
|
1164
|
+
ocurre donde has abierto algo deliberadamente: `doctor`, `update` y el Hall (que
|
|
1165
|
+
muestra una línea cuando hay versión nueva). Un `agents-city cities` normal no
|
|
1166
|
+
toca la red.
|
|
1167
|
+
|
|
1168
|
+
Si lo instalaste desde un checkout de git, `update` se niega y te dice el comando
|
|
1169
|
+
que encaja con tu instalación, en vez de ejecutar `npm install -g` sobre tu copia
|
|
1170
|
+
de trabajo.
|
|
1171
|
+
|
|
978
1172
|
### `agents-city test`
|
|
979
1173
|
|
|
980
1174
|
Ejecuta la suite del checkout. Sin argumentos ejecuta todas las suites; con
|
|
@@ -1624,7 +1818,7 @@ de vida por mensaje. `bus inbox` consume `road-inbox`, no el historial append-on
|
|
|
1624
1818
|
| `AGENTS_CITY_USER` | identidad local resuelta | fuerza el propietario para pruebas/migraciones |
|
|
1625
1819
|
| `AGENTS_CITY_DATA` | ciudad seleccionada | fuerza una carpeta de ciudad en una terminal externa |
|
|
1626
1820
|
| `CITY_CODE_DIR` | `~/codigo` | destino de clones aceptados desde GitHub |
|
|
1627
|
-
| `CITY_SEARCH_IN` | raíces habituales del home | lista separada por `:` donde buscar
|
|
1821
|
+
| `CITY_SEARCH_IN` | raíces habituales del home | lista separada por `:` donde buscar (también `;`, para Windows) |
|
|
1628
1822
|
| `CITY_SEARCH_DEPTH` | `4` | profundidad máxima de esa búsqueda |
|
|
1629
1823
|
| `AGENTS_CITY_ORG` | vacía | filtra repos por organización; vacía significa todos |
|
|
1630
1824
|
| `CITY_SETTLE` | `8` | espera inicial, en segundos, para arrancar Claude |
|
|
@@ -1634,6 +1828,12 @@ de vida por mensaje. `bus inbox` consume `road-inbox`, no el historial append-on
|
|
|
1634
1828
|
| `AGENTS_CITY_URL` | `CITY_BUS_URL` | endpoint de reporting/mapa si está separado |
|
|
1635
1829
|
| `CITY_DIR` | `~/.claude/channels/city-bus` | carpeta de compatibilidad para `.env` y hooks |
|
|
1636
1830
|
| `CITY_HOOKS` | `city` | `everywhere` ejecuta los hooks de conciencia en todas las sesiones de Claude, no solo en runtimes de ciudad |
|
|
1831
|
+
| `CITY_DESKTOP` | `~/Desktop`, o el escritorio de Windows bajo WSL | dónde escribe `agents-city shortcut` |
|
|
1832
|
+
| `CITY_CAGE` | `1` | `0` arranca todas las ventanas sin jaula |
|
|
1833
|
+
| `CITY_CAGE_DENY` | vacío | rutas extra que sellar, separadas por `:` |
|
|
1834
|
+
| `CITY_CAGE_ALLOW_WRITE` | vacío | rutas extra que mantener escribibles, separadas por `:` |
|
|
1835
|
+
| `CITY_UPDATE_CHECK` | `1` | `0` no pregunta nunca a npm si hay versión más nueva |
|
|
1836
|
+
| `CITY_CAGE_BWRAP` | se sondea | `1`/`0` responde «¿puede este Linux crear un espacio de nombres?» sin sondear; el lanzador lo fija una vez por ciudad |
|
|
1637
1837
|
|
|
1638
1838
|
Ejemplos:
|
|
1639
1839
|
|
|
@@ -1649,10 +1849,38 @@ agents-city cities create laboratorio
|
|
|
1649
1849
|
CITY_SETTLE=0 CITY_STAGGER=0 agents-city seat --city producto
|
|
1650
1850
|
```
|
|
1651
1851
|
|
|
1652
|
-
|
|
1653
|
-
|
|
1654
|
-
|
|
1655
|
-
|
|
1852
|
+
### Qué se le puede dar a una casa para trabajar
|
|
1853
|
+
|
|
1854
|
+
`plugin/scripts/busca.py` recorre tu disco una vez e indexa tres clases de sitio:
|
|
1855
|
+
|
|
1856
|
+
* **repositorios** — con el nombre de su remoto `origin`, no el de la carpeta en
|
|
1857
|
+
la que están, para que un clon se encuentre por el nombre que dirías en voz
|
|
1858
|
+
alta;
|
|
1859
|
+
* **worktrees** — un worktree enlazado es la carpeta en la que de verdad trabaja
|
|
1860
|
+
un agente aislado, y aparece como `repo@rama`, una cosa distinta que elegir;
|
|
1861
|
+
* **carpetas de documentos** — un directorio con escritura dentro y sin git por
|
|
1862
|
+
ninguna parte, que es lo que monta un agente `knowledge`.
|
|
1863
|
+
|
|
1864
|
+
Lee `.git/config` y `HEAD` directamente en vez de lanzar `git` una vez por
|
|
1865
|
+
repositorio, así que un escaneo completo termina mientras alguien mira la
|
|
1866
|
+
pantalla, y funciona allí donde funcione Python: macOS, Linux y Windows por
|
|
1867
|
+
igual. Este índice es el que usa la **terminal**: `seat --repos`, y el lanzador
|
|
1868
|
+
resolviendo el `repo@rama` de una ficha a una ruta de esta máquina.
|
|
1869
|
+
`plugin/scripts/find-repos.sh` es un envoltorio fino para quien lo llama desde
|
|
1870
|
+
shell, y sólo imprime la mitad git.
|
|
1871
|
+
|
|
1872
|
+
El **Hall** no lo usa, y a propósito: allí, elegir sobre qué trabaja un agente es
|
|
1873
|
+
un explorador de carpetas. Recorres tu disco y coges lo que quieras — un
|
|
1874
|
+
repositorio, un worktree, una carpeta de documentos, un fichero exacto — y no se
|
|
1875
|
+
te adelanta nada ni se filtra nada. Una lista adivinada sólo puede ofrecerte lo
|
|
1876
|
+
que sabía buscar, y es una lista más que leer antes de hacer aquello a lo que
|
|
1877
|
+
venías.
|
|
1878
|
+
|
|
1879
|
+
El índice se cachea un día en `$XDG_CACHE_HOME/agents-city/lugares.tsv` o
|
|
1880
|
+
`~/.cache/agents-city/lugares.tsv`. Tanto el formulario de casas del Hall como el
|
|
1881
|
+
asiento ofrecen refrescarlo; desde terminal, `busca.py --refresh` lo reconstruye,
|
|
1882
|
+
que es justo lo que quieres tras cambiar `CITY_SEARCH_IN` con la caché aún
|
|
1883
|
+
válida.
|
|
1656
1884
|
|
|
1657
1885
|
Para ajustes de transporte, el orden es:
|
|
1658
1886
|
|
|
@@ -1696,7 +1924,8 @@ y sólo el primero es yolo. En macOS las ventanas de repo de Claude, OpenCode y
|
|
|
1696
1924
|
Kimi arrancan dentro de un perfil seatbelt generado: las escrituras caen sólo en su propio repo y su
|
|
1697
1925
|
estado de runtime, y los ficheros que convierten una inyección de prompt en un
|
|
1698
1926
|
robo de credenciales (`~/.ssh`, `~/.git-credentials`, `~/.aws`, configs de gh
|
|
1699
|
-
y de nube, tokens de carretera remota
|
|
1927
|
+
y de nube, tokens de carretera remota, y el propio
|
|
1928
|
+
`~/.claude/.credentials.json` de Claude Code) quedan sellados en el kernel — lecturas
|
|
1700
1929
|
y escrituras, hijos y nietos incluidos. Al agente no se le pregunta nada: las
|
|
1701
1930
|
rutas prohibidas sencillamente no existen para él. Codex usa en cambio su
|
|
1702
1931
|
sandbox nativa `workspace-write` y no se envuelve en seatbelt: workers MCP como
|
|
@@ -1704,6 +1933,22 @@ sandbox nativa `workspace-write` y no se envuelve en seatbelt: workers MCP como
|
|
|
1704
1933
|
proceso ya enjaulado. `CITY_CAGE=0` desactiva de forma deliberada la capa de
|
|
1705
1934
|
confinamiento aplicable.
|
|
1706
1935
|
|
|
1936
|
+
**En Linux la jaula es bubblewrap.** El sello se construye como se construye en
|
|
1937
|
+
Linux: un espacio de nombres de montaje donde las rutas selladas sencillamente
|
|
1938
|
+
no están montadas, así que dentro de la jaula `~/.ssh` es un directorio vacío y
|
|
1939
|
+
`~/.git-credentials` se lee como nada. La misma promesa que el seatbelt, con
|
|
1940
|
+
otro mecanismo, y `bin/test-cage.py` lo demuestra contra un espacio de nombres
|
|
1941
|
+
real en cada ejecución de CI en Linux: la clave plantada no se puede leer, el
|
|
1942
|
+
repo sigue siendo escribible, una escritura en un directorio sellado nunca llega
|
|
1943
|
+
al disco y un proceso nieto no se escapa.
|
|
1944
|
+
|
|
1945
|
+
Necesita `bubblewrap` instalado (`apt install bubblewrap`) y espacios de nombres
|
|
1946
|
+
de usuario sin privilegios habilitados — Agents City comprueba que bwrap puede
|
|
1947
|
+
crear uno de verdad en vez de fiarse de que exista el binario, y una máquina
|
|
1948
|
+
donde no pueda lo dice y arranca sin jaula, exactamente como antes. En otras
|
|
1949
|
+
plataformas no hay confinamiento: sin jaula, pon agentes sobre trabajo sobre el
|
|
1950
|
+
que te sentirías cómodo ejecutando un script.
|
|
1951
|
+
|
|
1707
1952
|
Como una ventana enjaulada no puede leer el token de `gh`, los PRs y pushes
|
|
1708
1953
|
pasan por un broker de credenciales opcional (`CITY_BROKER=1`): un proceso
|
|
1709
1954
|
pequeño del lado del dueño que guarda las credenciales, acepta tokens por
|
|
@@ -1883,10 +2128,30 @@ agents-city seat --repos
|
|
|
1883
2128
|
```
|
|
1884
2129
|
|
|
1885
2130
|
La detección exige `.git` (directorio o fichero de worktree) y un remote `origin`.
|
|
1886
|
-
Si acabas de cambiar las raíces,
|
|
1887
|
-
`~/.cache/agents-city/repos.tsv`. `AGENTS_CITY_ORG` puede estar filtrando el repo;
|
|
2131
|
+
Si acabas de cambiar las raíces, ejecuta `plugin/scripts/busca.py --refresh`. `AGENTS_CITY_ORG` puede estar filtrando el repo;
|
|
1888
2132
|
déjala vacía para indexar todos los remotes.
|
|
1889
2133
|
|
|
2134
|
+
### Desinstalarlo del todo
|
|
2135
|
+
|
|
2136
|
+
```bash
|
|
2137
|
+
agents-city uninstall # dice exactamente qué se iría; no borra nada
|
|
2138
|
+
agents-city uninstall --yes # lo hace
|
|
2139
|
+
agents-city uninstall --keep-cities --yes # desconecta la máquina, conserva las ciudades
|
|
2140
|
+
agents-city uninstall --npm --yes # y quita también el paquete global
|
|
2141
|
+
```
|
|
2142
|
+
|
|
2143
|
+
Cierra todas las sesiones, halls y mapas que el producto arrancó, quita los
|
|
2144
|
+
accesos directos del escritorio y el registro del plugin de Claude, y borra
|
|
2145
|
+
`~/.agents-city` (tus ciudades, su estado y sus copias), `~/.config/agents-city`,
|
|
2146
|
+
`~/.cache/agents-city` y `~/.claude/channels/city-bus` — más el token del bus en
|
|
2147
|
+
el Keychain de macOS.
|
|
2148
|
+
|
|
2149
|
+
Nunca toca tus repositorios, tus worktrees ni tus carpetas de documentos. La casa
|
|
2150
|
+
de un agente guarda *enlaces* a eso, y lo único que se va es el enlace.
|
|
2151
|
+
|
|
2152
|
+
`reset` responde a la otra pregunta: vacía una ciudad, deja una copia y conserva
|
|
2153
|
+
la instalación, para cuando piensas seguir usándolo.
|
|
2154
|
+
|
|
1890
2155
|
### GitHub no muestra repos privados u organizaciones
|
|
1891
2156
|
|
|
1892
2157
|
```bash
|