one file · zero dependencies · bun 1.4

A browser your agent drives in a loop .

Point it at any URL. It reports what is actually clickable, with coordinates, and whether the last click did anything.

See the broken demo app $npx tryflamingo initcopied
The flamingo driving a browser window like a go-kart

the loop

Observe, act,
observe.

Every action returns the new page. changed: false means try something else. No guessing, no DOM dump.

loop

Observe → act → observe

Every action returns the new page state, so the next step is a read, not a guess.

sees

Only what is clickable

No DOM dump. One line per interactive element, with the coordinates that work.

clicks

Every control

Walks the whole page and skips anything labelled destructive.

checks

Did it actually work?

Watches DOM, focus, navigation and network to tell a real response from a dead one.

types

Fields that lie

Types into inputs, then reads them back to confirm the value actually stuck.

breaks

On purpose

Double-clicks, reloads mid-request, stresses the page. Finds what one clean click misses.

size

Same job.
No browser download.

Packed size straight from npm, before Playwright or Puppeteer pull their browser binaries down on top.

winner ✦
Metric
Flamingo
playwright
puppeteer-core
Packed size
51.8 kB
4.84 MB
5.59 MB
Dependencies
0
1
6
Browser download
none
required
required

Real browser on both backends: system WebKit on macOS, or Chrome if you point it at one. How 17 packages were replaced no browser binaries, ever ✦

the payload

97 tokens,
not 360.

Compact text by default. One line per element with coordinates, so a thirty-step loop still fits in context.

observation
http://localhost:3000 | "Demo" | 1280x800
elements 6
  (94,171)  button#cta     "Get Started"
  (238,171) button#deadcta "Learn More"
blocked 2 behind div#cookiewall
changed true
The flamingo confronting three bugs

what it finds

Clicks everything.
Checks if it worked.

Dead buttons, blocked clicks, fields that drop input, overflow and broken assets. Then it tries to break the page on purpose to surface race conditions.

dead controlsblocked clicksdropped input layout overflowbroken assetsconsole errors race conditions