週次の配信ルーティンを Claude スキルに:月曜に下書き、クライアント承認、金曜にクリックレポート

Shagerでエージェンシーの1週間を回すClaude Codeスキル。計画ファイルから下書き、クライアント承認、承認分だけ予約、金曜のクリックレポート。

週次の配信ルーティンとは、毎週同じ3つの仕事をこなすスキルです。月曜日には、各クライアントのコンテンツ計画をアカウントごとのキャプション付きの Shager の下書きに変え、承認に回します。週の半ばには、承認されたものを予約します。金曜日には、アカウント別のクリックを取得してレポートを書きます。Claude Code では /shager-weekly plan や /shager-weekly report で起動でき、スケジューラーから claude -p でヘッドレスに実行することもできます。人によるチェックポイントは、下書きと予約の間に置きます。そこが最もコストが低く、最も多くの問題を拾える場所だからです。

この記事は、Shager の基本スキルを土台にしています。ここで焦点を当てるのはルーティンそのもの、つまり入力、モード、安全装置、そしてキーボードの前に誰もいなくても実行する方法です。

実際の1週間はどうなるのか

クライアント8社、接続アカウント約150のエージェンシーを例にとります。現実的な1週間は次のとおりです。

いつ モード スキルがすること 人の役割
月曜 09:00 plan 各クライアントの計画ファイルを読み、メディアをアップロードし、下書きを作り、承認を依頼する 実行中は何もしない
月曜〜水曜 クライアントが承認リンクから承認または修正依頼をする クライアントのレビュー
水曜 14:00 schedule 承認された投稿を、すべて計画どおりの時刻に予約する アカウント担当者がサマリーにざっと目を通す
金曜 15:00 report アカウント別・投稿別のクリックを取得し、クライアントごとにレポートを書く アカウント担当者が送付する

このルーティンが、その週のテーマを勝手に考え出すことはありません。戦略はエージェンシーの仕事なので、人が書いた計画ファイルをもとに動きます。ルーティンがなくしてくれるのは機械的な部分です。40通りのキャプション、計測リンク、形式の選択、フォローアップといった作業です。

スキルのフォルダー構成:名前と説明を記した SKILL.md と、Shager で作業するための手順。
スキルが1つあれば、エージェントは毎回すべての手順を把握できます。

計画ファイルはどんなものか

クライアントごと、週ごとに Markdown ファイルを1つ作り、スキルが読めるリポジトリに置きます。

# 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

スキルが解析するのはただのテキストで、アカウント担当者なら誰でも、ツールを覚えることなく編集できるファイルです。

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.

各安全装置がある理由

disable-model-invocation: true にしておくと、会話で「今週の投稿」が話題に出たからといって、Claude が自分からこのルーティンを始めることはありません。Claude Code のスキルのドキュメントによると、このフィールドは自動読み込みを防ぐので、ルーティンは人か何かがコマンドを入力したときにしか実行されません。

allowed-tools のリストは、この仕事に必要なものがすべて揃っていて、それ以上はありません。cancel_post も、create_connect_link も、create_workspace もありません。ヘッドレスで動くルーティンに、人が想定していないことをさせるべきではないからです。

予約の対象は APPROVED 状態の投稿だけで、この状態になるのはクライアントがリンクから承認したときだけです。クライアントが承認しなければ、その投稿は公開されないだけで、水曜のサマリーにその旨が記載されます。承認をちょうどこの位置に置く理由は、エージェンシーのためのクライアント承認ワークフローで説明しています。

ルーティンにはどのキーを使うべきか

これは、ルーティンをどこまで信頼するかを決める判断です。

構成 キーのスコープ 結果
下書きのみ read、write plan と report は実行される。予約は人が Shager で行う
承認ゲート付き read、write、publish、かつ全ワークスペースで承認必須 ルーティンはクライアントが承認したものだけを予約する
完全自動 read、write、publish、承認なし どのみちレビューなしで投稿するような、リスクの低い定型コンテンツ専用

ほとんどのエージェンシーに私たちがおすすめするのは2行目です。publish スコープは、https://app.shager.ai/dashboard/agents でこのルーティン専用に作った1つのキーにだけ付与します。そうすれば、そこにある監査ログには、このルーティンが行った呼び出しだけがすべて表示されます。おかしな点があればそのキーを無効にすればよく、他の連携はすべてそのまま動き続けます。

図:下書きはログイン不要のリンクでクライアントに送られ、クライアントが承認または修正を依頼し、承認された投稿が予約されます。
承認後に内容を変更すると、承認は取り消されます。クライアントが見ていないものは公開されません。

ターミナルを開かずに実行するには

Claude Code の非対話モードを使えば、スクリプトからスキルを実行できます。ヘッドレスのドキュメントによると、ユーザーが呼び出すスキルは、プロンプトに /skill-name を含めれば -p モードで動作し、--allowedTools で権限ルールの構文を使ってツールを事前に許可できます。また --permission-mode dontAsk についても説明されています。本来なら確認を求める操作をすべて拒否するモードで、想定外のツール呼び出しは止まったままになるのではなく、失敗として終わります。

#!/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"

crontab はサーバーの現地時刻で次のように設定します。

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

これは、Shager を Claude Code に接続するで紹介しているように、Shager の MCP サーバーがプロジェクトの .mcp.json に登録され、キーを SHAGER_API_KEY から読み込む構成になっていることが前提です。JSON 出力にはセッション ID と最終的なサマリーが含まれるので、それをチームのチャンネルに転送します。

毎週、人が担うべきこと

3つあります。ルーティンは、これらを排除するのではなく、これらを前提に設計されています。

  1. 計画ファイルを書くこと。テーマ、オファー、タイミングは戦略です。
  2. 水曜のサマリーを読むこと。承認されていないもの、スキップされたチャンネル、422 で拒否されたものが一覧になっています。5分で済みます。
  3. 金曜のレポートに背景を添えて送ること。アカウント別のクリックは事実ですが、それがクライアントにとって何を意味するかは対話の中で決まります。リンクのクリックはリードではないことをクライアントに伝え、CRM でその差を埋めたいならアカウント単位のリード計測を紹介しましょう。

よくある質問

クライアントの承認が水曜以降になったら?

手動で、あるいは木曜に2本目の cron を設定して、もう一度 /shager-weekly schedule を実行します。このモードはまだ予約されていない APPROVED の投稿だけを予約し、過去の時刻は受け付けないので、2回実行しても安全です。

クライアントが店舗を増やしたとき、ルーティンが新しいアカウントを接続できますか?

意図的にできないようにしています。アカウントの接続にはクライアントが関わるので、人が意識して行うべき操作です。そのため create_connect_link は許可ツールから外しています。店舗が増えたら、アカウント担当者が接続リンクを送り、新しいチャンネルを適切なグループに追加します。次の実行からは自動的に対象になります。

Claude Code ではなく Codex や Cursor でも使えますか?

Shager のツールはどの MCP クライアントでも同じなので、計画ファイル、モード、安全装置はそのまま移植できます。SKILL.md のフロントマターと claude -p による起動は Claude Code 固有です。他のクライアントでは、指示をプロンプトファイルとして残し、そのクライアント独自の自動化機能で動かすことになります。

次のステップ

1週間の運用はこのルーティンが担います。その周りの全体の流れは、エージェントによるコンテンツパイプラインの全工程で紹介しています。クライアントのブリーフから、生成したメディアとキャプション、公開された投稿、計測されたクリックまで、Shager の呼び出しを順番どおりに追っています。

ご自身のアカウントでお試しください。

ローンチ期間中は無料、カード登録不要。接続して一度書くだけで、Shagerが公開して計測します。