O relatório semanal do cliente, escrito por um agente toda segunda antes de você acordar
Monte um relatório semanal que um agente compila a partir do Shager: o que saiu, o que falhou, cliques por conta e por post e como cruzar com os leads do CRM.

Um agente consegue escrever o relatório semanal de distribuição de um cliente puxando três coisas do Shager: os posts publicados na semana e o resultado de cada um por conta, os cliques por conta e por post vindos de get_analytics e a lista de tudo o que falhou. Depois, ele cruza esses cliques com os leads do CRM do cliente usando o valor de utm_content que identifica cada conta. Rode isso de forma agendada, com uma chave só de leitura, e o relatório estará esperando numa pasta na segunda de manhã.
A parte que exige reflexão não é o código. É decidir o que o cliente realmente precisa ver e ser honesto sobre o que os números medem.
O que um relatório semanal de distribuição deve conter?
Quatro seções bastam. O resto fica para a revisão mensal.
- Entrega. Quantos posts saíram, para quantas contas e quais contas falharam. Os clientes raramente perguntam sobre isso até algo sumir, e aí é a única coisa que perguntam.
- Cliques por conta. Quais páginas, filiais ou canais mandaram gente para o site. É a seção que muda orçamentos.
- Cliques por post. Qual conteúdo funcionou, somando todas as contas.
- Ações. O que o cliente precisa fazer: reconectar uma conta, aprovar os rascunhos da próxima semana, enviar materiais que faltam.
Repare no que ficou de fora: alcance, impressões, curtidas. O Shager mede os cliques nos próprios links rastreáveis, por conta e por post. Ele não se apresenta como uma suíte de analytics de redes sociais, e o relatório não deve fingir que é.

As chamadas de dados
Para o workspace de um cliente, o agente roda esta sequência. Os nomes são das ferramentas MCP reais; os equivalentes REST estão no documento OpenAPI.
list_workspacespara encontrar o workspace do cliente pelo nome.list_postscomstatusigual aPUBLISHED, e depois de novo comPARTIALLY_PUBLISHEDeFAILED. Olimitvai até 100.get_postpara cada post da semana, para obter o estado por conta, as URLs publicadas e as mensagens de erro.get_analyticscomfrometocobrindo a semana.list_channels, para associar os IDs dos canais a nomes de conta legíveis e identificar contas cujo status de conexão mudou.
A chamada de analytics via REST:
curl -s "https://app.shager.ai/api/v1/workspaces/ws_example/analytics?from=2026-09-14T00:00:00%2B03:00&to=2026-09-20T23:59:59%2B03:00" \
-H "Authorization: Bearer $SHAGER_READ_KEY"
Dois detalhes dessa URL pegam muita gente. O + do offset precisa ser codificado como %2B numa query string, senão o servidor lê como espaço. E os limites da semana devem ser calculados no fuso horário do cliente, não no do servidor. Se from for omitido, get_analytics usa por padrão os últimos 30 dias, o que não é o que um relatório semanal quer.
Cliques não são leads, então cruze os dados
O Shager dá a cada conta o próprio link curto e as próprias tags UTM, com utm_content identificando a conta. É isso que torna o cruzamento possível. O CRM registra os leads com os valores de UTM capturados no formulário da landing page; o agente os associa às contagens de cliques por conta do Shager pelo mesmo utm_content.
A tabela resultante é o coração do relatório:
| Conta | Posts | Cliques (Shager) | Leads (CRM) | Observação |
|---|---|---|---|---|
| Aurora Downtown | 4 | ... | ... | |
| Aurora Northside | 4 | ... | ... | precisa reconectar |
As diferenças entre as colunas já são informação. Muitos cliques e nenhum lead é um problema de landing page ou de oferta, e não de distribuição. Nosso guia sobre atribuição de leads por conta cobre os campos do formulário e o mapeamento no CRM que tornam a coluna de leads confiável, e como medir os leads do conteúdo feito por agentes cobre o lado do agente.
Se você não tem acesso ao CRM, o relatório funciona mesmo só com os cliques. Deixe isso claro no cabeçalho do relatório. Um relatório que chama cliques de "resultados" é o jeito como as agências perdem a confiança do cliente um trimestre depois.
Rodando sem supervisão com o Claude Code
O Claude Code pode rodar de forma não interativa com claude -p, como descrito na documentação do modo headless. Isso transforma o relatório semanal num job do cron.
Primeiro, uma pasta de projeto para os relatórios, com um .mcp.json que lê a chave do ambiente. A documentação de MCP do Claude Code aceita expansão de ${VAR} nos cabeçalhos:
{
"mcpServers": {
"shager": {
"type": "http",
"url": "https://app.shager.ai/api/mcp",
"headers": { "Authorization": "Bearer ${SHAGER_READ_KEY}" }
}
}
}
Depois, as instruções, salvas como skill, para que a lógica fique num arquivo e não numa linha do crontab. O Claude Code carrega as skills do projeto a partir de .claude/skills/<name>/SKILL.md, segundo a documentação de skills:
---
name: weekly-report
description: Compile the weekly distribution report for one client workspace from Shager. Use when asked for a weekly client report.
---
The argument is the client workspace name: $ARGUMENTS
1. Resolve the workspace with list_workspaces. Read its timezone.
2. Compute last Monday 00:00 to Sunday 23:59:59 in that timezone, with offsets.
3. Collect posts with list_posts (PUBLISHED, PARTIALLY_PUBLISHED, FAILED) and
keep those published in the window. Call get_post for each.
4. Call get_analytics for the window. Map channel ids to names with list_channels.
5. If crm/<workspace>.csv exists, join leads on utm_content.
6. Write reports/<workspace>/<YYYY-MM-DD>.md with four sections: Delivery,
Clicks by account, Clicks by post, Actions. Use tables. No adjectives about
performance; numbers and one plain sentence per section.
7. Never call any tool that creates, schedules or cancels anything.
E o comando agendado, que pré-aprova só as ferramentas de leitura e a gravação de arquivos:
cd ~/agency-reports && claude -p "/weekly-report Aurora" \
--allowedTools "mcp__shager__list_*,mcp__shager__get_*,mcp__shager__whoami,Write" \
--output-format json > logs/aurora-$(date +%F).json
A sintaxe das regras de permissão com o prefixo mcp__<server>__ e um curinga no final está documentada na referência de permissões do Claude Code. Nada que esteja fora dessa lista será aprovado automaticamente numa execução sem supervisão.

Por que uma chave só de leitura importa aqui
A skill diz ao modelo para não escrever. A chave torna isso impossível. Crie no painel de agentes uma chave separada, só com o escopo read, para os relatórios, e não a use em mais nada. Se essa chave vazar um dia, o pior que pode acontecer é alguém ler contagens de cliques. Explicamos o modelo completo de escopos em chaves de API, escopos e auditoria.
Cada chamada que o agente de relatórios faz também aparece no registro de auditoria desse painel, um bom jeito de confirmar, nas primeiras segundas-feiras, que ele chama o que você espera e nada mais.
Escrevendo a parte em texto
Deixe o agente escrever uma ou duas frases por seção, mas com limites. Sem regras, os modelos descrevem uma variação de 4% como "um aumento significativo". Minha instrução é direta: diga o número, compare com a semana anterior se houver esse dado e não diga nada sobre a causa a menos que os dados mostrem. Se a página de uma filial não teve nenhum clique porque a conexão expirou na terça, essa é uma causa que os dados mostram. "Cansaço do público" não é.
Perguntas frequentes
O agente pode enviar o relatório direto para o cliente?
Pode, se você der a ele uma ferramenta de e-mail, mas eu não faria isso no primeiro dia. Peça que ele grave o arquivo, revise algumas semanas de resultados e só depois automatize o envio. O relatório é a forma como o cliente enxerga o seu trabalho, e um número errado enviado automaticamente custa mais do que o tempo economizado.
O get_analytics inclui leads?
Não. Ele devolve os cliques nos links rastreáveis do Shager, por conta e por post, num intervalo de datas. Os leads vêm do CRM ou da ferramenta de formulários do cliente, associados pelo utm_content. O relatório deve manter as duas fontes visivelmente separadas.
Até quando o relatório pode olhar para trás?
get_analytics aceita qualquer from e to que você enviar, com padrão dos últimos 30 dias quando from é omitido. Para comparações mês a mês, rode a mesma skill com outra janela, em vez de guardar relatórios antigos como fonte da verdade.
Próximos passos
Se você ainda não tem uma chave, a página para agentes mostra como criar uma ou deixar um agente se cadastrar sozinho. Comece com um cliente, leia você mesmo os relatórios de três segundas-feiras e só então inclua os outros.


