Aviso honesto: flujo NO oficial y no probado por nosotros
Ni Anthropic ni Google dan soporte a correr un agente en una TV box con Termux. Nosotros no lo hemos probado de punta a punta en una caja concreta: la guía junta piezas que sí existen y funcionan por separado (Termux, Termux:Boot, wake lock, la API de Claude y los bots de Telegram). Cada caja china es un mundo y en la tuya algún paso puede cambiar. Hazlo con calma y con una caja que no te importe trastear.
Una TV box Android de 30 € (o un móvil viejo del cajón) puede hacer de «ordenador encendido 24/7» para un agente de IA. La caja solo ejecuta; Claude piensa en la nube. Tú le hablas por un bot de Telegram privado que solo te contesta a ti, aunque tengas el portátil apagado.
Cómo funciona
Le escribes al bot
Desde Telegram, en tu móvil, donde estés.
La caja recoge el mensaje
Termux pregunta a Telegram cada pocos segundos (long polling, sin abrir puertos).
Claude piensa en la nube
La caja manda la tarea a la API de Claude y recibe la respuesta.
Te llega la respuesta
El bot te la devuelve por Telegram. Solo a tu chat_id.
Para qué sirve (y para qué no)
| Sí | No |
|---|---|
| Resumir textos, redactar, contestar dudas | Nada pesado: tiene 2 GB de RAM |
| Avisos programados cada mañana | Nada que necesite un navegador de verdad |
| Scripts pequeños que se repiten | Sustituir a un Mac Mini: es muchísimo más lento |
Lo que necesitas
- Una TV box Android tuya: tipo X96Q, H96 o similar, chip ARM de 4 núcleos, 2 GB de RAM y Android 7 o superior (mejor 9+). Unos 25-35 €. No el deco de tu operadora: suele estar bloqueado, es de ellos y tocarlo puede ir contra tu contrato.
- Wifi o cable, y un teclado/ratón USB (o la app de mando desde el móvil) para los primeros pasos.
- Una cuenta en la consola de Claude (platform.claude.com) con saldo. La API se paga por uso; no es la suscripción Pro.
- Telegram en el móvil.
Paso 0: el prompt (foto + Claude)
Hazle una foto a la caja (y a la etiqueta de abajo, si tiene modelo) y pégala en claude.ai con este prompt. Claude te irá guiando adaptado a tu caja:
Esta es mi TV box Android (foto adjunta). Quiero convertirla en un servidor que ejecute un agente de IA 24/7, aunque tenga el portátil apagado. Plan:
1) Identifica el modelo, el chip (arquitectura ARM, 32 o 64 bits) y la versión de Android probable. Si no lo sabes seguro, dime cómo comprobarlo desde Ajustes o con "uname -m" y "getprop ro.build.version.release".
2) Guíame paso a paso para instalar Termux y Termux:Boot desde F-Droid (no Google Play) en ESTE aparato, con los ajustes de Android que hagan falta (orígenes desconocidos, quitar la optimización de batería a Termux).
3) Que Android no mate el proceso: termux-wake-lock y arranque automático con Termux:Boot.
4) Escríbeme un bot de Telegram en Python SIN dependencias externas (solo librería estándar) que:
- use long polling (sin abrir puertos),
- SOLO responda a mi chat_id (lo lee de una variable de entorno) e ignore al resto,
- mande mis mensajes a la API de Claude y me devuelva la respuesta,
- lea las claves de variables de entorno. NUNCA me pidas que te pegue mis claves en este chat.
5) Dime cómo probarlo y cómo ver los logs si falla.
Ve paso a paso: dame un paso, espera a que te diga «hecho» o el error, y sigue.Abajo tienes el mismo camino escrito, por si prefieres hacerlo a mano.
Paso 1: Termux y Termux:Boot desde F-Droid
- En la caja, abre el navegador y descarga F-Droid desde f-droid.org. Permite instalar apps de «orígenes desconocidos» cuando te lo pida.
- Desde F-Droid instala Termux y Termux:Boot. Las dos del mismo sitio: Termux:Boot solo ejecuta scripts si está firmado con la misma clave que Termux, y cada tienda firma con una clave distinta.
- Abre Termux:Boot una vez (solo abrirla). Así Android le deja arrancar al encender.
- Ajustes de Android → Apps → Termux → Batería → Sin restricciones / no optimizar.
Paso 2: preparar Linux dentro de Termux
Abre Termux y escribe:
pkg update && pkg upgrade -y
pkg install -y python
uname -m # aarch64 = ARM de 64 bits (lo normal)
Paso 3: el bot de Telegram
- En Telegram, habla con @BotFather →
/newbot→ ponle nombre. Te da un token: no lo compartas. - Tu chat_id: escríbele cualquier cosa a tu bot nuevo y abre en el navegador
https://api.telegram.org/bot<TU_TOKEN>/getUpdates. Busca"chat":{"id":123456789: ese número es tu chat_id.
Paso 4: las claves, fuera del código y fuera del chat
Crea una clave en la consola de Claude → API keys. Luego, en Termux:
nano ~/.agente.env
Pega esto con tus valores:
export ANTHROPIC_API_KEY="sk-ant-..."
export TELEGRAM_TOKEN="123456:ABC..."
export CHAT_ID="123456789"
export MODELO="pon-aqui-el-id-del-modelo"
El ID del modelo cópialo de la lista oficial de modelos (un Haiku es lo más barato para tareas pequeñas). Guarda (Ctrl+O, Enter, Ctrl+X) y protege el archivo:
chmod 600 ~/.agente.env
Pon un límite de gasto
En la consola de Claude, en Limits, fija un tope de gasto mensual. Así, aunque algo se líe, no te llevas un susto.
Paso 5: el agente (Python sin dependencias)
nano ~/agente.py
import json, os, time, urllib.request
TG = f"https://api.telegram.org/bot{os.environ['TELEGRAM_TOKEN']}"
YO = int(os.environ["CHAT_ID"])
KEY, MODELO = os.environ["ANTHROPIC_API_KEY"], os.environ["MODELO"]
def post(url, data, headers=None):
req = urllib.request.Request(url, json.dumps(data).encode(), {"Content-Type": "application/json", **(headers or {})})
with urllib.request.urlopen(req, timeout=120) as r:
return json.load(r)
def claude(texto):
r = post("https://api.anthropic.com/v1/messages",
{"model": MODELO, "max_tokens": 1500,
"system": "Eres mi asistente. Respuestas claras y cortas, en español.",
"messages": [{"role": "user", "content": texto}]},
{"x-api-key": KEY, "anthropic-version": "2023-06-01"})
return "".join(b.get("text", "") for b in r.get("content", [])) or "(sin respuesta)"
offset = 0
while True:
try:
upd = post(f"{TG}/getUpdates", {"offset": offset, "timeout": 50})
for u in upd.get("result", []):
offset = u["update_id"] + 1
msg = u.get("message") or {}
if msg.get("chat", {}).get("id") != YO or "text" not in msg:
continue # solo te contesta a ti
post(f"{TG}/sendMessage", {"chat_id": YO, "text": "Recibido. Me pongo con ello."})
post(f"{TG}/sendMessage", {"chat_id": YO, "text": claude(msg["text"])[:4000]})
except Exception as e:
print("error:", e)
time.sleep(10)
Pruébalo:
source ~/.agente.env && python ~/agente.py
Escríbele a tu bot desde Telegram. Si te contesta, funciona. Ctrl+C para pararlo.
Paso 6: que no se duerma y arranque solo
mkdir -p ~/.termux/boot
nano ~/.termux/boot/agente.sh
#!/data/data/com.termux/files/usr/bin/sh
termux-wake-lock
. ~/.agente.env
nohup python ~/agente.py >> ~/agente.log 2>&1 &
chmod +x ~/.termux/boot/agente.sh
Reinicia la caja. Sin abrir nada, escríbele al bot: debería contestar. Si no, mira el log con cat ~/agente.log. termux-wake-lock deja una notificación fija de Termux: es normal, es lo que evita que Android lo cierre.
Ideas de tareas para empezar
- «Resúmeme este texto que te pego.»
- «Redáctame 3 versiones de este mensaje para un cliente.»
- «Hazme el guion de un reel sobre X.»
- Avisos: instala
cronie(pkg install cronie) y programa un script que se lance cada mañana y te mande el resultado al bot.
Límites y seguridad (léelo)
- No oficial y no probado por nosotros de punta a punta. Si un paso falla en tu caja, pégale el error a Claude.
- Claude Code (la herramienta de terminal) en Termux tampoco está soportado oficialmente; por eso esta guía usa la API directa.
- Coste: cada mensaje gasta tokens de la API. Límite de gasto puesto = tranquilidad.
- Claves: solo en
~/.agente.env, en la caja. Nunca en el chat con Claude, nunca en capturas, nunca en GitHub. - Privacidad: lo que le mandas al bot pasa por Telegram y por la API de Anthropic. No le pases datos sensibles.
- Si vendes o regalas la caja: borra Termux (o restablece de fábrica) y revoca la clave de API y el token del bot.
Checklist
- TV box tuya (o móvil viejo) con Android 7 o superior.
- Termux y Termux:Boot instalados desde F-Droid, y Termux:Boot abierto una vez.
- Termux sin optimización de batería.
- Bot creado con @BotFather y tu chat_id apuntado.
- Claves en
~/.agente.envconchmod 600y límite de gasto puesto. - El bot te contesta tras reiniciar la caja.