synthetic-session-generator について
Synthetic Session Generator は、評価、デモ、学習例向けに、架空のコーチングやセラピーのセッション記録を生成するスキルです。人物設定の一貫性と手法に沿った対話を保ち、すべての出力に合成コンテンツの表示を付けます。
主な機能
- 01架空のコーチング・セラピー記録の生成
- 02複数セッションでの人物設定の維持
- 03指定されたコーチング・セラピー手法の適用
- 04Markdown、JSON、プレーン、Fathom 形式で出力
- 05合成表示と評価ラベルの付与
活用シーン
- 01セッション分析ツール向けのラベル付き評価データ作成
- 02製品デモ用の架空セッション記録の準備
- 03人物設定に一貫性のある少数例対話の作成
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ glebis/ claude-skills --skill synthetic-session-generatorインストール後、Claude Code で/synthetic-session-generatorを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
README.mdassets/templates/example_fathom.txtexample_markdown.mdexample_plain.mdexample_session.jsonreferences/modalities.mdpersonas.mdrealism_guide.mdscripts/_common.pyconvert_format.pymake_card.pyscaffold_session.pysetup_config.py詳細
合成セッションジェネレーター
目的
実際に録音されたセッションのように読める、架空でありながら信憑性のあるコーチング/セラピーセッションのトランスクリプトを生成します。ただし、明らかに合成データであることは保ちます。出力は、主に3つの用途に使われます。評価データセット(要約ツールや分析ツールをベンチマークするための正解ラベル付きデータ)、製品デモ(実際のクライアントデータを公開せずに使える、リアルなセッション)、トレーニング/プロンプトの例(コーチングまたはセラピーのアシスタント向けの少数ショット素材)です。
リアリティは2つの要素から生まれます。ペルソナの一貫性(クライアントがセッションの流れを通じて同じ話し方をし、同じ経歴や抱えている課題を持つこと)と、モダリティの忠実性(実践者が選択されたフレームワークの手法、質問形式、進行ペースを用いること)です。実際の臨床記録と誤認されないよう、すべての出力には合成データであることを示す透かしが付与されます。
使用する場面
ユーザーが架空/合成/模擬/デモ用のコーチングまたはセラピーのトランスクリプト、セッション分析ツール(例:coaching-session-summarizer)向けの評価データやテストデータ、少数ショットの対話例、またはペルソナの一貫性を保ったセッションシリーズを求めている場合に使用します。実際のトランスクリプトの分析や要約には使用しないでください。それはcoaching-session-summarizerまたはtranscript-analyzerの役割です。
ワークフロー
ステップ0 — セットアップモード(デフォルトを設定)
ユーザーがスキルの設定を求めている場合(「セットアップ」「デフォルトを設定して」「常にロシア語/IFS/50分のセッションを使って」など)、セットアップモードを実行します。AskUserQuestionを使って3つの選択肢を提示し、設定を保存します。
- 言語 — トランスクリプトの出力言語(
en、ru、de、es、fr、pt、it、nl)。 - モダリティ — デフォルトのフレームワーク(
icf-grow、cbt、ifs、act-mi)。 - セッション時間 — 分単位(例:25/50/80)。ターン数の目安(約0.6ターン/分)に換算されます。
python3 scripts/setup_config.py --language ru --modality cbt --duration 50 --show
python3 scripts/setup_config.py --show # view current defaults
これにより、スキルディレクトリにconfig.jsonが書き込まれます。以降に実行するscaffold_session.pyはこれらのデフォルトを引き継ぐため、ユーザーは異なる項目(例:ペルソナやセッションの位置づけ)だけを指定します。実行ごとのフラグは常に保存済みの設定より優先されます。
ステップ1 — 生成仕様を集める
セットアップモードのデフォルト(ステップ0)に従い、ユーザーがまだ決めていないパラメーターだけを尋ねます。
次のパラメーターを集めるか、妥当なデフォルトを推定します。出力に実質的な影響を与える項目だけを尋ね、それ以外はデフォルトにします。
- 用途:評価/デモ/トレーニング(正解ラベルを出力するかどうかを決めます)。
- モダリティ:
icf-grow、cbt、ifs、act-miのいずれかです。それぞれの手法の要点、代表的な技法、用語についてはreferences/modalities.mdを参照してください。 - ペルソナ:
references/personas.mdから既存のペルソナを選ぶか、新しく作成してそのファイルに保存し、セッションシリーズを通じて一貫性を保ちます。ペルソナは、名前、属性、抱えている課題、経歴、話し方、抵抗や防衛、目標で構成されます。 - セッションの位置づけ:初回/初期/中盤/突破口/関係の亀裂と修復/終結。これにより、感情的なトーンや過去の内容への言及が決まります。
- 形式:
fathom、plain、json、markdownのいずれかです(ステップ3を参照)。Markdownは常に生成されます。 - 言語:セットアップ設定のデフォルトを使います。
--languageを指定します。対話、ペルソナの話し方、透かしに付随するテキストはすべてその言語で作成し、評価タグのキーは英語のままにします。 - 時間/長さ:
--duration <minutes>(推奨。ターン数の目安に換算されます)または大まかな--length(短め:約15分/標準:約30分/長め:約50分以上)を指定します。
ステップ 2 — セッションの骨組みを作成してから、対話を書く
スキャフォールディングスクリプトを実行し、仕様を構造化された骨組み(フェーズ、ビートリスト、ターン予算、JSON の枠組み、合成データの透かし)に変換します。
python3 scripts/scaffold_session.py --modality cbt --persona maya --position mid-arc \
--length standard --format json --out /tmp/session_skeleton.json
次に、各ビートを埋めながら、実際の対話を手作業で(モデルが作成して)書きます。スクリプトが構造とガードレールを提供し、Claude が自然でテンプレートに沿わない表現を提供します。リアリティを高めるための主なルール(全リストは references/realism_guide.md を参照):
- 事務的な確認やチェックインの雑談から始め、いきなり本題に入らないでください。
- クライアントに言いよどみ、ためらい、話の中断をさせ、少なくとも一度は抵抗や回避を示す場面を入れてください。現実のクライアントは、求められたタイミングで明快な気づきを語るわけではありません。
- 実践者は各モダリティに沿って進めます。CBT では思考記録とソクラテス式質問法、IFS ではパーツに関する言葉遣いと「そのパーツに対して、どのように感じますか?」、GROW では Goal→Reality→Options→Will、ACT/MI では価値観、脱フュージョン、変化に向けた発言を用います。意図的に折衷的な実践を描く場合を除き、モダリティを混在させないでください。
- ペルソナの話し方を一貫させます。語彙、文の長さ、繰り返し使う比喩を安定させてください。
- 最後に、要約、セッション間の課題や実験、次回の予定を含めます。
ステップ 3 — 形式をレンダリングする(必ず markdown を含める)
JSON のターン構造で一度作成し、その後変換します。必ず markdown 形式をレンダリングしてください(これが標準となる、人が読める成果物です)。ほかの形式は、ユーザーから求められたものを追加します。
# markdown is always produced:
python3 scripts/convert_format.py --in /tmp/session.json --to markdown --auto-timestamps --out session.md
# plus any requested extras:
python3 scripts/convert_format.py --in /tmp/session.json --to fathom --auto-timestamps --out session.txt
- markdown (必須) — トランスクリプトの上に YAML フロントマター(ペルソナ ID、モダリティ、セッションの位置、合成データのフラグ)を含む Obsidian ノートです。
- fathom — Fathom/Granola のエクスポート形式に合わせた、話者ラベルとタイムスタンプ付きの行です。既存のスキル(
coaching-session-summarizer、transcript-analyzer)にトランスクリプトをそのまま渡せます。 - plain —
Coach:/Client:のターンが交互に並ぶシンプルな markdown 形式です。 - json — 元データそのものです。
speaker、timestamp、text、評価タグ(technique、emotion、phase)を含むターンで構成されます。評価用にはground_truthブロックも含めます。
タイムスタンプ。 タイムスタンプを手作業で作らないでください。--auto-timestamps を渡し、コンバーターに各ターンの単語数(約 150 wpm +短いターン間隔)からタイムスタンプを生成させ、内部の時刻整合性を保ってください。ペースは --wpm で調整します。各形式の参考例は assets/templates/ を参照してください。
ステップ 4 — (任意)ポートレート付きケース概念化カード
ケースを要約したカード(デモ、ペルソナバイブル、評価コンテキスト用)が必要な場合は、同じセッション JSON から作成し、生成したポートレートと組み合わせます。
python3 scripts/make_card.py --in /tmp/session.json --out /tmp/card.md # scaffold
python3 scripts/make_card.py --in /tmp/session.json --print-prompt # portrait prompt
make_card.pyを実行し、カードの骨組み(モダリティに対応した定式化の枠組み、ground_truthから抽出したテーマと目標、透かし、ポートレート用プロンプト)を出力します。- `` ブロックに臨床的な定式化を記入します(モデルが作成)。
gpt-image-2スキルを使い、--print-promptのプロンプトからポートレートを生成します。写実的ではなく、イラスト調にしてください。様式化された画像であれば、実在の人物の写真と間違われることはありません。その後、--image <path>を指定して再実行するか、カードを編集して画像を埋め込みます。
ステップ 4b — (任意)tufte-report を使ってカードを HTML ページとしてレンダリングする
ユーザーがケースカード(ポートレート+概念化)の共有可能な HTML ページを希望する場合は、記入済みのカードを tufte-report スキルに渡します。独立した Tufte スタイルの HTML ファイルが生成されます。
- ポートレートを埋め込んだカードを作成して記入します(ステップ 4)。
- カードの概念化をナラティブコンテンツ、ポートレートを図として、
tufte-reportスキルを実行します。レポートには次のようにカードのセクションを割り当てます:Snapshot/Presenting issue → 導入のナラティブ、Formulation → ナラティブとデータからなるメインの 2 列セクション、Working themes と Goals & experiments → ステータス/ダッシュボードパネル、Emotional arc → スパークラインまたはラベル付きの推移。ポートレートがヒーロー画像としてレンダリングされるよう、ポートレートのパスを渡します。 - HTML 内で合成ウォーターマークを必ず表示したままにし、
.htmlを書き込む前に出力先パス(デフォルト:現在の作業ディレクトリ)を確認します。
ポートレートはステップ 4 で作成した、イラスト調の非写実的な画像のままにしてください。HTML ページはデモやペルソナバイブル用であり、実在のクライアントの記録として提示してはなりません。
ステップ 5 — ウォーターマークを付けて保存する
合成ウォーターマークは必ず適用してください。これは譲れない要件です。スキャフォールドスクリプトによって挿入されます。フォーマット変換後も維持されていることを確認してください。各出力には、形式に適した場所(フロントマター、JSON メタデータ、またはヘッダー/フッターのコメント)に、次の内容を含める必要があります。
⚠️ SYNTHETIC — AI-generated fictional session. Not a real person, not clinical advice.
書き込む前に保存先を確認してください。 保存先をユーザーに尋ね、デフォルトの 現在の作業ディレクトリ(.)を伝えます。ユーザーが保持しない一時的な中間スキャフォールドに限り、/tmp/ を代わりに使用してください。分かりやすいファイル名を使用します(例:<persona>_<modality>_<position>.md)。評価バッチの場合は、選択したディレクトリにセッションごとに 1 ファイルを書き込み、ペルソナ、モダリティ、ラベルの網羅状況を記載したマニフェストも作成します。
制限事項と制約
- 合成データのみ。 出力を実際のセッション、実在の人物、または臨床記録として提示してはなりません。ウォーターマークは必須であり、デモの場合も決して削除してはなりません(ユーザーが明示的に確認した場合に限り、任意のクリーンボディ版を使用できます。その場合もメタデータに出所情報を保持します)。
- 臨床的な助言ではありません。 生成される対話は説明用のフィクションです。実際のケアにおける治療技法、診断、助言の根拠として使用してはなりません。実際のプロトコルをそのまま再現したり、臨床的な妥当性を示唆したりしてはなりません。
- 実在する個人情報は含めないでください。 識別可能な実在の人物をもとにペルソナを作成したり、実際のトランスクリプトから詳細をコピーしたりしてはなりません。実際のトランスクリプトが文体の参考として提供された場合は、パターンのみを抽象化し、名前、具体的な情報、または逐語的な内容は使用しないでください(真の匿名化は
session-anonymizerに依頼します)。 - ポートレートはイラスト調に保ってください。 カードのポートレートは写実的な顔ではなく、スタイライズされたイラストとして生成してください。合成イラストが実在の人物の写真と誤認されることはありません。カードには独自の合成ウォーターマークが付いています。これを保持してください。
- 安全性に配慮が必要な内容。 危機、自傷、虐待、またはリスクのシナリオを描写できるのは、用途上明確に必要な場合(例:レッドチーム評価)に限ります。明確にフィクションとしてウォーターマークを付け、責任ある実践者の対応を描写してください。危害につながる具体的な実行方法を含めてはなりません。
- 対象範囲を守ってください。 このスキルは生成を行うものであり、実際のセッションを分析するものではありません。実際のトランスクリプトの要約は
coaching-session-summarizerに、匿名化はsession-anonymizerに依頼してください。