CLAUDE LABEN
TEACHERS — AnthropicがClaude for Teachersを公開。米国K-12の認証済み教員に、プレミアム機能と授業向けスキル、全50州の学習指導基準に沿ったカリキュラム連携を無償提供しますADMIN — Claude Enterprise全組織でAdmin APIがベータ提供に。メンバーと招待の操作はベータヘッダー不要、グループとカスタムロールは専用ヘッダーが必要ですM365 — Microsoft 365コネクタに書き込みツールが追加。メールの下書き・送信・整理、カレンダー操作、OneDriveとSharePointのファイル作成・更新まで任せられますMCP — --mcp-configや.mcp.jsonのサーバ単位request_timeout_msが無視され、新規セッションで60秒既定のままタイムアウトする不具合が修正されましたSUBAGENT — --forward-subagent-textとCLAUDE_CODE_FORWARD_SUBAGENT_TEXTが追加。サブエージェントのテキストと思考をstream-json出力に含められますDEADLINE — 7月24日にOpus 4.7のfastモードが削除されます。残り7日、speed: "fast" はエラーになるためOpus 4.8への移行をご確認くださいTEACHERS — AnthropicがClaude for Teachersを公開。米国K-12の認証済み教員に、プレミアム機能と授業向けスキル、全50州の学習指導基準に沿ったカリキュラム連携を無償提供しますADMIN — Claude Enterprise全組織でAdmin APIがベータ提供に。メンバーと招待の操作はベータヘッダー不要、グループとカスタムロールは専用ヘッダーが必要ですM365 — Microsoft 365コネクタに書き込みツールが追加。メールの下書き・送信・整理、カレンダー操作、OneDriveとSharePointのファイル作成・更新まで任せられますMCP — --mcp-configや.mcp.jsonのサーバ単位request_timeout_msが無視され、新規セッションで60秒既定のままタイムアウトする不具合が修正されましたSUBAGENT — --forward-subagent-textとCLAUDE_CODE_FORWARD_SUBAGENT_TEXTが追加。サブエージェントのテキストと思考をstream-json出力に含められますDEADLINE — 7月24日にOpus 4.7のfastモードが削除されます。残り7日、speed: "fast" はエラーになるためOpus 4.8への移行をご確認ください
記事一覧/Cowork
Cowork/2026-07-17上級

手元では動くのに、配ると呼び出されない — Cowork プラグインから剥がした4つの前提

自分の環境で動いていたスキル4本をプラグインにまとめて渡したところ、発火したのは1本だけでした。発火率の測り方と、配布前に剥がすべき環境依存・description・権限・命名衝突の4前提を実装込みで整理します。

cowork13plugin2skill2mcp18automation54distribution

プレミアム記事

個人開発の合間に少しずつ書き足してきた自動化スキルが、半年で4本たまっていました。どれも自分の手元では気持ちよく動きます。せっかくなのでプラグインにまとめ、同じような作業をしている知人に渡してみました。

数日後の返事は短いものでした。「入れてみたけど、何も起きないです」。

こちらでは動いている。向こうでは動かない。よくある話ではありますが、原因を1つずつ剥がしていくうちに、自分が何を暗黙の前提にしていたのかがはっきり見えてきました。この記事は、そのときの記録です。

まず「動かない」の中身を分解する

「動かない」には少なくとも3つの段階があります。

段階症状切り分けの合図
発火しないスキルが呼ばれず、Claude が素の応答を返すツール呼び出しのログに Skill が出てこない
発火するが落ちる呼ばれた直後にエラーで停止するパス・トークン・権限のエラーメッセージが出る
完走するが結果が違う最後まで走るが出力が期待と食い違うログはすべて成功、成果物だけがおかしい

知人の環境で起きていたのは、いちばん上の「発火しない」でした。ここを飛ばして中身のデバッグに入ると、延々と見当違いの場所を掘ることになります。

私は最初、それをやりました。コネクタの設定を疑い、権限を疑い、1時間ほど溶かしています。個人開発では自分がテスターも兼ねるので、疑う順番を間違えると誰も止めてくれません。実際にはスキルが一度も呼ばれていなかったので、中身がどうであれ関係がなかったのです。

発火率を数字にする

感覚で議論しても進みません。「たぶん description が悪い」では、直したかどうかも分かりません。

そこで、想定される発話を並べて、どのスキルが選ばれるかを記録する小さな検証を組みました。ヘッドレスの claude -p を回して、ツール呼び出しから Skill の名前だけを抜き出します。

まず、テストケースを1行1件の JSONL で用意します。

{"utterance": "先週の売上をまとめてレポートにして", "expect": "weekly-report"}
{"utterance": "週次レポート作って", "expect": "weekly-report"}
{"utterance": "今週のサマリーをください", "expect": "weekly-report"}
{"utterance": "溜まってる Issue を仕分けして", "expect": "issue-triage"}
{"utterance": "新しく来た issue にラベル付けといて", "expect": "issue-triage"}
{"utterance": "リリースノートの下書きを用意して", "expect": "release-notes"}
{"utterance": "今日の分の請求をチェックして", "expect": "billing-check"}

expect は「この発話ならこのスキルが選ばれてほしい」という期待値です。自分の口癖だけでなく、同じ意図を別の言い回しで表現したものを必ず混ぜます。ここが後で効いてきます。

続いて、それを流すスクリプトです。

#!/usr/bin/env bash
# skill-trigger-check.sh — 想定発話に対してどのスキルが選ばれるかを記録する
# usage: ./skill-trigger-check.sh cases.jsonl trigger-report.tsv
set -euo pipefail
 
CASES="${1:?usage: skill-trigger-check.sh <cases.jsonl> [out.tsv]}"
OUT="${2:-trigger-report.tsv}"
 
: > "$OUT"
 
while IFS= read -r line; do
  [ -z "$line" ] && continue
  utterance=$(jq -r '.utterance' <<<"$line")
  expected=$(jq -r '.expect'     <<<"$line")
 
  # 1ターンだけ回し、Skill ツールの呼び出し先を取り出す。
  # 実際の副作用を出さないため --max-turns 1 で止める。
  actual=$(claude -p "$utterance" \
             --output-format stream-json --verbose --max-turns 1 2>/dev/null \
           | jq -rs '[ .[]
                       | select(.type == "assistant")
                       | .message.content[]?
                       | select(.type == "tool_use" and .name == "Skill")
                       | .input.skill ] | first // "none"')
 
  if [ "$actual" = "$expected" ]; then status="MATCH"; else status="MISS"; fi
  printf '%s\t%s\t%s\t%s\n' "$status" "$expected" "$actual" "$utterance" >> "$OUT"
done < "$CASES"
 
awk -F'\t' '
  { n++; if ($1 == "MATCH") m++ }
  END { printf "発火率: %d/%d (%.0f%%)\n", m, n, (n ? m*100/n : 0) }
' "$OUT"

--max-turns 1 を付けているのは、検証のたびに本物の Issue にラベルが付いたら困るからです。知りたいのは「呼ばれるかどうか」だけなので、呼ばれた瞬間に止めます。jq -rs でストリームを配列にまとめてから最初の Skill 呼び出しを拾い、1件も無ければ none を返す形にしました。

自分の環境で走らせると、20件中18件が MATCH。90% です。手元で快適だったのは当然でした。

知人の環境で同じケースを流してもらった結果が、20件中5件。25% です。4本のスキルのうち、実質的に反応していたのは1本だけでした。

数字が出た瞬間、議論が具体になりました。MISS になった15件を眺めれば、何が起きているかは目に見えます。

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
claude -p のヘッドレス実行で「どのスキルが選ばれたか」を記録し、発火率を測る検証スクリプト(20ケースで 25% → 85% の推移を追跡)
SKILL.md の description を「説明文」から「ルーティングの入力」に書き換える3つの規則と Before/After
絶対パス・素の資格情報・未文書の環境変数・命名衝突を配布前に洗い出す preflight スクリプト(bash・そのまま CI に置ける形)
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

Cowork2026-05-04
Cowork スケジュールタスクが黙って止まる理由と、自動で立ち直る仕組みの作り方
Coworkのスケジュールタスクが途中で止まる原因を体系的に整理し、許可ダイアログ問題・ファイルツール制限・ディスク不足など実運用で頻発する障害パターンとその復旧方法を解説します。
Cowork2026-04-29
Cowork mode の Artifacts で「毎朝開く1ページ」を設計する — MCP連携で生きたダッシュボードを作る方法
Cowork mode のArtifactsは、再現可能な情報源を持つ「生きたページ」を生み出します。MCP連携で毎朝の確認業務を1クリックに集約する設計手順と落とし穴を、実例付きで解説します。
Cowork2026-03-27
Cowork スキル×スケジュール活用: 業務自動化の設計パターンと実践テクニック
Coworkのスキル機能とスケジュール実行を組み合わせた高度な業務自動化パターンを解説。営業レポート・日報集約・KPI追跡など複数のユースケースを設計パターンとして体系化し、MCPコネクタの効果的な活用法も紹介します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →