agents-city 0.3.0-beta.22 → 0.3.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 +260 -44
- package/README.md +247 -43
- package/bin/agents-city.js +3 -0
- package/bin/doctor +3 -0
- package/bin/hall.html +164 -24
- package/bin/navegador.mjs +415 -0
- package/bin/serve.py +383 -127
- package/bin/shortcut +3 -0
- package/bin/test +5 -2
- 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-doctor.py +33 -0
- package/bin/test-navegador.py +164 -0
- package/bin/test-seat.py +245 -25
- package/bin/test-serve.py +214 -9
- package/bin/test-workspace.py +63 -0
- package/bin/testlib.py +23 -0
- package/bin/update +3 -0
- package/city/web/dist/city.js +47 -47
- package/city/web/dist/index.html +1 -1
- package/city/web/dist-hall/hall.js +2193 -174
- package/city/web/src/bienvenida.ts +686 -0
- package/city/web/src/es.ts +180 -0
- package/city/web/src/hall.ts +520 -168
- package/city/web/src/idioma.ts +86 -0
- package/city/web/src/main.ts +27 -0
- package/city/web/src/motores.ts +54 -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/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.3.0
|
|
12
|
+
"version": "0.3.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,12 @@ 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
|
+
Bajo la marca hay dos botones: **día/noche** e **ES/EN**. El Hall habla español e
|
|
560
|
+
inglés, arranca en el idioma del navegador y recuerda la elección explícita. Las
|
|
561
|
+
traducciones se indexan por la frase en inglés, así que lo que aún no esté
|
|
562
|
+
traducido cae en un inglés legible y no en un identificador — un texto nuevo
|
|
563
|
+
nunca se queda bloqueado esperando a la traducción.
|
|
564
|
+
|
|
504
565
|
### `agents-city setup`
|
|
505
566
|
|
|
506
567
|
Crea o selecciona una ciudad y abre el Hall; con `--tui` entrega el flujo a
|
|
@@ -742,6 +803,31 @@ La capacidad real de invocar una skill depende del runtime. Agents City la
|
|
|
742
803
|
anuncia como capacidad del miembro y deja al proveedor aplicar sus propias reglas
|
|
743
804
|
de descubrimiento y uso.
|
|
744
805
|
|
|
806
|
+
### `agents-city agents`
|
|
807
|
+
|
|
808
|
+
Lista los agentes de esta ciudad y gestiona sobre qué trabaja cada uno. Los
|
|
809
|
+
montajes de un agente son symlinks dentro de su workspace, así que esto es el
|
|
810
|
+
equivalente en terminal de la fila **works on** del Hall y de la pregunta 3 del
|
|
811
|
+
asistente.
|
|
812
|
+
|
|
813
|
+
```bash
|
|
814
|
+
agents-city agents list --card ~/.agents-city/alice/home/alice.md --data ~/.agents-city/alice/home
|
|
815
|
+
agents-city agents mounts --agent urgencias --data ~/.agents-city/alice/home
|
|
816
|
+
agents-city agents mount --agent urgencias --src ~/documentos/manual --data …
|
|
817
|
+
agents-city agents unmount --agent urgencias --name manual --data …
|
|
818
|
+
```
|
|
819
|
+
|
|
820
|
+
| Comando | Efecto |
|
|
821
|
+
|---|---|
|
|
822
|
+
| `list` | cada agente: nombre, slug, rol, runtime, tipo, directorio de trabajo |
|
|
823
|
+
| `mounts` | los montajes de un agente, como etiqueta y destino real |
|
|
824
|
+
| `mount --src RUTA` | monta un repo, un worktree o una carpeta de documentos |
|
|
825
|
+
| `unmount --name ETIQUETA` | quita ese montaje; la carpeta en sí no se toca |
|
|
826
|
+
| `sync` / `sync-all` | reconstruye los workspaces desde la ficha, como hace el lanzador |
|
|
827
|
+
|
|
828
|
+
Desmontar quita un symlink y una clave de la ficha. Nunca borra aquello a lo que
|
|
829
|
+
apuntaba el enlace.
|
|
830
|
+
|
|
745
831
|
### `agents-city city`
|
|
746
832
|
|
|
747
833
|
Abre el mapa local de una ciudad, sin arrancar una sesión de agentes.
|
|
@@ -769,6 +855,46 @@ clicables, `P` (o el control ⛶) alterna pantalla completa, y el rail en vivo
|
|
|
769
855
|
del Hall se redimensiona arrastrando su borde. El contrato completo está en
|
|
770
856
|
[docs/map-live-layers.md](docs/map-live-layers.md).
|
|
771
857
|
|
|
858
|
+
### `agents-city shortcut`
|
|
859
|
+
|
|
860
|
+
Pone una ciudad en tu escritorio: su nombre, un icono coloreado a partir de su
|
|
861
|
+
propia identidad, y un doble clic que la abre.
|
|
862
|
+
|
|
863
|
+
```bash
|
|
864
|
+
agents-city shortcut # la ciudad seleccionada
|
|
865
|
+
agents-city shortcut product # una concreta
|
|
866
|
+
agents-city shortcut --hall # una puerta que abre el mapa en vez del asiento
|
|
867
|
+
agents-city shortcut --remove # quitarlo del escritorio
|
|
868
|
+
agents-city shortcut --to ~/bin # escribirlo en otro sitio
|
|
869
|
+
```
|
|
870
|
+
|
|
871
|
+
| Opción | Efecto |
|
|
872
|
+
|---|---|
|
|
873
|
+
| `--hall` | el acceso directo abre el mapa en el navegador en vez de la ciudad tmux |
|
|
874
|
+
| `--remove` | quita el acceso directo de esta ciudad |
|
|
875
|
+
| `--to DIR` | lo escribe en otra carpeta que no sea el escritorio |
|
|
876
|
+
|
|
877
|
+
Lo que se escribe depende del escritorio, y en cada uno es de verdad, no un
|
|
878
|
+
script disfrazado:
|
|
879
|
+
|
|
880
|
+
| Plataforma | Acceso directo | Icono |
|
|
881
|
+
|---|---|---|
|
|
882
|
+
| macOS | bundle `.app` que abre la ciudad en Terminal | `.icns`, construido con el `iconutil` del sistema |
|
|
883
|
+
| Linux | entrada `.desktop`, marcada como confiable donde hay `gio` | `.png` bajo `XDG_DATA_HOME` |
|
|
884
|
+
| Windows (WSL) | `.lnk` en el escritorio **de Windows**, que lanza `wsl.exe` | `.ico`, cuando hay interoperabilidad con PowerShell |
|
|
885
|
+
|
|
886
|
+
Todos ejecutan la misma línea que escribirías tú, así que el acceso directo es un
|
|
887
|
+
botón etiquetado sobre la puerta que ya existe, no una segunda forma de entrar. El
|
|
888
|
+
icono se genera sin ninguna librería de imagen: un PNG escrito a mano, envuelto
|
|
889
|
+
como `.ico` para Windows y convertido con `iconutil` en macOS.
|
|
890
|
+
|
|
891
|
+
En Windows la ciudad vive dentro de WSL, y un `~/Desktop` de ahí es el escritorio
|
|
892
|
+
del home de Linux que nadie mira: por eso el escritorio de Windows se le pregunta
|
|
893
|
+
a Windows, nunca se arma a partir del nombre de usuario, porque un escritorio
|
|
894
|
+
redirigido a OneDrive o a un perfil de dominio no está bajo
|
|
895
|
+
`C:\Users\<nombre>\Desktop`. Sin interoperabilidad se escribe un `.cmd` que
|
|
896
|
+
también se abre con doble clic: la misma puerta, con icono genérico.
|
|
897
|
+
|
|
772
898
|
### `agents-city demo`
|
|
773
899
|
|
|
774
900
|
Abre una ciudad ficticia y desechable en el Hall completo. El centro contiene
|
|
@@ -938,13 +1064,22 @@ demuestra por sí solo mayor calidad de respuesta ni una afirmación SOTA.
|
|
|
938
1064
|
|
|
939
1065
|
### `agents-city reset`
|
|
940
1066
|
|
|
941
|
-
Reinicia
|
|
1067
|
+
Reinicia ciudades gestionadas conservando su identidad estable y sus repos.
|
|
942
1068
|
|
|
943
1069
|
```bash
|
|
944
|
-
agents-city reset
|
|
945
|
-
agents-city reset
|
|
1070
|
+
agents-city reset product --dry-run # muestra cada efecto, no cambia nada
|
|
1071
|
+
agents-city reset product
|
|
1072
|
+
agents-city reset product cliente-a # varias, separadas por espacios
|
|
1073
|
+
agents-city reset all # todas las de este propietario
|
|
946
1074
|
```
|
|
947
1075
|
|
|
1076
|
+
Un nombre desconocido aborta la ejecución **entera** antes de tocar nada:
|
|
1077
|
+
reiniciar tres ciudades y pararse en una errata es el peor final posible para un
|
|
1078
|
+
comando destructivo. El Hall tiene lo mismo como botón, en **Cities** — primero
|
|
1079
|
+
enseña qué desaparece, qué sobrevive y dónde queda la copia, y te pide escribir
|
|
1080
|
+
el nombre de la ciudad.
|
|
1081
|
+
|
|
1082
|
+
|
|
948
1083
|
El plan de reset:
|
|
949
1084
|
|
|
950
1085
|
1. valida que el destino sea una ciudad gestionada, no una ruta arbitraria;
|
|
@@ -975,6 +1110,44 @@ seguir activo. Sin ciudad, muestra o cierra todo lo gestionado por Agents City.
|
|
|
975
1110
|
Una sesión tmux puede contener trabajo sin guardar, por lo que el dry-run es la
|
|
976
1111
|
forma segura de comprobar el alcance.
|
|
977
1112
|
|
|
1113
|
+
### `agents-city doctor`
|
|
1114
|
+
|
|
1115
|
+
Revisa esta máquina y dice qué parte falta, en una pantalla.
|
|
1116
|
+
|
|
1117
|
+
```bash
|
|
1118
|
+
agents-city doctor
|
|
1119
|
+
```
|
|
1120
|
+
|
|
1121
|
+
Informa de las herramientas que necesita (python3, tmux, bash, git, node, y `gh`
|
|
1122
|
+
como opcional), qué runtimes de agente hay instalados, **qué jaula te da este
|
|
1123
|
+
kernel** —seatbelt, bubblewrap, o ninguna y por qué—, la ciudad seleccionada y su
|
|
1124
|
+
ficha, si el bundle del Hall está construido, y si hay una versión más nueva
|
|
1125
|
+
publicada. Sale con código distinto de cero cuando algo está roto, así que
|
|
1126
|
+
también sirve dentro de un script.
|
|
1127
|
+
|
|
1128
|
+
Si le pasas un fichero de configuración, conserva su trabajo anterior: detectar
|
|
1129
|
+
una forma antigua, explicarla y migrarla con `--fix` (dejando copia de
|
|
1130
|
+
seguridad).
|
|
1131
|
+
|
|
1132
|
+
### `agents-city update`
|
|
1133
|
+
|
|
1134
|
+
```bash
|
|
1135
|
+
agents-city update # instala la versión publicada más nueva
|
|
1136
|
+
agents-city update --check # sólo pregunta: instalada frente a publicada
|
|
1137
|
+
agents-city update --tag beta # sigue una dist-tag
|
|
1138
|
+
```
|
|
1139
|
+
|
|
1140
|
+
La comprobación es **un GET al registro público de npm**, cacheado un día bajo
|
|
1141
|
+
`~/.agents-city/.runtime/`. No se envía nada de tu máquina —ni identificador, ni
|
|
1142
|
+
contador, ni telemetría— y `CITY_UPDATE_CHECK=0` lo desactiva por completo. Sólo
|
|
1143
|
+
ocurre donde has abierto algo deliberadamente: `doctor`, `update` y el Hall (que
|
|
1144
|
+
muestra una línea cuando hay versión nueva). Un `agents-city cities` normal no
|
|
1145
|
+
toca la red.
|
|
1146
|
+
|
|
1147
|
+
Si lo instalaste desde un checkout de git, `update` se niega y te dice el comando
|
|
1148
|
+
que encaja con tu instalación, en vez de ejecutar `npm install -g` sobre tu copia
|
|
1149
|
+
de trabajo.
|
|
1150
|
+
|
|
978
1151
|
### `agents-city test`
|
|
979
1152
|
|
|
980
1153
|
Ejecuta la suite del checkout. Sin argumentos ejecuta todas las suites; con
|
|
@@ -1624,7 +1797,7 @@ de vida por mensaje. `bus inbox` consume `road-inbox`, no el historial append-on
|
|
|
1624
1797
|
| `AGENTS_CITY_USER` | identidad local resuelta | fuerza el propietario para pruebas/migraciones |
|
|
1625
1798
|
| `AGENTS_CITY_DATA` | ciudad seleccionada | fuerza una carpeta de ciudad en una terminal externa |
|
|
1626
1799
|
| `CITY_CODE_DIR` | `~/codigo` | destino de clones aceptados desde GitHub |
|
|
1627
|
-
| `CITY_SEARCH_IN` | raíces habituales del home | lista separada por `:` donde buscar
|
|
1800
|
+
| `CITY_SEARCH_IN` | raíces habituales del home | lista separada por `:` donde buscar (también `;`, para Windows) |
|
|
1628
1801
|
| `CITY_SEARCH_DEPTH` | `4` | profundidad máxima de esa búsqueda |
|
|
1629
1802
|
| `AGENTS_CITY_ORG` | vacía | filtra repos por organización; vacía significa todos |
|
|
1630
1803
|
| `CITY_SETTLE` | `8` | espera inicial, en segundos, para arrancar Claude |
|
|
@@ -1634,6 +1807,12 @@ de vida por mensaje. `bus inbox` consume `road-inbox`, no el historial append-on
|
|
|
1634
1807
|
| `AGENTS_CITY_URL` | `CITY_BUS_URL` | endpoint de reporting/mapa si está separado |
|
|
1635
1808
|
| `CITY_DIR` | `~/.claude/channels/city-bus` | carpeta de compatibilidad para `.env` y hooks |
|
|
1636
1809
|
| `CITY_HOOKS` | `city` | `everywhere` ejecuta los hooks de conciencia en todas las sesiones de Claude, no solo en runtimes de ciudad |
|
|
1810
|
+
| `CITY_DESKTOP` | `~/Desktop`, o el escritorio de Windows bajo WSL | dónde escribe `agents-city shortcut` |
|
|
1811
|
+
| `CITY_CAGE` | `1` | `0` arranca todas las ventanas sin jaula |
|
|
1812
|
+
| `CITY_CAGE_DENY` | vacío | rutas extra que sellar, separadas por `:` |
|
|
1813
|
+
| `CITY_CAGE_ALLOW_WRITE` | vacío | rutas extra que mantener escribibles, separadas por `:` |
|
|
1814
|
+
| `CITY_UPDATE_CHECK` | `1` | `0` no pregunta nunca a npm si hay versión más nueva |
|
|
1815
|
+
| `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
1816
|
|
|
1638
1817
|
Ejemplos:
|
|
1639
1818
|
|
|
@@ -1649,10 +1828,30 @@ agents-city cities create laboratorio
|
|
|
1649
1828
|
CITY_SETTLE=0 CITY_STAGGER=0 agents-city seat --city producto
|
|
1650
1829
|
```
|
|
1651
1830
|
|
|
1652
|
-
|
|
1653
|
-
|
|
1654
|
-
|
|
1655
|
-
|
|
1831
|
+
### Qué se le puede dar a una casa para trabajar
|
|
1832
|
+
|
|
1833
|
+
`plugin/scripts/busca.py` recorre tu disco una vez e indexa tres clases de sitio:
|
|
1834
|
+
|
|
1835
|
+
* **repositorios** — con el nombre de su remoto `origin`, no el de la carpeta en
|
|
1836
|
+
la que están, para que un clon se encuentre por el nombre que dirías en voz
|
|
1837
|
+
alta;
|
|
1838
|
+
* **worktrees** — un worktree enlazado es la carpeta en la que de verdad trabaja
|
|
1839
|
+
un agente aislado, y aparece como `repo@rama`, una cosa distinta que elegir;
|
|
1840
|
+
* **carpetas de documentos** — un directorio con escritura dentro y sin git por
|
|
1841
|
+
ninguna parte, que es lo que monta un agente `knowledge`.
|
|
1842
|
+
|
|
1843
|
+
Lee `.git/config` y `HEAD` directamente en vez de lanzar `git` una vez por
|
|
1844
|
+
repositorio, así que un escaneo completo termina mientras alguien mira la
|
|
1845
|
+
pantalla, y funciona allí donde funcione Python: macOS, Linux y Windows por
|
|
1846
|
+
igual. La guía y el Hall buscan sobre este índice; `plugin/scripts/find-repos.sh`
|
|
1847
|
+
es un envoltorio fino para quien lo llama desde shell, y sólo imprime la mitad
|
|
1848
|
+
git.
|
|
1849
|
+
|
|
1850
|
+
El índice se cachea un día en `$XDG_CACHE_HOME/agents-city/lugares.tsv` o
|
|
1851
|
+
`~/.cache/agents-city/lugares.tsv`. Tanto el formulario de casas del Hall como el
|
|
1852
|
+
asiento ofrecen refrescarlo; desde terminal, `busca.py --refresh` lo reconstruye,
|
|
1853
|
+
que es justo lo que quieres tras cambiar `CITY_SEARCH_IN` con la caché aún
|
|
1854
|
+
válida.
|
|
1656
1855
|
|
|
1657
1856
|
Para ajustes de transporte, el orden es:
|
|
1658
1857
|
|
|
@@ -1696,7 +1895,8 @@ y sólo el primero es yolo. En macOS las ventanas de repo de Claude, OpenCode y
|
|
|
1696
1895
|
Kimi arrancan dentro de un perfil seatbelt generado: las escrituras caen sólo en su propio repo y su
|
|
1697
1896
|
estado de runtime, y los ficheros que convierten una inyección de prompt en un
|
|
1698
1897
|
robo de credenciales (`~/.ssh`, `~/.git-credentials`, `~/.aws`, configs de gh
|
|
1699
|
-
y de nube, tokens de carretera remota
|
|
1898
|
+
y de nube, tokens de carretera remota, y el propio
|
|
1899
|
+
`~/.claude/.credentials.json` de Claude Code) quedan sellados en el kernel — lecturas
|
|
1700
1900
|
y escrituras, hijos y nietos incluidos. Al agente no se le pregunta nada: las
|
|
1701
1901
|
rutas prohibidas sencillamente no existen para él. Codex usa en cambio su
|
|
1702
1902
|
sandbox nativa `workspace-write` y no se envuelve en seatbelt: workers MCP como
|
|
@@ -1704,6 +1904,22 @@ sandbox nativa `workspace-write` y no se envuelve en seatbelt: workers MCP como
|
|
|
1704
1904
|
proceso ya enjaulado. `CITY_CAGE=0` desactiva de forma deliberada la capa de
|
|
1705
1905
|
confinamiento aplicable.
|
|
1706
1906
|
|
|
1907
|
+
**En Linux la jaula es bubblewrap.** El sello se construye como se construye en
|
|
1908
|
+
Linux: un espacio de nombres de montaje donde las rutas selladas sencillamente
|
|
1909
|
+
no están montadas, así que dentro de la jaula `~/.ssh` es un directorio vacío y
|
|
1910
|
+
`~/.git-credentials` se lee como nada. La misma promesa que el seatbelt, con
|
|
1911
|
+
otro mecanismo, y `bin/test-cage.py` lo demuestra contra un espacio de nombres
|
|
1912
|
+
real en cada ejecución de CI en Linux: la clave plantada no se puede leer, el
|
|
1913
|
+
repo sigue siendo escribible, una escritura en un directorio sellado nunca llega
|
|
1914
|
+
al disco y un proceso nieto no se escapa.
|
|
1915
|
+
|
|
1916
|
+
Necesita `bubblewrap` instalado (`apt install bubblewrap`) y espacios de nombres
|
|
1917
|
+
de usuario sin privilegios habilitados — Agents City comprueba que bwrap puede
|
|
1918
|
+
crear uno de verdad en vez de fiarse de que exista el binario, y una máquina
|
|
1919
|
+
donde no pueda lo dice y arranca sin jaula, exactamente como antes. En otras
|
|
1920
|
+
plataformas no hay confinamiento: sin jaula, pon agentes sobre trabajo sobre el
|
|
1921
|
+
que te sentirías cómodo ejecutando un script.
|
|
1922
|
+
|
|
1707
1923
|
Como una ventana enjaulada no puede leer el token de `gh`, los PRs y pushes
|
|
1708
1924
|
pasan por un broker de credenciales opcional (`CITY_BROKER=1`): un proceso
|
|
1709
1925
|
pequeño del lado del dueño que guarda las credenciales, acepta tokens por
|
|
@@ -1883,8 +2099,8 @@ agents-city seat --repos
|
|
|
1883
2099
|
```
|
|
1884
2100
|
|
|
1885
2101
|
La detección exige `.git` (directorio o fichero de worktree) y un remote `origin`.
|
|
1886
|
-
Si acabas de cambiar las raíces,
|
|
1887
|
-
|
|
2102
|
+
Si acabas de cambiar las raíces, usa **Buscar otra vez** en el formulario de
|
|
2103
|
+
casas, o ejecuta `plugin/scripts/busca.py --refresh`. `AGENTS_CITY_ORG` puede estar filtrando el repo;
|
|
1888
2104
|
déjala vacía para indexar todos los remotes.
|
|
1889
2105
|
|
|
1890
2106
|
### GitHub no muestra repos privados u organizaciones
|