Membuat Skill Claude untuk Shager: SKILL.md, Struktur Folder, dan Aturan agar Posting ke Banyak Akun Selalu Konsisten

Kemas distribusi Shager sebagai Agent Skill Claude: frontmatter yang mudah terpicu, file referensi, skrip bantu REST, dan tempat skill disimpan.

Skill Claude untuk Shager adalah sebuah folder berisi file SKILL.md dengan frontmatter YAML yang memuat name dan description, diikuti instruksi yang memberi tahu Claude cara menjalankan distribusi lewat tool Shager: panggilan apa yang dilakukan, dalam urutan apa, dan aturan mana yang tidak boleh dilanggar. Simpan di ~/.claude/skills/shager-distribution/ untuk Anda sendiri, atau di .claude/skills/shager-distribution/ dalam sebuah repo untuk tim. Claude Code akan memuatnya saat ada permintaan yang cocok, atau saat Anda mengetik /shager-distribution.

Menghubungkan ke Shager adalah bagian yang mudah. Skill adalah tempat Anda menuangkan penilaian: variasi caption, tautan terlacak, draf sebagai default, dan apa yang harus dilakukan saat API menolak.

Kenapa menulis skill, bukan prompt panjang?

Karena prompt yang Anda sempurnakan hari Selasa sudah hilang pada hari Kamis, dan rekan tim yang tidak melihatnya akan menulis versi yang lebih buruk. Ikhtisar Agent Skills dari Anthropic menjelaskan skill sebagai sumber daya di sistem file yang dimuat sesuai kebutuhan. Hanya nama dan deskripsinya yang ada di konteks sampai skill terpicu. Setelah itu SKILL.md dibaca, dan file tambahan yang dirujuknya baru dibaca saat diperlukan. Jadi Anda bisa menulis instruksi yang detail tanpa membayarnya di setiap percakapan.

Khusus untuk Shager, prosedurnya tetap sementara kontennya berganti setiap minggu. Itulah profil skill yang bagus.

Struktur folder skill: SKILL.md berisi nama dan deskripsi, serta instruksi untuk bekerja dengan Shager.
Satu skill mengajarkan seluruh rutinitas kepada agen, setiap kali.

Apa aturan frontmatter SKILL.md?

Menurut halaman ikhtisar yang sama, name dan description wajib ada. name maksimal 64 karakter, hanya huruf kecil, angka, dan tanda hubung, serta tidak boleh memuat kata yang dicadangkan "anthropic" atau "claude". description tidak boleh kosong, maksimal 1.024 karakter, dan harus menyebutkan apa yang dilakukan skill sekaligus kapan memakainya, karena dari situlah Claude mencocokkan permintaan.

Claude Code menambahkan kolom opsional yang didokumentasikan di Use Skills in Claude Code: allowed-tools untuk tool yang boleh dipakai Claude tanpa bertanya selama skill aktif, disable-model-invocation agar skill hanya bisa dipanggil manual, argument-hint untuk pelengkapan otomatis, dan lainnya. Nama direktori, atau name jika diisi, menjadi perintah slash-nya.

Seperti apa struktur foldernya?

shager-distribution/
  SKILL.md
  reference/
    tools.md
    errors.md
  scripts/
    shager.py

SKILL.md berisi prosedurnya. reference/tools.md berisi detail tingkat kolom untuk create_post dan upload_media_from_url, yang hanya dibaca saat Claude membutuhkannya. scripts/shager.py adalah cadangan REST opsional untuk lingkungan tanpa server MCP. Dokumentasi Claude Code menyarankan agar SKILL.md tidak lebih dari 500 baris dan detailnya dipindahkan ke file terpisah, persis seperti pembagian ini.

Shager juga menerbitkan file skill yang terus dipelihara di https://shager.ai/skills/shager/SKILL.md. File ini titik awal yang baik untuk dibaca sebelum Anda menulis skill sendiri; versi di bawah menambahkan aturan khusus agensi.

SKILL.md-nya

---
name: shager-distribution
description: Distribute a post or video to many social accounts through Shager (Facebook Pages, Instagram professional accounts, YouTube channels). Use when the user asks to post, schedule, draft or distribute content to client accounts, account groups or "all locations", or asks which account drove clicks.
argument-hint: "[workspace] [brief or media URL]"
allowed-tools: mcp__shager__whoami mcp__shager__list_workspaces mcp__shager__list_channels mcp__shager__list_groups mcp__shager__get_post mcp__shager__list_posts mcp__shager__get_analytics
---

# Shager distribution

## Before anything
1. Call whoami. Note the scopes and whether this is a sandbox.
2. Resolve the workspace by name with list_workspaces. If two match, ask.
3. Call list_channels and list_groups. Only target channels with status ACTIVE.

## Building the post
1. Media: call upload_media_from_url. For vertical video pass width,
   height and duration_ms so Shager can validate Reels, Shorts and Stories.
2. Captions: write one caption per channel in per_channel. Keep facts,
   prices and dates identical; vary the opening line, structure and the
   local detail (city, branch, presenter) taken from the channel name.
3. Links: never paste a raw URL into captions. Pass it as cta_url so each
   account gets its own short link and UTM tags. Put the call to action
   in first_comment for Facebook and YouTube. Instagram does not make
   comment links clickable, so for Instagram channels mention "link in bio".
4. Set campaign to a lowercase slug, e.g. "spring-open-day-2026".
5. Set label to something a human will recognize in the calendar.

## Drafts by default
Create the post WITHOUT schedule_at unless the user gave an explicit date
and time in this conversation. Show a table of channel, network, format and
the first line of each caption, and wait for confirmation.

## Scheduling
Only when confirmed: call schedule_post with schedule_at in ISO 8601 with
the workspace's UTC offset. If the workspace requires approval, call
request_approval instead and return the approval_url to the user.

## When Shager says no
Read error.code, do not retry blindly. See reference/errors.md.

## Reporting
For "how did it do", call get_analytics for the date range and present
clicks by account, highest first, plus the top posts.

Field details for create_post: reference/tools.md

Ada beberapa keputusan di sana yang layak dijelaskan.

Daftar allowed-tools hanya berisi operasi baca. create_post, schedule_post, request_approval, dan cancel_post tetap meminta izin di Claude Code, jadi setiap operasi tulis dilihat oleh manusia. Tool MCP dinamai mcp__<server>__<tool>, dengan asumsi Anda mendaftarkan servernya sebagai shager seperti di panduan menghubungkan Shager ke Claude Code.

Baris tentang Instagram mencerminkan cara kerja platform tersebut: tautan di caption dan komentar tidak bisa diklik di sana. Komentar pertama berisi tautan terlacak benar-benar berguna di Facebook Pages dan YouTube.

"Draf sebagai default" ditegakkan dua kali. Sekali lewat instruksi, dan sekali lagi dengan memberi lingkungan skill sebuah kunci tanpa scope publish. Instruksi mengarahkan; scope memaksa.

Daftar bernomor aturan keamanan untuk agen yang memposting dalam skala besar: caption berbeda per akun, pengiriman bertahap, persetujuan manusia, kunci dengan izin terbatas, pengecekan hari raya, dan berhenti saat ada error.
Aturan yang menjaga akun tetap sehat, bahkan untuk ratusan akun.

reference/errors.md

# Shager error codes

401 unauthorized: key missing or malformed. Stop and tell the user.
403 forbidden: key lacks a scope. If scheduling, say a human must schedule
    or grant publish at app.shager.ai/dashboard/agents.
403 sandbox_unclaimed: show the claim link from signup; nothing else to do.
404 not_found: re-list channels or posts; ids are per workspace.
409 not_scheduled: the post is not scheduled; get_post and report status.
422 rejected: a network rule failed. Quote the message, fix the input
    (length, format, media), and try once more.
429 rate_limited: wait 60 seconds, then continue. Never loop per account.

scripts/shager.py: cadangan REST

Jika MCP belum dikonfigurasi, skill tetap bisa bekerja lewat REST API, yang dijelaskan dalam dokumen OpenAPI. Skrip bantu kecil ini mencegah Claude mengarang kode HTTP setiap kali:

#!/usr/bin/env python3
"""Usage: shager.py METHOD PATH [JSON_BODY]
Example: shager.py GET /workspaces
         shager.py POST /workspaces/WS_ID/posts '{"caption": "..."}'"""
import json, os, sys, requests

API = "https://app.shager.ai/api/v1"

def main():
    method, path = sys.argv[1].upper(), sys.argv[2]
    body = json.loads(sys.argv[3]) if len(sys.argv) > 3 else None
    r = requests.request(
        method, f"{API}{path}",
        headers={"Authorization": f"Bearer {os.environ['SHAGER_API_KEY']}"},
        json=body, timeout=90,
    )
    payload = r.json()
    if not r.ok:
        e = payload["error"]
        print(json.dumps({"status": r.status_code, "code": e["code"], "message": e["message"]}))
        sys.exit(1)
    print(json.dumps(payload["data"], indent=2))

if __name__ == "__main__":
    main()

Tambahkan satu baris ke SKILL.md, misalnya "If the shager MCP tools are unavailable, run scripts/shager.py with the same operation paths", lalu cantumkan path-nya di reference/tools.md. Halaman ikhtisar mencatat bahwa saat Claude menjalankan skrip yang dibundel, hanya output-nya yang masuk ke konteks, bukan kodenya.

Di mana skill sebaiknya disimpan?

Tempat Lokasi Bisa menjangkau Shager?
Claude Code, pribadi ~/.claude/skills/shager-distribution/ Ya, lewat MCP atau skrip. Skill di sana punya akses jaringan yang sama dengan program lain di komputer Anda
Claude Code, tim .claude/skills/shager-distribution/ yang di-commit ke repo Ya, sama seperti di atas
claude.ai Diunggah sebagai zip di Settings, Features Akses jaringan bergantung pada pengaturan pengguna dan admin
Claude API Diunggah lewat Skills API Tidak: skill di API berjalan tanpa akses jaringan

Baris terakhir itu diambil langsung dari batasan runtime di halaman ikhtisar, dan sering mengejutkan orang. Di API, pakai server MCP Shager atau panggilan tool Anda sendiri untuk urusan jaringan, dan biarkan skill hanya berisi instruksi. Perlu diingat juga bahwa skill kustom tidak tersinkron antartempat; skill yang diunggah ke claude.ai tidak ada di Claude Code.

Bagaimana cara mengujinya?

  1. Ajukan permintaan yang seharusnya memicu skill tanpa menyebut namanya: "Buatkan draf postingan open day minggu ini untuk semua cabang Harbor Fitness." Periksa apakah Claude membaca skill tersebut.
  2. Ajukan permintaan yang seharusnya tidak memicunya: "Berapa panjang caption yang ideal untuk Reels?" Skill seharusnya tidak ikut campur.
  3. Jalankan /shager-distribution Harbor Fitness https://example.com/clip.mp4 dan pastikan prosesnya berhenti di tabel draf.
  4. Pakai kunci tanpa publish lalu minta skill menjadwalkan. Skill seharusnya menjelaskan error 403, bukan mengulang terus.

FAQ

Bolehkah nama skill memuat "claude"?

Tidak. Aturan skill dari Anthropic mencadangkan kata "anthropic" dan "claude" di kolom name. Pakai nama seperti shager-distribution; judul dokumentasi Anda tetap boleh menyebut bahwa ini skill Claude.

Haruskah skill menyimpan kunci API?

Tidak. Simpan kunci di konfigurasi klien MCP atau di variabel lingkungan seperti SHAGER_API_KEY. Skill adalah folder yang bisa dibagikan dan sering berakhir di git; kunci di dalamnya akan ikut bocor.

Apakah skill yang sama bisa dipakai di Cursor atau Codex?

Format SKILL.md milik Anthropic, tetapi instruksi di dalamnya hanyalah teks biasa. Banyak tim menempelkan isinya ke Cursor rules atau ke file prompt Codex. Nama tool-nya sama di semua klien karena berasal dari server MCP Shager.

Langkah berikutnya

Skill yang membuat draf atas permintaan adalah fondasinya. Artikel berikutnya mengubahnya menjadi rutinitas distribusi mingguan yang merencanakan minggu, menyusun draf postingan untuk setiap klien, mengarahkan persetujuan, dan melaporkan klik, dengan titik pemeriksaan manusia di tempat yang tepat.

Coba di akun Anda sendiri.

Gratis selama masa peluncuran, tanpa kartu. Hubungkan akun, tulis sekali, lalu Shager yang memublikasikan dan mengukur hasilnya.