La Inteligencia Artificial escribe los borradores del blog
Hace nada conté cómo dejé de perder ideas para el blog: monté un sistema que las recoge solas y las suelta como issues en GitHub con la etiqueta draft. Lo tienes entero aquí, por si te lo perdiste: cómo automaticé la captura de ideas en GitHub Issues.
Funcionó demasiado bien. La primera ejecución me dejó más de cuarenta issues de golpe. Y entonces me di cuenta de que el problema no había desaparecido. Se había movido de sitio.
Ahora tenía cuarenta ideas perfectamente ordenadas, etiquetadas, esperando. Y ninguna escrita. El cuello de botella ya no era acordarme de la idea. Era sentarme a convertir esa idea en un borrador de verdad: investigar, darle forma, escribirlo en mi tono. Eso sigue costando una tarde por post. Y una tarde por post, multiplicado por cuarenta, es no escribir nunca.
Así que cerré el círculo.
Qué hace ahora el sistema
Cada mañana, un GitHub Action coge la idea-issue más antigua que aún no he tocado, y de ahí saca un borrador completo: investiga el tema, escribe el post entero en mi voz, le genera la imagen de cabecera, y deja el archivo .mdx commiteado en el repositorio. Yo me levanto, hago git pull, y tengo un borrador esperándome.
Ojo con la palabra borrador. No publica nada. Eso es deliberado y luego vuelvo a ello, porque es la parte más importante.
La diferencia con el sistema anterior es de naturaleza, no de grado. Recoger ideas era pegar APIs: lee de aquí, escribe allá, un script tonto en Python y listo. Escribir un post no es pegar APIs. Hay que entender el tema, tener criterio, sonar como yo y no como un folleto. Eso un script no lo hace. Necesitaba algo que pensara.
La pieza clave: Claude Code corriendo dentro de Actions
La idea que lo hace posible es claude-code-action: una action que mete a Claude Code dentro de un workflow de GitHub. El mismo Claude Code que uso en mi terminal, pero ejecutándose solo en un runner, sin que yo esté delante.
Y aquí está el detalle que más me gusta: se autentica con mi suscripción, no con la API de pago. Generas un token una sola vez en local con claude setup-token, lo metes como secret del repo, y a partir de ahí cada ejecución consume de mi cuota de Claude en lugar de facturarme tokens sueltos de la API. Para algo que corre todos los días, la diferencia en la factura es la diferencia entre montarlo y no montarlo.
Como el runner clona el repo, Claude tiene delante todo lo que necesita: mi CLAUDE.md con las reglas del blog, las skills editoriales que definen mi voz, los scripts de generación de imágenes. Le doy una instrucción, y trabaja con el mismo contexto con el que trabajaría yo.
Qué le pido exactamente
El prompt del workflow no es magia, es una lista de órdenes sin ambigüedad. En resumen, le digo:
- Lee la idea-issue número tal: su título y su cuerpo.
- Obedece
CLAUDE.mdy carga las skills de copywriting, investigación, voz, enlaces y SEO. - Investiga el tema y escribe el post completo en mi voz.
- Genera la imagen de cabecera y mete la ruta en el frontmatter.
- No publiques. Deja el archivo en la carpeta de borradores.
- Commitea directo a
master, etiqueta la issue comodraftedy comenta dónde quedó el borrador.
Esa etiqueta drafted es el equivalente a “marcar la tarea como hecha” del sistema anterior: el script del día siguiente coge la issue draft más antigua que no tenga ya drafted, así que nunca reprocesa lo mismo dos veces. La misma idea de idempotencia, distinto sitio.
La imagen también la genera él
El detalle del que estoy más contento: el borrador no llega “pelado”. Llega con su imagen de cabecera ya generada.
Para eso, dentro del workflow corre mi propio generador de imágenes, que usa Vertex AI con Imagen 3 (lo que por casa llamamos “Nano Banana”). El runner se autentica contra Google con una cuenta de servicio, el script suelta la imagen en su carpeta, y Claude la enlaza en el frontmatter. El borrador queda completo de verdad: texto, metadatos y portada.
Montar este tipo de cañerías entre servicios que no se conocen entre sí (GitHub, Anthropic, Google Cloud, cada uno con su forma de autenticarse) es justo el marrón que monto para empresas que quieren que sus herramientas trabajen solas en lugar de a base de copiar y pegar entre pestañas.
Lo que NO hace, que es lo más importante
El sistema se para en seco antes de publicar. Genera el borrador, lo deja en el repo, y ahí acaba su trabajo. El último paso, el de decir “esto sale a la calle”, lo doy yo.
No es pereza. Es desconfianza sana. Un texto escrito de cabo a rabo por una máquina, por bueno que sea, tiene un riesgo que conozco bien: suena a máquina. Tiene esos giros de más, esa simetría sospechosa, ese tono de folleto que detecto a un kilómetro porque me he pasado meses peleándome con él. Mi voz la pongo yo o, como mínimo, la valido yo.
Así que el trato es claro: la máquina hace el 80% aburrido (la investigación, el esqueleto, la primera versión, la imagen) y yo me quedo el 20% que importa (el criterio, los matices, que suene a una persona). Un borrador malo se borra en dos segundos. Un borrador publicado a lo tonto te quema con quien te lee. Por eso commitea a master pero nunca toca la carpeta de publicados.
¿Y funciona? La primera vez que lo lancé en serio, le di una issue sobre “vibe coding” y a los pocos minutos tenía en el repo un borrador de 1.500 palabras, con su imagen, su estructura y sus preguntas frecuentes. ¿Perfecto? No. ¿Un punto de partida que me ahorra la tarde más aburrida? Completamente.
Cómo montarlo tú paso a paso
El workflow completo está en este gist, listo para adaptar. Aviso de partida: esto da por hecho que ya tienes ideas como issues con la etiqueta draft. Si no, el primer paso es montar la captura, que conté en el post anterior. Aquí vamos con la segunda mitad.
- Genera el token de tu suscripción de Claude Code. En local, con la suscripción activa, ejecuta el comando de abajo. Te abre el navegador, autorizas, y te imprime un token. Cópialo y guárdalo como secret
CLAUDE_CODE_OAUTH_TOKENen Settings → Secrets and variables → Actions de tu repo. Ese token es lo que deja al workflow autenticarse como tú sin facturar API.
claude setup-token
-
Habilita Vertex AI en Google Cloud. En el proyecto que vayas a usar, entra en la biblioteca de APIs y activa la Vertex AI API. Sin eso, la generación de imágenes no tiene contra qué hablar.
-
Crea la cuenta de servicio para la imagen. En IAM y administración → Cuentas de servicio, crea una cuenta nueva, asígnale el rol Vertex AI User, y en su pestaña de claves genera una clave JSON. Se te descarga un archivo. Guarda su contenido entero como secret
GCP_SA_KEYy el ID del proyecto comoGCP_PROJECT_ID. Y borra el JSON del disco en cuanto lo pegues: es una credencial, no un archivo más. -
Dale permisos de escritura a Actions. En Settings → Actions → General → Workflow permissions, marca Read and write permissions. Esto es lo que permite al workflow commitear el borrador en tu repo. Si lo dejas en solo lectura, fallará al hacer push y te volverás loco buscando por qué.
-
Copia el workflow a tu repo. Pega el
.ymldel gist en.github/workflows/y ajusta lo que sea tuyo: las rutas del generador de imágenes, elpromptcon las reglas de TU blog (el mío carga mis skills y miCLAUDE.md; los tuyos serán otros) y la rama a la que commitea. Tres secrets en total:CLAUDE_CODE_OAUTH_TOKEN,GCP_SA_KEYyGCP_PROJECT_ID. El token de GitHub no lo añades, Actions ya provee uno. -
Pruébalo a mano antes de fiarte del cron. En la pestaña Actions, lanza el workflow con Run workflow pasándole el número de una issue concreta. En unos minutos deberías ver el borrador commiteado, la imagen en su carpeta y la issue etiquetada como
drafted. Si algo peta, lo ves en el log de esa ejecución, no a las seis de la mañana sin enterarte.
Cuando una ejecución manual te salga limpia, ya está: el cron diario hace el resto. Una idea-issue al día se convierte en borrador, sin que toques nada.
Las piedras con las que tropecé
Porque nada sale a la primera, y los tutoriales que dicen que sí mienten. Tres cosas me hicieron perder un rato:
pnpmsin versión. La action que instala pnpm necesita que le indiques la versión a las claras (o tenerla en elpackage.json). Sin eso, revienta con un error que no menciona pnpm por ningún lado.- El requisito de la app de GitHub.
claude-code-actionte pide instalar su app oficial en el repo. Me lo salté pasándole elgithub_tokenque Actions ya provee: con eso, la comprobación previa pasa y no instalas nada. - El hook de pre-commit no corría. Mi repo verifica los posts con un hook, pero ese hook vive en una ruta personalizada que solo está configurada en mi máquina, no en el runner. Hasta que no lo activé dentro del workflow, los borradores se commiteaban sin pasar la verificación.
Son tres tonterías. Pero son tres tonterías que entre todas te comen una tarde, y es justo el tipo de detalle que ningún README te cuenta.
Preguntas frecuentes
Preguntas frecuentes
¿Por qué no escribir los borradores con un simple script, como la captura de ideas?
Porque escribir un post no es transformar datos: requiere entender el tema, tener criterio y sonar como una persona concreta. Un script encadena llamadas a APIs; no decide qué merece la pena contar ni con qué tono. Por eso aquí corre Claude Code dentro del Action, con acceso a las reglas y la voz del blog, en lugar de un script de plantillas.
¿Consume la API de pago de Anthropic cada vez que se ejecuta?
No, si lo autenticas con un token de suscripción. Con claude setup-token generas un token que consume de tu cuota de Claude en lugar de facturar tokens de la API. Para algo que corre a diario, esa es la diferencia entre que salga a cuenta o no.
¿El sistema publica los posts automáticamente?
No, y es deliberado. Genera el borrador, lo deja commiteado en la carpeta de borradores y para. La publicación la decido yo tras revisarlo. Un texto escrito entero por una máquina puede sonar a máquina, y eso lo filtro a mano antes de que lo lea nadie.
¿Hace falta instalar la app de GitHub de Claude para usar la action?
No necesariamente. La action lo pide por defecto, pero pasándole el github_token que GitHub Actions ya provee en cada ejecución, la comprobación previa pasa sin instalar la app oficial en el repositorio.
Fuentes
- claude-code-action (repositorio oficial)
- Documentación de Claude Code
- google-github-actions/auth
- Vertex AI: generación de imágenes con Imagen
- GitHub Actions: token automático
- Gist con el workflow completo
Compártelo si te ha resultado útil.
Si en tu empresa hay procesos repetitivos que se comen el tiempo de alguien que debería estar pensando, eso se delega a una máquina: cuéntame cómo trabajáis y vemos qué automatizar.
¿Dejarías que una máquina te escribiera el primer borrador, o eso es cruzar una línea? Cuéntame.
Y… ahora a revisar borradores, que escribirlos ya no es excusa.
Artículos relacionados
Automatizo la captura de ideas del blog en GitHub Issues
Tenía ideas para el blog desperdigadas por todas partes: notas en el móvil, vídeos guardados en YouTube, tareas sueltas que nunca volvía a mirar. La mitad se perdían. Así que monté un sistema que las recoge solas: apunto la idea en Google Tasks o guardo un vídeo en una lista de YouTube, y cada hora un script las convierte en GitHub Issues con la etiqueta draft. Te enseño cómo funciona y, paso a paso, cómo replicarlo en tu propio repositorio: el código completo está en un gist listo para copiar.
Agent Skills: el estándar que enseña a tus agentes cómo trabajar
Agent Skills es el formato abierto que permite a cualquier agente de Inteligencia Artificial cargar conocimiento especializado bajo demanda: desde cómo escribir en tu blog hasta cómo cerrar un artículo con el CTA correcto. Un skill es simplemente una carpeta con un fichero SKILL.md, pero la idea detrás es poderosa: separar el conocimiento del agente de la herramienta que lo ejecuta. Adoptado por más de treinta herramientas (incluyendo Claude Code, Cursor, GitHub Copilot y Gemini CLI) está convirtiéndose en el estándar de facto. En este post explico cómo funciona, presento el ecosistema en agentskills.io y el directorio de skills.sh, y cuento cómo llevo meses usándolo en este blog sin saber que tenía nombre. Incluyo ejemplos reales del sistema de skills del blog: desde subskills jerárquicos de copywriting hasta un skill de captación de clientes sin una sola línea de código.
Claude Cowork: qué es y por qué regalo 3 invitaciones gratis
Claude Cowork es lo nuevo de Anthropic: la potencia de Claude Code, pero para trabajo de oficina y gente que no programa. Organiza archivos, saca datos de facturas, prepara informes y ejecuta tareas programadas en tu ordenador. Te cuento qué es, en qué se diferencia del chat y de Claude Code, y por qué regalo 3 invitaciones a quien las quiera.