Uma rotina semanal de distribuição como skill do Claude: rascunhos na segunda, aprovação do cliente, relatório de cliques na sexta

Uma skill do Claude Code que roda a semana da agência no Shager: rascunhos a partir do plano, aprovação do cliente, agendamento e relatório de cliques na sexta.

Uma rotina semanal de distribuição é uma skill que faz os mesmos três trabalhos toda semana: na segunda, transforma o plano de conteúdo de cada cliente em rascunhos no Shager, com legendas por conta, e envia para aprovação; no meio da semana, agenda o que foi aprovado; na sexta, puxa os cliques por conta e escreve o relatório. No Claude Code, você dispara a rotina com /shager-weekly plan ou /shager-weekly report, ou sem interface, a partir de um agendador, com claude -p. Os pontos de controle humanos ficam entre o rascunho e o agendamento, onde custam menos e pegam mais erros.

Este artigo parte da skill básica do Shager. Aqui o foco é a rotina: entradas, modos, salvaguardas e como rodá-la sem ninguém no teclado.

Como é uma semana na prática?

Pense numa agência com oito clientes e cerca de 150 contas conectadas. Uma semana que funciona fica assim:

Quando Modo O que a skill faz Papel humano
Segunda, 9h plan Lê o arquivo de plano de cada cliente, envia as mídias, cria os rascunhos, pede aprovação Nenhum durante a execução
De segunda a quarta Os clientes aprovam ou pedem ajustes pelos links de aprovação O cliente revisa
Quarta, 14h schedule Agenda cada post aprovado no horário planejado O gerente de contas dá uma olhada no resumo
Sexta, 15h report Puxa os cliques por conta e por post, escreve um relatório por cliente O gerente de contas envia o relatório

A rotina nunca inventa os temas da semana. Ela trabalha a partir de um arquivo de plano escrito por uma pessoa, porque a estratégia é trabalho da agência. O que ela tira das suas mãos é a parte mecânica: quarenta variações de legenda, links rastreáveis, escolha de formato, acompanhamento.

Estrutura da pasta de uma skill: SKILL.md com nome e descrição, e instruções para trabalhar com o Shager.
Uma única skill ensina ao agente toda a rotina, sempre.

Como é o arquivo de plano?

Um arquivo Markdown por cliente por semana, num repositório que a skill consegue ler:

# 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 simples, que a skill interpreta, num arquivo que qualquer gerente de contas edita sem aprender ferramenta nova.

O 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 que cada salvaguarda está ali

disable-model-invocation: true significa que o Claude nunca inicia essa rotina sozinho só porque alguém mencionou "os posts desta semana" numa conversa. Segundo a documentação de skills do Claude Code, esse campo impede o carregamento automático, então a rotina só roda quando alguém, ou algum processo, digita o comando.

A lista allowed-tools tem tudo o que o trabalho exige e nada além. Não há cancel_post, nem create_connect_link, nem create_workspace. Uma rotina que roda sem supervisão não deveria conseguir fazer coisas que uma pessoa não planejou.

O agendamento só mexe em posts com status APPROVED, e esse status só existe depois que o cliente aprovou pelo link dele. Se um cliente nunca aprovar, o post simplesmente não sai, e o resumo de quarta avisa. O motivo de colocar a aprovação exatamente aqui está em o fluxo de aprovação do cliente para agências.

Qual chave a rotina deve usar?

Esta é a decisão que define o quanto você confia na rotina.

Configuração Escopos da chave Resultado
Só rascunhos read, write plan e report rodam; uma pessoa agenda no Shager
Com aprovação obrigatória read, write, publish e aprovação exigida em todos os workspaces A rotina agenda só o que os clientes aprovaram
Piloto automático total read, write, publish, sem aprovação Só para conteúdo recorrente de baixo risco que você publicaria sem revisão de qualquer jeito

A segunda linha é a que recomendamos para a maioria das agências. O escopo publish vai para uma única chave, criada só para essa rotina em https://app.shager.ai/dashboard/agents, assim o registro de auditoria ali mostra cada chamada que a rotina fez e nada mais. Se algo parecer errado, você revoga essa chave e todas as outras integrações continuam funcionando.

Diagrama: o rascunho é enviado ao cliente como um link sem login, o cliente aprova ou pede alterações, e o post aprovado é agendado.
Alterar o conteúdo depois da aprovação a anula. Nada é publicado sem que o cliente tenha visto.

Como rodar a rotina sem abrir um terminal?

O modo não interativo do Claude Code roda uma skill a partir de um script. A documentação do modo headless diz que skills acionadas pelo usuário funcionam no modo -p quando você inclui /skill-name no prompt, e que --allowedTools pré-aprova ferramentas usando a sintaxe de regras de permissão. Ela também descreve --permission-mode dontAsk, que nega tudo o que normalmente pediria confirmação, então uma chamada de ferramenta inesperada falha em vez de ficar travada.

#!/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"

E o crontab, no horário local do 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

Isso pressupõe que o servidor MCP do Shager está registrado no .mcp.json do projeto, com a chave lida de SHAGER_API_KEY, como mostrado em como conectar o Shager ao Claude Code. A saída em JSON traz o id da sessão e o resumo final, que é o que você encaminharia para o canal da equipe.

O que ainda precisa de uma pessoa toda semana?

Três coisas, e a rotina foi desenhada em torno delas, e não contra elas.

  1. Escrever o arquivo de plano. Temas, ofertas e horários são estratégia.
  2. Ler o resumo de quarta. Ele lista o que não foi aprovado, os canais pulados e as rejeições 422. Cinco minutos.
  3. Enviar o relatório de sexta com contexto. Cliques por conta são um fato; o que eles significam para o cliente é uma conversa. Lembre aos clientes que cliques em links não são leads e indique a atribuição de leads por conta se eles quiserem fechar essa lacuna no CRM.

Perguntas frequentes

E se um cliente aprovar depois de quarta?

Rode /shager-weekly schedule de novo, à mão ou por uma segunda linha no cron na quinta. O modo só agenda posts APPROVED que ainda não estão agendados e recusa horários no passado, então rodar duas vezes é seguro.

A rotina consegue conectar contas novas quando um cliente abre uma unidade?

Não, por design. create_connect_link ficou fora das ferramentas permitidas porque conectar contas envolve o cliente e deve ser uma ação humana deliberada. Quando surge uma unidade nova, o gerente de contas envia um link de conexão e coloca o novo canal no grupo certo; a próxima execução já o inclui automaticamente.

Isso funciona com Codex ou Cursor em vez do Claude Code?

Os arquivos de plano, os modos e as salvaguardas se aplicam diretamente, já que as ferramentas do Shager são as mesmas em qualquer cliente MCP. O frontmatter do SKILL.md e a chamada claude -p são específicos do Claude Code; em outros clientes, você manteria as instruções como um arquivo de prompt e rodaria com a automação do próprio cliente.

Próximo passo

A rotina cuida da semana; o pipeline de conteúdo do agente de ponta a ponta mostra a cadeia completa em volta dela, do briefing do cliente às mídias e legendas geradas, até os posts publicados e os cliques medidos, com cada chamada ao Shager em ordem.

Experimente nas suas próprias contas.

Grátis durante o lançamento, sem cartão. Conecte, escreva uma vez, e o Shager publica e mede.