Primitive actions — low-level control
Developers call individual actions directly. The LLM decides what to do; the library executes it precisely.
browser = AgentBrowser()
page = await browser.open("https://example.com")
# LLM gets a compact page summary
state = await page.snapshot()
# LLM decides what to do, calls these
await page.click("Submit button")
await page.type("Email field", "user@email.com")
await page.extract({ "price": "str", "title": "str" })
page = await browser.open("https://example.com")
# LLM gets a compact page summary
state = await page.snapshot()
# LLM decides what to do, calls these
await page.click("Submit button")
await page.type("Email field", "user@email.com")
await page.extract({ "price": "str", "title": "str" })
Pros
Maximum control
Works with any agent loop
Maximum control
Works with any agent loop
Cons
Developer writes more glue code
Developer writes more glue code