# thasnuna — el bot: `thasnuna run --wait 25`. # # ⚠ Su config NO está en el repo a propósito (lo dice su INSTALAR.md): el token de telegram y el # roster de teléfonos viven en `~/.config/thasnuna/`. Sin eso el binario está y el bot no existe. # # Receta Cargo contra el monorepo de tawasuyu, pinneada al MISMO commit que `shuma-*` y # `puriy-costura`: el árbol de fuentes se comparte por `-`, así que un pin distinto es otro # vendoreo de 2,4 G. Estática musl con zig-cc — la caja la arranca el init y no puede depender de # encontrar un cargador, que es justo lo que le falta al binario glibc de gioser. name = "thasnuna" version = "0.1.0" license = "MIT OR Apache-2.0" [source] repo = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git" commit = "619431cac9753cd55d0f9e2d99ff8efe7fab651b" # tawasuyu COMMITEA su propio `vendor/` (smithay parcheado, enchufado por `[patch.crates-io]` POR # RUTA); el `cargo vendor` de takana lo pisaría y el error habla de `taffy`, no de esto. cargo_vendor_dir = ".hammer-cargo-vendor" [build] compiler = "zig-cc" target = "x86_64-linux-musl" link = "static" flags = ["-p", "thasnuna-daemon", "--bin", "thasnuna"] # ── LA CUENTA Y EL SERVICIO (SDD 30) ──────────────────────────────────────────────────────────── [[user]] name = "thasnuna" uid = 963 home = "/var/lib/thasnuna" # ⚠ **HOY NO PUEDE CORRER EN LA CAJA, y conviene que lo diga él y no que lo descubra alguien.** # Su propio `INSTALAR.md` —escrito el 2026-09-16 para esta misma mudanza— lista tres requisitos, y # dos no están: `sandokan-mcp` en el PATH (sin él «el agente contesta pero no tiene herramientas») y # **`claude` instalado Y AUTENTICADO** (sin él «no hay anfitrión»). El CLI de claude es un binario # glibc de ~300 M: en una caja musl pide jaula qorpa, igual que `sergioh-api`. # # Las tres guardas salen 78 nombrando lo que falta. El token NO se genera: lo da @BotFather y vive # en un fichero 600 del usuario. Su INSTALAR.md explica por qué no va en la Card, y el motivo está # medido en la máquina vieja: la Card `openrc-openclaw` de gioser lleva **la API key de su proveedor # EN CLARO dentro del JSON de `/etc/arje/cards.d/`**, que es un directorio que se respalda y se copia. [[service]] label = "thasnuna" id = "01M2EKDA00THA5NVNAB0T00001" exec = "/bin/busybox" argv = ["sh", "-c", "/bin/grep -q '^thasnuna:' /etc/passwd || { echo 'thasnuna: falta el usuario `thasnuna` en /etc/passwd' >&2; exit 78; }; test -s /var/lib/thasnuna/.config/thasnuna/telegram-token || { echo 'thasnuna: falta el token (~/.config/thasnuna/telegram-token, 600). Lo da @BotFather y NO va en esta Card: un JSON de cards.d se respalda y se copia' >&2; exit 78; }; command -v sandokan-mcp >/dev/null || { echo 'thasnuna: falta `sandokan-mcp` en el PATH — sin él el agente contesta pero NO TIENE HERRAMIENTAS (su INSTALAR.md §0)' >&2; exit 78; }; command -v claude >/dev/null || { echo 'thasnuna: falta `claude` instalado y AUTENTICADO — sin anfitrión el daemon cae al eco. Es glibc: en musl pide jaula qorpa' >&2; exit 78; }; cd /var/lib/thasnuna || exit 78; exec /usr/bin/setuidgid thasnuna /usr/bin/thasnuna run --wait 25"] envp = [["PATH", "/usr/bin:/bin"], ["HOME", "/var/lib/thasnuna"], ["USER", "thasnuna"]] networking = "full" cgroup = "arje.slice/thasnuna" restart = { initial_ms = 1000, max_ms = 30000 }