Reading up on Playwright
28 deep · digging since nov 25, 25
- We made Playwright 2x faster and 80% more token efficient
The Playwright team optimized its test runner, cutting execution time in half and reducing token usage by 80% through improved serialization and parallelism.
- Bun 1.4 | Bun Blog
Bun 1.4 rewrites the runtime in Rust, adds built-in headless browser automation, image and markdown APIs, boosts Node.js compatibility, and reduces CPU and memory usage.
- Introducing Stagehand v4: The SDK for browser agents.
Stagehand v4 moves browser automation state management into a Chrome extension, enabling feature-parity SDKs in TypeScript, Python, and Go by treating the remote browser as the source of truth.
- You can't unit test for taste
Taste in software cannot be unit-tested because it relies on tacit, contextual judgment that resists full externalization into rules or code.
- Have your agent record video demos of its work with shot-scraper video
Simon Willison introduces shot-scraper video, a tool that records video demos from a YAML storyboard using Playwright, enabling coding agents to demonstrate their work.
- A new era for software testing - <antirez>
LLM agents can perform manual QA testing via markdown instructions, catching regressions and psychological issues, raising software quality beyond traditional automated tests.
- How we cut build times by two-thirds by deleting our CMS
Sentry cut build times from 14 to under 4 minutes by replacing its headless CMS with Astro, Markdown files, and Claude Code skills for content management.
- Webwright | Terminal-Native Web Agents
Webwright lets AI agents control browsers via terminal commands and reusable scripts, achieving 60.8% on Odysseys and 86.7% on Online-Mind2Web with only 1K lines of harness code.
- What we’ve learned building cloud agents
Cursor's cloud agents perform best when given full development environments, durable execution via Temporal, and a harness that shifts control to the agent.
- Today's harness is Tomorrow's Prompt
Temporary scaffolding around AI models becomes obsolete as models improve, so developers should build these harnesses cheap enough to discard.
- Browser Run: give your agents a browser
Cloudflare renames Browser Rendering to Browser Run, adding Live View, Human in the Loop, CDP access, WebMCP support, session recordings, and 4x higher concurrency for AI agents.
- Harness design for long-running application development
Anthropic engineer Prithvi Rajasekaran builds a multi-agent harness with planner, generator, and evaluator agents that produces full-stack applications over multi-hour autonomous coding sessions.
- Cloudflare crawl endpoint
Cloudflare launches a managed crawl endpoint that respects robots.txt, aiming to provide a well-behaved alternative to aggressive AI scrapers.
- Agentic Engineering Patterns
Effective agentic coding requires a robust test harness, letting AI explore ideas freely, and maintaining a scratch pad of learnings between sessions.
- Introducing Showboat and Rodney, so agents can demo what they’ve built
Simon Willison introduces Showboat and Rodney, CLI tools for coding agents to create Markdown demos and browser automation scripts to verify their work.
- Don't waste your back pressure ·
Providing AI agents with automated feedback loops (back pressure) enables them to self-correct on long-horizon tasks, increasing engineer leverage.
- Agent - 🤘 Stagehand
Stagehand's `agent()` function enables fully autonomous browser workflows using AI, with support for multiple agent modes, custom tools, streaming, and structured output.
- Fizzy Design Evolution: A Flipbook from Git
The article describes a technical process extracting Fizzy's daily git screenshots and scoring a flipbook video with Claude-composed music from the app's own audio samples.
- Review of Deep Seek OCR
DeepSeek-OCR compresses image tokens using an encoder to reduce input size, enabling larger context windows and more efficient training, not traditional OCR.
- Why we forked Chromium
Browserbase forked Chromium and applied patches to remove automation signals and enable long-lived sessions, making headless browsers undetectable and stable for AI agents.
Takes
OPUS 5.5 IS THE ONLY MOTION DESIGNER YOU NEED this launch video cost $0 and is pure code everyone else on X claims the same shit, then sends you to their website or mcp this is completely free with 0 external tools steal the prompt and try it in your claude ↓ <inputs> Ask me for: a one-word brand name for the wordmark (a verb works best), 9 to 12 high-res photos, a royalty-free song around 120 BPM with a drop and a quiet breakdown (Mixkit, free for commercial use), and a free stock clip of a plain wall with moving plant shadows (Pexels). </inputs> <direction> An Apple-keynote launch film, 2D only, one continuous take. Every scene is made out of the previous one: nothing fades, blurs or cuts. Objects change shape instead: text rises out of a mask line, icons pop from zero on a spring, bars draw across, pages push, and a black shape floods the whole frame and contracts into the next scene. Warm off-white canvas, black UI, iOS 26 liquid glass over the photos. Archivo (wdth 125, weight 800) for the wordmark, Geist for UI. A cursor drives every change with real clicks, drags and long-presses. The camera zooms screen-studio style so each moment fills the square, and the cursor scales with it. Banned: crossfades, blur-ins, brightness "developing", 3D flips, particles, glows, holds longer than 1s, anything that looks like a template. </direction> <structure> 120 BPM, 54 beats, something happens on every beat. Open: the wordmark squeezes into its own period like an accordion, the dot grows into a black pill, a label rises inside it. Click: six iris blades close over the label and snap open onto a photo. The circle becomes a square, shrinks, the grid unfolds from behind it like a paper map (center, plus, corners), reflows into a bento, and a click zooms into one tile, landing exactly on the drop. Glass: a glass word pops in letter by letter, melts into a droplet that stretches into a glass toolbar. The adjust icon turns it into a slider. Dragging relights the photo from day to golden hour (two aligned shots), and the knob turns into a glass lens while held. It lifts into a glass orb, the next photo opens inside it as a circle, and the orb expands into a lock screen: glass clock digits, date, and a home bar that stretches into a glass music player. Stage: the lock screen pulls back into a phone (the bezel grows out of the screen edge). The Dynamic Island stretches like liquid, pinches off, flies over and grows into a Mac window that rolls up like a blind. Long-press the wallpaper, drag it onto a Safari tab, the page pushes in, drop it and it becomes the hero of a landing page. Scroll: the hero morphs into a framed print on a product card, with the mat and molding growing out of the photo's edge. Pick a frame color (it paints across) and a size, then the nav button flies down into "Order print". Order: one black shape keeps morphing: Ordered ✓ → Printing % → On its way (a van on a route) → Delivered ✓. Wall: the delivered circle floods the frame edge to edge, holds black for a beat, and contracts into the framed print hanging on the real wall footage. The same iris opens onto the print, closes again, the frame floods the screen and contracts into the pill → the dot → the letters spring back out, landing on the beat return. Last frame = first frame. </structure> <build> 1. One HTML file, square 1440x1440. Every style is computed from time inside an async seek(t): no CSS transitions, no timers, no state between frames. 2. Springs are closed-form step responses. A value with many targets is the sum of one spring per change, so it stays a pure function of time. 3. Liquid glass: each glass element holds its own clone of the scene behind it, filtered with an SVG feImage displacement map (a rounded-rect distance field) through three feDisplacementMaps at slightly different scales for chromatic edges, plus a rim light. Glass letters: a canvas distance field per glyph gives the map, mask and highlights. 4. Goo: blur + alpha threshold, then composite the source atop it so the glass stays sharp inside. 5. Iris: 6 blades around a hexagonal aperture. Each blade is its two vertices, both edge extensions and the SHORT arc between them. 6. Wordmark squeeze: every letter moves toward the dot by the same factor and its drawn width follows (narrow the wdth axis, scale the rest), so the letters stay touching. 7. Footage: re-encode all-intra (ffmpeg -g 1), load it as a blob URL, await 'seeked' before drawing each frame. 8. Sound: a downloaded SFX for every event (Mixkit), never synthesized, each placed by its measured peak. The song starts on a downbeat: the zoom lands on the drop, the wall sits in the breakdown, the wordmark returns with the beat. Loudnorm to -14 LUFS. 9. Render with Playwright: 4 subframes per frame blended with ffmpeg tmix, 60fps. Check one frame per beat, then scan for single-frame pops (frame-difference spikes 3x their neighbours). </build> <gotchas> backdrop-filter: url() misreads displacement maps in Chromium, so clone the scene instead. A flood must overscale past the corners and take about 0.3s, or half the screen changes in one frame. A child with visibility: visible shows through a hidden parent, so use inherit. Text that swaps inside a morphing shape needs its own mask. python http.server can't range-seek video, so use the blob URL. </gotchas> <start> Ask me for the inputs, then show me the beat map and 4 stills (open, glass, stage, wall) before you write the full film. </start>
@twoclipping
✨ Okay with lots of help from @javilopen and his Spanish scraping friends I've managed to vibe code my own @Scrapingbee alternative and replace my $249/mo Scrapingbee plan with my own $1/mo scraper running on my VPS! First I tried OpenSERP, an open source project that seems freshly maintained but it didn't work on my VPS IP or laptop IP and got blocked fast Then I tried to use residential IP proxies from IPRoyal but they were already quite tainted IPs meaning Google already knew they were scrapers and just blocked about 60% of them already, not so great, also didn't work! Then I discovered OpenSERP uses a vanilla headless Chrome, Google instantly detects that and blocks that, so literally the entire repo is useless cause it won't even work? I don't get why they don't say that in the docs? OpenSERP is even worse than just basic CURL, as my AI said: "plain curl got 7% blocked but OpenSERP's headless browser got 100% blocked" So then I just built my own with Playwright and a real Google Chrome on my VPS, headful and persistent context, and slow pacing like every 30 seconds or so And I got some better residential IP recommendations (which I can't tell you because thenhey t stop working!) Now I'm at about 90% success rate, which is similar or better than Scrapingbee And it costs me ~$1/mo (measured by GBs, obviously for text scraping I barely use a lot) instead of the $249/mo I paid Scrapingbee! My only remaining SaaS now are: - Cloudflare Domains - Cloudflare Email Sending - Cloudflare R2 Storage - Backblaze B2 for backups - Hetzner for all my servers for all my sites (VPS) - xAI for all LLMs for all my sites (so many things like moderation, writing emails, anything)
@levelsio
Stagehand v4 has one mission: Destroy Playwright. Stagehand now runs INSIDE the browser, enabling the same speed as a local browser but at massive scale. If your agent uses the Playwright MCP, you'll get a 2x perf boost just by switching. http://stagehand.dev
@pk_iv
🍌 Got so lazy to order stuff on UberEats that I asked Claude Code to do it Very easy, it just installs Playwright and then you login once to UberEats on web (the iOS app is also just a web wrapper, nice) Then you can just say "order bananas" and it does it!
@levelsio
OMG you guys, this is incredible! This is using Google's new WebMCP function to control your browser, but not only is it lightning fast, but its unique because it is using your main Chrome instance. Not some sandboxxed Playwright instance that doesn't want to remember your sessions, cookies, or passwords. Your real Chrome instance. It's incredible. You need to enable: chrome://inspect/#remote-debugging Also, it doesn't even require a skill to use. It just works. I'm thinking about making one anyway. I'm telling you, download this and try it. This is my new daily for sure.
@LLMJunky
We built Upright to replace Pingdom at 37signals for monitoring all our services, and now we've open-sourced it too. Global checks, playwright smoke tests (with video recording!), detailed uptime tracking, and feeding into Prometheus + Grafana. Enjoy! https://t.co/QUVv0SyBuI
@dhh
okay, so @vercel's new agent browser is pretty stinkin great.https://t.co/FfyoARDd86substantially faster than playwright and is clearly optimized for AI use.well done, folks!
@Shpigford
"real" programmers are going to drag me through the mud on this but alas i could not care less.tl;dr i now have claude run a full "suite" of E2E tests using plain english + playwrighttraditional E2E tests are a giant pain to maintain. they're incredibly fragile and just not a… pic.twitter.com/v1HnKc22hA
@Shpigford