Una ciudad separa responsabilidad, evidencia y autoridad.
Agents City no es un chat entre bots. Cada persona ejecuta sus ciudades en local, organiza agentes con workspaces y montajes y conecta sólo los asientos que deban intercambiar información.
Modelo mental
Una persona puede poseer varias ciudades locales. Otra persona mantiene las suyas en otro ordenador. Una carretera remota conecta sus asientos sin unir máquinas, workspaces ni credenciales.
propietario A · ordenador A
└── ciudad producto
├── asiento · preside
├── agente delivery · code
│ ├── mounts/api → repo API
│ └── mounts/web → repo web
├── agente research
│ └── mounts/handbook → documentos
└── carretera remota → propietario B/seguridad- Usuario
- posee varias ciudades locales.
- Ciudad
- un ámbito autónomo con dominio, objetivo, conocimiento y estado.
- Asiento
- preside el comité y es el único actor que cruza carreteras.
- Agente
- es la unidad miembro; tiene nombre, tipo, rol, runtime y un workspace que puede montar varias fuentes o ninguna.
- Montaje
- enlace desde el workspace del agente hacia una o varias fuentes reales de trabajo.
- Rol
- perspectiva profesional; no concede permisos del bus.
- Skill
- capacidad de un repo que se reconoce en vivo o carpeta/zip que el propietario instala explícitamente para un agente compatible.
- Carretera
- allowlist entre asientos; da alcance, no autoridad.
- Comité
- proceso de posiciones, síntesis, palabra, decisión y verificación.
$agents-city agents list --data <city> --card <owner-card>$agents-city agents mount --data <city> --agent writer --src ~/Documents/handbookLos agentes se definen de uno en uno
El onboarding actual de main no convierte cada carpeta en un agente. Termina un especialista completo antes de ofrecer el siguiente, y también permite crear una ciudad que empiece sólo con su presidente.
- 1
Nombre — cómo aparece el agente en su ventana, mapa y bus.
- 2
Tipo de trabajo — code, knowledge o coordinator; describe el trabajo y el edificio, no la autoridad.
- 3
Rol — su especialidad, elegida del dominio actual o de otro sin convertirlo en presidente.
- 4
Todo lo que usa — cualquier combinación de repos, worktrees y carpetas de documentos montada en un workspace propio.
- 5
Runtime — Claude, Codex, OpenCode, Kimi o un fallback de terminal explícito.
- 6
Skills iniciales — sólo las que el propietario elige; se ofrecen únicamente cuando el motor puede leerlas.
$agents-city seat --agents$agents-city agents mounts --agent writer --data <city>$agents-city agents mount --agent writer --src ~/Documents/handbook --data <city>Un bus local, cuatro entregas nativas
Todos reciben sobres tipados por el mismo WebSocket local. La última milla cambia para mantener la interfaz real de cada proveedor.
stream-json persistentegateway city> y transcript visibleWebSocket app-serverTUI oficial conectado con --remoteAPI HTTP/SSEgateway city> interactivoREST + WebSocketgateway city> interactivoadaptador compatibleterminal:<comando> explícitoEl comité, paso a paso
El asiento abre un comité sólo si evidencia especializada puede cambiar la decisión. No convoca todos los agentes por defecto.
- 01
Brief
pregunta, resultado, contexto, límites, definición de terminado, autoridad y participantes.
- 02
Posiciones aisladas
cada miembro responde sin ver al resto; abstenerse es válido.
- 03
Síntesis
el asiento compara evidencia, acuerdos, conflictos e incógnitas sin votar.
- 04
Palabra
un miembro pide un turno por evidencia nueva, contradicción, riesgo o dependencia.
- 05
Decisión
se registran resultado, razones, ejecutor, verificador, disenso y condiciones de reapertura.
- 06
Verificación
otro agente devuelve pass o fail; fail obliga a replanificar.
$agents-city committee schema open$agents-city committee open --input proposal.json$agents-city committee show <deliberation-id>Cada deliberación conserva ACT.md para humanos, state.json para estado y events.jsonl como audit trail append-only. No se editan para saltar transiciones.
Carreteras locales y remotas
Una carretera local conecta dos ciudades de la misma máquina sin servidor externo. Para dos personas u ordenadores, cada lado acepta la invitación pública del otro y ambos asientos usan el mismo relay opcional con una credencial de owner propia. La invitación nunca contiene ese token.
$agents-city road invite product > product.invitation.json$agents-city road connect research product.invitation.json$agents-city road invite research > research.invitation.json$agents-city road connect product research.invitation.json$agents-city bus rosterEstado que puedes inspeccionar
~/.agents-city es un contenedor. Cada ciudad gestionada vive debajo del owner y no comparte configuración con home, producto o cliente-a.
~/.agents-city/<owner>/<city>/
├── city.yml
├── roads.json
├── <owner>.md
├── AGENTS.md
├── agents/
│ └── <agent>/
│ └── mounts/ → repos, worktrees, documents
├── domains/
├── roles/
├── deliberations/
├── units.yml
└── parcels.ymldomains/ y roles/ son Markdown editable de la ciudad. No son skills ocultas ni se sobrescriben automáticamente cuando cambias un rol.
Una puerta para cada ciudad
El main actual puede poner una ciudad en el escritorio con su nombre e icono. Crea una app de macOS, una entrada .desktop de Linux o un acceso directo real en el escritorio de Windows cuando se ejecuta bajo WSL. Todos abren la misma ciudad que abriría el CLI.
$agents-city shortcut$agents-city shortcut product --hall$agents-city shortcut --remove