[{"data":1,"prerenderedAt":373},["ShallowReactive",2],{"docs-\u002Fdocs\u002Fagents":3,"docs-nav":268},{"id":4,"title":5,"body":6,"description":259,"extension":260,"meta":261,"navigation":262,"order":263,"path":264,"seo":265,"stem":266,"__hash__":267},"docs\u002Fdocs\u002F7.agents.md","Agents",{"type":7,"value":8,"toc":252},"minimark",[9,13,18,177,181,232,236],[10,11,12],"p",{},"jawb is built for machines to read, act on, and see the web, not for people to look at\nit — the whole point is being the browser an agent calls into, not one\na human drives.",[14,15,17],"h2",{"id":16},"what-an-agent-gets-today","What an agent gets today",[19,20,21,42,99,115,130,145,151],"ol",{},[22,23,24,28,29,37,38,41],"li",{},[25,26,27],"strong",{},"Observe and read."," Call ",[30,31,33],"a",{"href":32},"\u002Fdocs\u002Fcli\u002Fobserve",[34,35,36],"code",{},"jawb observe"," or\n",[34,39,40],{},"jawb read"," to get a compact, stable-ID element list or\nMarkdown\u002Ftext\u002FJSON content instead of raw HTML or a screenshot. Fewer\ntokens in for the model to decide what to do next.",[22,43,44,47,48,51,52,51,55,51,58,51,61,64,65,68,69,51,72,51,75,51,78,51,81,51,84,87,88,64,91,94,95,98],{},[25,45,46],{},"Act."," ",[34,49,50],{},"click",", ",[34,53,54],{},"fill",[34,56,57],{},"type",[34,59,60],{},"select",[34,62,63],{},"check","\u002F",[34,66,67],{},"uncheck",",\n",[34,70,71],{},"press",[34,73,74],{},"hover",[34,76,77],{},"scroll",[34,79,80],{},"upload",[34,82,83],{},"download",[34,85,86],{},"submit",", and\n",[34,89,90],{},"media play",[34,92,93],{},"pause"," — targeted by the same element IDs ",[34,96,97],{},"observe","\nreturned, with automatic retargeting if the page rebuilds the node in\nbetween. Every action returns a compact diff, not a full re-read.",[22,100,101,47,104,51,107,110,111,114],{},[25,102,103],{},"See.",[34,105,106],{},"viewport",[34,108,109],{},"emulate",", and ",[34,112,113],{},"screenshot"," for how a page\nrenders at a given size, color scheme, or locale.",[22,116,117,47,120,123,124,64,126,129],{},[25,118,119],{},"JavaScript-rendered content.",[34,121,122],{},"--js"," on ",[34,125,97],{},[34,127,128],{},"read",", and every\nAct\u002FSee command, run through the compatibility bridge (a real,\nlocally installed Chrome\u002FChromium) rather than jawb's own native\nparser.",[22,131,132,135,136,140,141,144],{},[25,133,134],{},"Discover tools."," If the page declares ",[30,137,139],{"href":138},"\u002Fdocs\u002Fwebmcp","WebMCP"," tools,\n",[34,142,143],{},"jawb tools"," lists their names and descriptions. jawb does not invoke\nthem yet.",[22,146,147,150],{},[25,148,149],{},"Diff, don't re-read."," Every observation and action carries a\nrevision-scoped diff, so checking \"did anything change\" costs a\nfraction of the first look.",[22,152,153,156,157,160,161,164,165,167,168,171,172,176],{},[25,154,155],{},"A policy and confirmation layer."," Uploads, downloads, password\nfields, and form submits are confirmable and can be pre-approved with\n",[34,158,159],{},"--yes",". Classified purchase-like actions (buying, subscribing,\nplacing an order) use a stricter human-confirmation flow: jawb holds\nthe action, issues no approval token to the agent, and waits for a\nperson to type ",[34,162,163],{},"purchase"," in their own terminal. ",[34,166,159],{}," never\nsatisfies it.",[169,170],"br",{},"Know its limits before you rely on it. It is a safeguard for honest\ncheckout flows, not a guarantee against a hostile page, and a page can\nstill disguise a purchase. The approval credential is a file in the\ndata directory, so a program running as you can still approve until\nan OS-mediated approval exists. Treat the hold as a guard for a\nwell-behaved agent, not as protection against a prompt-injected one.\nSee ",[30,173,175],{"href":174},"\u002Fdocs\u002Fsecurity","Security and trust",".",[14,178,180],{"id":179},"what-an-agent-does-not-get-yet","What an agent does not get yet",[182,183,184,190,202,208,214,220,226],"ul",{},[22,185,186,189],{},[25,187,188],{},"Tool invocation."," Calling the tools a site declares, behind the same\npolicy checks as a click, is planned. Today jawb only lists them.",[22,191,192,47,195,201],{},[25,193,194],{},"An MCP server in a release.",[30,196,198],{"href":197},"\u002Fdocs\u002Fmcp",[34,199,200],{},"jawb mcp",", an MCP server\nover the same API, is built and ships in the next release. Until then,\nagents reach jawb through the CLI or its local HTTP API.",[22,203,204,207],{},[25,205,206],{},"Routing."," jawb does not choose a route for you: the command you run\ndecides whether a step runs natively or on the Chrome bridge. A router\nthat picks the cheapest route that works is planned.",[22,209,210,213],{},[25,211,212],{},"Workflow recording or replay."," Recording a sequence of steps once\nand replaying it without new model calls is planned, not built.",[22,215,216,219],{},[25,217,218],{},"Content-integrity guardrails."," Flagging text a person would not see\n(hidden, off-screen, zero-width Unicode) and labelling page content as\nuntrusted is planned. Until then, treat everything jawb returns from a\npage as untrusted input to your model.",[22,221,222,225],{},[25,223,224],{},"Native execution of Act\u002FSee."," Today they run on the Chromium bridge;\na jawb-native engine for them is future work.",[22,227,228,231],{},[25,229,230],{},"An approval the agent cannot drive."," The purchase-confirmation\nflow today relies on an interactive terminal and a file-based\ncredential. The desktop app in development adds an Approvals screen,\nbut it uses the same credential file, so it is not a stronger check.\nAn OS-mediated approval the agent cannot drive is planned.",[14,233,235],{"id":234},"where-to-start","Where to start",[10,237,238,242,243,246,247,251],{},[30,239,241],{"href":240},"\u002Fdocs\u002Fgetting-started","Getting started"," walks through installing jawb\nand running your first observation. Add ",[34,244,245],{},"--json"," for machine-readable output. If you're automating\njawb from Rust, start with the ",[30,248,250],{"href":249},"\u002Fdocs\u002Fsdk\u002Frust-sdk","Rust SDK"," instead of\nshelling out to the CLI.",{"title":253,"searchDepth":254,"depth":254,"links":255},"",2,[256,257,258],{"id":16,"depth":254,"text":17},{"id":179,"depth":254,"text":180},{"id":234,"depth":254,"text":235},"What building an agent against jawb looks like today.","md",{},true,null,"\u002Fdocs\u002Fagents",{"title":5,"description":259},"docs\u002F7.agents","rgSn-Yk27unBNhkRBvIQ1dTIwbh2R-WUG0OpmQzu654",[269],{"title":270,"path":271,"stem":272,"children":273},"Documentation","\u002Fdocs","docs\u002F1.index",[274,275,279,283,287,307,348,361,365,367,368,371],{"title":270,"path":271,"stem":272},{"title":276,"path":277,"stem":278},"Protocol adapters","\u002Fdocs\u002Fprotocol","docs\u002F10.protocol",{"title":280,"path":281,"stem":282},"Extensions","\u002Fdocs\u002Fextensions","docs\u002F11.extensions",{"title":284,"path":285,"stem":286},"Roadmap and status","\u002Fdocs\u002Froadmap","docs\u002F12.roadmap",{"title":241,"path":240,"stem":288,"children":289},"docs\u002F2.getting-started\u002F1.index",[290,291,295,299,303],{"title":241,"path":240,"stem":288},{"title":292,"path":293,"stem":294},"Installation","\u002Fdocs\u002Fgetting-started\u002Finstallation","docs\u002F2.getting-started\u002F2.installation",{"title":296,"path":297,"stem":298},"Desktop app","\u002Fdocs\u002Fgetting-started\u002Fdesktop-app","docs\u002F2.getting-started\u002F3.desktop-app",{"title":300,"path":301,"stem":302},"Running the daemon","\u002Fdocs\u002Fgetting-started\u002Frunning-the-daemon","docs\u002F2.getting-started\u002F4.running-the-daemon",{"title":304,"path":305,"stem":306},"Using the CLI","\u002Fdocs\u002Fgetting-started\u002Fusing-the-cli","docs\u002F2.getting-started\u002F5.using-the-cli",{"title":308,"path":309,"stem":310,"children":311},"CLI reference","\u002Fdocs\u002Fcli","docs\u002F3.cli\u002F1.index",[312,313,317,321,325,328,332,336,340,344],{"title":308,"path":309,"stem":310},{"title":314,"path":315,"stem":316},"JSON envelope and exit codes","\u002Fdocs\u002Fcli\u002Fjson-and-exit-codes","docs\u002F3.cli\u002F10.json-and-exit-codes",{"title":318,"path":319,"stem":320},"jawb status","\u002Fdocs\u002Fcli\u002Fstatus","docs\u002F3.cli\u002F2.status",{"title":322,"path":323,"stem":324},"Tabs, profiles and sessions","\u002Fdocs\u002Fcli\u002Ftabs-and-profiles","docs\u002F3.cli\u002F3.tabs-and-profiles",{"title":326,"path":32,"stem":327},"jawb observe [\u003Curl>] [--full] [--interactive-only] [--js]","docs\u002F3.cli\u002F4.observe",{"title":329,"path":330,"stem":331},"jawb read [--format md|text|json] [--element \u003Cid>] [--full] [--js]","\u002Fdocs\u002Fcli\u002Fread","docs\u002F3.cli\u002F5.read",{"title":333,"path":334,"stem":335},"Act commands","\u002Fdocs\u002Fcli\u002Fact","docs\u002F3.cli\u002F6.act",{"title":337,"path":338,"stem":339},"See commands","\u002Fdocs\u002Fcli\u002Fsee","docs\u002F3.cli\u002F7.see",{"title":341,"path":342,"stem":343},"Policy and confirmation","\u002Fdocs\u002Fcli\u002Fpolicy","docs\u002F3.cli\u002F8.policy",{"title":345,"path":346,"stem":347},"Install lifecycle and profile settings","\u002Fdocs\u002Fcli\u002Flifecycle","docs\u002F3.cli\u002F9.lifecycle",{"title":349,"path":350,"stem":351,"children":352},"SDK reference","\u002Fdocs\u002Fsdk","docs\u002F4.sdk\u002F1.index",[353,354,357],{"title":349,"path":350,"stem":351},{"title":355,"path":249,"stem":356},"Rust SDK — jawb-sdk-rust","docs\u002F4.sdk\u002F2.rust-sdk",{"title":358,"path":359,"stem":360},"Website SDK — @4hum-ai\u002Fjawb-sdk","\u002Fdocs\u002Fsdk\u002Fwebsite-sdk","docs\u002F4.sdk\u002F3.website-sdk",{"title":362,"path":363,"stem":364},"Configuration","\u002Fdocs\u002Fconfig","docs\u002F5.config",{"title":139,"path":138,"stem":366},"docs\u002F6.webmcp",{"title":5,"path":264,"stem":266},{"title":369,"path":197,"stem":370},"MCP server","docs\u002F8.mcp",{"title":175,"path":174,"stem":372},"docs\u002F9.security",1792595702173]