Hemos recorrido un largo camino. Empezamos diseñando un Cerebro capaz de leer (Post 2), le dimos personalidad con Agentes Creativos (Post 3) y luchamos contra la burocracia para conseguir unas Manos (APIs) que pudieran publicar legalmente (Post 4).
Pero nos quedaba un último gran paso para no ser un esclavo de mi terminal y es que ahora mismo, para publicar, tenía que estar en mi ordenador, abrir la consola y ejecutar python main.py. Eso no es “Piloto Automático”. Eso es “Conducción Asistida”.
Hoy, en el capítulo final, cortamos los cables. Nos vamos a la nube y automatizamos todo el proceso con mis agentes IA.

La Arquitectura del Flujo (Pipeline)
El objetivo es el GitOps: que mi única interacción con el sistema sea subir cambios a Git. Todo lo demás debe ocurrir por magia (o mejor dicho, por GitHub Actions).
He diseñado un flujo de trabajo en dos fases:
-
Fase de Detección y Previsualización (Automática):
- GitHub detecta un nuevo archivo
.md(o cambios en uno existente). - Se activa el Orquestador.
- El sistema detecta el idioma del post (Español/Inglés) y calcula la URL correcta.
- La IA (o el sistema de plantillas) propone un tweet y un post de LinkedIn.
- El sistema me muestra una “Vista Previa” en los logs de ejecución, pero no publica nada.
- GitHub detecta un nuevo archivo
-
Fase de Publicación (Manual):
- El proceso se pausa automáticamente gracias a los Environments de GitHub.
- Me llega una alerta para revisar el despliegue.
- Si le doy al botón verde (Approve), el sistema ejecuta la llamada real a las APIs.
GitHub Environments)) PAUSE --> ALERT[🔔 Llega alerta para revisar despliegue] ALERT --> DECISION{¿Aprobar Despliegue?} %% Camino de Aprobación DECISION -- "Botón Verde (Approve) ✅" --> EXEC[🚀 Ejecutar llamada real a APIs] %% Camino de Rechazo (Implícito) DECISION -- "Rechazar / Cancelar ❌" --> STOP([Fin del flujo sin publicar]) end %% Estilos para resaltar los pasos finales style EXEC fill:#d4edda,stroke:#28a745,stroke-width:2px,color:#155724 style STOP fill:#f8d7da,stroke:#dc3545,stroke-width:2px,color:#721c24 style PAUSE fill:#fff3cd,stroke:#ffc107,stroke-width:3px
🔍 Haz clic en el diagrama para ampliarlo a pantalla completa
El Director de Orquesta (orchestrator.py)
Necesitaba un script que uniera todas las piezas. Para ello, comencé desarrollando un orquestador en Python el cual actúa como puente entre el archivo Markdown y mis módulos de redes sociales.
Este script es el encargado de la lógica “fina” que a veces olvidamos:
- ¿Es un post en inglés (
/en/) o en español (/es/)? - ¿Tiene imagen destacada para generar la tarjeta de Twitter/X o LinkedIn?
- ¿Quiero que lo escriba la IA o quiero escribirlo yo?
La Funcionalidad Estrella: “Director’s Cut”
A veces, la IA no acierta con el tono exacto, o simplemente quiero escribir yo mismo el copy para un anuncio especial. Para no perder la automatización pero mantener el control, implementé una lógica de “Sobreescritura Manual” usando el Frontmatter de Hugo.
Si mi script detecta esto en la cabecera del artículo:
---
title: "Mi Gran Post"
social_text: "Hoy no quiero que la IA escriba por mí. Este post es tan especial que lo he redactado a mano. 👇"
---
El sistema ignora la generación automática y usa mis palabras exactas. Es el equilibrio perfecto: automatización por defecto, control manual cuando es necesario.
Seguridad y CI/CD: Dormir Tranquilo
El archivo .github/workflows/autopilot.yml es donde ocurre la magia. Aquí definimos los “Secretos” (mis claves de API de Twitter y LinkedIn) y las reglas del juego.
Lo más interesante es la protección del entorno:
jobs:
publish:
environment: production # <--- La clave de la seguridad
needs: check_changes
steps:
- run: python orchestrator.py
Al definir el entorno como production, GitHub me obliga a revisar y aprobar el despliegue. Esto evita que un error en el código o una “alucinación” de la IA publique contenido no deseado.
Además, hemos configurado el sistema para que Twitter/X genere las Cards con imagen automáticamente y LinkedIn trate el contenido como un “Artículo”, asegurando que en ambas redes la imagen destacada del blog se vea grande y atractiva.
El Resultado Final
Ahora, mi proceso de publicación es este:
- Escribo mi artículo en Markdown tranquilamente.
- Hago
git push. - Me tomo un café. ☕
- Entro a GitHub desde el móvil, veo la “Preview” del tweet generado (en el idioma correcto).
- Sonrío y pulso Approve.
En segundos, el contenido aparece en Twitter y LinkedIn. Sin abrir la terminal. Sin tocar Python. Desde cualquier lugar.
Publicación en Twitter/X
Publicación en Linkedin
Conclusión del Proyecto Autopilot
Lo que empezó como un experimento para probar como funcionan los agentes de IA y como me puede ayudar en mi día a día, se ha convertido en un sistema de publicación profesional. Hemos tocado:
- Prompt Engineering para definir personalidades.
- APIs OAuth 2.0 complejas y manejo de tokens.
- Python backend robusto.
- DevOps y CI/CD con GitHub Actions.
Este blog ya no es solo una colección de textos; es una aplicación viva que trabaja por mí. Y ahora que tengo tiempo libre… ¿qué será lo próximo que automaticemos?
Gracias por acompañarme en esta serie.
👉 Código Fuente Final: Todo el proyecto está disponible (y documentado) en GitHub.