# Rutinitas Distribusi Mingguan sebagai Skill Claude: Draf Hari Senin, Persetujuan Klien, Laporan Klik Hari Jumat

_2026-10-06 · Skill Claude Code untuk menjalankan minggu kerja agensi di Shager: draf dari file rencana, persetujuan klien, jadwalkan yang disetujui, laporan klik hari Jumat._

Rutinitas distribusi mingguan adalah skill yang menjalankan tiga pekerjaan yang sama setiap minggu: pada hari Senin, skill ini mengubah rencana konten setiap klien menjadi draf Shager dengan caption per akun, lalu mengirimkannya untuk disetujui; di pertengahan minggu, ia menjadwalkan apa pun yang sudah disetujui; pada hari Jumat, ia menarik data klik per akun dan menulis laporannya. Di Claude Code, Anda memicunya dengan `/shager-weekly plan` atau `/shager-weekly report`, atau tanpa antarmuka dari penjadwal dengan `claude -p`. Titik pemeriksaan oleh manusia diletakkan di antara penyusunan draf dan penjadwalan, tempat biayanya paling kecil dan tangkapannya paling banyak.

Artikel ini melanjutkan [skill Shager dasar](/en/blog/build-a-claude-skill-for-shager). Kali ini fokusnya adalah rutinitasnya: input, mode, pengaman, dan cara menjalankannya tanpa harus ada orang di depan keyboard.

## Seperti apa sebenarnya satu minggu kerja?

Ambil contoh agensi dengan delapan klien dan sekitar 150 akun terhubung. Minggu kerja yang realistis terlihat seperti ini.

| Kapan | Mode | Yang dilakukan skill | Peran manusia |
|---|---|---|---|
| Senin 09.00 | `plan` | Membaca file rencana setiap klien, mengunggah media, membuat draf, meminta persetujuan | Tidak ada selama berjalan |
| Senin sampai Rabu | | Klien menyetujui atau meminta perubahan lewat tautan persetujuan | Klien meninjau |
| Rabu 14.00 | `schedule` | Menjadwalkan setiap postingan yang disetujui sesuai waktu rencananya | Account manager melirik ringkasannya |
| Jumat 15.00 | `report` | Menarik klik per akun dan per postingan, menulis laporan per klien | Account manager mengirimkannya |

Rutinitas ini tidak pernah mengarang topik mingguan. Ia bekerja dari file rencana yang ditulis manusia, karena strategi adalah tugas agensi. Yang dihilangkannya adalah bagian mekanis: empat puluh varian caption, tautan terlacak, pilihan format, dan tindak lanjut.

## Seperti apa file rencananya?

Satu file Markdown per klien per minggu, di repo yang bisa dibaca skill:

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

Teks biasa yang diurai oleh skill, dan file yang bisa diedit account manager mana pun tanpa harus belajar tool baru.

## SKILL.md-nya

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

### Kenapa setiap pengaman ada di sana

`disable-model-invocation: true` berarti Claude tidak akan pernah memulai rutinitas ini sendiri hanya karena sebuah percakapan menyebut "postingan minggu ini". Menurut [dokumentasi skill Claude Code](https://code.claude.com/docs/en/skills), field itu mencegah pemuatan otomatis, sehingga rutinitas hanya berjalan ketika seseorang atau sesuatu mengetikkan perintahnya.

Daftar `allowed-tools` sudah lengkap untuk pekerjaannya, tidak lebih. Tidak ada `cancel_post`, tidak ada `create_connect_link`, tidak ada `create_workspace`. Rutinitas yang berjalan tanpa pengawasan tidak boleh bisa melakukan hal-hal yang tidak direncanakan manusia.

Penjadwalan hanya menyentuh postingan berstatus `APPROVED`, dan status itu hanya muncul setelah klien menyetujuinya lewat tautan mereka. Kalau klien tidak pernah menyetujui, postingan itu tidak terbit, dan ringkasan hari Rabu menyebutkannya. Alasan meletakkan persetujuan tepat di titik ini ada di [alur persetujuan klien untuk agensi](/en/blog/client-approval-workflow-for-agencies).

## Kunci mana yang sebaiknya dipakai rutinitas ini?

Keputusan inilah yang menentukan seberapa besar Anda memercayai rutinitasnya.

| Penyiapan | Cakupan kunci | Hasil |
|---|---|---|
| Draf saja | `read`, `write` | `plan` dan `report` berjalan; manusia menjadwalkan di Shager |
| Dengan gerbang persetujuan | `read`, `write`, `publish` dan persetujuan wajib di setiap workspace | Rutinitas hanya menjadwalkan yang sudah disetujui klien |
| Autopilot penuh | `read`, `write`, `publish`, tanpa persetujuan | Hanya untuk konten rutin berisiko rendah yang toh akan Anda posting tanpa tinjauan |

Baris kedua adalah yang kami rekomendasikan untuk sebagian besar agensi. Cakupan `publish` diberikan ke satu kunci yang dibuat khusus untuk rutinitas ini di https://app.shager.ai/dashboard/agents, sehingga log audit di sana menampilkan setiap panggilan rutinitas ini dan tidak ada yang lain. Kalau ada yang tampak janggal, Anda cukup mencabut kunci itu dan semua integrasi lain tetap berjalan.

## Bagaimana menjalankannya tanpa membuka terminal?

Mode non-interaktif Claude Code bisa menjalankan skill dari skrip. [Dokumentasi headless](https://code.claude.com/docs/en/headless) menyatakan bahwa skill yang dipanggil pengguna berfungsi di mode `-p` jika Anda menyertakan `/skill-name` di prompt, dan bahwa `--allowedTools` memberi persetujuan awal untuk tool dengan sintaks aturan izin. Dokumentasi itu juga menjelaskan `--permission-mode dontAsk`, yang menolak apa pun yang biasanya memunculkan permintaan izin, sehingga panggilan tool yang tidak terduga langsung gagal alih-alih menggantung.

```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"
```

Dan crontab-nya, dalam waktu lokal server:

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

Ini mengasumsikan server MCP Shager sudah terdaftar di `.mcp.json` proyek dengan kunci yang dibaca dari `SHAGER_API_KEY`, seperti ditunjukkan di [menghubungkan Shager ke Claude Code](/en/blog/connect-shager-to-claude-code). Output JSON memberi Anda ID sesi dan ringkasan akhir, yang bisa Anda teruskan ke channel tim.

## Apa yang tetap butuh manusia setiap minggu?

Tiga hal, dan rutinitas ini dirancang untuk mengakomodasinya, bukan melawannya.

1. Menulis file rencana. Topik, penawaran, dan waktu adalah strategi.
2. Membaca ringkasan hari Rabu. Isinya daftar postingan yang belum disetujui, channel yang dilewati, dan penolakan 422. Lima menit saja.
3. Mengirim laporan hari Jumat beserta konteksnya. Klik per akun adalah fakta; apa artinya bagi klien adalah bahan percakapan. Ingatkan klien bahwa klik tautan bukanlah prospek, dan arahkan mereka ke [atribusi prospek per akun](/en/blog/utm-per-account-lead-attribution) kalau mereka ingin menutup celah itu di CRM mereka.

## FAQ

### Bagaimana kalau klien baru menyetujui setelah hari Rabu?

Jalankan `/shager-weekly schedule` sekali lagi, secara manual atau lewat baris cron kedua di hari Kamis. Mode ini hanya menjadwalkan postingan `APPROVED` yang belum terjadwal, dan menolak waktu yang sudah lewat, jadi menjalankannya dua kali tetap aman.

### Bisakah rutinitas ini menghubungkan akun baru saat klien menambah lokasi?

Sengaja tidak. `create_connect_link` tidak dimasukkan ke daftar tool yang diizinkan karena menghubungkan akun melibatkan klien dan sebaiknya menjadi tindakan manusia yang disengaja. Saat ada lokasi baru, account manager mengirim tautan koneksi dan menambahkan channel baru ke grup yang tepat; pengiriman berikutnya akan mengambilnya secara otomatis.

### Apakah ini bisa jalan di Codex atau Cursor, bukan Claude Code?

File rencana, mode, dan pengamannya bisa langsung dipindahkan, karena tool Shager sama di setiap klien MCP. Frontmatter `SKILL.md` dan pemanggilan `claude -p` khusus untuk Claude Code; di tempat lain, Anda menyimpan instruksinya sebagai file prompt dan menjalankannya dengan otomatisasi bawaan klien tersebut.

## Langkah berikutnya

Rutinitas ini mengurus satu minggu kerja; [pipeline konten agen dari awal sampai akhir](/en/blog/agent-content-pipeline-end-to-end) menunjukkan rantai lengkap di sekitarnya, dari brief klien, media dan caption yang dihasilkan, hingga postingan yang terbit dan klik yang terukur, dengan setiap panggilan Shager secara berurutan.

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