La routine settimanale di distribuzione come skill di Claude: bozze il lunedì, approvazioni dei clienti, report dei clic il venerdì
Una skill di Claude Code per la settimana di un'agenzia in Shager: bozze dai piani, approvazioni, programmazione solo dell'approvato e report del venerdì.

Una routine settimanale di distribuzione è una skill che ripete ogni settimana gli stessi tre lavori: il lunedì trasforma il piano editoriale di ogni cliente in bozze Shager con testi diversi per account e le invia in approvazione; a metà settimana programma tutto ciò che è stato approvato; il venerdì raccoglie i clic per account e scrive il report. In Claude Code la avvii con /shager-weekly plan o /shager-weekly report, oppure senza interfaccia da uno scheduler con claude -p. I controlli umani stanno tra la stesura e la programmazione, dove costano meno e intercettano di più.
L'articolo parte dalla skill di base per Shager. Qui ci concentriamo sulla routine: input, modalità, protezioni e come farla girare senza nessuno alla tastiera.
Com'è fatta, in concreto, una settimana?
Prendiamo un'agenzia con otto clienti e circa 150 account collegati. Una settimana che funziona ha questo aspetto.
| Quando | Modalità | Cosa fa la skill | Ruolo umano |
|---|---|---|---|
| Lunedì 09:00 | plan |
Legge il piano di ogni cliente, carica i media, crea le bozze, chiede l'approvazione | Nessuno durante l'esecuzione |
| Da lunedì a mercoledì | I clienti approvano o chiedono modifiche tramite i link di approvazione | Revisione del cliente | |
| Mercoledì 14:00 | schedule |
Programma ogni post approvato all'orario previsto | L'account manager dà un'occhiata al riepilogo |
| Venerdì 15:00 | report |
Raccoglie i clic per account e per post, scrive un report per cliente | L'account manager lo invia |
La routine non si inventa mai gli argomenti della settimana. Lavora su un file di piano scritto da una persona, perché la strategia è compito dell'agenzia. Quello che elimina è la parte meccanica: quaranta varianti di testo, link tracciati, scelta dei formati, solleciti.

Com'è fatto il file di piano?
Un file Markdown per cliente e per settimana, in un repository che la skill può leggere:
# 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
Testo semplice che la skill analizza, e un file che qualsiasi account manager può modificare senza imparare un nuovo strumento.
Il file 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.
A cosa serve ogni protezione
disable-model-invocation: true fa sì che Claude non avvii mai la routine di sua iniziativa solo perché in una conversazione si è parlato dei «post di questa settimana». Secondo la documentazione delle skill di Claude Code, quel campo impedisce il caricamento automatico, quindi la routine parte solo quando qualcuno, o qualcosa, digita il comando.
L'elenco allowed-tools contiene tutto ciò che serve al lavoro e niente di più. Niente cancel_post, niente create_connect_link, niente create_workspace. Una routine che gira senza supervisione non deve poter fare cose che nessuno ha previsto.
La programmazione tocca solo i post con stato APPROVED, e quello stato esiste solo dopo che il cliente ha approvato tramite il suo link. Se un cliente non approva mai, il post semplicemente non esce, e il riepilogo del mercoledì lo segnala. Perché l'approvazione stia proprio in questo punto è spiegato nel flusso di approvazione dei clienti per le agenzie.
Quale chiave deve usare la routine?
È la scelta che stabilisce quanta fiducia dai alla routine.
| Configurazione | Ambiti della chiave | Risultato |
|---|---|---|
| Solo bozze | read, write |
plan e report funzionano; la programmazione la fa una persona in Shager |
| Con approvazione obbligatoria | read, write, publish e approvazione richiesta in ogni workspace |
La routine programma solo ciò che i clienti hanno approvato |
| Pilota automatico completo | read, write, publish, nessuna approvazione |
Solo per contenuti ricorrenti a basso rischio che pubblicheresti comunque senza revisione |
La seconda riga è quella che consigliamo alla maggior parte delle agenzie. L'ambito publish va a una sola chiave, creata solo per questa routine su https://app.shager.ai/dashboard/agents, così il registro in quella pagina mostra tutte le chiamate fatte dalla routine e nient'altro. Se qualcosa non torna, revochi quella chiave e tutte le altre integrazioni continuano a funzionare.

Come la fai girare senza aprire un terminale?
La modalità non interattiva di Claude Code esegue una skill da uno script. La documentazione sulla modalità headless spiega che le skill invocate dall'utente funzionano in modalità -p se inserisci /skill-name nel prompt, e che --allowedTools pre-approva gli strumenti con la sintassi delle regole di permesso. Descrive anche --permission-mode dontAsk, che nega tutto ciò che altrimenti chiederebbe conferma: così una chiamata a uno strumento inatteso fallisce invece di restare in sospeso.
#!/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 il crontab, nell'ora locale del server:
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
Tutto questo presuppone che il server MCP di Shager sia registrato nel .mcp.json del progetto con la chiave letta da SHAGER_API_KEY, come mostrato in collegare Shager a Claude Code. L'output JSON ti dà l'id della sessione e il riepilogo finale, cioè ciò che inoltreresti al canale del team.
Cosa richiede ancora una persona ogni settimana?
Tre cose, e la routine è pensata attorno a loro, non contro di loro.
- Scrivere il file di piano. Argomenti, offerte e tempi sono strategia.
- Leggere il riepilogo del mercoledì. Elenca ciò che non è stato approvato, i canali saltati e i rifiuti 422. Cinque minuti.
- Inviare il report del venerdì con un po' di contesto. I clic per account sono un dato; cosa significano per il cliente è una conversazione. Ricorda ai clienti che i clic sui link non sono contatti, e indirizzali all'attribuzione dei contatti per account se vogliono colmare questa lacuna nel loro CRM.
Domande frequenti
E se un cliente approva dopo mercoledì?
Esegui di nuovo /shager-weekly schedule, a mano o con una seconda riga di cron il giovedì. La modalità programma solo i post APPROVED non ancora programmati e rifiuta gli orari nel passato, quindi lanciarla due volte non crea problemi.
La routine può collegare nuovi account quando un cliente apre una nuova sede?
No, per scelta. create_connect_link è escluso dagli strumenti consentiti perché collegare account coinvolge il cliente e deve essere un'azione umana consapevole. Quando si aggiunge una sede, l'account manager invia un link di collegamento e aggiunge il nuovo canale al gruppo giusto; l'esecuzione successiva lo include automaticamente.
Funziona anche con Codex o Cursor al posto di Claude Code?
File di piano, modalità e protezioni si trasferiscono senza modifiche, perché gli strumenti di Shager sono gli stessi in ogni client MCP. Il frontmatter di SKILL.md e l'invocazione claude -p sono specifici di Claude Code; altrove terresti le istruzioni in un file di prompt e le eseguiresti con gli strumenti di automazione di quel client.
Il prossimo passo
La routine gestisce la settimana; la pipeline di contenuti completa con un agente mostra tutta la catena intorno: dal brief del cliente ai media e ai testi generati, fino ai post pubblicati e ai clic misurati, con ogni chiamata a Shager nell'ordine giusto.


