Skip to content

hafermilch

Multi-persona LLM agents that autonomously browse and critique your product's UI/UX — in their own voice.

Get Started View on GitHub

Python 3.11+  ·  100+ LLM providers via LiteLLM  ·  Playwright · agent-browser  ·  uv · hatchling

uv tool install hafermilch
playwright install chromium
hafermilch run myplan.yaml

What is hafermilch?

hafermilch lets you define personas — characters with distinct backgrounds, goals, and expertise levels — and point them at any website. Each persona is backed by an LLM and a real browser. They navigate autonomously, form opinions in their own voice, and return structured scores and findings.

You define a persona once. You run it against any product by writing a plan.


How it works

flowchart LR
    P[Persona YAML\n🧑 background · goals · LLM] --> R
    L[Plan YAML\n🗺️ URL · tasks · steps] --> R
    R[EvaluationRunner] --> B[Browser Agent\nPlaywright or agent-browser]
    B -->|page context| LLM[LLM Provider\nOpenAI · Gemini · Ollama]
    LLM -->|BrowserAction| B
    R --> Rep[Report\nJSON · Markdown]

Built-in personas

🧑‍💻

Senior Engineer

High technical literacy. Notices API inconsistencies, error handling gaps, and developer-experience friction.

🗂️

Office Clerk

Non-technical. Confused by jargon, overwhelmed by dense layouts. Represents the median business user.

🚀

Startup Founder

Time-pressured. Cares about time-to-value, pricing clarity, and whether the product solves a real problem.


Example output

──────────────── hafermilch v0.1.2 ────────────────
Plan:     saas_onboarding
Target:   https://example.com
Personas: Senior Engineer, Office Clerk, Startup Founder

             Results
┌──────────────────┬───────────┬──────────┐
│ Persona          │   Score   │ Findings │
├──────────────────┼───────────┼──────────┤
│ Senior Engineer  │ 7.2 / 10  │       18 │
│ Office Clerk     │ 5.8 / 10  │       14 │
│ Startup Founder  │ 6.4 / 10  │       16 │
└──────────────────┴───────────┴──────────┘

Reports written to reports/

Reports are written to reports/report.json, reports/report.md, and reports/report.html.