synthetic-session-generator/SKILL.md
This skill should be used to generate realistic, persona-consistent synthetic coaching and therapy session transcripts for evals, demos, and training data. It produces fictional but believable coach/client (or therapist/client) dialogue grounded in a chosen modality (ICF/GROW coaching, CBT, IFS parts work, ACT/motivational interviewing) and exports to Fathom/Granola transcript style, plain dialogue, structured JSON, or Obsidian markdown. Triggers on requests like "generate a synthetic coaching session", "make fake therapy transcripts for evals", "create demo session transcripts", "synthetic CBT dialogue", "persona-consistent coaching transcript", "test data for my session summarizer", or "mock coaching call".
npx skillsauth add glebis/claude-skills synthetic-session-generatorInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Generate fictional but believable coaching/therapy session transcripts that read like real recorded sessions, while remaining clearly synthetic. Outputs feed three jobs: eval datasets (with ground-truth labels to benchmark summarizers and analyzers), product demos (realistic sessions without exposing real client data), and training/prompt examples (few-shot material for a coaching or therapy assistant).
Realism comes from two disciplines: persona consistency (a client speaks the same way, carries the same history and presenting issues across a session arc) and modality fidelity (the practitioner uses the techniques, question forms, and pacing of the chosen framework). Every output is watermarked as synthetic so it can never be mistaken for a real clinical record.
Use when a user asks for fake/synthetic/mock/demo coaching or therapy transcripts, eval or test data
for session-analysis tools (e.g. the coaching-session-summarizer), few-shot dialogue examples, or
persona-consistent session series. Do not use to analyze or summarize a real transcript — that
is the job of coaching-session-summarizer or transcript-analyzer.
When the user wants to configure the skill ("setup", "set my defaults", "always use Russian / IFS / 50-minute sessions"), run setup mode. Offer the three choices via AskUserQuestion, then persist them:
en, ru, de, es, fr, pt, it, nl).icf-grow, cbt, ifs, act-mi).python3 scripts/setup_config.py --language ru --modality cbt --duration 50 --show
python3 scripts/setup_config.py --show # view current defaults
This writes config.json in the skill directory. Later scaffold_session.py runs inherit these
defaults, so the user only specifies what differs (e.g. persona and session position). Per-run flags
always override the saved config.
Honour the setup-mode defaults (Step 0); only ask for parameters the user hasn't already fixed.
Collect (or infer sensible defaults for) these parameters. Ask only for what materially changes the output; default the rest.
icf-grow, cbt, ifs, or act-mi. See references/modalities.md for the
technique cheat-sheet, signature moves, and vocabulary of each.references/personas.md, or generate a new one and
persist it back into that file so a session series stays consistent. A persona = name,
demographics, presenting issue, history, speech register, defenses/resistances, goals.fathom, plain, json, or markdown (see Step 3). Markdown is always produced.--language. Author all dialogue, persona
voice, and the watermark-adjacent text in that language; keep eval tag keys in English.--duration <minutes> (preferred — maps to a turn budget) or the coarse
--length (short ~15 / standard ~30 / long ~50+).Run the scaffolding script to turn the spec into a structured skeleton (phases, beat list, turn budget, JSON shell, and the synthetic watermark):
python3 scripts/scaffold_session.py --modality cbt --persona maya --position mid-arc \
--length standard --format json --out /tmp/session_skeleton.json
Then write the actual dialogue by hand (model-authored), filling each beat. The script provides
structure and guardrails; Claude provides the natural, non-templated language. Key realism rules
(full list in references/realism_guide.md):
Author once in the JSON turn structure, then convert. Always render the markdown format (it is the canonical, human-readable artifact); add any other formats the user asked for.
# 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
coaching-session-summarizer, transcript-analyzer).Coach: / Client: turn-taking markdown.speaker, timestamp, text, and eval tags
(technique, emotion, phase); for evals, also the ground_truth block.Timestamps. Do not hand-invent timestamps. Pass --auto-timestamps so the converter emulates
them from each turn's word count (~150 wpm + a short inter-turn gap), keeping timing internally
consistent. Tune pace with --wpm. See assets/templates/ for a reference example of each format.
When the user wants a card summarizing the case (for demos, persona bibles, or eval context), build it from the same session JSON and pair it with a generated portrait:
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 to emit the card scaffold (modality-aware formulation skeleton + themes/goals
pulled from ground_truth + a watermark + a ready portrait prompt).<!-- FILL: ... --> blocks with the clinical formulation (model-authored).gpt-image-2 skill using the prompt from --print-prompt.
Keep it illustrative, not photoreal — a stylized image cannot be mistaken for a photo of a
real person. Then re-run with --image <path> (or edit the card) to embed it.tufte-reportWhen the user wants a shareable HTML page of the case card (portrait + conceptualization), hand
the filled card to the tufte-report skill, which produces a standalone Tufte-style HTML file.
tufte-report skill with the card's conceptualization as the narrative content and the
portrait as a figure. Map card sections to the report: Snapshot/Presenting issue → intro
narrative; Formulation → the main 2-column narrative+data section; Working themes and
Goals & experiments → a status/dashboard panel; Emotional arc → a sparkline or labelled
sequence. Pass the portrait path so it renders as the hero figure..html.The portrait must remain the illustrative, non-photoreal image from Step 4 — the HTML page is for demos and persona bibles, never presented as a real client record.
Always apply the synthetic watermark — this is non-negotiable. The scaffold script injects it; verify it survived format conversion. Each output must carry, in a location appropriate to its format (frontmatter, JSON metadata, or a header/footer comment):
⚠️ SYNTHETIC — AI-generated fictional session. Not a real person, not clinical advice.
Confirm the save location before writing. Ask the user where to save and state the default —
the current working directory (.). Only fall back to /tmp/ for throwaway intermediate
scaffolds the user will not keep. Use clear filenames (e.g. <persona>_<modality>_<position>.md).
For eval batches, write one file per session into the chosen directory plus a manifest listing
personas, modalities, and label coverage.
session-anonymizer).coaching-session-summarizer and anonymization to session-anonymizer.development
--- name: agency-docs-updater description: End-to-end pipeline for publishing Claude Code lab meetings. Accepts optional args: date (YYYYMMDD, "yesterday", "today") and lab number (e.g. "04"). Examples: "yesterday 04", "20260420 05", "04" (today, lab 04), "" (today, auto-detect lab). --- # Agency Docs Updater Execute ALL steps automatically in sequence. Only pause if a step fails and cannot be recovered. Read `references/learnings.md` before starting for known pitfalls. **Configuration**: pat
tools
This skill should be used when applying proper typography to prose text or files in Russian, English, German, or French — smart quotes per locale («ёлочки», “curly”, „Gänsefüßchen“, « guillemets »), correct dashes (тире, em/en dash, Gedankenstrich, tiret), non-breaking spaces, ranges, ellipsis, and French espaces insécables before ! ? ; :. Fully deterministic via a pinned typograf-based CLI; never apply these rules by hand. Triggers on "типографика", "typograf", "оттипографь", "smart quotes", "fix typography", "неразрывные пробелы".
development
This skill should be used when inspecting or applying advanced OpenType features of a font (woff2/otf/ttf) — ligatures, stylistic sets (ss01–ss20), character variants (cvXX), texture healing, slashed zero, tabular/oldstyle figures, fractions, small caps, case-sensitive forms — and generating the CSS to enable them. Interviews the user via cenno to pick features. Triggers on "OpenType features", "font features", "stylistic sets", "ligatures", "texture healing", "tabular figures", "what can this font do".
tools
--- name: pre-session-portrait description: Build a compressed, visualizable "portrait" of a consulting/coaching client before a session, so the paid hour is spent solving, not scoping. Runs a 7-lens JTBD-inspired interview (where / how / what / problem / ideal / tension / jobs-to-be-done) that takes rich open answers in and compresses them to an 11-field YAML portrait out. Delivers three ways: raw paste-into-a-clean-chat prompt, a secret GitHub gist link, or a Codex CLI one-liner. Use when prep