[{"data":1,"prerenderedAt":402},["ShallowReactive",2],{"navigation_docs":3,"-guide-sessions":88,"-guide-sessions-surround":397},[4,48],{"title":5,"path":6,"stem":7,"children":8,"icon":47},"Guide","\u002Fguide","1.guide\u002F01.index",[9,11,15,19,23,27,31,35,39,43],{"title":10,"path":6,"stem":7},"Getting Started",{"title":12,"path":13,"stem":14},"Scrape","\u002Fguide\u002Fscrape","1.guide\u002F02.scrape",{"title":16,"path":17,"stem":18},"Screenshots and PDFs","\u002Fguide\u002Fcaptures","1.guide\u002F03.captures",{"title":20,"path":21,"stem":22},"Links and accessibility and extract","\u002Fguide\u002Freading","1.guide\u002F04.reading",{"title":24,"path":25,"stem":26},"Crawl and search","\u002Fguide\u002Fcrawl","1.guide\u002F05.crawl",{"title":28,"path":29,"stem":30},"Sessions","\u002Fguide\u002Fsessions","1.guide\u002F06.sessions",{"title":32,"path":33,"stem":34},"CLI","\u002Fguide\u002Fcli","1.guide\u002F07.cli",{"title":36,"path":37,"stem":38},"MCP and Pi and OMP","\u002Fguide\u002Fagents","1.guide\u002F08.agents",{"title":40,"path":41,"stem":42},"Errors","\u002Fguide\u002Ferrors","1.guide\u002F09.errors",{"title":44,"path":45,"stem":46},"Custom providers","\u002Fguide\u002Fcustom","1.guide\u002F10.custom","i-lucide-book-open",{"title":49,"path":50,"stem":51,"children":52,"icon":87},"Providers","\u002Fproviders","2.providers\u002F00.index",[53,55,59,63,67,71,75,79,83],{"title":54,"path":50,"stem":51},"Every provider",{"title":56,"path":57,"stem":58},"Steel","\u002Fproviders\u002Fsteel","2.providers\u002F01.steel",{"title":60,"path":61,"stem":62},"Browserbase","\u002Fproviders\u002Fbrowserbase","2.providers\u002F02.browserbase",{"title":64,"path":65,"stem":66},"Kernel","\u002Fproviders\u002Fkernel","2.providers\u002F03.kernel",{"title":68,"path":69,"stem":70},"Browserless","\u002Fproviders\u002Fbrowserless","2.providers\u002F04.browserless",{"title":72,"path":73,"stem":74},"Hyperbrowser","\u002Fproviders\u002Fhyperbrowser","2.providers\u002F05.hyperbrowser",{"title":76,"path":77,"stem":78},"Anchor","\u002Fproviders\u002Fanchor","2.providers\u002F06.anchor",{"title":80,"path":81,"stem":82},"Cloudflare","\u002Fproviders\u002Fcloudflare","2.providers\u002F07.cloudflare",{"title":84,"path":85,"stem":86},"Playwright","\u002Fproviders\u002Fplaywright","2.providers\u002F08.playwright","i-lucide-server",{"id":89,"title":28,"body":90,"description":390,"extension":391,"links":392,"meta":393,"navigation":140,"path":29,"seo":395,"stem":30,"__hash__":396},"docs\u002F1.guide\u002F06.sessions.md",{"type":91,"value":92,"toc":385},"minimark",[93,97,102,231,274,288,292,353,357,367,381],[94,95,96],"p",{},"A session is a browser the vendor keeps running for you until you release it. Most of the time you don't need one. The CLI and the tools open one only when a provider can't do the job without it, and close it in the same call.",[98,99,101],"h2",{"id":100},"in-typescript","In TypeScript",[103,104,109],"pre",{"className":105,"code":106,"language":107,"meta":108,"style":108},"language-ts shiki shiki-themes browsers browsers browsers","import { create } from \"@agntn\u002Fbrowsers\";\n\nconst provider = await create(\"browserless\");\nconst session = await provider.createSession({ viewport: { width: 1280, height: 800 } });\n\nsession.id;\nsession.cdpUrl; \u002F\u002F connect Playwright or Puppeteer here\n\nawait provider.releaseSession(session.id);\n","ts","",[110,111,112,135,142,170,191,196,202,212,217],"code",{"__ignoreMap":108},[113,114,117,121,125,128,132],"span",{"class":115,"line":116},"line",1,[113,118,120],{"class":119},"skH_V","import",[113,122,124],{"class":123},"s38Sx"," { create } ",[113,126,127],{"class":119},"from",[113,129,131],{"class":130},"shU9J"," \"@agntn\u002Fbrowsers\"",[113,133,134],{"class":123},";\n",[113,136,138],{"class":115,"line":137},2,[113,139,141],{"emptyLinePlaceholder":140},true,"\n",[113,143,145,148,151,154,157,161,164,167],{"class":115,"line":144},3,[113,146,147],{"class":119},"const",[113,149,150],{"class":123}," provider ",[113,152,153],{"class":119},"=",[113,155,156],{"class":119}," await",[113,158,160],{"class":159},"sK71F"," create",[113,162,163],{"class":123},"(",[113,165,166],{"class":130},"\"browserless\"",[113,168,169],{"class":123},");\n",[113,171,173,175,178,180,182,185,188],{"class":115,"line":172},4,[113,174,147],{"class":119},[113,176,177],{"class":123}," session ",[113,179,153],{"class":119},[113,181,156],{"class":119},[113,183,184],{"class":123}," provider.",[113,186,187],{"class":159},"createSession",[113,189,190],{"class":123},"({ viewport: { width: 1280, height: 800 } });\n",[113,192,194],{"class":115,"line":193},5,[113,195,141],{"emptyLinePlaceholder":140},[113,197,199],{"class":115,"line":198},6,[113,200,201],{"class":123},"session.id;\n",[113,203,205,208],{"class":115,"line":204},7,[113,206,207],{"class":123},"session.cdpUrl; ",[113,209,211],{"class":210},"scIB-","\u002F\u002F connect Playwright or Puppeteer here\n",[113,213,215],{"class":115,"line":214},8,[113,216,141],{"emptyLinePlaceholder":140},[113,218,220,223,225,228],{"class":115,"line":219},9,[113,221,222],{"class":119},"await",[113,224,184],{"class":123},[113,226,227],{"class":159},"releaseSession",[113,229,230],{"class":123},"(session.id);\n",[94,232,233,235,236,239,240,239,243,239,246,239,249,239,252,239,255,239,258,261,262,265,266,269,270,273],{},[110,234,187],{}," takes ",[110,237,238],{},"region",", ",[110,241,242],{},"headless",[110,244,245],{},"viewport",[110,247,248],{},"profileId",[110,250,251],{},"timeout",[110,253,254],{},"proxy",[110,256,257],{},"stealth",[110,259,260],{},"captchaSolving"," and an ",[110,263,264],{},"extra"," bag for vendor fields. What a vendor does with each is the vendor's business. ",[110,267,268],{},"listSessions()"," and ",[110,271,272],{},"getSession(id)"," read back what's open.",[94,275,276,277,269,280,283,284,287],{},"With a session you also get ",[110,278,279],{},"navigate(url, session)",[110,281,282],{},"evaluate(script, session)"," on Kernel, Browserless and Playwright. That's where the library ends and your own automation begins. For clicks and logins, take ",[110,285,286],{},"cdpUrl"," and drive the browser yourself.",[98,289,291],{"id":290},"from-the-cli","From the CLI",[103,293,297],{"className":294,"code":295,"language":296,"meta":108,"style":108},"language-bash shiki shiki-themes browsers browsers browsers","browsers session create -p kernel\nbrowsers session list -p kernel\nbrowsers session release \u003Csession-id> -p kernel\n","bash",[110,298,299,315,328],{"__ignoreMap":108},[113,300,301,304,307,309,312],{"class":115,"line":116},[113,302,303],{"class":159},"browsers",[113,305,306],{"class":130}," session",[113,308,160],{"class":130},[113,310,311],{"class":130}," -p",[113,313,314],{"class":130}," kernel\n",[113,316,317,319,321,324,326],{"class":115,"line":137},[113,318,303],{"class":159},[113,320,306],{"class":130},[113,322,323],{"class":130}," list",[113,325,311],{"class":130},[113,327,314],{"class":130},[113,329,330,332,334,337,340,343,346,349,351],{"class":115,"line":144},[113,331,303],{"class":159},[113,333,306],{"class":130},[113,335,336],{"class":130}," release",[113,338,339],{"class":119}," \u003C",[113,341,342],{"class":130},"session-i",[113,344,345],{"class":123},"d",[113,347,348],{"class":119},">",[113,350,311],{"class":130},[113,352,314],{"class":130},[98,354,356],{"id":355},"for-a-model","For a model",[94,358,359,362,363,366],{},[110,360,361],{},"browsers_session"," creates one and answers with an opaque ID. ",[110,364,365],{},"browsers_release"," releases it. That's all a model can do with it. No other tool takes a session ID, and the CDP URL never goes back into the conversation.",[94,368,369,370,373,374,377,378,380],{},"Sounds limiting. It's on purpose. The tools never grew ",[110,371,372],{},"navigate"," or ",[110,375,376],{},"evaluate",", so a model can read pages but can't click through your logins. Release what you open. The description of ",[110,379,365],{}," says it to the model too, because a forgotten browser is a line on somebody's invoice.",[382,383,384],"style",{},"html pre.shiki code .skH_V, html code.shiki .skH_V{--shiki-light:var(--shiki-token-keyword);--shiki-default:var(--shiki-token-keyword);--shiki-dark:var(--shiki-token-keyword)}html pre.shiki code .s38Sx, html code.shiki .s38Sx{--shiki-light:var(--ui-text-highlighted);--shiki-default:var(--ui-text-highlighted);--shiki-dark:var(--ui-text-highlighted)}html pre.shiki code .shU9J, html code.shiki .shU9J{--shiki-light:var(--shiki-token-string);--shiki-default:var(--shiki-token-string);--shiki-dark:var(--shiki-token-string)}html pre.shiki code .sK71F, html code.shiki .sK71F{--shiki-light:var(--shiki-token-function);--shiki-default:var(--shiki-token-function);--shiki-dark:var(--shiki-token-function)}html pre.shiki code .scIB-, html code.shiki .scIB-{--shiki-light:var(--shiki-token-comment);--shiki-default:var(--shiki-token-comment);--shiki-dark:var(--shiki-token-comment)}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":108,"searchDepth":137,"depth":137,"links":386},[387,388,389],{"id":100,"depth":137,"text":101},{"id":290,"depth":137,"text":291},{"id":355,"depth":137,"text":356},"Open a live browser and release it. The session ID an agent gets and the CDP URL only your code gets","md",null,{"icon":394},"i-lucide-plug",{"title":28,"description":390},"fhOvE20NFBC56CR99c0ShNZd2fQSEckwpVsi8uojDWo",[398,400],{"title":24,"path":25,"stem":26,"description":399,"children":-1},"Follow links from one page and keep a slow crawl job instead of losing it. Web search through Hyperbrowser",{"title":32,"path":33,"stem":34,"description":401,"children":-1},"Every command of the browsers CLI. Status lines on stderr and the page on stdout so a pipe gets only the page",1790685118216]