Skip to content

Navigation Menu

Sign in
Sign up

Latest commit

History

8 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

buyer-lens

See your product through your buyers' eyes — before you build or ship it. Point it at a website, landing page, or product idea; it identifies who the thing is sold to, builds attribute-conditioned buyer personas, runs a synthetic purchase-intent panel, and returns scored segments, verbatim objections, a workflow-coverage gap map, a competitive read, and prioritized fixes.

buyer-lens is a Claude Code / Agent Skill: a folder of instructions, references, and a deterministic scoring script that an agent loads on demand.

The research this is built on

The survey protocol implements semantic similarity rating (SSR) from:

Maier, B.F., Aslak, U., Fiaschi, L., Rismal, N., Fletcher, K., Luhmann, C.C., Dow, R., Pappas, K., Wiecki, T.V. — "LLMs Reproduce Human Purchase Intent via Semantic Similarity Elicitation of Likert Ratings", arXiv:2510.08338 (PyMC Labs ×ばつ Colgate-Palmolive).

What the paper measured, across 57 real consumer surveys (9,300 human respondents), and how buyer-lens applies it:

Paper finding What buyer-lens does
Asking an LLM for a 1–5 rating directly produces unrealistically narrow distributions — everything scores a confident 4 Personas react in free text only; ratings are derived afterward
Mapping free text to a probability distribution over the Likert scale via anchor statements recovers ~90% of human test–retest reliability (KS similarity > 0.85) Reactions are mapped to distributions against the anchor set in references/ssr-protocol.md; a script validates every distribution
Results replicate human panels only with persona conditioning; budget/income effects replicate best, age next, gender/region unreliably Personas are built from workflows, tool stacks, and buying behavior (references/persona-schema.md); respondents vary on budget pressure, tenure, size, incumbent satisfaction — never on demographic vibes
Relative concept ranking is the trustworthy output; absolute intent levels are not Reports rank segments and concept variants; caveats forbidding conversion-forecast readings are mandatory

One honest divergence: the paper computes embedding cosine similarity to the anchors; buyer-lens has the model judge semantic closeness to the same anchors directly (no embedding service in an agent session). Every report says so.

Two evaluation dimensions extend the paper, learned from real runs: a workflow-coverage gap map (a page is also judged by the buyer workflows it never mentions — silence is data) and an incumbent/competitive read (reactions must name what the product would displace; vacuum intent isn't intent).

What a run looks like

  1. Intake — you give it a URL (preferred) or a product description.
  2. Capture — it fetches the page as a buyer would see it (browser-first; plain fetch renders many SPAs empty), recording claims, integrations, and pricing — or the absence of pricing, which buyers read as "expensive."
  3. Personas — 2–4 buyer segments inferred from the page's own targeting, each built to the schema; unfamiliar domains are web-verified, not invented.
  4. Maps — workflow coverage (Covered / Named-only / Missing) and the incumbent frame, before any respondent reacts.
  5. Panel — N respondents per segment, perturbed on the axes that drive real variance, reacting independently in free text.
  6. Scoringscripts/panel_math.py validates distributions and computes the headline table deterministically.
  7. Report — ranked segments, verbatims, objection themes, and prioritized suggestions tied to evidence. --compare re-runs the same panel against a revised page.

See examples/sample-report.md for an abridged real output and examples/sample-panel.json for the panel format.

Install

git clone https://github.com/ujjwalks/buyer-lens.git
ln -s "$(pwd)/buyer-lens" ~/.claude/skills/buyer-lens

Usage

In any Claude Code session:

Review https://yoursite.com/pricing as if you were my target customers — would they buy?

I'm building an invoicing tool for landscapers. Test the idea with a synthetic buyer panel.

Or run the scripts directly:

×ばつ variant matrix) python3 scripts/panel_math.py v1.panel.json v2.panel.json v3.panel.json # elicit every respondent in its own fresh headless context (true independence) python3 scripts/panel_runner.py spec.json --plan # preview, no cost python3 scripts/panel_runner.py spec.json -o reactions.json">
# score one panel
python3 scripts/panel_math.py examples/sample-panel.json
# before/after diff against a baseline
python3 scripts/panel_math.py new.panel.json --compare examples/sample-panel.json
# rank N concept/pricing variants (segment ×ばつ variant matrix)
python3 scripts/panel_math.py v1.panel.json v2.panel.json v3.panel.json
# elicit every respondent in its own fresh headless context (true independence)
python3 scripts/panel_runner.py spec.json --plan # preview, no cost
python3 scripts/panel_runner.py spec.json -o reactions.json

panel_runner.py exists because the SSR protocol's independence requirement is better enforced by process isolation than by promising the model won't peek: each respondent runs in a separate claude -p context and returns only free text — the distribution mapping stays with the calling agent, and the runner rejects any elicitation question containing scale language.

Measured

Re-measurement pending. The description was edited on 2026年08月01日 to add a boundary clause against signal-lens (a measured collision: an unaided model given "review my pricing page — would my target customers buy?" fired neither skill and produced a CRO teardown). The mechanism parenthetical was also dropped, because describing process in a description risks an agent following the summary instead of reading the skill. The numbers below were measured against the previous description and have not yet been re-run. Treat them as stale until they are.

Paired evaluation via skill-doctor's harness (examples/eval-buyer-lens.json; claude-sonnet-4-6, 3 runs per prompt, dry pass agents):

  • Trigger rate: 15/15 positive prompts fired (100%); 0/6 negatives false-fired — the gate matches real phrasings ("validate my idea", "would people buy this") without hijacking adjacent requests (SEO, CSS fixes). Stable across three eval rounds (v1, post-review fixes, v2).
  • Pass rate (v2 body): with-skill 100% of objective assertions vs baseline 0% (Δ +100 pts) — unaided, the model produced none of the protocol: no free-text-first elicitation, no SSR routing, no gap map, no incumbent frame, no deterministic scoring, no relative-vs-absolute caveat. Assertions accept either elicitation route (in-conversation free text, or panel_runner.py, which enforces free-text mechanically).

Small-n and dry by design — re-run the spec yourself; trigger and pass are reported separately because they fail differently (description vs body).

panel_runner.py is live-verified end-to-end: isolated respondents produce genuinely divergent, incumbent-grounded free-text reactions (a shopping VP computed the per-location price against his signing authority; a change-averse director defended her spreadsheet by name), at roughly 0ドル.05–0.06 per respondent.

Honest limits

A synthetic panel is directional research, not a substitute for talking to real buyers. Trust the relative rankings, the objection themes, and the budget-pressure effects — the outputs the paper validated. Do not trust absolute purchase-intent numbers as conversion forecasts, or any demographic subgroup readout. And per the skill-evaluation literature: this skill's own worth is only measurable by paired evaluation — examples/eval-buyer-lens.json is a ready spec for skill-doctor's eval harness.

Development

python3 -m unittest discover -s tests -v # stdlib only, no deps

Credit

Survey method: Maier et al., arXiv:2510.08338. Skill design follows The Art of Writing Skills (progressive disclosure, delta rule, description-as-gate, express-as-code, paired evaluation) — the same field guide that powers skill-doctor.

License

MIT — see LICENSE.

About

See your product through your buyers' eyes — an agent skill that runs synthetic purchase-intent panels (SSR method, arXiv:2510.08338) against any website or product concept

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

AltStyle によって変換されたページ (->オリジナル) /