{"_id":"@atomicbotai/computer-use","_rev":"8-d8031cc7aa598d33e69cf874ccb7ca0f","name":"@atomicbotai/computer-use","dist-tags":{"latest":"0.1.12"},"versions":{"0.1.5":{"name":"@atomicbotai/computer-use","version":"0.1.5","license":"MIT","_id":"@atomicbotai/computer-use@0.1.5","maintainers":[{"name":"dtorey","email":"dtorey@atomicbot.ai"},{"name":"alexkalina","email":"kalina@atomicbot.ai"}],"dist":{"shasum":"fe6834c454089bfb2f5b9cb92c308e6f9c516d0d","tarball":"https://registry.npmjs.org/@atomicbotai/computer-use/-/computer-use-0.1.5.tgz","fileCount":126,"integrity":"sha512-qCyabIfn1jlZtsOYRA0OHApNxOu68KSMVBm32SxltmHrbuToD5ZdAlbLVT58DUqnxYN8oVXkO4fYknF31Snmzw==","signatures":[{"sig":"MEUCIQDNBecSKTMpQaeNmHYWp6RAc5EeDwm3Vji7hjWof9JBWQIgQj43n3hBgFR5Z/bMr1Jx+F1f4RHLRcRwW+l0uiPz6Nc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":227773},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./ocr":{"types":"./dist/ocr/index.d.ts","default":"./dist/ocr/index.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./actions":{"types":"./dist/actions.d.ts","default":"./dist/actions.js"},"./overlay":{"types":"./dist/overlay/index.d.ts","default":"./dist/overlay/index.js"},"./session-lock":{"types":"./dist/session-lock.d.ts","default":"./dist/session-lock.js"},"./coord-mapping":{"types":"./dist/coord-mapping.d.ts","default":"./dist/coord-mapping.js"}},"gitHead":"39b7f20f55115c972ea6e5de8e618c53654808a7","scripts":{"test":"vitest run","build":"tsc","release":"./release.sh","test:watch":"vitest","publish:dry":"./publish.sh --dry-run","publish:npm":"./publish.sh"},"_npmUser":{"name":"alexkalina","email":"kalina@atomicbot.ai"},"_npmVersion":"10.9.4","description":"Framework-agnostic desktop computer-use tool for AI agents: screenshot, mouse, keyboard, OCR, overlay","directories":{},"_nodeVersion":"22.22.0","dependencies":{"usecomputer":"0.1.10","@sinclair/typebox":"^0.34.14"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.1.1","typescript":"^5.7.0","@types/node":"^25.6.0"},"_npmOperationalInternal":{"tmp":"tmp/computer-use_0.1.5_1775822928914_0.4343534797745212","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@atomicbotai/computer-use","version":"0.1.6","license":"MIT","_id":"@atomicbotai/computer-use@0.1.6","maintainers":[{"name":"dtorey","email":"dtorey@atomicbot.ai"},{"name":"alexkalina","email":"kalina@atomicbot.ai"}],"dist":{"shasum":"a6efa3aef5e3643562ab72dd5e8c000d249fb9e2","tarball":"https://registry.npmjs.org/@atomicbotai/computer-use/-/computer-use-0.1.6.tgz","fileCount":126,"integrity":"sha512-cW88u6677jDoOHaq882/ZG4hQBYJfwMr0oSvwaO/c40HNDVU+AZqsQSvrgfAFxxrz6CnGG7eiONHzObmyW93Ug==","signatures":[{"sig":"MEYCIQCf+1hUundYUdQFToP2RrUGYG1mioDVMkfORv8Y8FovdAIhAKw/mq5xFEMFAzYepdhxnDHoE1qZpZrau05hhIH3G5Lc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":227773},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./ocr":{"types":"./dist/ocr/index.d.ts","default":"./dist/ocr/index.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./actions":{"types":"./dist/actions.d.ts","default":"./dist/actions.js"},"./overlay":{"types":"./dist/overlay/index.d.ts","default":"./dist/overlay/index.js"},"./session-lock":{"types":"./dist/session-lock.d.ts","default":"./dist/session-lock.js"},"./coord-mapping":{"types":"./dist/coord-mapping.d.ts","default":"./dist/coord-mapping.js"}},"gitHead":"94cad1bb1542941948698425b7b31a85a7aef35b","scripts":{"test":"vitest run","build":"tsc","release":"./release.sh","test:watch":"vitest","publish:dry":"./publish.sh --dry-run","publish:npm":"./publish.sh"},"_npmUser":{"name":"alexkalina","email":"kalina@atomicbot.ai"},"_npmVersion":"10.9.4","description":"Framework-agnostic desktop computer-use tool for AI agents: screenshot, mouse, keyboard, OCR, overlay","directories":{},"_nodeVersion":"22.22.0","dependencies":{"usecomputer":"0.1.10","@sinclair/typebox":"^0.34.14"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.1.1","typescript":"^5.7.0","@types/node":"^25.6.0"},"_npmOperationalInternal":{"tmp":"tmp/computer-use_0.1.6_1775824016617_0.3340431123580865","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@atomicbotai/computer-use","version":"0.1.7","license":"MIT","_id":"@atomicbotai/computer-use@0.1.7","maintainers":[{"name":"dtorey","email":"dtorey@atomicbot.ai"},{"name":"alexkalina","email":"kalina@atomicbot.ai"}],"dist":{"shasum":"7b15d76e7eeb29283883abb8b3a40c73144bb87c","tarball":"https://registry.npmjs.org/@atomicbotai/computer-use/-/computer-use-0.1.7.tgz","fileCount":126,"integrity":"sha512-rzCbwb3cLu+7GOraUV281IJfz/GwfHLKXjpObWZWR4hCl+jXB9M/RUtXtiYjvln2LUO+D8n6RD2IbIVhYbfXag==","signatures":[{"sig":"MEUCIQD1SgHK0MgkKYCtXb9oBP4LuzcviSklCNR4tLeysBM13AIgZdMhoovtr71BrTUM338SGULXngJNrlwMVGad8Ssn6Ig=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":231865},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./ocr":{"types":"./dist/ocr/index.d.ts","default":"./dist/ocr/index.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./actions":{"types":"./dist/actions.d.ts","default":"./dist/actions.js"},"./overlay":{"types":"./dist/overlay/index.d.ts","default":"./dist/overlay/index.js"},"./session-lock":{"types":"./dist/session-lock.d.ts","default":"./dist/session-lock.js"},"./coord-mapping":{"types":"./dist/coord-mapping.d.ts","default":"./dist/coord-mapping.js"}},"gitHead":"94cad1bb1542941948698425b7b31a85a7aef35b","scripts":{"test":"vitest run","build":"tsc","release":"./release.sh","test:watch":"vitest","publish:dry":"./publish.sh --dry-run","publish:npm":"./publish.sh"},"_npmUser":{"name":"alexkalina","email":"kalina@atomicbot.ai"},"_npmVersion":"10.9.4","description":"Framework-agnostic desktop computer-use tool for AI agents: screenshot, mouse, keyboard, OCR, overlay","directories":{},"_nodeVersion":"22.22.0","dependencies":{"usecomputer":"0.1.11","@sinclair/typebox":"^0.34.14"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.1.1","typescript":"^5.7.0","@types/node":"^25.6.0"},"_npmOperationalInternal":{"tmp":"tmp/computer-use_0.1.7_1775855436886_0.0662175553239217","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@atomicbotai/computer-use","version":"0.1.8","license":"MIT","_id":"@atomicbotai/computer-use@0.1.8","maintainers":[{"name":"dtorey","email":"dtorey@atomicbot.ai"},{"name":"alexkalina","email":"kalina@atomicbot.ai"}],"dist":{"shasum":"33d998b2762fe2771359b1e8e2175ca43754e196","tarball":"https://registry.npmjs.org/@atomicbotai/computer-use/-/computer-use-0.1.8.tgz","fileCount":126,"integrity":"sha512-jSZtYGAgEhBcJZgExSveoq8l9ZW9AnFe8XCVSlarqK9K2zwG+8TgwqZHOTmPAjOuqutAvkw7po+vZ9nXGUaEPA==","signatures":[{"sig":"MEYCIQCNao+GJpIkJdkrKSgdzmBJp+iUwqlZq1+eG+OvkjB8BAIhAO9fbytIAK0yRMUIf3pTAZfO3zJOgQDsdt4FR4BZ8Mnt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":232395},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./ocr":{"types":"./dist/ocr/index.d.ts","default":"./dist/ocr/index.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./actions":{"types":"./dist/actions.d.ts","default":"./dist/actions.js"},"./overlay":{"types":"./dist/overlay/index.d.ts","default":"./dist/overlay/index.js"},"./session-lock":{"types":"./dist/session-lock.d.ts","default":"./dist/session-lock.js"},"./coord-mapping":{"types":"./dist/coord-mapping.d.ts","default":"./dist/coord-mapping.js"}},"gitHead":"94cad1bb1542941948698425b7b31a85a7aef35b","scripts":{"test":"vitest run","build":"tsc","release":"./release.sh","test:watch":"vitest","publish:dry":"./publish.sh --dry-run","publish:npm":"./publish.sh"},"_npmUser":{"name":"alexkalina","email":"kalina@atomicbot.ai"},"_npmVersion":"10.9.4","description":"Framework-agnostic desktop computer-use tool for AI agents: screenshot, mouse, keyboard, OCR, overlay","directories":{},"_nodeVersion":"22.22.0","dependencies":{"usecomputer":"0.1.11","@sinclair/typebox":"^0.34.14"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.1.1","typescript":"^5.7.0","@types/node":"^25.6.0"},"_npmOperationalInternal":{"tmp":"tmp/computer-use_0.1.8_1775855492522_0.41232135940342096","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"name":"@atomicbotai/computer-use","version":"0.1.9","license":"MIT","_id":"@atomicbotai/computer-use@0.1.9","maintainers":[{"name":"dtorey","email":"dtorey@atomicbot.ai"},{"name":"alexkalina","email":"kalina@atomicbot.ai"}],"dist":{"shasum":"bbb2a6d9a629a44034ac3db67372343f563eb4a9","tarball":"https://registry.npmjs.org/@atomicbotai/computer-use/-/computer-use-0.1.9.tgz","fileCount":126,"integrity":"sha512-sPYv6ncj7mUyfL25RYJXNpU6cnfBcUihd/fydNDfEMYrv/pBtU9TpXqlBINlNqZDh06QCWb8BiWP4cNvZTHh1Q==","signatures":[{"sig":"MEYCIQCqO1cNHOuPX6kQiihjtxKZ86k4ameA2qyx2CPw2L2rtwIhAKtDg/8XPfrNyMpUH5uO4NSvAcJARZuSZhh4EwSaZq0I","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":244796},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./ocr":{"types":"./dist/ocr/index.d.ts","default":"./dist/ocr/index.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./actions":{"types":"./dist/actions.d.ts","default":"./dist/actions.js"},"./overlay":{"types":"./dist/overlay/index.d.ts","default":"./dist/overlay/index.js"},"./session-lock":{"types":"./dist/session-lock.d.ts","default":"./dist/session-lock.js"},"./coord-mapping":{"types":"./dist/coord-mapping.d.ts","default":"./dist/coord-mapping.js"}},"gitHead":"7d97cb2999368b9eb859ebfee5b353f5fb2f6a04","scripts":{"test":"vitest run","build":"tsc","release":"./release.sh","test:watch":"vitest","publish:dry":"./publish.sh --dry-run","publish:npm":"./publish.sh"},"_npmUser":{"name":"alexkalina","email":"kalina@atomicbot.ai"},"_npmVersion":"10.9.4","description":"Framework-agnostic desktop computer-use tool for AI agents: screenshot, mouse, keyboard, OCR, overlay","directories":{},"_nodeVersion":"22.22.0","dependencies":{"usecomputer":"0.1.11","@sinclair/typebox":"^0.34.14"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.1.1","typescript":"^5.7.0","@types/node":"^25.6.0"},"_npmOperationalInternal":{"tmp":"tmp/computer-use_0.1.9_1776436153920_0.18229609840392547","host":"s3://npm-registry-packages-npm-production"}},"0.1.10":{"name":"@atomicbotai/computer-use","version":"0.1.10","license":"MIT","_id":"@atomicbotai/computer-use@0.1.10","maintainers":[{"name":"dtorey","email":"dtorey@atomicbot.ai"},{"name":"alexkalina","email":"kalina@atomicbot.ai"}],"dist":{"shasum":"5f915a298a96c52f34160256a4013e79b28fc5d4","tarball":"https://registry.npmjs.org/@atomicbotai/computer-use/-/computer-use-0.1.10.tgz","fileCount":126,"integrity":"sha512-hpsiK5DH2EynCd+XrzznB4h47t2RsoCNPdv4Mbv+Lz+5PrAWplIyMnsP15PAfx30bvqkXrNZPiQfT5xgOGcaEA==","signatures":[{"sig":"MEQCIA2NJljDVYuA6gr4xQ3JodWRizB2qLVvgaX1R4w4h2vCAiA1pauQx7gWvqst5vzHAReuBRPOKaV4z5XnrbLRaUHkHw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":244797},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./ocr":{"types":"./dist/ocr/index.d.ts","default":"./dist/ocr/index.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./actions":{"types":"./dist/actions.d.ts","default":"./dist/actions.js"},"./overlay":{"types":"./dist/overlay/index.d.ts","default":"./dist/overlay/index.js"},"./session-lock":{"types":"./dist/session-lock.d.ts","default":"./dist/session-lock.js"},"./coord-mapping":{"types":"./dist/coord-mapping.d.ts","default":"./dist/coord-mapping.js"}},"gitHead":"2690d2fa887ddb99e37ab631ed25fd3bef362d18","scripts":{"test":"vitest run","build":"tsc","release":"./release.sh","test:watch":"vitest","publish:dry":"./publish.sh --dry-run","publish:npm":"./publish.sh"},"_npmUser":{"name":"alexkalina","email":"kalina@atomicbot.ai"},"_npmVersion":"10.9.4","description":"Framework-agnostic desktop computer-use tool for AI agents: screenshot, mouse, keyboard, OCR, overlay","directories":{},"_nodeVersion":"22.22.0","dependencies":{"usecomputer":"0.1.10","@sinclair/typebox":"^0.34.14"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.1.1","typescript":"^5.7.0","@types/node":"^25.6.0"},"_npmOperationalInternal":{"tmp":"tmp/computer-use_0.1.10_1776448449331_0.5289343040984793","host":"s3://npm-registry-packages-npm-production"}},"0.1.11":{"name":"@atomicbotai/computer-use","version":"0.1.11","license":"MIT","_id":"@atomicbotai/computer-use@0.1.11","maintainers":[{"name":"dtorey","email":"dtorey@atomicbot.ai"},{"name":"alexkalina","email":"kalina@atomicbot.ai"}],"dist":{"shasum":"9df6acada7407359e2519fa88a19268a3fd01f08","tarball":"https://registry.npmjs.org/@atomicbotai/computer-use/-/computer-use-0.1.11.tgz","fileCount":126,"integrity":"sha512-AwSDSdJCytOvsGjRordEDnB2nlqoM44Ib+7xof8oSk2WJUs6eVZOAFSqcU1M1Ud27DM2F/zzw0TaPe417OqPzw==","signatures":[{"sig":"MEYCIQCpT0Zgj2A03a30Aye3u+81EZgwyoPq5ntK9IbawEMjrgIhANNYeCaSG9OggQ8xxmF9N2vcAqh4ZQSP1tPgmbM8oMnu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":244930},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./ocr":{"types":"./dist/ocr/index.d.ts","default":"./dist/ocr/index.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./actions":{"types":"./dist/actions.d.ts","default":"./dist/actions.js"},"./overlay":{"types":"./dist/overlay/index.d.ts","default":"./dist/overlay/index.js"},"./session-lock":{"types":"./dist/session-lock.d.ts","default":"./dist/session-lock.js"},"./coord-mapping":{"types":"./dist/coord-mapping.d.ts","default":"./dist/coord-mapping.js"}},"gitHead":"3531cbddb300d99bafdab11e103beaad89e9bf23","scripts":{"test":"vitest run","build":"tsc","release":"./release.sh","test:watch":"vitest","publish:dry":"./publish.sh --dry-run","publish:npm":"./publish.sh"},"_npmUser":{"name":"alexkalina","email":"kalina@atomicbot.ai"},"_npmVersion":"10.9.4","description":"Framework-agnostic desktop computer-use tool for AI agents: screenshot, mouse, keyboard, OCR, overlay","directories":{},"_nodeVersion":"22.22.0","dependencies":{"usecomputer":"0.1.10","@sinclair/typebox":"^0.34.14"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.1.1","typescript":"^5.7.0","@types/node":"^25.6.0"},"_npmOperationalInternal":{"tmp":"tmp/computer-use_0.1.11_1776449863910_0.6921426035593514","host":"s3://npm-registry-packages-npm-production"}},"0.1.12":{"name":"@atomicbotai/computer-use","version":"0.1.12","description":"Framework-agnostic desktop computer-use tool for AI agents: screenshot, mouse, keyboard, OCR, overlay","type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./actions":{"types":"./dist/actions.d.ts","default":"./dist/actions.js"},"./ocr":{"types":"./dist/ocr/index.d.ts","default":"./dist/ocr/index.js"},"./overlay":{"types":"./dist/overlay/index.d.ts","default":"./dist/overlay/index.js"},"./session-lock":{"types":"./dist/session-lock.d.ts","default":"./dist/session-lock.js"},"./coord-mapping":{"types":"./dist/coord-mapping.d.ts","default":"./dist/coord-mapping.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"}},"scripts":{"build":"tsc","test":"vitest run","test:watch":"vitest","release":"./release.sh","publish:npm":"./publish.sh","publish:dry":"./publish.sh --dry-run"},"dependencies":{"@sinclair/typebox":"^0.34.14","usecomputer":"0.1.10"},"devDependencies":{"@types/node":"^25.6.0","typescript":"^5.7.0","vitest":"^3.1.1"},"engines":{"node":">=22"},"license":"MIT","_id":"@atomicbotai/computer-use@0.1.12","gitHead":"dfb95eddbcaa4f281b3505bad4efdaf82b538dad","_nodeVersion":"22.22.0","_npmVersion":"10.9.4","dist":{"integrity":"sha512-0uY0S0A4N9JU8buuTlFZ1gakoJLD8ANjyYJrkXMMU7GHA88Heckxyg/NmL4RhWw/np6zLbVlBypQh09ppEg+zQ==","shasum":"baad8c8c9fa1ccc28496ab772f9a28826886a7dd","tarball":"https://registry.npmjs.org/@atomicbotai/computer-use/-/computer-use-0.1.12.tgz","fileCount":126,"unpackedSize":244945,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIBRViB4jQ/2u4bJNtJXeR8JB53/YLIULUV852UP5qaUsAiEAqZ1+j02OQ4kcdJGEztvu4Q3m2XcsLPshGCMqKCmNMc8="}]},"_npmUser":{"name":"alexkalina","email":"kalina@atomicbot.ai"},"directories":{},"maintainers":[{"name":"dtorey","email":"dtorey@atomicbot.ai"},{"name":"alexkalina","email":"kalina@atomicbot.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/computer-use_0.1.12_1776450637793_0.7038311583720169"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-10T12:08:48.813Z","modified":"2026-04-17T18:30:38.139Z","0.1.5":"2026-04-10T12:08:49.039Z","0.1.6":"2026-04-10T12:26:56.796Z","0.1.7":"2026-04-10T21:10:37.055Z","0.1.8":"2026-04-10T21:11:32.708Z","0.1.9":"2026-04-17T14:29:14.091Z","0.1.10":"2026-04-17T17:54:09.523Z","0.1.11":"2026-04-17T18:17:44.062Z","0.1.12":"2026-04-17T18:30:37.977Z"},"license":"MIT","description":"Framework-agnostic desktop computer-use tool for AI agents: screenshot, mouse, keyboard, OCR, overlay","maintainers":[{"name":"dtorey","email":"dtorey@atomicbot.ai"},{"name":"alexkalina","email":"kalina@atomicbot.ai"}],"readme":"# @atomicbotai/computer-use\n\n**Framework-agnostic desktop automation for AI agents.**\n\nGive your AI agent eyes and hands — screenshot the screen, click, type, scroll, drag, read text via OCR, and more. Works with any tool-calling LLM framework, MCP server, or custom pipeline.\n\n[![npm](https://img.shields.io/npm/v/@atomicbotai/computer-use)](https://www.npmjs.com/package/@atomicbotai/computer-use)\n[![license](https://img.shields.io/npm/l/@atomicbotai/computer-use)](./LICENSE)\n![node](https://img.shields.io/badge/node-%3E%3D22-brightgreen)\n\n---\n\n## Features\n\n| | Feature | Description |\n|---|---|---|\n| 📸 | **Screenshot** | Capture any display with automatic downscaling and grid overlay |\n| 📸 | **Screenshot Full** | Full-resolution capture with OCR text anchors |\n| 🖱️ | **Click / Double / Triple** | Precise clicking with coordinate mapping from screenshot space |\n| ⌨️ | **Type & Press** | Text input and keyboard shortcuts (modifiers, combos) |\n| 📜 | **Scroll** | Directional scrolling at any position |\n| 🔍 | **OCR** | Built-in text recognition (macOS Vision, Windows Media OCR) |\n| 🎯 | **Coord Mapping** | Automatic screenshot → screen coordinate translation |\n| 🛡️ | **Guardrails** | Prevents misclicks in dock/launcher and submit zones |\n| 🔒 | **Session Lock** | File-based lock prevents concurrent agent sessions |\n| 🟢 | **Overlay** | Native \"agent active\" indicator (macOS Swift, Windows PowerShell) |\n| 🐛 | **Debug Artifacts** | Save screenshots, OCR results, and tool outputs per action |\n| 📋 | **Clipboard** | Read/write clipboard contents |\n| 🚀 | **Open App** | Launch or switch apps by name (cross-platform) |\n| ↔️ | **Drag & Drop** | Native drag support via platform scripts |\n\n## Quick Start\n\n```bash\nnpm install @atomicbotai/computer-use\n```\n\n```typescript\nimport { createComputerTool } from \"@atomicbotai/computer-use\";\n\nconst tool = createComputerTool({\n  overlay: { enabled: true, color: \"00BFFF\", label: \"My Agent\" },\n  debugArtifacts: true,\n});\n\n// Take a screenshot\nconst screenshot = await tool.execute(\"call-1\", { action: \"screenshot\" });\n\n// Click at coordinates from the screenshot\nawait tool.execute(\"call-2\", { action: \"click\", x: 512, y: 384 });\n\n// Type text\nawait tool.execute(\"call-3\", { action: \"type\", text: \"Hello, world!\" });\n\n// Press a keyboard shortcut\nawait tool.execute(\"call-4\", { action: \"press\", text: \"cmd+s\" });\n```\n\n### Use with any LLM tool-calling framework\n\nThe returned `tool` object has a standard shape that plugs into any agent loop:\n\n```typescript\nconst tool = createComputerTool();\n\n// tool.name        → \"computer\"\n// tool.description → detailed prompt for the model\n// tool.schema      → JSON Schema (TypeBox) for tool parameters\n// tool.execute     → (toolCallId, args, signal?) => Promise<ToolResult>\n```\n\n## Supported Actions\n\n| Action | Parameters | Description |\n|--------|-----------|-------------|\n| `screenshot` | `display_index?` | Capture screen (auto-downscaled with grid overlay) |\n| `screenshot_full` | `display_index?` | Full-resolution capture + OCR text anchors |\n| `click` | `x`, `y`, `button?` | Single click at coordinates |\n| `double_click` | `x`, `y`, `button?` | Double click |\n| `triple_click` | `x`, `y`, `button?` | Triple click (select line) |\n| `type` | `text` | Type literal text as-is |\n| `press` | `text` | Keyboard shortcut (`cmd+v`, `enter`, `tab`) |\n| `submit_input` | — | Press Enter to submit current input |\n| `scroll` | `x?`, `y?`, `direction`, `amount?` | Scroll in any direction |\n| `cursor_position` | — | Get current cursor position |\n| `mouse_move` | `x`, `y` | Move cursor to position |\n| `drag` | `x`, `y`, `to_x`, `to_y` | Drag from one point to another |\n| `wait` | `duration?` | Pause execution (max 30s) |\n| `hold_key` | `text`, `duration?` | Hold a key combo (max 10s) |\n| `display_list` | — | List connected displays |\n| `read_clipboard` | — | Read clipboard contents |\n| `write_clipboard` | `text` | Write text to clipboard |\n| `open_app` | `app_name` | Launch application by name |\n| `switch_app` | `app_name` | Switch to application by name |\n\n## OCR: Built-in Text Recognition\n\nOne of the most powerful features of the library — **zero-dependency OCR** that uses native platform APIs. No Tesseract, no cloud services, no API keys, no extra binaries. It just works.\n\n### Why This Matters for AI Agents\n\nScreenshots alone are not enough. When an LLM looks at a downscaled screenshot, small text becomes unreadable — button labels, menu items, chat messages, form fields all blur together. The agent guesses coordinates and misses.\n\nOCR solves this by extracting text with **pixel-precise coordinates** directly from the screenshot. The agent gets:\n\n- **Anchor points** — `\"Send\" at (1450, 890)` — exact clickable coordinates for every text element\n- **Bounding boxes** — `left=1400, top=875, width=100, height=30` — the full region of each element\n- **Confidence scores** — so the agent knows which detections to trust\n- **Layout structure** — elements ordered top-to-bottom, left-to-right, matching how a human reads the screen\n\nThis turns a blurry screenshot into a structured map of the UI.\n\n### How It Works\n\nWhen you call `screenshot_full`, the library:\n\n1. Takes a **full-resolution** screenshot (no downscaling)\n2. Runs OCR via the **native platform engine** (no external deps)\n3. Selects the most useful text anchors (deduped, sorted by reading order)\n4. Builds a **layout map** with coordinates in screenshot-image space\n5. Generates a **prompt hint** for the LLM with anchor coordinates\n\nThe result returned to the model looks like:\n\n```\nFull-resolution screenshot captured (2560x1600) with grid overlay.\nOCR anchors: \"Inbox\" at (120, 45); \"Compose\" at (85, 130); \"Search mail\" at (450, 45).\nOCR layout: [e1 \"Inbox\" center=(120, 45) box=(80, 30, 80x30)] [e2 \"Compose\" center=(85, 130) box=(40, 115, 90x30)]\n```\n\nThe agent can now click `\"Compose\"` at `(85, 130)` instead of guessing where the button might be.\n\n### Platform Engines\n\n| Platform | Engine | How it runs |\n|----------|--------|-------------|\n| **macOS** | Apple Vision framework | Native Swift script via `xcrun swift` — no Xcode required |\n| **Windows** | Windows.Media.Ocr | PowerShell script using built-in UWP OCR API |\n| **Linux** | — | Not available yet (null adapter, graceful no-op) |\n\nBoth engines run **locally and offline**. No data leaves the machine. No API keys needed.\n\n### Standalone OCR Usage\n\nThe OCR subsystem is available as a separate import for use outside the computer tool:\n\n```typescript\nimport {\n  recognizeText,\n  buildOcrLayout,\n  summarizeOcr,\n  createOcrAdapter,\n  createMacOsVisionOcrAdapter,\n  createWindowsMediaOcrAdapter,\n  createNullOcrAdapter,\n} from \"@atomicbotai/computer-use/ocr\";\nimport type {\n  OcrResult,\n  OcrLine,\n  OcrBoundingBox,\n  OcrAnchorPoint,\n  OcrAdapter,\n  OcrLayout,\n  OcrSummary,\n} from \"@atomicbotai/computer-use/ocr\";\n\n// Recognize text from any image\nconst result = await recognizeText({\n  imagePath: \"./screenshot.png\",\n  imageWidth: 2560,\n  imageHeight: 1600,\n});\n\n// result.lines → array of detected text lines:\n// [\n//   {\n//     text: \"Compose\",\n//     confidence: 0.98,\n//     bbox: { left: 40, top: 115, width: 90, height: 30 },\n//     center: { x: 85, y: 130 }\n//   },\n//   ...\n// ]\n\n// Build a structured layout for LLM consumption\nconst layout = buildOcrLayout(result);\n// layout.elements → top elements with IDs, sorted by reading order\n// layout.promptHint → ready-to-use prompt string\n\n// Or get a compact summary with anchor points\nconst summary = summarizeOcr(result);\n// summary.text → 'OCR anchors: \"Inbox\" at (120, 45); \"Compose\" at (85, 130)'\n// summary.anchors → [{ text: \"Inbox\", x: 120, y: 45, confidence: 0.99 }, ...]\n```\n\n### Custom OCR Adapters\n\nYou can create your own OCR adapter (e.g. Tesseract for Linux) by implementing the `OcrAdapter` interface:\n\n```typescript\nimport type { OcrAdapter, RecognizeTextParams, OcrResult } from \"@atomicbotai/computer-use/ocr\";\n\nconst myAdapter: OcrAdapter = {\n  async recognizeText(params: RecognizeTextParams): Promise<OcrResult | null> {\n    // params.imagePath — path to the screenshot image\n    // params.imageWidth / imageHeight — image dimensions\n    // params.signal — AbortSignal for cancellation\n    //\n    // Return OcrResult with lines array, or null on failure\n    return {\n      engine: \"my-custom-engine\",\n      imageWidth: params.imageWidth,\n      imageHeight: params.imageHeight,\n      lines: [\n        {\n          text: \"Detected text\",\n          confidence: 0.95,\n          bbox: { left: 100, top: 200, width: 150, height: 25 },\n          center: { x: 175, y: 212 },\n        },\n      ],\n    };\n  },\n};\n```\n\n## Configuration\n\n```typescript\ntype ComputerToolOptions = {\n  overlay?: {\n    enabled?: boolean;  // Show \"agent active\" overlay (default: true)\n    color?: string;     // Hex color without # (default: \"00BFFF\")\n    label?: string;     // Overlay label (default: \"Atomic bot\")\n  };\n  debugArtifacts?: boolean;    // Save debug output per action\n  debugArtifactsDir?: string;  // Custom debug output directory\n  lockDir?: string;            // Custom session lock directory\n};\n```\n\n## Advanced: Subpath Imports\n\nThe library exposes its internal subsystems as separate entry points for advanced use cases.\n\n### Individual Actions\n\n```typescript\nimport { executeScreenshot, executeClick, executeType } from \"@atomicbotai/computer-use/actions\";\n\n// Build a custom tool with only the actions you need\nconst result = await executeScreenshot({\n  displayIndex: 0,\n  captureSource: \"screenshot_full\",\n  disableDownscale: true,\n});\n```\n\n### OCR (Standalone)\n\n```typescript\nimport {\n  recognizeText,\n  buildOcrLayout,\n  summarizeOcr,\n  createOcrAdapter,\n} from \"@atomicbotai/computer-use/ocr\";\nimport type { OcrResult, OcrAdapter } from \"@atomicbotai/computer-use/ocr\";\n\nconst ocrResult = await recognizeText({\n  imagePath: \"./screenshot.png\",\n  imageWidth: 1920,\n  imageHeight: 1080,\n});\n\nconst layout = buildOcrLayout(ocrResult);\nconst summary = summarizeOcr(ocrResult);\n```\n\n### Overlay\n\n```typescript\nimport {\n  configureOverlay,\n  showOverlay,\n  forceHideOverlay,\n} from \"@atomicbotai/computer-use/overlay\";\n\nconfigureOverlay({ enabled: true, color: \"FF5500\", label: \"My Bot\" });\nawait showOverlay();\n// ... do work ...\nawait forceHideOverlay();\n```\n\n### Session Lock\n\n```typescript\nimport {\n  configureLockDir,\n  tryAcquire,\n  releaseLock,\n  isLockHeldLocally,\n} from \"@atomicbotai/computer-use/session-lock\";\n\nconst result = await tryAcquire(\"my-session-id\");\nif (result.kind === \"blocked\") {\n  console.log(`Blocked by session: ${result.by}`);\n} else {\n  // ... do work ...\n  await releaseLock();\n}\n```\n\n### Coordinate Mapping\n\n```typescript\nimport { mapToScreen, storeCoordMap } from \"@atomicbotai/computer-use/coord-mapping\";\n\n// Store the coord map string from a screenshot result\nstoreCoordMap(\"0,0,1920,1080,1024,768\");\n\n// Map screenshot coordinates to screen points\nconst screenPoint = mapToScreen(512, 384);\n// → { x: 960, y: 540 }\n```\n\n## Platform Support\n\n| Feature | macOS | Windows | Linux |\n|---------|:-----:|:-------:|:-----:|\n| Screenshot | ✅ | ✅ | ✅ |\n| Click / Type / Press | ✅ | ✅ | ✅ |\n| Scroll | ✅ | ✅ | ✅ |\n| OCR | ✅ Vision | ✅ Media OCR | — |\n| Overlay | ✅ Swift | ✅ PowerShell | — |\n| Drag (native) | ✅ Swift | ✅ PowerShell | ✅ fallback |\n| Click animation | ✅ Swift | ✅ PowerShell | — |\n| Clipboard | ✅ pbcopy | ✅ PowerShell | ✅ xclip |\n\n## Architecture\n\n```\n┌─────────────────────────────────────────────────┐\n│              createComputerTool()                │\n│  ┌───────────────────────────────────────────┐   │\n│  │            Action Router                  │   │\n│  │  screenshot · click · type · press · ...  │   │\n│  └──────────────┬────────────────────────────┘   │\n│     ┌───────────┼───────────────┐                │\n│     ▼           ▼               ▼                │\n│  ┌──────┐  ┌─────────┐  ┌────────────┐          │\n│  │ OCR  │  │ Overlay  │  │ Guardrails │          │\n│  └──┬───┘  └────┬────┘  └────────────┘          │\n│     │           │                                │\n│  ┌──┴───────────┴──────────────────────┐         │\n│  │    usecomputer (native bridge)      │         │\n│  └──┬──────────┬───────────────┬───────┘         │\n│     ▼          ▼               ▼                 │\n│  macOS      Windows          Linux               │\n│  (Swift)    (PowerShell)     (X11/xdotool)       │\n└─────────────────────────────────────────────────┘\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}