La rutina semanal de distribución como skill de Claude: borradores el lunes, aprobaciones y el informe de clics del viernes

Una skill de Claude Code para la semana de una agencia en Shager: borradores desde planes, aprobación del cliente, programar lo aprobado e informe de clics.

Una rutina semanal de distribución es una skill que hace los mismos tres trabajos cada semana: el lunes convierte el plan de contenido de cada cliente en borradores de Shager con textos por cuenta y los envía a aprobación; a mitad de semana programa lo que se aprobó; el viernes trae los clics por cuenta y escribe el informe. En Claude Code la lanzas con /shager-weekly plan o /shager-weekly report, o sin interfaz desde un programador de tareas con claude -p. Los controles humanos quedan entre la redacción y la programación, que es donde menos cuestan y más errores atrapan.

Este artículo parte de la skill básica de Shager. Aquí el foco está en la rutina: entradas, modos, salvaguardas y cómo ejecutarla sin nadie frente al teclado.

¿Cómo es una semana en la práctica?

Pensemos en una agencia con ocho clientes y unas 150 cuentas conectadas. Una semana que funciona se ve así.

Cuándo Modo Qué hace la skill Papel de las personas
Lunes 09:00 plan Lee el plan de cada cliente, sube los archivos, crea borradores y pide aprobación Ninguno durante la ejecución
De lunes a miércoles Los clientes aprueban o piden cambios desde los enlaces de aprobación El cliente revisa
Miércoles 14:00 schedule Programa cada publicación aprobada a su hora prevista El responsable de la cuenta mira el resumen
Viernes 15:00 report Trae los clics por cuenta y por publicación, y escribe un informe por cliente El responsable de la cuenta lo envía

La rutina nunca inventa los temas de la semana. Trabaja a partir de un archivo de plan que escribe una persona, porque la estrategia es trabajo de la agencia. Lo que elimina es la parte mecánica: cuarenta variantes de un texto, enlaces con seguimiento, elección de formatos, seguimiento.

Estructura de la carpeta de un skill: SKILL.md con nombre y descripción, e instrucciones para trabajar con Shager.
Un solo skill le enseña al agente toda la rutina, cada vez.

¿Cómo es el archivo de plan?

Un archivo Markdown por cliente y por semana, en un repositorio que la skill pueda leer:

# Harbor Fitness, week 2026-W43
workspace: Harbor Fitness
timezone: America/New_York

## Post 1
when: 2026-10-20 07:00
target: group "All studios"
format: REEL
media: https://cdn.harborfitness.example/w43/6am-class.mp4 (1080x1920, 28s)
brief: New 6am strength class starts Monday. Free first session.
link: https://harborfitness.example/6am
first comment: Book your free first session

## Post 2
when: 2026-10-23 12:00
target: group "Downtown studios"
format: FEED
media: https://cdn.harborfitness.example/w43/smoothie-bar.jpg
brief: Smoothie bar reopens after renovation. 20% off this week.
link: https://harborfitness.example/smoothie

Texto plano que la skill interpreta, y un archivo que cualquier responsable de cuenta puede editar sin aprender una herramienta.

El SKILL.md

---
name: shager-weekly
description: Run the agency's weekly Shager distribution routine. Use for "/shager-weekly plan", "/shager-weekly schedule" or "/shager-weekly report", or when asked to prepare, schedule or report this week's client posts from the plans folder.
argument-hint: "plan | schedule | report [client]"
disable-model-invocation: true
allowed-tools: Read Glob Write mcp__shager__whoami mcp__shager__list_workspaces mcp__shager__list_channels mcp__shager__list_groups mcp__shager__list_posts mcp__shager__get_post mcp__shager__get_analytics mcp__shager__upload_media_from_url mcp__shager__create_post mcp__shager__request_approval mcp__shager__schedule_post
---

# Shager weekly routine

Plans live in plans/<ISO week>/<client>.md. Reports go to reports/<ISO week>/.
Mode is the first argument. Process every client unless one is named.

## plan
For each post in each plan file:
1. Resolve workspace, group and channels. Skip channels not ACTIVE and list them.
2. upload_media_from_url with width, height and duration_ms from the plan.
3. create_post WITHOUT schedule_at: per_channel captions written from the
   brief (same facts, different wording, local detail from channel name),
   cta_url = link, campaign = "<client-slug>-<iso-week>-<n>",
   first_comment = "<first comment>: <link>", label = "W43 Post 1".
4. request_approval with the client's reviewer from plans/reviewers.md.
Write a summary: client, post label, post id, accounts, approval_url.

## schedule
For each client: list_posts with status APPROVED. For each, find its
planned time in the plan file by label and call schedule_post with
schedule_at in ISO 8601 with the workspace offset. Never schedule a post
that is not APPROVED. Never schedule a time in the past; list it instead.

## report
For each client: get_analytics from last Monday 00:00 to now (with offset).
Write reports/<week>/<client>.md with a table of clicks by account,
highest first, and the top three posts with their labels.
State plainly that these are link clicks, not leads.

## Errors
Stop the current client on 401 or 403 and record the code. On 422, record
the message against the post and continue. On 429, wait 60 seconds.

Por qué está cada salvaguarda

disable-model-invocation: true significa que Claude nunca arranca esta rutina por su cuenta porque en una conversación se mencionaron "las publicaciones de esta semana". Según la documentación de skills de Claude Code, ese campo impide la carga automática, así que la rutina solo se ejecuta cuando alguien, o algo, escribe el comando.

La lista allowed-tools tiene todo lo que el trabajo necesita y nada más. No hay cancel_post, ni create_connect_link, ni create_workspace. Una rutina que corre sin supervisión no debería poder hacer cosas que ninguna persona planeó.

La programación solo toca publicaciones en estado APPROVED, y ese estado solo existe cuando el cliente aprobó desde su enlace. Si un cliente nunca aprueba, la publicación simplemente no sale, y el resumen del miércoles lo indica. El porqué de poner la aprobación justo en ese punto está en el flujo de aprobación de clientes para agencias.

¿Qué clave debería usar la rutina?

Esta es la decisión que define cuánto confías en la rutina.

Configuración Permisos de la clave Resultado
Solo borradores read, write plan y report se ejecutan; una persona programa en Shager
Con aprobación obligatoria read, write, publish y aprobación exigida en todos los espacios de trabajo La rutina programa solo lo que aprobaron los clientes
Piloto automático total read, write, publish, sin aprobación Solo para contenido recurrente de bajo riesgo que igual publicarías sin revisar

La segunda fila es la que recomendamos para la mayoría de las agencias. El permiso publish se otorga a una sola clave, creada solo para esta rutina en https://app.shager.ai/dashboard/agents, así el registro de auditoría muestra cada llamada que hizo la rutina y nada más. Si algo parece raro, revocas esa clave y todas las demás integraciones siguen funcionando.

Diagrama: el borrador se envía al cliente como un enlace sin inicio de sesión, el cliente aprueba o pide cambios, y la publicación aprobada se programa.
Cambiar el contenido después de la aprobación la anula. No sale nada que el cliente no haya visto.

¿Cómo se ejecuta sin abrir una terminal?

El modo no interactivo de Claude Code ejecuta una skill desde un script. La documentación del modo headless indica que las skills que invoca el usuario funcionan en modo -p si incluyes /skill-name en el prompt, y que --allowedTools aprueba de antemano herramientas con la sintaxis de reglas de permisos. También describe --permission-mode dontAsk, que rechaza todo lo que de otro modo pediría confirmación, así que una llamada inesperada a una herramienta falla en lugar de quedarse colgada.

#!/usr/bin/env bash
# run-weekly.sh  (called by cron or your CI scheduler)
set -euo pipefail
cd /srv/agency-content
export SHAGER_API_KEY="$(cat /run/secrets/shager_weekly_key)"

claude -p "/shager-weekly $1" \
  --permission-mode dontAsk \
  --allowedTools "Read,Glob,Write(reports/**),mcp__shager__whoami,mcp__shager__list_workspaces,mcp__shager__list_channels,mcp__shager__list_groups,mcp__shager__list_posts,mcp__shager__get_post,mcp__shager__get_analytics,mcp__shager__upload_media_from_url,mcp__shager__create_post,mcp__shager__request_approval,mcp__shager__schedule_post" \
  --output-format json > "logs/weekly-$1-$(date +%F).json"

Y el crontab, en la hora local del servidor:

0 9 * * 1   /srv/agency-content/run-weekly.sh plan
0 14 * * 3  /srv/agency-content/run-weekly.sh schedule
0 15 * * 5  /srv/agency-content/run-weekly.sh report

Esto supone que el servidor MCP de Shager está registrado en el .mcp.json del proyecto, con la clave leída de SHAGER_API_KEY, como se muestra en cómo conectar Shager a Claude Code. La salida JSON te da el id de la sesión y el resumen final, que es lo que reenviarías al canal del equipo.

¿Qué sigue necesitando a una persona cada semana?

Tres cosas, y la rutina está diseñada en torno a ellas, no en contra.

  1. Escribir el archivo de plan. Los temas, las ofertas y los horarios son estrategia.
  2. Leer el resumen del miércoles. Enumera lo que no se aprobó, los canales omitidos y los rechazos 422. Cinco minutos.
  3. Enviar el informe del viernes con contexto. Los clics por cuenta son un dato; lo que significan para el cliente es una conversación. Recuérdales a los clientes que los clics en enlaces no son leads, y remítelos a la atribución de leads por cuenta si quieren cerrar esa brecha en su CRM.

Preguntas frecuentes

¿Y si un cliente aprueba después del miércoles?

Vuelve a ejecutar /shager-weekly schedule, a mano o con una segunda línea de cron el jueves. Ese modo solo programa publicaciones APPROVED que todavía no estén programadas y se niega a usar horas pasadas, así que ejecutarlo dos veces no tiene riesgo.

¿La rutina puede conectar cuentas nuevas cuando un cliente suma una sede?

No, por diseño. create_connect_link queda fuera de las herramientas permitidas porque conectar cuentas involucra al cliente y debería ser una acción humana deliberada. Cuando se suma una sede, el responsable de la cuenta envía un enlace de conexión y agrega el canal nuevo al grupo correcto; la siguiente ejecución lo toma automáticamente.

¿Funciona con Codex o Cursor en lugar de Claude Code?

Los archivos de plan, los modos y las salvaguardas se trasladan tal cual, porque las herramientas de Shager son las mismas en cualquier cliente MCP. El frontmatter de SKILL.md y la invocación con claude -p son propios de Claude Code; en otros clientes guardarías las instrucciones como un archivo de prompt y lo ejecutarías con la automatización de ese cliente.

Siguiente paso

La rutina se ocupa de la semana; el pipeline de contenido de punta a punta con agentes muestra la cadena completa que la rodea, desde el brief del cliente, pasando por los archivos y textos generados, hasta las publicaciones y los clics medidos, con cada llamada a Shager en orden.

Pruébalo en tus propias cuentas.

Gratis durante el lanzamiento, sin tarjeta. Conecta, escribe una vez y Shager publica y mide.