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…
⎇ eb96c9219e07051d088884e038f86b63921e72c0
scripts/servidor/qorpa-claude.instance.toml
Historia
crudo
el agente corre en la caja y puede construir — la condición que el usuario puso para borrar gioser
1# Manifiesto de la instancia — ESTO es la verdad, `upper/` es caché descartable (ADR 0015 D3).
2#
3# ── POR QUÉ EXISTE ESTA JAULA (2026-09-17) ──────────────────────────────────────────────────────
4# Pedido del usuario: «no borramos gioser hasta tenerte corriendo de aquel lado, con capacidad de
5# compilar tawasuyu y las recetas de takana». El CLI de Claude Code es un **ELF glibc de 360 M**
6# (`interpreter /lib64/ld-linux-x86-64.so.2`, NEEDED libc.so.6) y esta caja es musl: no hay camino
7# nativo. Es el caso del ADR 0015, igual que `sergioh-api`.
8base = "sha256:895661bdf6c64e91b7725874165fd05dd30c438d3ffec661671ab5cfb261ca58"
9distro = "arch"
10
11# Lo que hace falta ADENTRO para trabajar el repo: git para commitear y empujar, openssh para
12# llegar al gitea y al worker, y las CA para TLS. El CLI trae su propio node y su propio ripgrep.
13# `bubblewrap`: `takana build` levanta SU PROPIO sandbox adentro. Sin esto la jaula lee recetas y no
14# construye ninguna, que es la mitad del pedido. El `takana` que las construye NO se instala acá:
15# sale del STORE, que ya está concedido — es estático musl y corre igual dentro de una imagen
16# glibc (comprobado: `takana 0.0.1` desde /store dentro de la jaula).
17packages = ["git", "openssh", "ca-certificates", "bubblewrap"]
18
19[grants]
20# ⚠ ESTA JAULA ES ANCHA A PROPÓSITO, Y CONVIENE DECIRLO EN VEZ DE DISIMULARLO. Un agente que
21# construye recetas, commitea y empuja necesita exactamente lo que un humano haciendo ese trabajo:
22# el repo, el store, el lab y las llaves. Lo que la jaula sigue comprando es que ese alcance esté
23# ESCRITO y acotado a estos directorios — no que sea pequeño.
24network = true
25# `nesting`: `takana build` levanta su sandbox con bwrap ADENTRO. Sin esto, la jaula puede leer las
26# recetas y no puede construir ninguna, que es justo la mitad del pedido.
27nesting = true
28root = true
29wayland_raw = false
30seal_image = false
31
32# El repo: es el trabajo.
33[[grants.dirs]]
34host = "/opt/takana"
35inside = "/opt/takana"
36mode = "rw"
37
38# El lab y el toolchain (zig, go). `.dev-fs` del repo es un symlink acá, así que se concede el
39# destino real o el build no encuentra nada.
40[[grants.dirs]]
41host = "/work/dev-fs"
42inside = "/work/dev-fs"
43mode = "rw"
44
45# El store: sin esto no hay cache-hit, ni sellado, ni hash comparable.
46[[grants.dirs]]
47host = "/store"
48inside = "/store"
49mode = "rw"
50
51# La memoria del agente y sus credenciales. 733 ficheros de memoria y un `.credentials.json` de
52# 509 B: sin lo primero el agente arranca sin saber nada del proyecto; sin lo segundo, no arranca.
53[[grants.dirs]]
54host = "/root/.claude"
55inside = "/root/.claude"
56mode = "rw"
57
58# Las llaves: el gitea (push), el worker de la granja y el Storage Box. Sólo lectura.
59[[grants.dirs]]
60host = "/root/.ssh"
61inside = "/root/.ssh"
62mode = "ro"
63
64# El propio CLI, que vive fuera de la imagen a propósito: la imagen es ajena y pineada, y el CLI se
65# actualiza solo. Mezclarlos haría que `recreate` borrara el binario o que la imagen dejara de ser
66# la que dice ser.
67[[grants.dirs]]
68host = "/work/claude-cli"
69inside = "/work/claude-cli"
70mode = "ro"
71
72[export]