[{"data":1,"prerenderedAt":4},["ShallowReactive",2],{"readme:typesafe-computer-use":3},"\u003Cp align=\"center\">\n  \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fawlevin\u002Ftypesafe-computer-use\u002FHEAD\u002Fdocs\u002Fbanner.svg\" alt=\"typesafe-computer-use\" width=\"100%\" \u002F>\n\u003C\u002Fp>\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fawlevin\u002Ftypesafe-computer-use\u002Factions\u002Fworkflows\u002Fci.yaml\" rel=\"nofollow ugc noopener\">\u003Cimg alt=\"CI\" src=\"https:\u002F\u002Fgithub.com\u002Fawlevin\u002Ftypesafe-computer-use\u002Factions\u002Fworkflows\u002Fci.yaml\u002Fbadge.svg\" \u002F>\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fawlevin\u002Ftypesafe-computer-use\u002Fblob\u002FHEAD\u002FLICENSE\" rel=\"nofollow ugc noopener\">\u003Cimg alt=\"MIT license\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-MIT-blue.svg\" \u002F>\u003C\u002Fa>\n  \u003Cimg alt=\"Python 3.12+\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fpython-3.12%2B-3776AB?logo=python&amp;logoColor=white\" \u002F>\n  \u003Cimg alt=\"macOS, Windows experimental\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fplatform-macOS%20%7C%20Windows%20(experimental)-000000\" \u002F>\n  \u003Ca href=\"https:\u002F\u002Fdocs.typesafe.ai\" rel=\"nofollow ugc noopener\">\u003Cimg alt=\"TypeSafe\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fdecisions-TypeSafe%20jev-8b5cf6\" \u002F>\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fastral-sh\u002Fruff\" rel=\"nofollow ugc noopener\">\u003Cimg alt=\"Ruff\" src=\"https:\u002F\u002Fimg.shields.io\u002Fendpoint?url=https:\u002F\u002Fraw.githubusercontent.com\u002Fastral-sh\u002Fruff\u002Fmain\u002Fassets\u002Fbadge\u002Fv2.json\" \u002F>\u003C\u002Fa>\n\u003C\u002Fp>\u003Cp>\u003Cstrong>typesafe-computer-use\u003C\u002Fstrong> (jev for short) drives a Mac toward a goal you type in plain English,\nfor about a fiftieth of a cent per step. It reads the screen deterministically, asks a small\nclassifier which action comes next, and only calls a writing model when a text field genuinely\nneeds free text or the classifier has stopped and the screen needs reading.\u003C\u002Fp>\n\u003Cp>One idea runs through it: the classifier picks, code decides facts, and the writer only writes\nfree text. Anything a model would have to work out (a date, whether a field is focused, whether\na URL is clean) is computed in code and handed over as state. \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fawlevin\u002Ftypesafe-computer-use\u002Fblob\u002FHEAD\u002FVISION.md\" rel=\"nofollow ugc noopener\">VISION.md\u003C\u002Fa> says what\nit is for in a dozen lines.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>clicker \"go to techcrunch and take me to the checkout page for the cheapest tickets to their next upcoming event\" --act\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cblockquote>\n\u003Cp>\u003Cstrong>Beta.\u003C\u002Fstrong> This is under heavy development. Expect rough edges, and expect settings and\nbehavior to change between 0.x \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fawlevin\u002Ftypesafe-computer-use\u002Freleases\" rel=\"nofollow ugc noopener\">releases\u003C\u002Fa>.\nIt drives your real mouse and keyboard, so start with a dry run.\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Ch2>Why a classifier\u003C\u002Fh2>\n\u003Cp>Frontier-model computer use is capable and expensive: every step ships a screenshot and\nwaits several seconds for a plan. Most steps do not need a plan. They need one choice\nfrom a short list, made quickly and cheaply, with a confidence number you can gate on.\u003C\u002Fp>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fdocs.typesafe.ai\" rel=\"nofollow ugc noopener\">TypeSafe\u003C\u002Fa> sells exactly that: a decision model that answers\na \u003Ccode>Choice\u003C\u002Fcode> over up to 255 options with a full probability distribution and a calibrated\nconfidence, in a few hundred milliseconds, with free output tokens. This project is a\ncomputer-use loop built around it.\u003C\u002Fp>\n\u003Cp>Measured on the same screenshot and goal, one decision each:\u003C\u002Fp>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>\u003C\u002Fth>\n\u003Cth>typesafe (jev)\u003C\u002Fth>\n\u003Cth>Claude Opus 5, bare screenshot\u003C\u002Fth>\n\u003Cth>multiplier\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>input tokens\u003C\u002Ftd>\n\u003Ctd>4,882\u003C\u002Ftd>\n\u003Ctd>4,785\u003C\u002Ftd>\n\u003Ctd>same\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>cost per decision\u003C\u002Ftd>\n\u003Ctd>$0.0002\u003C\u002Ftd>\n\u003Ctd>$0.032\u003C\u002Ftd>\n\u003Ctd>155x cheaper\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>cost per decision, realistic loop with history\u003C\u002Ftd>\n\u003Ctd>$0.0002\u003C\u002Ftd>\n\u003Ctd>$0.035 to $0.08\u003C\u002Ftd>\n\u003Ctd>170x to 390x cheaper\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>cost per 12-step task\u003C\u002Ftd>\n\u003Ctd>$0.003\u003C\u002Ftd>\n\u003Ctd>$0.40 to $0.90\u003C\u002Ftd>\n\u003Ctd>130x to 300x cheaper\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>model latency\u003C\u002Ftd>\n\u003Ctd>0.13 to 0.38 s\u003C\u002Ftd>\n\u003Ctd>5.2 s\u003C\u002Ftd>\n\u003Ctd>14x to 40x faster\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>end-to-end step, with capture and OCR\u003C\u002Ftd>\n\u003Ctd>about 1.5 s\u003C\u002Ftd>\n\u003Ctd>about 5.5 s\u003C\u002Ftd>\n\u003Ctd>3.7x faster\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Cp>The honest caveat: the big model read the event dates off the pixels and compared them\nunaided. The classifier needed the date parsing described in\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fawlevin\u002Ftypesafe-computer-use\u002Fblob\u002FHEAD\u002Fdocs\u002Fhow-a-step-works.md\" rel=\"nofollow ugc noopener\">how a step works\u003C\u002Fa>. Every piece of reasoning the frontier model\ndoes for free has to be rebuilt here as deterministic state.\u003C\u002Fp>\n\u003Ch2>Install\u003C\u002Fh2>\n\u003Cp>macOS 14 or newer, Python 3.12 or newer, \u003Ca href=\"https:\u002F\u002Fdocs.astral.sh\u002Fuv\u002F\" rel=\"nofollow ugc noopener\">uv\u003C\u002Fa>. Windows 10 and 11\nare experimental; see \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fawlevin\u002Ftypesafe-computer-use\u002Fblob\u002FHEAD\u002Fdocs\u002Fwindows.md\" rel=\"nofollow ugc noopener\">Windows\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>git clone https:\u002F\u002Fgithub.com\u002Fawlevin\u002Ftypesafe-computer-use\ncd typesafe-computer-use\nuv sync\ncp .env.example .env     # fill in the keys\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>variable\u003C\u002Fth>\n\u003Cth>required\u003C\u002Fth>\n\u003Cth>purpose\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>\u003Ccode>TYPESAFE_API_KEY\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>yes\u003C\u002Ftd>\n\u003Ctd>every decision\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>ANTHROPIC_API_KEY\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>no\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>type_text\u003C\u002Fcode>, writer-proposed URLs, and the final answer\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>CLICKER_EMAIL\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>no\u003C\u002Ftd>\n\u003Ctd>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n",1793926099989]