claude-caja: el tope de sesiones era un número suelto que se leía como arquitectura
Preguntado por el operador: «¿qué me limita levantar más de 8 claudes, una política random o una arquitectura?». Era lo primero, y de una sola línea. El bucle YA crea la jaula siguiente cuando encuentra ocupada la anterior (clona la capa, ~1 s, 169 M), así que nada impedía la novena salvo el literal del guardia. Lo arquitectónico es sólo que el kernel prohíbe dos overlays sobre el mismo upper — una jaula por Claude —, y de eso ya se encarga el clonado. Sube a 10 y, sobre todo, deja escrito CUÁL es el techo real, que es la RAM, medido en esta caja el 23-sep: 8 sesiones son 2,5 G de RSS (147-493 M cada una, ~310 M de media) sobre 7,7 G con 8 G de swap y 4,1 ya comidos. Los 4 núcleos no limitan: las sesiones esperan la API, no CPU, y taller ya serializa los cargo. Disco, 169 M por jaula. Un número sin su porqué es lo que hace que la próxima vez se lea otra vez como una ley del sistema. Sintaxis validada con sh -n; el bucle se simuló con el tope nuevo: elige claude-sergio-9 con ocho ocupadas, la 10 con nueve, y rechaza en diez. Las instancias 9 y 10 quedan creadas y probadas (uid 1001, git/ssh/python3/jq/ rsync/bwrap presentes, CLI 2.1.240 arranca, concesiones resuelven). Assisted-by: claude-code:claude-opus-5
Delta semántico
Ninguna definición cambió: el cambio es de texto, documentación o datos.
1 archivos · +9 −1
diff --git a/scripts/servidor/claude-caja.sh b/scripts/servidor/claude-caja.sh
index 2807afa0..d90ae1d6 100755
--- a/scripts/servidor/claude-caja.sh
+++ b/scripts/servidor/claude-caja.sh
@@ -73,7 +73,15 @@ _libre() { ! pgrep -f "[q]orpa run $1 " >/dev/null 2>&1; }
_inst="$_base"; _n=2
while ! _libre "$_inst"; do
_inst="$_base-$_n"; _n=$((_n+1))
- [ "$_n" -gt 9 ] && { echo "claude: hay 8 sesiones abiertas de $_base — cerrá alguna" >&2; exit 1; }
+ # ⚠ ESTE NÚMERO ES EL TOPE, y hasta el 2026-09-23 era lo ÚNICO que limitaba cuántos Claudes
+ # hay. Se leía como arquitectura y no lo es: el kernel sólo prohíbe DOS overlays sobre el mismo
+ # `upper` (una jaula = un Claude), y de eso ya se encarga el bucle clonando la capa siguiente.
+ # El techo real es la RAM, MEDIDO acá el 23-sep: 8 sesiones = 2,5 G de RSS (147–493 M cada una,
+ # ~310 M de media) sobre 7,7 G con 8 G de swap y 4,1 ya comidos. Los 4 núcleos NO limitan —las
+ # sesiones esperan la API, no CPU, y `taller` ya serializa los `cargo`—. Disco: 169 M por jaula.
+ # Subirlo es cambiar los dos números de esta línea; pasado ~14 empieza a jugarse con el OOM, que
+ # es el modo de falla documentado (INFORME-CAIDA-2026-08-17: la caída fue con ocho adentro).
+ [ "$_n" -gt 11 ] && { echo "claude: hay 10 sesiones abiertas de $_base — cerrá alguna" >&2; exit 1; }
done
if [ ! -d "$BASEDIR/$_inst" ]; then
echo "claude: abro una sesión más ($_inst) — clonando la capa, ~1 s" >&2