BF

bradautomates/focus-group

Developer tools
28 stars Quality 44 Trend 33

Clone your customers from real sales-call transcripts and run them as a standing focus group — /focus-group Agent Skill for Claude Code, Codex, Cursor, and more

Overview

Give Claude a standing focus group cloned from your own sales calls. Point it at all your sales call transcripts once. It discovers the 3-5 customer archetypes hiding in them, builds each into a grounded composite persona, then convenes them as a standing focus group you can pitch anything to — an offer, a hook, a price, a landing page, an email — before it goes live. - — "Juno buys at $3k, Dana stalls and asks who else is on the call." - — which seats scroll past, which lean in, with receipts. - — objections attributed to the archetype that raised them on real calls. - — "you say you sell to ops leads, but every closed deal was a founder." The transcripts talk back. Claude indexes every transcript, extracts decision behavior per call (their words, their objections, their price reactions), and clusters the real people into archetypes by how they buy — not demographics.

README

/focus-group

Give Claude a standing focus group cloned from your own sales calls.

Clone your customers with Claude. Point it at all your sales call transcripts once. It discovers the 3-5 customer archetypes hiding in them, builds each into a grounded composite persona, then convenes them as a standing focus group you can pitch anything to — an offer, a hook, a price, a landing page, an email — before it goes live.

/focus-group                              # first run: analyze transcripts + confirm panel
/focus-group "$3k tier for the workshop"  # pitch the panel anything
/focus-group rebuild                      # ingest new transcripts incrementally

What people actually use it for

  • Price tests — “Juno buys at $3k, Dana stalls and asks who else is on the call.”
  • Hook and headline reads — which seats scroll past, which lean in, with receipts.
  • Landing page and email teardowns — objections attributed to the archetype that raised them on real calls.
  • ICP correction — “you say you sell to ops leads, but every closed deal was a founder.” The transcripts talk back.

How it works

Setup (once): Claude indexes every transcript, extracts decision behavior per call (their words, their objections, their price reactions), and clusters the real people into archetypes by how they buy — not demographics. Then it shows you what it found — “here are your archetypes, and here’s who your customer appears to be” — you rename, merge, or cut seats and correct the ICP. Your corrections plus the closed/won patterns become business.md, and each confirmed archetype becomes a named fictional composite with a dossier: identity, buying journey, objection map, style guide, a 20-30 line quote bank, and a coverage map of what it can and can’t speak to.

Run (every time): a moderated panel, not an LLM council.

  1. Round 1 — one isolated subagent per seat, loaded with only its dossier and prior positions. Each emits a pre-verbal signal (attention / valence / arousal) before any words; clones can shrug (“I’d have scrolled past this”) or flag NO-DATA.
  2. Moderator pass — extracts the 2-3 sharpest splits. Adds zero opinions.
  3. Round 2 — only the contested seats, shown just the opposing take, with an anti-convergence instruction. Position flips are recorded as high-value events.
  4. Readout — reports the distribution, never resolves it: unanimous points, splits with attribution, top objections with receipts, what would flip each holdout.
  5. Live room — stay in and grill any clone (“Dana, what if it’s half price?”).

Every objection or enthusiasm must trace to dossier evidence or be tagged as extrapolation. Disagreement is the product — nothing ranks, synthesizes a winner, or manufactures consensus.

Composites, never real people

Panel seats are fictional blends clustered from many calls, never a named real client. Every seat needs 3+ real people behind it — enforced structurally by the clustering step. If your library only supports 2 clean archetypes, you get 2; it never pads with a thin one.

Memory

Everything lives in a folder you own:

~/Documents/FocusGroup/
  business.md                    # ICP + business context; converges over time
  panel/
    juno/dossier.md              # modules + quote bank + coverage map
    juno/positions.md            # appended every session
  sessions/
    2026-07-06-pricing-page.md   # stimulus, reactions, splits, verdict
  inventory.json                 # transcript index + cluster assignments

Sessions are flat dated markdown — “what has the panel said about pricing” is a grep, not a rebuild. Each seat’s positions.md loads into the clone next session, so verdicts accumulate instead of contradicting.

Install

Claude Code

/plugin marketplace add bradautomates/focus-group
/plugin install focus-group@focus-group

Codex, Cursor, and other Agent Skills hosts

npx skills add bradautomates/focus-group -g

claude.ai (web)

Upload dist/focus-group.skill from the latest release via the claude.ai skill UI (or build it locally: bash skills/focus-group/scripts/build-skill.sh).

Manual (developer)

git clone https://github.com/bradautomates/focus-group
ln -s "$(pwd)/focus-group/skills/focus-group" ~/.claude/skills/focus-group

Setup

Run /focus-group once. It will:

  1. Ask where your transcripts live — a local folder of downloaded transcripts (recommended, token-free) or your meeting tool’s MCP server (Fireflies, Granola, Google Drive). It tells you how to download them from your tool, or walks you through connecting the MCP server and pulls with a capped, cached, one-time cost.
  2. Index, extract, and cluster the transcript library into archetypes.
  3. Show you what it found — “here are your archetypes, and here’s who your customer appears to be” — you rename, merge, or cut seats and correct the ICP.
  4. Write business.md and the confirmed dossiers, then mark setup complete.

After that, preflight is silent: setup.py --check exits 0 with no output and the panel just runs. Stale dossiers (>60 days) and pending transcripts warn; they never block.

Transcript sources

  • Local folder (recommended) — download your transcripts and point TRANSCRIPTS_DIR in ~/.config/focus-group/.env at the folder. This is by far the most token-efficient path: file reads are free, while every document pulled through an MCP tool call passes through model context. From Google Drive: right-click “Meet Recordings” → Download, unzip, done. Fireflies/Otter/Zoom all have transcript exports. Any text format works (.txt, .md, .docx-exported text, .vtt, .srt, .json).
  • MCP — connect your meeting tool’s MCP server instead: Fireflies (https://api.fireflies.ai/mcp), Granola (claude.ai connector), or Google Drive (Anthropic’s connector or any Drive MCP server). The wizard records TRANSCRIPT_MCP= and pulls calls through the connected tools under strict token rules (newest-50 cap, one doc per call, permanent local cache under ~/Documents/FocusGroup/transcripts/). You connect and authenticate the server yourself (Claude Code: claude mcp add; claude.ai/Desktop: Settings → Connectors; other hosts: their MCP config); the skill never handles your credentials.

The .env is never overwritten — setup only appends missing keys.

Structure

focus-group/
  .claude-plugin/
    plugin.json                  # Claude Code plugin manifest
    marketplace.json             # Claude Code marketplace manifest
  .codex-plugin/plugin.json      # Codex/agents manifest
  .github/workflows/             # CI (tests) + tagged release (.skill build)
  hooks/
    hooks.json                   # SessionStart status line (Claude Code only)
    scripts/check-setup.sh
  skills/focus-group/
    SKILL.md                     # the runtime: setup wizard + panel protocol
    scripts/setup.py             # preflight (--check / --json) + builder
    scripts/build-skill.sh       # claude.ai bundle builder (dev-only)
  tests/
    test_setup.py
  dev-sync.sh                    # mirror working tree into installed plugin cache

Develop

# Run the test suite (stdlib + pytest; no network):
python3 -m venv .venv && .venv/bin/pip install pytest
.venv/bin/python -m pytest tests/ -q

# Build the claude.ai upload bundle:
bash skills/focus-group/scripts/build-skill.sh   # → dist/focus-group.skill

# Dev-sync local edits into the installed Claude Code plugin:
./dev-sync.sh          # --dry-run to preview

Releasing: update CHANGELOG.md, keep the version in sync across skills/focus-group/SKILL.md, .claude-plugin/plugin.json, and .codex-plugin/plugin.json, then tag vX.Y.Z and push — the release workflow runs tests, builds the .skill, and attaches it to the GitHub release.

Open source

MIT. Personas are built from your transcripts on your machine; nothing is uploaded anywhere.

Built by Brad Bonanno — I make content about building with AI on YouTube (@bradbonanno), and build AI operating systems for businesses at Solaris Automation. If /focus-group saves you from guessing what your customers think, come say hi on the channel.

Star History

github.com/bradautomates/focus-group · @bradbonanno · Solaris Automation · LICENSE

View this README on GitHub

Recommended Tools

Try a different keyword or remove a filter.

Install

npx skillfish add bradautomates/focus-group