A reaction panel that runs before you spend. 510 specific Americans react to your ad. You ship the version they wouldn't roll their eyes at.
Built by PeachStateAI (Newnan, GA). Open repo, transparent costs, ~$0.40 per run on the full panel.
The people. Mike Donovan the 34-year-old plumber from Toledo. Curtis Reed the Wisconsin electrician with the lake house. Tasha Darnell the Memphis ER nurse. Each one a particular human with a job, a region, a politics, a religion, a voice — built from U.S. Census-matched profiles across occupation, region, age, race, religion, and political lean, then hand-written and reviewed against the demographic targets. Browse them in personas/americans/ — one Markdown file per person, readable directly on GitHub.
git clone https://github.com/PeachStateAI/Coldread
cd Coldread && bun install && bun run build
export ANTHROPIC_API_KEY=sk-ant-... # your key, your account — your asset never touches our servers
./dist/coldread run my-ad.txt --panel americansIn ~5 minutes you get back: how each of 510 specific Americans reacted, who scored it highest, who hated it, the recurring objections, and the edits that close them.
A real example — one ad copy, one panel, one terminal:
=== reaction summary: "30-day free trial — no credit card needed" ===
avg score: 6.8/10 • would act: 52%
sentiment: love 8% like 51% neutral 26% dislike 13% hate 2%
TOP RESPONDERS
9/10 Curtis Reed (electrician, Green Bay WI)
"No card up front means I'll actually try it. That's the whole game."
8/10 Tasha Darnell (ER nurse, Memphis TN)
"Free trial without a card is rare enough I'd tell my sister."
BOTTOM RESPONDERS
2/10 Walt Finch (retiree, rural PA)
"If it's free, what are they really after? I've been around the block."
3/10 Trinity Bell (stylist, Baltimore MD)
"Trial of what? Tell me what it does before you tell me it's free."
OBJECTIONS
- 'Free trial' reads as low-trust to ~30% of the panel; anchor it to a number or a person
- No mention of what happens on day 31 — six panelists asked the same question
- Working-class panelists want one sentence on what the product does before the offer
RECOMMENDATIONS
1. Lead with the outcome, not the offer ('Cut your monthly invoicing time in half — 30 days free, no card')
2. Add a one-line guarantee for day 31 ('cancel in one click, no email, no call')
3. Move the offer below the value prop, not above it
Plus the same data on disk as CSV, JSON, and Markdown for anything downstream.
You hand it a marketing asset and a panel. It returns a structured reaction.
americanspanel (the default) — 510 hand-written Americans, bundled in the binary, each a particular person with a job, a region, a politics, a religion, a voice. Built from U.S. Census-matched profiles across occupation, region, age, race, religion, and political lean, then written one-by-one and reviewed against the demographic targets — open the folder and read them. Every person is one Markdown file inpersonas/americans/.- Audience mode — describe an audience in one sentence, get 100 auto-generated archetypes × 10 variant personas = 1,000 reactions. Use when you want population-level breadth instead of named individuals.
- Hybrid — Americans panel + auto-generated archetypes in one run. Specific people for the qualitative read, broad archetypes for the statistical shape.
- Custom panels (advanced) — yes, you can drop your own JSON or YAML in
.coldread/panels/if you want to use your customer list, ICP, or kids' soccer parents. But most users will never need to. The bundled panels are the product.
The output is a structured run on disk. CSV for spreadsheets, Markdown for docs, JSON for downstream tools. Plus a synthesized verdict: top-line, themes, objections, ranked edits.
Ships as a compiled CLI binary, an MCP server, and a Next.js web UI — pick whichever fits your loop. All three run locally and call Anthropic with your key; we never see your asset, your reactions, or your bill.
| Surface | When |
|---|---|
CLI (coldread) |
scripts, CI, fast local feedback while you write copy |
MCP server (coldread-mcp) |
inside Claude Code, Codex, Claude Desktop, or any MCP-speaking agent — iterate on copy and re-run mid-conversation |
Web UI (bun run web) |
local browser, paste asset, pick panel, hit run, export the report |
Per-client install — Claude Code, Codex, Claude Desktop, generic stdio → docs/INSTALL.md
Approximate, current Anthropic pricing (Haiku 4.5 inner loop with prompt caching, Sonnet 4.6 archetype gen + judge):
| Run | Reactions | Time | Cost |
|---|---|---|---|
| Quick check (10-person panel) | 10 | ~20s | ~$0.05 |
| Full Americans panel | 510 | ~5m | ~$2.00 |
| Audience 100 × 10 (default) | 1,000 | ~3m | ~$1.50 |
| Hybrid Americans + audience | 1,510 | ~8m | ~$3.50 |
The coldread preview command shows estimated cost and time before you spend a cent.
./dist/coldread preview my-ad.txt --panel americans
# → 510 reactions, ~5m, ~$2.00Each of the 510 Americans is one readable Markdown file in personas/americans/. You can click any name on GitHub and read who they are before you run anything.
A taste:
| Person | Role | Region |
|---|---|---|
| Mike Donovan | plumber | Toledo, OH |
| Curtis Reed | electrician | Green Bay, WI |
| Tasha Darnell | ER nurse | Memphis, TN |
| Officer Walsh | police officer | Cincinnati, OH |
| Dr. Priya Shah | cardiothoracic surgeon | Boston, MA |
| Amos Ng | public defender | San Francisco, CA |
| Trinity Bell | hair stylist | Baltimore, MD |
| Brian Tate | shift foreman | southern MI |
| Caleb Walsh | row-crop farmer | central IA |
| Nia Blackelk | tribal court clerk | Pine Ridge, SD |
| …104 more in the folder |
Or from the CLI:
coldread panel show americans# the fast path
coldread run my-ad.txt --panel americans
# preview the cost first
coldread preview my-ad.txt --panel americans
# audience mode — auto-generate from a description
coldread run my-ad.txt --audience "early-stage B2B founders evaluating dev tools"
# hybrid — your specific people + breadth
coldread run my-ad.txt --panel americans --audience "broader US adults"
# inspect a past run, export it
coldread show <run-id>
coldread export <run-id> --format md # or json, csvOnce the binary is registered with your agent (per-client setup → docs/INSTALL.md), the agent gets these tools:
| Tool | What it does |
|---|---|
run_simulation |
Run a panel/audience/hybrid simulation against an asset |
preview_simulation_cost |
Estimate cost + time before spending |
define_panel |
Save a panel of specific people for reuse |
list_panels / get_panel |
Inspect saved panels |
list_runs / get_run |
Browse past runs |
sample_reactions |
Drill into reactions, filter by person/sentiment/archetype |
list_seed_archetypes |
See the calibration library |
Example prompt to your agent:
Run Coldread against this email using the
americanspanel. Pull the three angriest quotes and tell me what they had in common.
npm install
npm run dev
# → http://localhost:3000A Next.js app: paste your Anthropic API key — it lives in your browser's localStorage, rides along with each simulate request, and is never persisted server-side. Your asset goes from your browser to Anthropic and the reaction comes back; we don't store, log, or see any of it. Pick a panel, watch the cost preview update live, hit run, export the report as Markdown / JSON / CSV.
To deploy the same UI to Vercel see docs/DEPLOY.md. Two commands and you're live.
┌──────────────────────────────────────────────┐
│ agent (Claude Code / Codex / Hermes / …) │
└────────────────────┬─────────────────────────┘
│ MCP (stdio)
┌─────────────▼─────────────┐
browser ─── HTTP ─── │ dist/ │ ── Anthropic API
CLI ─── direct ──│ audience / coldread-mcp │
└─────────────┬─────────────┘
│
┌────────────────────▼─────────────────────────┐
│ src/core/ │
│ ├─ archetype-gen (Sonnet 4.6) │
│ ├─ person-react (Haiku 4.5) │
│ ├─ archetype-react (Haiku 4.5, batched/cached)│
│ ├─ judge (Sonnet 4.6) │
│ └─ panel.ts (load JSON/YAML) │
└──────────────────────────────────────────────┘
Two-tier persona model means a 100×10 = 1,000-reaction audience-mode run is ~100 API calls, not 1,000. Panel mode batches 8 members per call — a 510-person Americans run is ~64 calls. Prompt caching keeps the asset cheap across the inner loop.
Coldread/
├─ README.md you are here
├─ docs/
│ ├─ INSTALL.md multi-client MCP setup
│ └─ DEPLOY.md Vercel deploy guide
├─ personas/ ← THE PEOPLE (one .md file per person, browseable on GitHub)
│ ├─ README.md
│ ├─ build.mjs compiles .md files → embedded JSON at build time
│ └─ americans/ 510-person default panel
│ ├─ README.md table of contents linking to every person
│ ├─ panel.json panel metadata
│ ├─ mike-donovan.md one person, one file
│ ├─ curtis-reed.md
│ └─ … (112 more)
├─ app/ Next.js App Router (web UI)
│ ├─ page.tsx the main UI
│ ├─ layout.tsx
│ ├─ globals.css peach palette, Fraunces + Inter + JetBrains Mono
│ └─ api/{panels,panel,preview,simulate}/route.ts
├─ src/ engine
│ ├─ cli/index.ts coldread CLI entrypoint
│ ├─ mcp/index.ts coldread-mcp entrypoint
│ └─ core/ simulate, panel, judge, storage
├─ next.config.ts
├─ vercel.json maxDuration: 300 on /api/simulate
├─ package.json
└─ .claude/skills/marketing-sim/ optional Claude Code slash-command skill
An Applied AI Firm based in Newnan, Georgia. We diagnose where money is leaking in mid-market commercial businesses, build the AI-native systems that stop the leaks, and operate them until they compound.
Coldread is one such system. We use it on our clients' marketing every week. The repo is open. The panel is open. The cost model is transparent. The bar is: it should be useful before you finish your coffee.
peachstateai.com · hello@peachstateai.com
- Audience packs (one-click presets like "Tech professionals", "College students", etc. above the audience input) were proposed by @sebasfresco. Thanks Sebastian.
MIT