[{"data":1,"prerenderedAt":488},["ShallowReactive",2],{"project-42635942":3},{"id":4,"name":5,"line":6,"line_source":7,"title":8,"url":9,"domain":10,"maker":11,"posted_at":12,"year":13,"points":14,"comments":15,"rank_in_year":16,"shown_in_year":17,"top":18,"tier":19,"category":20,"subcategory":21,"format":22,"keywords":23,"reception":28,"sentiment":29,"stance_mix":30,"scored_comments":35,"aspects":36,"strip":45,"post_text":48,"what":49,"said":80,"maker_in_thread":223,"shape":235,"grid":240,"attempts":450,"same_week":451,"maker_shows":33,"maker_hidden":480,"reader_version":481,"card":482},"42635942","Stagehand","an open source browser automation framework powered by AI","title","Show HN: Stagehand – an open source browser automation framework powered by AI","https:\u002F\u002Fgithub.com\u002Fbrowserbase\u002Fstagehand","github.com","hackgician",1736354464,2025,326,86,152,3837,4,"legend","dev_tools","browser automation framework","library",[24,25,26,27],"browser automation","playwright","web scraping","ai browser agent","mixed",0.172,{"positive":31,"neutral":32,"mixed":33,"critical":34},12,15,1,7,35,{"idea":37,"execution":39,"design":41,"performance":42,"pricing":43},{"positive":38,"critical":33},11,{"positive":40,"critical":33},0,{"positive":40,"critical":33},{"positive":40,"critical":33},{"positive":40,"critical":44},2,[46,47,40,47,33,46,47,40,47,40,40,40,40,33,47,40,46,47,40,46,33,33,40,40,47,47,46,40,46,46,47,47,46,33,33,47,46,47,46,46],5,3,"Hi HN! I’m Anirudh — longtime lurker, first time poster, and I couldn’t be more excited to show you Stagehand.\n\nStagehand is a TypeScript project that extends Playwright with three simple AI methods — act, extract, and observe. We’d love for you to try it out using the command below:\n\n\n```\n    npx create-browser-app --example quickstart \n```\n Here’s a sample workflow:\n\n\n```\n    const stagehand = new Stagehand();     await stagehand.init();      \u002F\u002F Stagehand overrides the Playwright Page and Context classes     const { page, context } = stagehand      await page.goto(\"instadash.com\") \u002F\u002F Regular",{"problem":50,"audience":56,"pricing":63,"motivation":64,"time_to_build":63,"stack":68,"openness":77,"stage":78,"team_size":79},{"value":51,"source":52,"evidence":53},"Browser automation scripts are cumbersome to write and break when the DOM or UI changes","maker",[54],{"id":55},"post",{"value":57,"source":52,"evidence":58},"Developers writing browser automations and web agents",[59,60],{"id":55},{"id":61,"by":11,"text":62},"42650486","Yes! These are both phenomenal projects, and kudos to their authors as well. Stagehand is different in that it makes fine-grained control a first-class citizen. Often times, you…",null,{"value":65,"source":52,"evidence":66},"Frustration with how cumbersome and brittle Playwright and Selenium automations are to write",[67],{"id":55},[69,73],{"value":70,"source":52,"evidence":71},"TypeScript",[72],{"id":55},{"value":74,"source":52,"evidence":75},"Playwright",[76],{"id":55},"open_source","launched","unknown",{"praise":81,"objections":104,"requests":135,"questions":165,"alternatives":191},[82,90,97],{"value":83,"source":84,"evidence":85},"Useful abstraction, delightful built-in proxies and captcha handling","commenter",[86],{"id":87,"by":88,"text":89},"42638393","sparab18","I've been playing around with Stagehand for a minute now, actually a useful abstraction here. We build scrapers for websites that are pretty adversarial, so having built in…",{"value":91,"source":84,"evidence":92},"Clean act, extract, and observe methods",[93],{"id":94,"by":95,"text":96},"42644964","fbouvier","Hey Anirudh, Stagehand looks awesome, congrats. Really love the focus on making browser automations more resilient to DOM changes. The act, extract, and observe methods are super…",{"value":98,"source":84,"evidence":99},"Fast product velocity",[100],{"id":101,"by":102,"text":103},"42642171","zanesabbagh","Have been on the Slack for a while and this crew has had an insane product velocity. Excited to see where it goes!",[105,115,125],{"value":106,"source":84,"evidence":107},"Playwright is built for testing, so extending it for scraping is a poor fit",[108,112],{"id":109,"by":110,"text":111},"42640574","andrewmcwatters","It seems to me like Selenium would have been a more appropriate API to extend from, then. Playwright, despite whatever people want it to be otherwise, is explicitly positioned…",{"id":113,"by":110,"text":114},"42641841","That's the same reason everyone else ignores the fact that it's a testing library. Except now you're forcing users to write kludges that wrap around the testing interface.",{"value":116,"source":84,"evidence":117},"Runtime LLM calls are expensive and hard to justify per run",[118,122],{"id":119,"by":120,"text":121},"42642063","kevmo314","How do you avoid this becoming horrendously expensive per run? Are the results cached if the DOM doesn't change?",{"id":123,"by":120,"text":124},"42642224","That seems like a pretty tough sell over bare playwright. Unless the UI is constantly changing, the cost of verifying tests are still successful seems like it would eclipse the…",{"value":126,"source":84,"evidence":127},"LLM at runtime makes tests less deterministic",[128,132],{"id":129,"by":130,"text":131},"42640192","mpalmer","This looks very cool and makes a lot of sense, except for the idea that it should take the place of Playwright et al. Personally I'd love to use this as an intermediate workflow…",{"id":133,"by":130,"text":134},"42649345","> Treating UI test code as some kind of static source of truth is the biggest nightmare in all of UI front end development. Web UIs naturally have a ton of \"jank\" that…",[136,147,151,158],{"value":137,"source":84,"evidence":138},"Cache extract results so the LLM runs only when page content changes",[139,143],{"id":140,"by":141,"text":142},"42642347","dchuk","This looks awesome. What I would love to see either as something leveraging this, or built in to this, is if you prompt stagehand to extract data from a page, it also returns the…",{"id":144,"by":145,"text":146},"42643575","9dev","Cache the response for a given query-page hash pair maybe? So the LLM will only be consulted when the page content hash changes, the previous answer be reused otherwise",{"value":148,"source":84,"evidence":149},"Return XPath selectors from extract for later deterministic scraping",[150],{"id":140,"by":141,"text":142},{"value":152,"source":84,"evidence":153},"Browser extension version",[154],{"id":155,"by":156,"text":157},"42649043","owebmaster","Any attempt on doing something similar but as a browser extension?",{"value":159,"source":84,"evidence":160},"Support for Ollama local models",[161],{"id":162,"by":163,"text":164},"42641230","pryelluw","Can it be adapted to use ollama? Seems like a good tool to setup locally as a navigation tool.",[166,177,184],{"value":167,"source":84,"evidence":168},"How does it handle bot detection and captchas",[169,173],{"id":170,"by":171,"text":172},"42641596","cjonas","How do you get by when every major sites starts blocking headless browsers? A good example right now is Zillow, but I foresee a world where big chunks of the internet are behind…",{"id":174,"by":175,"text":176},"42645490","asar","This looks really cool, thanks for sharing! I recently tried to implement a workflow automation using similar frameworks that were playwright or puppeteer based. My goal was to…",{"value":178,"source":84,"evidence":179},"How it compares to Playwright codegen",[180],{"id":181,"by":182,"text":183},"42640142","righthand","I’m curious how this compares to playwrights already built in codegen: https:\u002F\u002Fplaywright.dev\u002Fdocs\u002Fcodegen-intro Is a chat bot easier to reiterate a test?",{"value":185,"source":84,"evidence":186},"Can it automate an existing open browser tab",[187],{"id":188,"by":189,"text":190},"42643130","bluelightning2k","Does this open up the possibility of automating an existing open browser tab? (Instead of a headless or specifically opened instance of chrome?)",[192,199,203,210,217],{"value":193,"source":84,"evidence":194},"Skyvern",[195],{"id":196,"by":197,"text":198},"42643112","jameslk","Cool to see another open source AI browser testing project! There’s a couple of others I’ve heard of as well: Skyvern: https:\u002F\u002Fgithub.com\u002FSkyvern-AI\u002Fskyvern Shortest:…",{"value":200,"source":84,"evidence":201},"Shortest",[202],{"id":196,"by":197,"text":198},{"value":204,"source":84,"evidence":205},"Octomind",[206],{"id":207,"by":208,"text":209},"42643450","Kostarrr","Hi! Kosta from Octomind here. We built basically this: Let an LLM agent take a look at your web page and generate the playwright code to test it. Running the test is just running…",{"value":211,"source":84,"evidence":212},"ZeroStep",[213],{"id":214,"by":215,"text":216},"42694601","vitalets","Looks interesting. I know about the similar project - https:\u002F\u002Fzerostep.com. Is it basically the same?",{"value":218,"source":52,"evidence":219},"Crawlspace",[220],{"id":221,"by":11,"text":222},"42650449","Thanks so much! Crawlspace is pretty sick too, as is Integuru. A lot of people have different takes here on the level of automation to leave up to the user. As a developer…",{"comments":224,"answered":34,"key":225},23,[226,229,232],{"id":227,"text":228},"42642469","Yeah, I think someone opened a similar issue on GitHub: https:\u002F\u002Fgithub.com\u002Fbrowserbase\u002Fstagehand\u002Fissues\u002F389 Repeatability of extract() is definitely super interesting and…",{"id":230,"text":231},"42640303","Interesting, thanks for the feedback! By \"taking the place of Playwright,\" we don't mean the AI itself is going to replace Playwright. Rather, you can continue to use existing…",{"id":233,"text":234},"42640753","Appreciate the feedback. Our take is that Playwright is an open-sourced library with a lot of built-in features that make building with it a lot easier, so it's definitely an…",{"commenters":236,"max_depth":237,"maker_replies":224,"first_comment_mins":238,"lifespan_hours":239},47,6,60,176,[241,243,245,246,250,254,257,259,260,262,263,265,268,270,273,275,277,280,283,286,288,290,291,294,296,299,300,302,304,306,308,312,313,315,318,321,323,325,328,331,333,335,337,339,341,345,347,350,352,355,357,361,363,365,368,370,373,376,379,380,383,386,388,390,392,395,397,401,404,405,407,409,412,414,417,418,421,424,428,430,435,437,439,442,444,448],[140,40,46,242,141,40],"project\u002Fpositive\u002Fidea",[227,40,40,244,11,33],"project\u002Fneutral\u002Fexecution",[144,40,47,244,145,40],[247,40,47,248,249,40],"42643257","project\u002Fneutral\u002Fidea","matsemann",[251,40,40,252,253,40],"42643334","other\u002Fneutral\u002Fnone","ushakov",[255,40,40,252,256,40],"42648948","chaosharmonic",[129,33,47,258,130,40],"project\u002Fmixed\u002Fidea",[230,33,40,248,11,33],[109,33,33,261,110,40],"project\u002Fcritical\u002Fidea",[233,33,40,248,11,33],[113,33,40,264,110,40],"commenter\u002Fcritical\u002Fnone",[266,33,46,242,267,40],"42651182","mrbluecoat",[170,33,47,269,171,40],"project\u002Fneutral\u002Fnone",[271,33,40,272,110,40],"42641836","commenter\u002Fneutral\u002Fnone",[274,33,40,272,171,40],"42651902",[276,33,40,272,110,40],"42651955",[278,33,40,252,279,40],"42655975","keyserj",[281,33,40,252,282,40],"42642694","Klaster_1",[284,33,47,248,285,40],"42648789","ffsm8",[287,33,40,269,11,33],"42650713",[289,33,40,252,285,40],"42655224",[207,33,40,252,208,40],[292,33,40,293,11,33],"42650797","other\u002Fpositive\u002Fnone",[295,33,40,252,208,40],"42681275",[297,33,40,252,298,40],"42649055","ramesh31",[133,33,40,264,130,40],[301,33,40,264,298,40],"42649711",[303,33,40,272,282,40],"42655231",[174,44,33,305,175,40],"project\u002Fcritical\u002Fnone",[307,44,40,252,11,33],"42650723",[309,47,33,310,311,40],"42644619","project\u002Fcritical\u002Fdesign","z3t4",[87,18,46,242,88,40],[314,18,40,269,11,33],"42640223",[316,18,40,252,317,40],"42645531","jimmySixDOF",[319,18,46,242,320,40],"42650330","chw9e",[322,18,40,269,11,33],"42650728",[324,18,40,252,320,40],"42719217",[326,46,47,244,327,40],"42652051","xingwu",[329,237,40,252,330,40],"42650183","tomatohs",[332,237,40,293,11,33],"42650513",[101,34,46,334,102,40],"maker\u002Fpositive\u002Fnone",[336,34,40,334,11,33],"42642487",[162,338,47,244,163,40],8,[340,338,40,244,11,33],"42642152",[342,338,33,343,344,40],"42648628","project\u002Fcritical\u002Fexecution","fidotron",[346,338,40,244,11,33],"42650465",[348,338,33,349,344,40],"42650846","project\u002Fcritical\u002Fperformance",[94,351,40,252,95,40],9,[353,351,40,252,354,40],"42645530","TheTaytay",[356,351,40,252,95,40],"42646355",[358,351,40,359,360,40],"42649870","other\u002Fcritical\u002Fnone","qeternity",[362,351,40,248,11,33],"42650748",[188,364,47,248,189,40],10,[366,364,47,269,367,40],"42644043","namanyayg",[369,364,40,269,11,33],"42650491",[371,364,40,252,372,40],"42650281","its_down_again",[374,38,46,242,375,40],"42642567","jerrygoyal",[377,38,40,252,378,40],"42647313","andrethegiant",[221,38,40,252,11,33],[381,38,40,252,382,40],"42650779","insdev12",[384,31,40,252,385,40],"42646917","CyberDildonics",[387,31,46,242,298,40],"42648142",[389,31,40,264,385,40],"42648750",[391,31,46,242,298,40],"42649275",[393,31,40,252,394,40],"42648941","mkagenius",[214,396,47,248,215,40],13,[398,399,47,244,400,40],"42641442",14,"jsdalton",[402,399,40,403,11,33],"42642112","maker\u002Fneutral\u002Fexecution",[196,32,46,242,197,40],[61,32,40,406,11,33],"maker\u002Fpositive\u002Fidea",[181,408,47,248,182,40],16,[410,408,40,411,11,33],"42640204","maker\u002Fneutral\u002Fidea",[119,408,33,413,120,40],"project\u002Fcritical\u002Fpricing",[415,408,40,416,11,33],"42642123","maker\u002Fneutral\u002Fpricing",[123,408,33,413,120,40],[419,408,40,420,11,33],"42642512","maker\u002Fneutral\u002Fnone",[422,408,47,248,423,40],"42644754","joshstrange",[425,426,46,242,427,40],"42640158",17,"BrandiATMuhkuh",[429,426,40,334,11,33],"42640195",[431,432,47,433,434,40],"42697983",18,"project\u002Fneutral\u002Fperformance","fasten",[155,436,47,248,156,40],19,[438,436,40,411,11,33],"42650436",[440,436,46,242,441,40],"42651551","temuze",[443,436,47,269,156,40],"42659044",[445,446,46,242,447,40],"42636553",20,"arvindsubram",[449,446,40,334,11,33],"42640226",[],[452,457,462,467,471,475],{"id":453,"name":454,"points":455,"category":456},"42634787","Atlas of Space",770,"learning_science",{"id":458,"name":459,"points":460,"category":461},"42624116","Tramway SDK",660,"games",{"id":463,"name":464,"points":465,"category":466},"42585009","Pimosa",526,"creative",{"id":468,"name":469,"points":470,"category":20},"42600586","CSS Flexbox Playground",315,{"id":472,"name":473,"points":474,"category":20},"42623593","HipScript",309,{"id":476,"name":477,"points":478,"category":479},"42584896","DeepFace",257,"ai",false,"v2",{"id":483,"name":5,"line":6,"ai":480,"cat":20,"year":13,"points":14,"comments":15,"rec":28,"s":484,"top":18,"kw":485,"maker":11,"domain":10,"tier":19,"attempts":40,"strip":486,"url":9,"mix":487,"praise":83,"objection":106,"sub":21},42635942,0.17,[24,25,26,27],"5303153030000130530511003350553351135355",[31,32,33,34],1793991110394]