Un servicio en la nube que se cuenta a sí mismo (Parte 2/2)
En la primera parte dejé el experimento encallado: quería un agente que publicara solo cada mañana, pero /loop no servía para eso y, de paso, me había bloqueado Claude con un error del sistema de archivos. La conclusión fue incómoda pero clara: el problema no era de permisos, era de arquitectura. Mi automatización dependía de mi portátil, y un portátil no es un servidor.
Así que me planté delante de una bifurcación.
Hola, soy Pol Marzà, AI Product Builder y cada semana escribo una nueva edición de Con Criterio, la newsletter sobre construir productos digitales con IA, con planificación, método y sin atajos. Si te han reenviado este email, puedes suscribirte aquí:
Local con el Mac despierto, o la nube
La primera opción era quedarme en local y obligar al Mac a no dormirse: evitar el reposo, programar un despertador, mantener la sesión viva. Funcionaría… mientras el Mac estuviera encendido, enchufado y de buen humor. Frágil.
La segunda era sacarlo todo de mi máquina y meterlo en la nube. Más trabajo de montaje, pero a cambio: corre aunque el Mac esté apagado, sin permisos de macOS de por medio, sin servidores que mantener. Elegí la nube. Si el objetivo era “olvídate y que funcione”, no había color.
Pero la nube traía una pregunta que tuve que decidir con criterio: mi agente guardaba su memoria —los posts, las métricas, lo aprendido— en una base de datos local. Una tarea en la nube no puede leer un archivo de mi disco. ¿Dónde vivía entonces la memoria?
La respuesta resultó casi indolora: Cloudflare D1, que es literalmente SQLite en la nube. Migré la base sin apenas tocar el código. La memoria dejó de ser un archivo en mi disco para ser algo que el sistema alcanza desde cualquier sitio.
La decisión de la que más orgulloso estoy
Aquí viene la parte con criterio de verdad. Cuando moví la lógica a la nube, tenía dos caminos:
Dejar que la IA, además de escribir los posts, razonara también los números: qué ángulo funcionó mejor, qué puntuación tenía cada uno.
Que la IA solo escribiera, y que el cálculo lo hiciera código determinista.
Elegí el segundo, y creo que es la decisión clave de todo el proyecto. Porque esto es un experimento: el sentido es medir qué funciona y aprender con el tiempo. Y en un experimento, el instrumento de medida tiene que ser constante. Si le pides a un modelo de lenguaje que puntúe, con los mismos datos puede darte resultados ligeramente distintos un día u otro — y peor aún, ese ruido se realimenta, porque la puntuación de hoy condiciona el contenido de mañana. Una regla que cambia de longitud cada vez no sirve para medir nada.
La frase que me quedó grabada: la IA escribe, el código calcula. Para lo que es juicio —redactar, elegir el ángulo— la IA. Para lo que es un cálculo fijo —puntuar, rankear— código. Mezclarlos te da lo peor de los dos mundos.
Lo que aprendes solo cuando lo enchufas
Sobre el papel todo encaja; al conectarlo aparecen las sorpresas. Tres que me llevo:
Pagar calderilla a propósito. En local, la IA escribía los posts con mi suscripción de Claude, gratis. Pero una tarea en la nube no puede usar mi suscripción. Para que el sistema fuera de verdad autónomo, el agente llama directamente a la API de pago. Cuesta unos céntimos al mes — y los pago encantado a cambio de independencia total. A veces la decisión correcta es dejar de optimizar el “gratis”.
Los detalles de integración que ningún tutorial cuenta. El conector “oficial” de Buffer hablaba con un servidor interno; mi token personal iba contra otra dirección distinta. Media hora de errores 401 hasta dar con ello. La fiabilidad de una automatización casi nunca está en la idea, está en estos detalles.
La IA no sabe contar. Bluesky limita los posts a 300 caracteres, pero el modelo se pasaba una y otra vez por mucho que se lo pidiera. La solución no fue rogar más fuerte, sino poner una red: si un post se pasa, el sistema le pide que lo reescriba más corto, hasta que cabe.
El último ajuste: que sonara a persona
Cuando por fin publicaba, los textos salían correctos pero telegráficos: frase corta, punto, frase corta, punto. Sonaban a lista, no a alguien contando algo. Curiosamente, la culpa era mía: para respetar el límite de caracteres le había pedido al modelo “frases secas”, y eso producía justo ese estilo a trompicones. Cambié las instrucciones hacia una prosa más narrativa y humana, y el cambio se nota.
[VISUAL 4: antes/después del tono — telegráfico vs narrativo, mismo contenido]
Qué me llevo
El agente quedó funcionando: cada mañana, en la nube y sin mi Mac de por medio, recogía métricas, escribía y publicaba, y guardaba lo aprendido. Y aunque ahora paro este experimento para llevar la idea a LinkedIn, me llevo tres cosas en la mochila:
Entiende la herramienta antes de forzarla. Medio drama me lo ahorraba sabiendo qué era
/loop.La IA para el juicio, el código para los números. No los mezcles.
La fiabilidad vive en los detalles, no en la idea. Lo difícil no es construir el agente; es que corra solo cuando no estás mirando.
Que, mira, es exactamente la tesis con la que empecé: el problema no es construir, es la distribución. Solo que esta vez el experimento me lo demostró a mí mismo.
Fin de la serie.


