En resumen

Lo que dice este artículo

Cuando una aplicación Android es de código abierto, un agente de IA puede hacer la ingeniería a partir de una petición sencilla: clonar, modificar, compilar el APK, instalarlo por USB, mirar la pantalla e iterar. El artículo muestra los prompts cortos reales detrás de tg-digest-android.

  • El fork de ejemplo añade una pestaña Digest que combina las publicaciones no leídas de determinados canales de Telegram en un único feed cronológico.
  • Claude compiló, instaló, abrió, comprobó visualmente e iteró la aplicación en un Redmi Note 8 Pro físico en un solo día.
  • La persona debe obtener su propio api_id y api_hash de Telegram, guardarlos en el local.properties de la raíz y activar las opciones de desarrollador y la depuración por USB de Android.
  • En el momento de la publicación, las credenciales personales de Telegram del autor no aparecían ni en el árbol público ni en ninguno de los dos commits públicos; en el código importado solo permanecía el par de ejemplo de upstream de Telegram.
  • La compilación suministrada es para arm64-v8a y está basada en Telegram para Android 12.7.3 (6750).

Lo sorprendente no es que un fork de Telegram ganara una pestaña Digest. Es que llevarla a un teléfono real no me obligó a escribir un plan de compilación para Android. Describí el comportamiento que faltaba con palabras corrientes, conecté el teléfono y después escribí solo «Ejecuta la última versión en mi teléfono». Esa misma tarde ya usaba mi propia compilación.

Tg Digest en Android mostrando un feed cronológico; la opción de navegación Perfil usa un círculo azul liso en lugar del avatar.
Las publicaciones no leídas aparecen en un único feed cronológico.
La pantalla Digest Channels de Tg Digest muestra canales públicos de IA para seleccionar como fuente del feed.
Elige los canales que alimentan ese feed.
Código fuente y función operativa: github.com/howaihelps/tg-digest-android. Es un fork público de Telegram para Android 12.7.3 (6750), no una versión oficial de Telegram.
No necesitas ser ingeniero de Android. El agente se ocupó del código, las dependencias, la compilación, ADB, la instalación, el inicio y las comprobaciones. La tarea humana fue describir el resultado, introducir credenciales privadas, confirmar en el teléfono y mirar la pantalla.

Esa mañana, la función no existía

Las suscripciones a canales suelen acabar en uno de dos estados igual de malos: cientos de contadores rojos o todo marcado como leído mientras las publicaciones útiles desaparecen. Yo quería un tercer modelo: elegir unos cuantos canales y leer todas sus publicaciones no leídas como una única cronología normal.

La pestaña Digest resultante hace exactamente eso:

  • permite buscar canales y combina sus publicaciones en orden cronológico;
  • mantiene un límite de última lectura independiente para cada cuenta;
  • se abre en el primer elemento no leído y permite desplazarse indefinidamente hacia atrás;
  • muestra nombres de canales, álbumes multimedia, fechas y reacciones con la propia interfaz de Telegram;
  • marca los mensajes visibles como leídos mediante el mismo mecanismo que una pantalla normal de canal.

No es una pequeña demostración ni un cliente nuevo dibujado desde cero. El agente tuvo que actualizar la base al código de Telegram publicado más reciente y entender su base de datos local, la paginación, la agrupación de contenido multimedia y la navegación. Pero yo no tuve que dictarle nombres de clases. Describí lo que la persona debía ver y sentir al usarlo.

El trabajo era de ingeniería. El prompt estaba en lenguaje corriente

La petición principal era más o menos la siguiente. La última frase fue importante: evitó que el agente construyera una segunda interfaz, visiblemente ajena, junto a la que Telegram ya tenía.

El prompt que creó la función
Añade una página independiente con todos los mensajes no leídos de los canales de Telegram que yo elija.

Necesito un selector de canales. Mantén para Digest un marcador independiente con el último elemento que realmente leí. Al abrir la página, colócala en el primer mensaje no leído. Añade desplazamiento infinito hacia el pasado y un botón inferior que vuelva al primer elemento no leído. Marca las publicaciones visibles como leídas mediante el estado de lectura estándar de Telegram.

Muestra los álbumes, el nombre del canal y su avatar igual que Telegram normalmente. Reutiliza la interfaz existente todo lo posible; crea una interfaz propia solo cuando sea inevitable.

Compila la aplicación, instálala en el teléfono conectado y comprueba el resultado en el dispositivo.

Unas horas después, la aplicación funcionaba en un Redmi Note 8 Pro. Entonces hice dos peticiones breves más: eliminar los tirones al desplazarse y subir el botón redondo por encima de la navegación inferior, a la vez que se quitaba un avatar sobrante entre mensajes. Claude inspeccionó el resultado en el teléfono, encontró las causas, volvió a compilar el APK y lo comprobó de nuevo. Se parecía más a trabajar con un equipo de producto que a «generar código».

El código se abarata; una intención precisa gana valor

Antes había una cadena costosa entre «necesito esto» y «lo estoy usando»: encontrar a un desarrollador de Android, explicar la arquitectura, preparar el entorno, esperar las compilaciones y aprender ADB. Eso nos acostumbró a tratar la interfaz de una aplicación como algo definitivo. Aceptamos lo que publica el proveedor y esperamos la siguiente versión.

Un agente de programación cambia la economía de esa cadena. Puede leer un repositorio grande y desconocido, hacer coincidir las versiones de JDK, SDK y NDK, localizar el punto de integración correcto, compilar un APK, investigar un fallo de instalación, leer logcat y repetir el ciclo. No todos los resultados son buenos, pero el coste de una primera versión funcional se ha desplomado.

El cambio: el código fuente se parece menos a un producto terminado y más a una materia prima. Su valor no ha desaparecido; se ha desplazado hacia una intención clara, la elección de una fuente fiable, la verificación, la seguridad y la capacidad de mantener tu fork.

Esto no sirve para todo. Una aplicación cerrada sin código fuente, una función del servidor, una infraestructura de pagos o un cambio en un protocolo criptográfico no aparecen con un solo prompt. Pero cuando el comportamiento deseado reside en un cliente Android abierto y puede comprobarse en pantalla, esperar al botón oficial ya no siempre es racional.

Cómo repetirlo: dejar a la persona solo las acciones imprescindibles

El proceso siguiente está pensado para este fork. Necesitas un ordenador, un agente de programación con acceso al terminal como Claude Code o Codex, un teléfono Android, un cable USB de datos y varios gigabytes de espacio libre. El repositorio es grande y la primera compilación para Android lleva tiempo. Deja que el agente prepare el entorno técnico; tú añadirás las credenciales privadas, cambiarás los ajustes del teléfono e iniciarás sesión en Telegram.

1 Deja que el agente prepare el proyecto

Abre el agente en una carpeta vacía. El proyecto original empezó con una petición igual de corta: hacer un fork del cliente oficial para Android y ejecutarlo en el teléfono conectado. Para el fork público terminado:

Prompt 1 — ejecutar el fork
Clona https://github.com/howaihelps/tg-digest-android y ejecuta la última versión en mi teléfono Android conectado por USB.

Dime cuándo debo introducir personalmente mi app id y app hash de Telegram o confirmar algo en el teléfono. No muestres ni incluyas esas credenciales en un commit.

2 Obtén tu propio API ID y hash de Telegram

Acción de la persona

  1. Inicia sesión en una aplicación oficial de Telegram si todavía no tienes una cuenta.
  2. Abre my.telegram.org, inicia sesión con tu número de teléfono y elige API development tools.
  3. Completa el formulario de la aplicación, elige Android y guarda el api_id y el api_hash asignados.

No es un token de bot. Telegram concede un par por número de teléfono y exige un ID personal para un cliente de terceros. Consulta las instrucciones oficiales de Telegram.

En la raíz del repositorio clonado, junto a settings.gradle, abre local.properties y sustituye manualmente los marcadores. No añadas comillas:

Archivo local local.properties — no lo incluyas nunca en un commit
sdk.dir=/Users/[TU_NOMBRE]/Library/Android/sdk
TELEGRAM_API_ID=[TU_API_ID_NUMERICO]
TELEGRAM_API_HASH=[TU_API_HASH_DE_32_CARACTERES]

La ruta sdk.dir es distinta en Windows y Linux; el agente ya debería haberla completado. En este fork, TMessagesProj/build.gradle inyecta los dos valores en BuildConfig, y BuildVars.java los lee durante la ejecución. local.properties figura en .gitignore.

En el momento de la publicación, también comparé mis valores reales con todos los archivos de los dos commits públicos: mi api_id y mi api_hash personales no aparecen ni en el árbol actual ni en el historial de Git. El código importado desde upstream sí contiene el par de ejemplo estándar y restringido de Telegram. No son mis credenciales y no debes depender de ellas para tu compilación.

3 Prepara el teléfono

Acción de la persona

  1. Abre Información del teléfono y pulsa siete veces Número de compilación. En Xiaomi puede llamarse Versión de MIUI o Versión de HyperOS.
  2. Vuelve a Ajustes, abre Opciones de desarrollador y activa Depuración por USB.
  3. En Xiaomi, activa también Instalar vía USB; algunos modelos requieren Depuración USB (ajustes de seguridad).
  4. Conecta el teléfono desbloqueado con un cable que admita datos, no solo carga.
  5. Acepta en el teléfono la huella RSA del ordenador; marcar «Permitir siempre» resulta práctico.

Los nombres de los menús varían según el fabricante. La secuencia básica está documentada en la guía oficial de Android sobre opciones de desarrollador. Mantén la pantalla desbloqueada durante la primera instalación: el agente no puede aceptar por ti un diálogo del sistema.

4 Pide al agente que compile e inicie la aplicación

Cuando local.properties esté completo y el teléfono conectado, no necesitas mencionar ADB, la tarea de Gradle, la ABI, CMake, la ruta del APK ni una actividad Android. En la sesión real con Claude, toda mi petición de inicio fue una sola frase:

El prompt real de inicio
Ejecuta la última versión en mi teléfono.

Claude comprobó por su cuenta el dispositivo, ajustó el toolchain de Android, compiló la variante correcta, la instaló y la inició, y después revisó capturas de pantalla. Fueron acciones del agente, no conocimientos técnicos ocultos en mi prompt. El resultado fue un APK de depuración de unos 75 MB como org.telegram.messenger.beta en arm64-v8a. Sigue introduciendo tú mismo el código de acceso y la contraseña de dos factores; no se los des al agente.

5 Pide tu función en el lenguaje de los resultados

Una vez iniciada la aplicación, puedes modificar este fork o repetir el proceso con otra aplicación de código abierto. No empieces por «crea una clase» o «corrige el RecyclerView». Describe la situación, el comportamiento observable y los criterios de aceptación.

Plantilla para una función personal
Modifica la aplicación para este flujo personal.

Ahora: [lo que falta o lo que hago manualmente].
Quiero: [lo que debo ver y lo que debe ocurrir].
Conserva: [las pantallas y comportamientos existentes que no deben cambiar].

Reutiliza todo lo posible la interfaz de la aplicación. Haz que funcione, ejecuta la última versión en mi teléfono conectado y comprueba tú mismo el resultado.

6 Depura la experiencia, no solo la compilación

La primera compilación de Digest funcionaba, pero el feed daba pequeños saltos mientras cargaba más elementos. El siguiente prompt no contenía ni diagnóstico ni plan de pruebas, solo lo que veía en el teléfono:

Prompt de iteración
Todo está muy bien, pero la pantalla da pequeños tirones al desplazarse. ¿Puedes comprobarlo tú mismo y corregirlo?

El agente encontró una actualización completa de la lista durante la paginación y la sustituyó por una actualización incremental. Al repetir la medición, los fotogramas con tirones bajaron del 11,9 % al 2,1 %, mientras que el tiempo de fotograma del percentil 99 pasó de 40 a 22 ms. Describí otro defecto visual de forma aún más sencilla: «sube el botón por encima de la navegación inferior y elimina el artefacto del centro, conservando el nombre del canal». Eso también era lenguaje corriente, no una especificación de interfaz. El compromiso final es una cabecera solo con el nombre: no se muestra el avatar del autor que causaba el artefacto. Este ciclo —mirar, nombrar el defecto, dejar que el agente lo reproduzca y después verificar— importa más que un primer prompt perfecto.

Antes de publicar, usa un prompt de seguridad independiente

Que el APK funcione no significa que el repositorio sea seguro. En mi petición real de publicación expresé el límite con palabras corrientes; Claude lo convirtió en comprobaciones de los archivos bajo seguimiento y del historial antes del push:

La petición real de publicación, sin rutas privadas
Sube todos los cambios al repositorio público en un único buen commit en inglés.

Bajo ningún concepto subas mi app id ni mi app hash. Deben permanecer en un archivo local excluido del repositorio. Compruébalo cuidadosamente antes del push.

Telegram para Android se distribuye bajo GNU GPL v2 o posterior, por lo que el fork conserva la licencia y mantiene disponible el código fuente. También existe una obligación práctica: mantener tu fork, revisar su diff y no considerar automáticamente fiable el código generado. Un agente reduce radicalmente el coste de implementación; no elimina la responsabilidad de quien posee la compilación.

No es una aplicación para todo el mundo: es exactamente tu aplicación

Un producto de masas debe elegir funciones que tengan sentido para millones de personas. Una compilación personal puede ser extraña, limitada y perfecta para una sola persona. Aquí es donde los agentes más cambian el software: no tienes que fundar una startup ni esperar años a que gane una votación de solicitudes de funciones. A veces bastan un repositorio abierto, una descripción precisa, un cable USB y la voluntad de inspeccionar el resultado.

El código no se ha vuelto inútil. Se ha vuelto mucho menos escaso. Y, en consecuencia, el derecho a tomarlo, cambiarlo y ejecutarlo en tu propio dispositivo ha ganado valor.

La ruta corta

  1. Elige código fuente abierto para Android y deja que un agente prepare el toolchain.
  2. Obtén tú las credenciales privadas y guárdalas solo en un archivo local ignorado por Git.
  3. Activa las Opciones de desarrollador y la Depuración por USB, y conecta un teléfono desbloqueado.
  4. Pide al agente que compile, instale, inicie y verifique el APK.
  5. Describe con lenguaje corriente el comportamiento que quieres.
  6. Itera en un dispositivo real y audita por separado los secretos y la licencia antes de cualquier push.

Preguntas frecuentes

¿De verdad puede una persona no desarrolladora modificar una aplicación Android con un agente de IA?

Sí, cuando el código fuente está disponible y la tarea puede comprobarse en un dispositivo. Aun así, debes describir el comportamiento deseado, aprobar las acciones sensibles, proporcionar las credenciales privadas de forma local y probar el resultado; el agente puede encargarse de la mayor parte del trabajo con el repositorio, el toolchain, la compilación, la instalación y la depuración.

¿Dónde se guardan el api_id y el api_hash de Telegram en este fork?

Crea local.properties en la raíz del repositorio y añade TELEGRAM_API_ID y TELEGRAM_API_HASH sin comillas. Git ignora el archivo; Gradle inyecta los valores en BuildConfig durante la compilación.

¿Qué tengo que hacer en el teléfono Android?

Activa las Opciones de desarrollador pulsando siete veces Número de compilación, activa la Depuración por USB, conecta un teléfono desbloqueado con un cable de datos y acepta la huella RSA del ordenador. Los dispositivos Xiaomi también pueden requerir Instalar vía USB.