En resumen

Lo que dice este artículo

Cuando una aplicación Android es de código abierto, un agente de programación con IA puede clonarla, añadir una función personal, compilar el APK, instalarlo en un teléfono conectado por USB, inspeccionar el resultado e iterar. El artículo lo demuestra con el fork público tg-digest-android y ofrece prompts listos para usar, manteniendo el api_id y el api_hash de Telegram en un archivo local.properties ignorado por Git.

  • 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).

Quería abrir Telegram y ver un único feed con las publicaciones no leídas solo de los canales que yo hubiera elegido. Ese botón no existía. No envié una solicitud para esperar a ver si entraba en la hoja de ruta de alguien. Abrí el código fuente del cliente oficial para Android, describí el comportamiento a Claude, conecté el teléfono y 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.

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 prompt especificaba el comportamiento, no el código

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 y pega el siguiente prompt. Está diseñado para detenerse antes de tocar secretos y para no eliminar una aplicación instalada si Android indica un conflicto de firma.

Prompt 1 — clonar y preparar con seguridad
Prepara https://github.com/howaihelps/tg-digest-android para una compilación local.

Trabaja de forma autónoma: clona el proyecto, lee su README e inspecciona el historial de Git y el árbol de trabajo. Detecta mi sistema operativo y comprueba Git, JDK 17, Android SDK / Build Tools 35, NDK 27.2.12479018, CMake y platform-tools. Prepara lo que falte; si una descarga o instalación necesita mi permiso, solicítalo una sola vez y explica exactamente por qué.

Nunca muestres, transmitas ni incluyas en un commit TELEGRAM_API_ID o TELEGRAM_API_HASH. Comprueba que el archivo local.properties de la raíz está ignorado por Git. Si no existe, crea una plantilla segura que contenga únicamente el sdk.dir correcto y marcadores para los dos valores; después detente y pídeme que los complete manualmente.

No compiles ni hagas push todavía. Termina informando únicamente de la ruta del repositorio, el estado del toolchain, la ruta de local.properties y mi siguiente acción.

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, envía el siguiente prompt. Es la instrucción de puesta en marcha. Incluye los comandos esperados del README, pero no necesitas entenderlos ni ejecutarlos personalmente.

Prompt 2 — compilar, instalar y verificar
Las credenciales de local.properties están completas y el teléfono Android desbloqueado está conectado por USB. Compila y ejecuta la aplicación en él.

Trabaja hasta obtener un resultado verificable. No muestres TELEGRAM_API_ID ni TELEGRAM_API_HASH y, antes de cualquier acción de Git, comprueba que local.properties no está bajo seguimiento.

1. Ejecuta adb devices -l. Si el estado es unauthorized, pídeme que acepte el diálogo RSA y continúa después.
2. Comprueba la ABI con adb shell getprop ro.product.cpu.abilist. Actualmente este fork solo compila para arm64-v8a. Si el teléfono no admite arm64-v8a, adapta la configuración de ABI con el menor cambio posible y explícalo.
3. Prepara PATH, JAVA_HOME, ANDROID_HOME y ANDROID_SDK_ROOT; ajusta la versión de CMake instalada a la que espera Gradle.
4. Ejecuta ./gradlew :TMessagesProj_App:assembleAfatDebug. Corrige los errores de entorno o compilación en vez de detenerte ante el primero.
5. APK esperado: TMessagesProj_App/build/outputs/apk/afat/debug/app.apk. Instálalo con adb install -r.
6. Si la instalación está bloqueada, pídeme que active Instalar vía USB. Si Android indica un conflicto de firma, NO desinstales la aplicación anterior sin mi aprobación explícita: al desinstalarla se borran sus datos locales.
7. Inicia el paquete org.telegram.messenger.beta y verifica que se abre la primera pantalla y que está presente la pestaña Digest. Utiliza adb, logcat y capturas de pantalla para diagnosticar.

Termina informando de la ruta y el tamaño del APK, la ABI del dispositivo, el resultado de la instalación, el paquete/actividad iniciados y lo que debo comprobar visualmente. No hagas push.

La configuración actual se ha verificado en arm64-v8a: se compiló, instaló e inició como org.telegram.messenger.beta un APK de depuración de unos 75 MB. En el primer inicio aún debes entrar en Telegram personalmente e introducir el código de acceso y la contraseña de dos factores, si la tienes activada. 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 que se está ejecutando en mi teléfono para adaptarla a este flujo de trabajo personal.

Problema: [lo que ahora hago manualmente o lo que falta].
Comportamiento deseado: [lo que debo ver y lo que debe ocurrir después de cada acción].
Datos y estado: [qué hay que guardar, cuándo actualizarlo y qué debe conservarse tras un reinicio].
Límites: [qué no debe cambiar; qué pantallas y comportamientos nativos deben mantenerse].
Está terminado cuando:
- [criterio verificable 1];
- [criterio verificable 2];
- [criterio verificable 3].

Primero encuentra los componentes y flujos de datos existentes en el código fuente. Reutiliza todo lo posible la interfaz y la arquitectura propias de la aplicación. Después implementa la versión completa más pequeña, compílala, instálala en el teléfono conectado y verifica por tu cuenta todos los criterios. Muéstrame el resultado en una captura de pantalla y enumera las concesiones. No hagas push sin una instrucción independiente.

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 un diagnóstico, solo una observación y la exigencia de medir el resultado:

Prompt de iteración
En el teléfono físico, el feed da tirones cuando se produce la paginación durante el desplazamiento. Reprodúcelo por tu cuenta, mide los fotogramas con tirones / el tiempo de fotograma, encuentra la causa, corrígela sin cambiar el comportamiento del feed, vuelve a instalar el APK y repite la misma medición. No des la tarea por terminada solo porque el código compila.

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». 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. Antes de hacer push, pide al agente que busque secretos en los archivos bajo seguimiento y en todo el historial publicado, muestre el diff respecto a upstream, conserve la licencia y no presente un APK de depuración como cliente oficial.

Prompt antes del commit y el push
Prepara los cambios para publicarlos, pero primero realiza una auditoría de seguridad y licencias.

Inspecciona git status, git diff, todos los archivos bajo seguimiento y todo el historial que se publicará en busca de mis TELEGRAM_API_ID y TELEGRAM_API_HASH reales, tokens, contraseñas, claves de firma y rutas absolutas privadas. No muestres el valor de ningún secreto que encuentres; informa únicamente de su tipo, archivo y una solución segura. Verifica que local.properties está ignorado y nunca estuvo bajo seguimiento.

Compara los cambios con upstream y conserva las cabeceras de copyright y las obligaciones de la licencia. Indica en el README que se trata de una compilación personal no oficial, qué versiones y ABI se han probado, dónde deben introducirse localmente las credenciales y cómo compilar el APK.

Muéstrame la lista final de archivos y el resultado de la auditoría. Haz commit y push únicamente después de mi aprobación explícita.

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 las funciones mediante el comportamiento y los criterios de aceptación.
  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.