gioser

sergio/takana

> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…

TOML 815Rust 56Shell 37Markdown 291229 Definitions

fix(qorpa): la jaula le borraba a claude la variable que lo saca de la pantalla alterna

Reporte del operador sobre shuma llimphi remoto: «claude esta abriendo plano» y
«cuando tengo un claude y vuelvo, salen igual solo poquito output, lo ultimo
escrito».

Medido en las tres sesiones vivas de esta caja: el proceso del CLI adentro de la
jaula tiene SIETE variables de entorno, y ninguna es del renderer. El PTY del
agente si las tiene (CLAUDE_CODE_DISABLE_ALTERNATE_SCREEN=1, COLORTERM,
SHUMA_SESSION): las pone shuma_config::agente::vars_del_renderer en cada spawn,
justamente para esto. Las borra el --clearenv del bwrap, que es correcto como
politica y aca no tenia por donde dejar pasar lo declarado.

Sin esa variable el CLI se va a pantalla alterna, y ahi el cliente no puede dos
cosas — las dos que se reportaron:
  · el reconocimiento en vuelo del cromo de claude no se dispara ni una vez, y la
    pestana queda en la grilla pelada: «me sale plano»;
  · la cosecha del historial saltea el alt-screen a proposito (TuiSession::
    ingerir, «if screen.alternate_screen() { return }»), asi que al volver solo
    esta la pantalla viva: «solo poquito output».

O sea que el arreglo estaba puesto del lado del agente desde el 2026-09-04 y esta
frontera lo anulaba. Van cuatro variables por una lista explicita, como
posicional, porque despues del --clearenv el ambiente no cruza de otra forma.

Certificado con el mecanismo, no con el sintoma: la misma invocacion con `env`
adentro de claude-sergio-9 imprime las cuatro. Los claudes que ya estan abiertos
siguen planos — la variable se lee al arrancar.

⚠ Este fichero estaba modificado SIN COMMITEAR en /opt/takana desde el 25-sep (el
tope de 10 jaulas que se saco), y por eso el pull --ff-only de la cosecha no
puede avanzar ahi. Lo commiteado aca incluye las dos cosas.

a185cd521d3e6cd11463d7b4ab8911618f5ede1d · by Sergio · (23 d ago) · parent 3ce485ed7 · browse the tree at this commit

Semantic delta

No definition changed: this change is text, documentation or data.

1 files · +31 −2

diff --git a/scripts/servidor/claude-caja.sh b/scripts/servidor/claude-caja.sh
index 7e1ebad2..bf9d722b 100755
--- a/scripts/servidor/claude-caja.sh
+++ b/scripts/servidor/claude-caja.sh
@@ -148,8 +148,35 @@ fi
 _proy="${PROY:-$PWD}"
 [ -d "$_proy" ] || _proy=/opt/takana
 
+# ── LO QUE SHUMA DECLARA Y LA JAULA BORRABA ─────────────────────────────────────────────────────
+# `bwrap` entra con `--clearenv` (ADR 0015: el ambiente también es una concesión), así que TODO lo
+# que el agente de shuma puso en el PTY se perdía en la frontera. Medido el 2026-09-28 sobre las
+# tres sesiones vivas: **7 variables adentro**, y ninguna de las del renderer.
+#
+# La que más cuesta es `CLAUDE_CODE_DISABLE_ALTERNATE_SCREEN`, que `shuma_config::agente::
+# vars_del_renderer` pone en CADA PTY del agente justamente para que no pase esto: sin ella el CLI
+# se va a **pantalla alterna**, y ahí el cliente no puede hacer dos cosas —las dos reportadas como
+# defecto el 28-sep—:
+#   · el reconocimiento en vuelo del cromo de claude no se dispara ni una vez ⇒ «me sale plano»;
+#   · la cosecha del historial **saltea el alt-screen a propósito** (`TuiSession::ingerir`,
+#     `if screen.alternate_screen() { return }`) ⇒ al volver a la pestaña sólo está la pantalla
+#     viva, «sólo poquito output, lo último escrito».
+# O sea: el arreglo estaba puesto del lado del agente desde el 2026-09-04 y esta línea lo anulaba.
+#
+# `COLORTERM` va por lo mismo (sin él el CLI degrada a 256 colores) y `SHUMA_SESSION` porque es lo
+# que le deja a un hook enlazar a ESTA sesión y no a otra.
+#
+# Viaja como UN posicional con tokens `K=V` separados por espacios, y se expande **sin comillas** a
+# propósito: `env` recibe un argumento por token. Ninguno de estos valores lleva espacios (un `1`,
+# `truecolor`, un ULID); el día que haga falta uno que sí, esto pide otra forma de pasarlo.
+_lleva=
+for _v in CLAUDE_CODE_DISABLE_ALTERNATE_SCREEN CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY COLORTERM SHUMA_SESSION; do
+  eval "_val=\${$_v:-}"
+  [ -n "$_val" ] && _lleva="$_lleva $_v=$_val"
+done
+
 exec takana qorpa run "$_inst" -- sh -c \
-  'hogar="$1"; proy="$2"; yo="$3"; shift 3
+  'hogar="$1"; proy="$2"; yo="$3"; lleva="$4"; shift 4
    cd "$proy" 2>/dev/null || { echo "claude: adentro de la jaula no existe \"$proy\" — ¿está concedido ese directorio en la instancia? (ver grants.dirs)" >&2; exit 1; }
    # `/work/<usuario>/bin` trae el toolchain del CORPUS (make, python3, rustc, cargo, takana…):
    # musl estáticos del store, que corren dentro de la imagen glibc. Lo arma jaula-herramientas.sh.
@@ -157,7 +184,9 @@ exec takana qorpa run "$_inst" -- sh -c \
    # el agente de adentro): `takana build` invoca `go` y `zig` por nombre, y en la imagen de la jaula
    # no están. Muere con `spawn go mod vendor: No such file or directory`, que no menciona el PATH.
    # Viven en el lab, que ya está concedido.
+   # shellcheck disable=SC2086  # `$lleva` se parte en tokens K=V a propósito — ver arriba
    exec env HOME="$hogar" TERM="${TERM:-xterm-256color}" \
         PATH="/work/$yo/bin:/work/dev-fs/tools/go/bin:/work/dev-fs/tools/zig:$PATH" \
+        $lleva \
         /work/claude-cli/2.1.240 "$@"' \
-  _ "$_hogar" "$_proy" "$_yo" "$@"
+  _ "$_hogar" "$_proy" "$_yo" "$_lleva" "$@"