mcpField
B
blog-persona

blog-persona

github.com/infrasity-labsマーケティング・グロース15194 回インストール18 週間前に更新
リポジトリ

blog-persona について

blog-personaは、ブログ執筆者やチーム向けの文体管理スキルです。ブランドの文体プロファイルを作成・保存し、blog-writeとblog-rewriteにルールを適用します。

主な機能

  1. 016段階の対話によるプロファイル作成
  2. 024つのトーン軸の設定
  3. 03語彙レベルと読みやすさの設定
  4. 04執筆ルールと文体サンプルの記録
  5. 05プロファイルの一覧・表示・有効化

活用シーン

  1. 01ブログ記事のブランド文体を統一
  2. 02文体プロファイルのトーンと読みやすさを設定
  3. 03保存済みの文体ルールをブログ生成に適用

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/infrasity-labs/dev-gtm-claude-skills --skill blog-persona

インストール後、Claude Code で/blog-personaを入力して読み込まれたか確認します。

詳細

ブログのペルソナ - 文体の管理

NNGroup の 4 次元トーンフレームワークと CMI Brand Voice Chart に基づいて、文体のペルソナを作成、保存、適用します。ペルソナによって、blog-write と blog-rewrite が作成するすべてのブログコンテンツで、一貫した文体を維持できます。

コマンド

コマンド用途
/blog persona create対話形式のインタビューで新しいペルソナを作成します
/blog persona list保存済みのすべてのペルソナを表示します
/blog persona use <name>現在のセッションで使用するペルソナを設定します
/blog persona show <name>ペルソナの詳細なプロフィールを表示します

作成ワークフロー

6 ステップの対話形式のインタビューを実施します。各ステップで質問し、回答を待ってから次へ進みます。

ステップ 1:ブランドの基本情報

ユーザーに次の情報を尋ねます。

  • ブランド名 - 企業または個人のブランド
  • 業界 - 主な業種(例:SaaS、医療、金融、教育)
  • ターゲットオーディエンス - ブログの読者(役割、経験レベル、目標)
  • 一文で表したブランドのミッション - ブランドが人々のどのような取り組みを支援するか
ステップ 2:トーンの次元(NNGroup フレームワーク)

各次元を 0.0 から 1.0 のスライダーで示します。両端の意味を例とともに説明します。

次元0.0 の端1.0 の端0.0 の例1.0 の例
funny_serious面白い真面目"Let's be real, nobody reads Terms of Service""Understanding legal agreements protects your business"
formal_casualフォーマルカジュアル"We are pleased to announce""Guess what - we shipped it!"
respectful_irreverent礼儀正しい不遜"We appreciate your patience""Yeah, that old way was broken"
enthusiastic_matter_of_fact熱意がある事実に即した"This changes everything!""Here are the results."

ユーザーが迷っている場合のデフォルト値:[0.6, 0.5, 0.3, 0.5](やや真面目、フォーマルさは中間、礼儀正しい、熱意は中間)。

ステップ 3:執筆ルール

まず語彙レベルを選んでもらい、それに合った読みやすさのレベルを自動で提案します(ユーザーは変更できます)。

設定尋ねる内容デフォルト
語彙レベルコンシューマー向け、プロフェッショナル向け、または技術者向けプロフェッショナル向け
読みやすさのレベル語彙レベルに基づき自動入力(下表を参照)Grade 8-10
平均文長1 文あたりの平均単語数18
文長の標準偏差文の長さのばらつき6
短縮形の使用頻度0.0(使用しない)から 1.0(常に使用する)0.6
受動態の最大割合受動態の上限割合10%
ステップ 4:すべきこと、避けるべきこと(CMI Brand Voice Chart)

各リストについて 3~5 項目を尋ねます。トーンの次元に基づいた例を提示します。

「すべきこと」の例:「主張の裏付けにデータを使う」、「読者に you と呼びかける」、 「質問または統計データで書き始める」

「避けるべきこと」の例:「専門用語を定義せずに使わない」、「There is/There are で文を始めない」、「game-changer のような決まり文句を使わない」

ステップ 5:要約ラベルの設定

ブログ記事の要約/要点ボックスに使用するラベルです。次の中から選んでもらいます。

  • Key Takeaways(デフォルト)
  • The Bottom Line
  • What You'll Learn
  • TL;DR
  • Quick Summary
  • In a Nutshell
  • カスタムラベル
ステップ 6:文体のサンプル(任意)

希望する文体を示す既存コンテンツの URL が 1~3 件あるか尋ねます。URL は今後参照できるようペルソナに保存します。URL が提供された場合は、それぞれを読み、次の項目を抽出します。

  • 平均文長
  • 短縮形の使用頻度
  • トーンの次元の推定値
  • 語彙レベル

抽出した値とペルソナの設定を比較し、不一致があれば示します。

保存

完成したペルソナを JSON として次の場所に書き込みます。 skills/blog/references/personas/<name>.json

ファイル名には kebab-case を使用します(例:acme-saas.json)。

ペルソナプロフィールのスキーマ

{
  "name": "acme-saas",
  "description": "Professional SaaS voice for B2B marketing content",
  "brand": "Acme Corp",
  "industry": "SaaS",
  "audience": "Marketing managers at mid-market companies",
  "mission": "Help marketing teams automate reporting",
  "tone_dimensions": {
    "funny_serious": 0.7,
    "formal_casual": 0.4,
    "respectful_irreverent": 0.2,
    "enthusiastic_matter_of_fact": 0.5
  },
  "readability": {
    "flesch_grade_min": 8,
    "flesch_grade_max": 10,
    "flesch_ease_min": 50,
    "flesch_ease_max": 60
  },
  "style": {
    "sentence_length_mean": 18,
    "sentence_length_std": 6,
    "contraction_frequency": 0.6,
    "passive_voice_max_pct": 10,
    "vocabulary_tier": "professional",
    "summary_label": "Key Takeaways"
  },
  "voice_samples": [],
  "do": [
    "Use data to back every major claim",
    "Address the reader directly as you",
    "Lead sections with actionable insight"
  ],
  "dont": [
    "Don't use buzzwords without context",
    "Don't write sentences longer than 30 words",
    "Don't open with We at Acme"
  ]
}

語彙レベル別の可読性基準

レベルFlesch グレードFlesch 読みやすさ主な用途
一般向け6-860-80健康、ライフスタイル、個人金融
プロフェッショナル8-1050-60B2B、マーケティング、マネジメント
技術向け10-1230-50エンジニアリング、医療、法律

ユーザーがレベルを選ぶと、可読性の各フィールドに値を自動入力します。標準的でない組み合わせ(たとえば、解説コンテンツ向けに、一般向けの可読性で専門用語を使う場合)にしたい場合は、値を上書きできるようにします。

blog-write および blog-rewrite との連携

ペルソナが有効な場合(/blog persona use <name> 経由)、ライターエージェントはペルソナの JSON を読み込み、生成中にこれらの制約を適用します。

  1. 生成前 - ペルソナを読み込み、トーンの各要素とスタイルルールを blog-writer エージェントのシステムプロンプトに追加します。
  2. 生成中 - ライターは「すること/しないこと」のルールに従い、文の長さの平均と標準偏差を目標にし、指定された頻度で短縮形を使います。
  3. 生成後の検証 - 出力がペルソナの制約に合っているか確認します:
    • 文の長さの分布が目標平均の標準偏差 1 以内であること
    • 可読性スコアが指定されたグレードの範囲内であること
    • 受動態の割合が上限未満であること
    • パターンマッチングで「しないこと」のルール違反が見つからないこと

検証に失敗した場合は、具体的な違反を示し、修正案を提示します。

List コマンド

skills/blog/references/personas/*.json を glob で検索し、テーブルを表示します:

ペルソナ業界対象読者語彙
acme-saasSaaSマーケティングマネージャープロフェッショナル

ペルソナが存在しない場合は、作成するようユーザーに促します。

Show コマンド

指定されたペルソナの JSON を読み込み、トーンの各要素、スタイルルール、「すること/しないこと」のリストをすべて含む、整形された概要を表示します。

Use コマンド

ペルソナの JSON を読み込み、有効化を確認します。適用される主な制約の概要を表示します。ペルソナは現在の会話セッション中、有効なままになります。 blog-write および blog-rewrite は、コンテンツを生成する前に有効なペルソナを確認します。

エラー処理

  • 無効なトーン値:ユーザーが 0.0~1.0 の範囲外の値を指定した場合、最も近い有効な境界値に丸めて警告します
  • アクセスできない音声サンプル:voice_samples 内の URL がエラーを返した場合はスキップし、サンプルを利用できなかったことをプロフィールに記録します
  • ペルソナディレクトリが空:保存済みのペルソナがない状態で list または show を実行した場合は、まずペルソナを作成するようユーザーに促します
  • 名前の競合:作成時にペルソナ名がすでに存在する場合は、上書きするか別の名前を選ぶかを尋ねます
  • 不正な JSON:ペルソナファイルが破損している場合はエラーを報告し、インタビューから再作成することを提案します

コメント