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

_2026-10-06 · 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](/en/blog/build-a-claude-skill-for-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.

## Como é o arquivo de plano?

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

```markdown
# 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

```markdown
---
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](https://code.claude.com/docs/en/skills), 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](/en/blog/client-approval-workflow-for-agencies).

## 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.

## 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](https://code.claude.com/docs/en/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.

```bash
#!/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:

```text
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](/en/blog/connect-shager-to-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](/en/blog/utm-per-account-lead-attribution) 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](/en/blog/agent-content-pipeline-end-to-end) 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.

---
Source: https://shager.ai/pt/blog/skill-weekly-distribution-routine
