# okati > okati is a command-line tool built for agents to use the web reliably. It lets your agent take actions on websites without having to navigate the browser itself. ## Install (one line, no account, no key) curl -fsSL https://okati.sh/install | sh brew install sankalpgunturi/okati/okati Needs node 20 or newer. The first command enrols this machine on its own; nothing to configure. ## Set up with your coding agent Works with Claude Code, OpenAI Codex, Cursor, and every other coding agent with terminal access. Paste this prompt into your agent: Read https://okati.sh/llms.txt (use curl if needed) and help me set up okati, a CLI built for agents to use the web reliably. Check my operating system, prerequisites, and any existing okati installation. Preserve working installations and credentials. If installation is needed, choose one documented method and ask for approval before installing software or changing configuration. Verify which executable runs, then run okati --version and okati --help. If a step fails, report the error and stop before making further changes. Once the CLI launches, ask which website and task I want to try, then help me complete it. Distinguish local installation checks from a successful web task. Never expose credentials or sign in, submit forms, make purchases, or change website data without my explicit approval. ## Use okati what can I do here: the site's commands, ranked by use okati [args] do it okati --help the arguments this command takes on this site okati --find search a long command list okati login sign in (password prompted, or --password-stdin) okati login code finish a sign-in that is waiting for a one-time code okati login status are we still signed in okati logout sign out okati --rediscover learn the site again from scratch Start every site with `okati `. Its output is the vocabulary; use only commands it lists. Commands with named arguments (a flight search, a delivery address) show their arguments in the menu: okati united.com search from=SFO to=JFK depart=2026-10-15 return=2026-10-22 okati doordash.com set-location location="350 5th Ave, New York, NY 10001" Examples: okati amazon.com okati amazon.com search "usb c hub" --limit=3 okati amazon.com cart add 1 okati amazon.com cart okati en.wikipedia.org search "hypertext" ## How to read a response Every command prints one JSON object and exits 0 when `ok` is true. `ok` means the command did what it says, not that the process survived: an add that could not be confirmed in the cart is `ok: false`. When `ok` is false, `error` names why (sign_in_required, not_available, value_not_accepted, off_site, no_results, ...) and `message` says it in a sentence. Report that to the user; do not retry the same call. - `next`: the commands you can run from here. Prefer these over guessing. - `results[].n`: result numbers. Later commands take `n`, for example `cart add 2`. - `via`: how the action ran, such as `replay`, `direct`, or `browser`. A reused action may still need a browser session; timing depends on the site and action. - `ms`: how long it took. - `fellBackTo`: present only when a fast path failed and the browser answered instead. For an unfamiliar website, start with `okati `. okati tries to discover its actions in a remote browser. Actions it successfully learns can become reusable commands. Discovery and replay can fail; inspect the response rather than assuming success. ### Can’t find the website you’re looking for? You can use okati with a website that isn’t on the map. Run the command with its domain, and okati will try to discover its actions in a remote browser. Commands it successfully learns become available for other agents to reuse. okati example.com Replace example.com with the website you want to use. ## Website demo Illustrative session with shortened output, as shown in the website terminal. ```text $ okati amazon.com { "next": [ "okati amazon.com search ", "okati amazon.com cart" ] } ``` ```text $ okati amazon.com search "anker usb c cable" { "ok": true, "results": [{ "n": 1, "asin": "B09LCJPZ1P", "title": "Anker USB C to USB C Cable", "price": 9.99 }], "next": ["okati amazon.com cart add 1"] } ``` ```text $ okati amazon.com cart add 1 { "ok": true, "status": "ok", "product": "https://www.amazon.com/dp/B09LCJPZ1P", "next": ["okati amazon.com cart"] } ``` ```text $ okati amazon.com cart { "ok": true, "count": 1, "subtotal": 9.99, "items": [{ "n": 1, "title": "Anker USB C to USB C Cable", "price": 9.99 }] } ``` ## Questions ### What is okati? okati is a command-line tool built for agents to use the web reliably. It lets your agent take actions on websites without having to navigate the browser itself. ### Why did you build okati? Browsers were built for humans, and much of what we do online still depends on them. As agents take on that work for us, they have to navigate those same interfaces, even though doing so is slow, costly, and unreliable. The need to use a browser isn’t going away, but agents shouldn’t have to figure out how to operate one every time. I built okati to make the web available through a command-line interface that models already know how to use, so agents have one tool to turn to when they need to get something done on the web. ### How does okati work? If okati hasn’t seen a website before, it opens a remote browser and discovers what it can do there. Your agent uses commands to take actions, and okati checks whether they succeeded. Actions it successfully learns become commands other agents can reuse, so they don’t have to work through the same browser steps again. 1. A new website 2. Discover and act in a remote browser 3. Verify and learn 4. Reuse the command ### How is okati different from existing browser tools? With tools such as [Chrome DevTools MCP](https://github.com/ChromeDevTools/chrome-devtools-mcp) and [Browser Use’s browser-harness](https://github.com/browser-use/browser-harness), your agent controls a real browser and works out how to use the website as it goes. It may inspect page elements, take screenshots, or examine network activity before deciding what to do next. okati handles that browser work behind commands your agent can use directly. When it already knows how to carry out an action, it can reuse that knowledge instead of making the agent work through the page again. - Model cost: okati: $0.033; Chrome DevTools MCP: $0.601 - Time per task: okati: 15s; Chrome DevTools MCP: 301s - Tokens: okati: 69.1k; Chrome DevTools MCP: 3.25m - Model turns: okati: 5; Chrome DevTools MCP: 68 [Learn more about the benchmarking.](https://okati.sh/benchmark.txt) ### Does it use my browser? okati uses a remote browser when it needs one, so it does not open your browser or inherit your existing sessions. That means your agent can run okati in a remote sandbox and still use the web without having to install or launch a browser there. ### Can I use websites that require a login? You can sign in to a website through okati when an action requires it. Your sign-in can carry across commands and browser sessions, but access can expire and you may need to sign in again. Sign out through okati when you’re finished. ### How does okati handle difficult websites? okati handles browser navigation and supported forms behind its commands, and can fall back to the browser when a fast route does not work. The goal is for your agent to rely on okati for that work. If a site blocks access or an action cannot be confirmed, okati reports what happened rather than claiming success. Passkey-only sign-in is not supported yet. ### How is it different from search and crawling tools? Search and extraction APIs, such as those from [Tavily](https://docs.tavily.com/documentation/api-reference/introduction), [Exa](https://exa.ai/docs/reference/search), and [Parallel](https://docs.parallel.ai/getting-started/overview), help agents find pages and retrieve their contents. okati focuses on actions exposed as site-specific commands, with learned routes that other agents can reuse. [Firecrawl also supports browser interactions](https://docs.firecrawl.dev/features/browser), including forms and sign-in. I’ve used it and found it useful, but my agents couldn’t carry out everything I needed them to do on a website. That experience helped shape what I wanted to build with okati. ### Why a CLI instead of MCP? I chose a CLI because, in my experience, models already know their way around command-line tools. I wanted to make the web available through an interface they could use with little explanation. MCP is a good fit for agents too, and models keep getting better at tool calls. okati could offer both. I built the CLI first because that's how I wanted to use it. Vote for the interface you’d use. If enough people want MCP, I’ll work on it. [Vote for MCP or CLI](https://okati.sh/#about) ### Is it really free? What's the catch? okati is free for individuals and noncommercial use. I'm paying for the remote browsers and infrastructure myself because I want people and their agents to use it without a paywall. I intend to keep it free for the foreseeable future. If usage grows, I'll explore ways to cover the infrastructure costs. The code uses the PolyForm Noncommercial license. If you want to use okati commercially or at your company, reach out and we can discuss a commercial license. ### What am I looking at in the graph? You're looking at a map of the websites and commands in okati's shared index. Each dot represents a website; click it to reveal the commands available there. Sites with similar commands and topics gather together, while larger dots and thicker connections show more recorded use, including failed runs. As okati learns new sites, they join the map automatically. ## Live - installs: 14 - commands run: 4,157 - sites indexed: 32 Machine-readable: https://okati.sh/stats.json reports usage totals. https://okati.sh/website-stats.json reports installs, indexed sites, and verified learned commands. Commands run and commands learned are different counts. https://okati.sh/graph.json provides a paginated public map of indexed websites, commands, and use counts. Follow nextCursor with ?after= until it is absent. A website missing from the map can still be tried through the CLI. ## Contact My name is Sankalp, and I’m the creator of okati. You can reach me at the links below with questions, feedback, bug reports, or ideas for working together. I usually respond within 24 hours. - [Email](mailto:sankalp@okati.sh) - [X](https://x.com/@sankalpgunturi) - [LinkedIn](https://linkedin.com/in/sankalpgunturi) ## Privacy and terms [Privacy Notice](https://okati.sh/privacy.txt) · [Terms of Use](https://okati.sh/terms.txt)