{"_id":"@askjo/camoufox-browser","_rev":"12-fa6f284886e3a1b4bd30181c01a5a824","name":"@askjo/camoufox-browser","dist-tags":{"latest":"1.0.12"},"versions":{"1.0.0":{"name":"@askjo/camoufox-browser","version":"1.0.0","_id":"@askjo/camoufox-browser@1.0.0","maintainers":[{"name":"askjo","email":"oss+jo@askjo.ai"}],"dist":{"shasum":"98cded0ffc54b6312e7b44d9d5ba4235df8c399f","tarball":"https://registry.npmjs.org/@askjo/camoufox-browser/-/camoufox-browser-1.0.0.tgz","fileCount":33,"integrity":"sha512-472Y1woiSLtQhHmmJG3WrdM6sRJp6NR1W35/dbyU1oZJjarMmmAL1dqrrQZuqB2WdojCYHcP609IMolibECO2w==","signatures":[{"sig":"MEYCIQCb7WHv/YZgHjy27WJV/ceEQLJmr1uTUwWOFOLhigeFcwIhAI0+PGoKopCz3zShoFUY2M86zEHpRancR5WhxLGd+iJj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":150078},"main":"server-camoufox.js","gitHead":"5784a5b88f8f2ae7ace24d8a4804ba239a2856f3","scripts":{"test":"jest --runInBand --forceExit","start":"node server-camoufox.js","test:e2e":"jest --runInBand --forceExit tests/e2e","test:live":"RUN_LIVE_TESTS=1 jest --runInBand --forceExit tests/live","test:debug":"DEBUG_SERVER=1 jest --runInBand --forceExit","postinstall":"npx camoufox-js fetch || true","start:chrome":"node server.js"},"_npmUser":{"name":"askjo","email":"oss+jo@askjo.ai"},"openclaw":{"extensions":["plugin.ts"]},"_npmVersion":"11.6.1","description":"Headless browser automation server for AI agents - REST API with anti-detection, element refs, and session isolation","directories":{},"_nodeVersion":"24.10.0","dependencies":{"dotenv":"^17.2.3","express":"^4.18.2","playwright":"^1.50.0","camoufox-js":"^0.8.5","playwright-core":"^1.58.0","playwright-extra":"^4.3.6","puppeteer-extra-plugin-stealth":"^2.11.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0"},"_npmOperationalInternal":{"tmp":"tmp/camoufox-browser_1.0.0_1769904483249_0.07221279731116326","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @askjo/camofox-browser"},"1.0.1":{"name":"@askjo/camoufox-browser","version":"1.0.1","_id":"@askjo/camoufox-browser@1.0.1","maintainers":[{"name":"askjo","email":"oss+jo@askjo.ai"}],"dist":{"shasum":"aef314bd5b9b5063372a93a9bc97fd351b4f3aa0","tarball":"https://registry.npmjs.org/@askjo/camoufox-browser/-/camoufox-browser-1.0.1.tgz","fileCount":33,"integrity":"sha512-FzuLuS8oGnClihVxl7gH+Pz96u03pbDmSSS33++vaok3hzyQjwtX2sqWFg+fc6Fx2GLNIPs2WzUiDckMuW9oHg==","signatures":[{"sig":"MEYCIQD9JAKJWn5uXMLtUnBEnezaJcylWGJRpmXpb677pildgAIhAP/m9jPdCwV7r2/mHnQM1tcKh8QWumVtFp37VBCNQThG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":150078},"main":"server-camoufox.js","gitHead":"5784a5b88f8f2ae7ace24d8a4804ba239a2856f3","scripts":{"test":"jest --runInBand --forceExit","start":"node server-camoufox.js","test:e2e":"jest --runInBand --forceExit tests/e2e","test:live":"RUN_LIVE_TESTS=1 jest --runInBand --forceExit tests/live","test:debug":"DEBUG_SERVER=1 jest --runInBand --forceExit","postinstall":"npx camoufox-js fetch || true","start:chrome":"node server.js"},"_npmUser":{"name":"askjo","email":"oss+jo@askjo.ai"},"openclaw":{"extensions":["plugin.ts"]},"_npmVersion":"11.6.1","description":"Headless browser automation server for AI agents - REST API with anti-detection, element refs, and session isolation","directories":{},"_nodeVersion":"24.10.0","dependencies":{"dotenv":"^17.2.3","express":"^4.18.2","playwright":"^1.50.0","camoufox-js":"^0.8.5","playwright-core":"^1.58.0","playwright-extra":"^4.3.6","puppeteer-extra-plugin-stealth":"^2.11.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0"},"_npmOperationalInternal":{"tmp":"tmp/camoufox-browser_1.0.1_1769904569021_0.2145119147041108","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @askjo/camofox-browser"},"1.0.2":{"name":"@askjo/camoufox-browser","version":"1.0.2","_id":"@askjo/camoufox-browser@1.0.2","maintainers":[{"name":"askjo","email":"oss+jo@askjo.ai"}],"dist":{"shasum":"e1c7774ec29943b3d7967e6d45b0de99bb673b74","tarball":"https://registry.npmjs.org/@askjo/camoufox-browser/-/camoufox-browser-1.0.2.tgz","fileCount":33,"integrity":"sha512-zjqdJv04H92fvErrVE046bQJ4zonNspePb1s7Kds+oxoJ/hg6ZixMdZzEAzCnkqHXByEEXHSrXeXa1NaTN41Tw==","signatures":[{"sig":"MEYCIQDf0M9JFPKNqfX4WqSKDBRcFE3wKN5/CsSeceYW+NPZggIhAIlAAsTB+qixUC0MiNeo3mFjC/R7wdnbNsEP7GX1Q6ul","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":150083},"main":"server-camoufox.js","gitHead":"c35c293db6b7023d4f47fcda9951e7db32513971","scripts":{"test":"jest --runInBand --forceExit","start":"node server-camoufox.js","test:e2e":"jest --runInBand --forceExit tests/e2e","test:live":"RUN_LIVE_TESTS=1 jest --runInBand --forceExit tests/live","test:debug":"DEBUG_SERVER=1 jest --runInBand --forceExit","postinstall":"npx camoufox-js fetch || true","start:chrome":"node server.js"},"_npmUser":{"name":"askjo","email":"oss+jo@askjo.ai"},"openclaw":{"extensions":["plugin.ts"]},"_npmVersion":"11.6.1","description":"Headless browser automation server and OpenClaw plugin for AI agents - anti-detection, element refs, and session isolation","directories":{},"_nodeVersion":"24.10.0","dependencies":{"dotenv":"^17.2.3","express":"^4.18.2","playwright":"^1.50.0","camoufox-js":"^0.8.5","playwright-core":"^1.58.0","playwright-extra":"^4.3.6","puppeteer-extra-plugin-stealth":"^2.11.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0"},"_npmOperationalInternal":{"tmp":"tmp/camoufox-browser_1.0.2_1769905740821_0.9394868663742522","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @askjo/camofox-browser"},"1.0.3":{"name":"@askjo/camoufox-browser","version":"1.0.3","keywords":["browser","automation","headless","scraping","camoufox","anti-detection","ai-agent","openclaw","playwright","firefox"],"author":{"name":"Jo Inc","email":"hello@askjo.ai"},"license":"MIT","_id":"@askjo/camoufox-browser@1.0.3","maintainers":[{"name":"askjo","email":"oss+jo@askjo.ai"}],"homepage":"https://github.com/jo-inc/camoufox-browser#readme","bugs":{"url":"https://github.com/jo-inc/camoufox-browser/issues"},"dist":{"shasum":"cd10a70b4bfc9639ef88cccdde9377ad019c8c28","tarball":"https://registry.npmjs.org/@askjo/camoufox-browser/-/camoufox-browser-1.0.3.tgz","fileCount":10,"integrity":"sha512-jgw6PyumHHXoXVabVXtolf4vLtyHoWWiqTwJKfYJFIhbRnQODhHD9nVUVazn61RqV5iBPL8rYHhrzWqpBm6p6g==","signatures":[{"sig":"MEUCIQCUXL19UfTqhH81UZUO4232C8HWn1FFQOQi+guT/Is6VAIgU57SDE8T6sYDNC5105DL3brDQG9YuNrx4ajM6+slCqY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":60045},"main":"server-camoufox.js","engines":{"node":">=18"},"gitHead":"ee4cebdc97d8c2190f71a3c332326fa3ddd22670","scripts":{"test":"jest --runInBand --forceExit","start":"node server-camoufox.js","test:e2e":"jest --runInBand --forceExit tests/e2e","test:live":"RUN_LIVE_TESTS=1 jest --runInBand --forceExit tests/live","test:debug":"DEBUG_SERVER=1 jest --runInBand --forceExit","postinstall":"npx camoufox-js fetch || true","start:chrome":"node server.js"},"_npmUser":{"name":"askjo","email":"oss+jo@askjo.ai"},"openclaw":{"extensions":["plugin.ts"]},"repository":{"url":"git+https://github.com/jo-inc/camoufox-browser.git","type":"git"},"_npmVersion":"11.6.1","description":"Headless browser automation server and OpenClaw plugin for AI agents - anti-detection, element refs, and session isolation","directories":{},"_nodeVersion":"24.10.0","dependencies":{"dotenv":"^17.2.3","express":"^4.18.2","playwright":"^1.50.0","camoufox-js":"^0.8.5","playwright-core":"^1.58.0","playwright-extra":"^4.3.6","puppeteer-extra-plugin-stealth":"^2.11.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0"},"_npmOperationalInternal":{"tmp":"tmp/camoufox-browser_1.0.3_1769906047400_0.17948992163438038","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @askjo/camofox-browser"},"1.0.5":{"name":"@askjo/camoufox-browser","version":"1.0.5","keywords":["browser","automation","headless","scraping","camoufox","anti-detection","ai-agent","openclaw","clawdbot","moltbot","playwright","firefox"],"author":{"name":"Jo Inc","email":"hello@askjo.ai"},"license":"MIT","_id":"@askjo/camoufox-browser@1.0.5","maintainers":[{"name":"askjo","email":"oss+jo@askjo.ai"}],"homepage":"https://github.com/jo-inc/camoufox-browser#readme","bugs":{"url":"https://github.com/jo-inc/camoufox-browser/issues"},"dist":{"shasum":"2ad0e9946a7dd7321a7af9fc39311a46dc46f25b","tarball":"https://registry.npmjs.org/@askjo/camoufox-browser/-/camoufox-browser-1.0.5.tgz","fileCount":10,"integrity":"sha512-NmXPeqievdzXeu5o66vSEN5tebGcnIk6YPHCQoQa+9R660euUgQICF0d7IZOtBm2haXE0+c6F3WFZbu/3FXArQ==","signatures":[{"sig":"MEYCIQD1df7jrcncRBKu69YsZvz/aMdMz4mnqsvzThIebroS1QIhAKOvEdHTsCYc6BhVtcQWK5Pf71l4eg04frc6IWxqcmGn","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":61272},"main":"server-camoufox.js","engines":{"node":">=18"},"gitHead":"ee4cebdc97d8c2190f71a3c332326fa3ddd22670","scripts":{"test":"jest --runInBand --forceExit","start":"node server-camoufox.js","test:e2e":"jest --runInBand --forceExit tests/e2e","test:live":"RUN_LIVE_TESTS=1 jest --runInBand --forceExit tests/live","test:debug":"DEBUG_SERVER=1 jest --runInBand --forceExit","postinstall":"npx camoufox-js fetch || true","start:chrome":"node server.js"},"_npmUser":{"name":"askjo","email":"oss+jo@askjo.ai"},"openclaw":{"extensions":["plugin.ts"]},"repository":{"url":"git+https://github.com/jo-inc/camoufox-browser.git","type":"git"},"_npmVersion":"11.6.1","description":"Headless browser automation server and OpenClaw plugin for AI agents - anti-detection, element refs, and session isolation","directories":{},"_nodeVersion":"24.10.0","dependencies":{"dotenv":"^17.2.3","express":"^4.18.2","playwright":"^1.50.0","camoufox-js":"^0.8.5","playwright-core":"^1.58.0","playwright-extra":"^4.3.6","puppeteer-extra-plugin-stealth":"^2.11.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0"},"_npmOperationalInternal":{"tmp":"tmp/camoufox-browser_1.0.5_1769907906714_0.7466155263951773","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @askjo/camofox-browser"},"1.0.6":{"name":"@askjo/camoufox-browser","version":"1.0.6","keywords":["browser","automation","headless","scraping","camoufox","anti-detection","ai-agent","openclaw","clawdbot","moltbot","playwright","firefox"],"author":{"name":"Jo Inc","email":"oss@askjo.ai"},"license":"MIT","_id":"@askjo/camoufox-browser@1.0.6","maintainers":[{"name":"askjo","email":"oss+jo@askjo.ai"}],"homepage":"https://github.com/jo-inc/camoufox-browser#readme","bugs":{"url":"https://github.com/jo-inc/camoufox-browser/issues"},"dist":{"shasum":"a3d1e4c2ebe9813e52f26a7424bd742afd468f71","tarball":"https://registry.npmjs.org/@askjo/camoufox-browser/-/camoufox-browser-1.0.6.tgz","fileCount":10,"integrity":"sha512-r4KSVQyLQVYIeAWdqf1Cp3juKVTxh8UYc6nXWkaycuIGgO4KcABGdk91vPEBfQUNPsVEPwDQG2OwS8VDN93Daw==","signatures":[{"sig":"MEYCIQDDXW6jBsBKriQNHLsX6ZsQRYzQmGvmdBpQIFsCd58hMQIhALKMazbKrR7URgKEsrp5ixgliT3Ih2GPhhqdVqWqJvS9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":63565},"main":"server-camoufox.js","engines":{"node":">=18"},"gitHead":"ee4cebdc97d8c2190f71a3c332326fa3ddd22670","scripts":{"test":"jest --runInBand --forceExit","start":"node server-camoufox.js","test:e2e":"jest --runInBand --forceExit tests/e2e","test:live":"RUN_LIVE_TESTS=1 jest --runInBand --forceExit tests/live","test:debug":"DEBUG_SERVER=1 jest --runInBand --forceExit","postinstall":"npx camoufox-js fetch || true","start:chrome":"node server.js"},"_npmUser":{"name":"askjo","email":"oss+jo@askjo.ai"},"openclaw":{"extensions":["plugin.ts"]},"repository":{"url":"git+https://github.com/jo-inc/camoufox-browser.git","type":"git"},"_npmVersion":"11.6.1","description":"Headless browser automation server and OpenClaw plugin for AI agents - anti-detection, element refs, and session isolation","directories":{},"_nodeVersion":"24.10.0","dependencies":{"dotenv":"^17.2.3","express":"^4.18.2","playwright":"^1.50.0","camoufox-js":"^0.8.5","playwright-core":"^1.58.0","playwright-extra":"^4.3.6","puppeteer-extra-plugin-stealth":"^2.11.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0"},"_npmOperationalInternal":{"tmp":"tmp/camoufox-browser_1.0.6_1769909000504_0.5444273924476069","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @askjo/camofox-browser"},"1.0.7":{"name":"@askjo/camoufox-browser","version":"1.0.7","keywords":["browser","automation","headless","scraping","camoufox","anti-detection","ai-agent","openclaw","clawdbot","moltbot","playwright","firefox"],"author":{"name":"Jo Inc","email":"oss@askjo.ai"},"license":"MIT","_id":"@askjo/camoufox-browser@1.0.7","maintainers":[{"name":"askjo","email":"oss+jo@askjo.ai"}],"homepage":"https://github.com/jo-inc/camoufox-browser#readme","bugs":{"url":"https://github.com/jo-inc/camoufox-browser/issues"},"dist":{"shasum":"73d7b282b995b79730fb2085093ca0e0f8fc4f92","tarball":"https://registry.npmjs.org/@askjo/camoufox-browser/-/camoufox-browser-1.0.7.tgz","fileCount":10,"integrity":"sha512-d8R58iXJIxx0JZMv0OKxlvqcKeabFPbgm+tlC2ER896L2vQPYXjeg5DMKAfV6S9lhd/It9JGjOc7D7O9ZVkSHQ==","signatures":[{"sig":"MEUCIQDmJTjT3i+x1VoJb7/uQvVnoQf4pYZ6lh91aeyo27ri3gIgPe2FDO95vACyK1qNk9m8Jo/Oom/XYF6v0DHXH2NO0kg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":63854},"main":"server-camoufox.js","engines":{"node":">=18"},"gitHead":"ee4cebdc97d8c2190f71a3c332326fa3ddd22670","scripts":{"test":"jest --runInBand --forceExit","start":"node server-camoufox.js","test:e2e":"jest --runInBand --forceExit tests/e2e","test:live":"RUN_LIVE_TESTS=1 jest --runInBand --forceExit tests/live","test:debug":"DEBUG_SERVER=1 jest --runInBand --forceExit","postinstall":"npx camoufox-js fetch || true","start:chrome":"node server.js"},"_npmUser":{"name":"askjo","email":"oss+jo@askjo.ai"},"openclaw":{"extensions":["plugin.ts"]},"repository":{"url":"git+https://github.com/jo-inc/camoufox-browser.git","type":"git"},"_npmVersion":"11.6.1","description":"Headless browser automation server and OpenClaw plugin for AI agents - anti-detection, element refs, and session isolation","directories":{},"_nodeVersion":"24.10.0","dependencies":{"dotenv":"^17.2.3","express":"^4.18.2","playwright":"^1.50.0","camoufox-js":"^0.8.5","playwright-core":"^1.58.0","playwright-extra":"^4.3.6","puppeteer-extra-plugin-stealth":"^2.11.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0"},"_npmOperationalInternal":{"tmp":"tmp/camoufox-browser_1.0.7_1769909161731_0.5123653028394477","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @askjo/camofox-browser"},"1.0.8":{"name":"@askjo/camoufox-browser","version":"1.0.8","keywords":["browser","automation","headless","scraping","camoufox","anti-detection","ai-agent","openclaw","clawdbot","moltbot","playwright","firefox"],"author":{"name":"Jo Inc","email":"oss@askjo.ai"},"license":"MIT","_id":"@askjo/camoufox-browser@1.0.8","maintainers":[{"name":"askjo","email":"oss+jo@askjo.ai"}],"homepage":"https://github.com/jo-inc/camoufox-browser#readme","bugs":{"url":"https://github.com/jo-inc/camoufox-browser/issues"},"dist":{"shasum":"83c6db5e788a3173eec6d97227c2e249aca38d61","tarball":"https://registry.npmjs.org/@askjo/camoufox-browser/-/camoufox-browser-1.0.8.tgz","fileCount":10,"integrity":"sha512-TJec+IART8Y3pxupsy/WyA1iM5t21GIsQFGKmngZOEICm8zi388neg/eOJyWH4YPdk+G2Dq17gHSqsi7/XBw+A==","signatures":[{"sig":"MEUCIQDD3PlIjoQV3i8LcHfKNzABKGcVXQdqd889Lfbc7J/UVAIgCVIAU5dBS8ke3V001IigIwc9rzkH6Jo3GopEAkWwY00=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":63866},"main":"server-camoufox.js","engines":{"node":">=18"},"gitHead":"ee4cebdc97d8c2190f71a3c332326fa3ddd22670","scripts":{"test":"jest --runInBand --forceExit","start":"node server-camoufox.js","test:e2e":"jest --runInBand --forceExit tests/e2e","test:live":"RUN_LIVE_TESTS=1 jest --runInBand --forceExit tests/live","test:debug":"DEBUG_SERVER=1 jest --runInBand --forceExit","postinstall":"npx camoufox-js fetch || true","start:chrome":"node server.js"},"_npmUser":{"name":"askjo","email":"oss+jo@askjo.ai"},"openclaw":{"extensions":["plugin.ts"]},"repository":{"url":"git+https://github.com/jo-inc/camoufox-browser.git","type":"git"},"_npmVersion":"11.6.1","description":"Headless browser automation server and OpenClaw plugin for AI agents - anti-detection, element refs, and session isolation","directories":{},"_nodeVersion":"24.10.0","dependencies":{"dotenv":"^17.2.3","express":"^4.18.2","playwright":"^1.50.0","camoufox-js":"^0.8.5","playwright-core":"^1.58.0","playwright-extra":"^4.3.6","puppeteer-extra-plugin-stealth":"^2.11.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0"},"_npmOperationalInternal":{"tmp":"tmp/camoufox-browser_1.0.8_1769909235661_0.13419395442598692","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @askjo/camofox-browser"},"1.0.9":{"name":"@askjo/camoufox-browser","version":"1.0.9","keywords":["browser","automation","headless","scraping","camoufox","anti-detection","ai-agent","openclaw","clawdbot","moltbot","playwright","firefox"],"author":{"name":"Jo Inc","email":"oss@askjo.ai"},"license":"MIT","_id":"@askjo/camoufox-browser@1.0.9","maintainers":[{"name":"askjo","email":"oss+jo@askjo.ai"}],"homepage":"https://github.com/jo-inc/camoufox-browser#readme","bugs":{"url":"https://github.com/jo-inc/camoufox-browser/issues"},"dist":{"shasum":"def4f993797b860cac12c76775fec920f341c91a","tarball":"https://registry.npmjs.org/@askjo/camoufox-browser/-/camoufox-browser-1.0.9.tgz","fileCount":10,"integrity":"sha512-t67szihZt0QJqctH8wUS8FzK5mmhxEd2MPVfFdw/JqTzKiY2j95A7wDidXUh7OCYpUAHUzR/XFuTazzVUzUuMg==","signatures":[{"sig":"MEUCIQCrGB3iWRxMcjLLhwAtSvWS21Tf4ubLgCqq2yYDHj7ymAIgGoEMS0WAC464xTuaSafWxK0a/+AUu9z4pwt/h/ew/Ok=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":63896},"main":"server-camoufox.js","engines":{"node":">=18"},"gitHead":"ee4cebdc97d8c2190f71a3c332326fa3ddd22670","scripts":{"test":"jest --runInBand --forceExit","start":"node server-camoufox.js","test:e2e":"jest --runInBand --forceExit tests/e2e","test:live":"RUN_LIVE_TESTS=1 jest --runInBand --forceExit tests/live","test:debug":"DEBUG_SERVER=1 jest --runInBand --forceExit","postinstall":"npx camoufox-js fetch || true","start:chrome":"node server.js"},"_npmUser":{"name":"askjo","email":"oss+jo@askjo.ai"},"openclaw":{"extensions":["plugin.ts"]},"repository":{"url":"git+https://github.com/jo-inc/camoufox-browser.git","type":"git"},"_npmVersion":"11.6.1","description":"Headless browser automation server and OpenClaw plugin for AI agents - anti-detection, element refs, and session isolation","directories":{},"_nodeVersion":"24.10.0","dependencies":{"dotenv":"^17.2.3","express":"^4.18.2","playwright":"^1.50.0","camoufox-js":"^0.8.5","playwright-core":"^1.58.0","playwright-extra":"^4.3.6","puppeteer-extra-plugin-stealth":"^2.11.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0"},"_npmOperationalInternal":{"tmp":"tmp/camoufox-browser_1.0.9_1769909557641_0.39420897884825545","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @askjo/camofox-browser"},"1.0.11":{"name":"@askjo/camoufox-browser","version":"1.0.11","keywords":["browser","automation","headless","scraping","camoufox","anti-detection","ai-agent","openclaw","clawdbot","moltbot","playwright","firefox"],"author":{"name":"Jo Inc","email":"oss@askjo.ai"},"license":"MIT","_id":"@askjo/camoufox-browser@1.0.11","maintainers":[{"name":"askjo","email":"oss+jo@askjo.ai"}],"homepage":"https://github.com/jo-inc/camoufox-browser#readme","bugs":{"url":"https://github.com/jo-inc/camoufox-browser/issues"},"dist":{"shasum":"2854234f4388e7e7b9c33572df0030f8bdc2b27a","tarball":"https://registry.npmjs.org/@askjo/camoufox-browser/-/camoufox-browser-1.0.11.tgz","fileCount":10,"integrity":"sha512-W01JqDwDtJZpaUt1Lvn9lv8swrGpCsIEIJmIyZgTWb+rZ56LqnJwLPEOAq4EzfQTtr8XI/k81mUO4uMJUDeUtA==","signatures":[{"sig":"MEYCIQDsvq0u1cqTRIveJs4upJ743okOqzdpD5xOoCjTVrYAugIhAIxG4Ah3apifOT2Pu/kzDV9j7E5ICUQ/VumMvNIlFIZC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":82162},"main":"server-camoufox.js","engines":{"node":">=18"},"gitHead":"4673bb629d1450de0415a490109f8fd68d518aa7","scripts":{"test":"jest --runInBand --forceExit","start":"node server-camoufox.js","test:e2e":"jest --runInBand --forceExit tests/e2e","test:live":"RUN_LIVE_TESTS=1 jest --runInBand --forceExit tests/live","test:debug":"DEBUG_SERVER=1 jest --runInBand --forceExit","postinstall":"npx camoufox-js fetch || true","start:chrome":"node server.js"},"_npmUser":{"name":"askjo","email":"oss+jo@askjo.ai"},"openclaw":{"extensions":["plugin.ts"]},"repository":{"url":"git+https://github.com/jo-inc/camoufox-browser.git","type":"git"},"_npmVersion":"11.6.1","description":"Headless browser automation server and OpenClaw plugin for AI agents - anti-detection, element refs, and session isolation","directories":{},"_nodeVersion":"24.10.0","dependencies":{"dotenv":"^17.2.3","express":"^4.18.2","playwright":"^1.50.0","camoufox-js":"^0.8.5","playwright-core":"^1.58.0","playwright-extra":"^4.3.6","puppeteer-extra-plugin-stealth":"^2.11.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0"},"_npmOperationalInternal":{"tmp":"tmp/camoufox-browser_1.0.11_1769921231755_0.1012387104245962","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @askjo/camofox-browser"},"1.0.12":{"name":"@askjo/camoufox-browser","version":"1.0.12","keywords":["browser","automation","headless","scraping","camoufox","anti-detection","ai-agent","openclaw","clawdbot","moltbot","playwright","firefox"],"author":{"name":"Jo Inc","email":"oss@askjo.ai"},"license":"MIT","_id":"@askjo/camoufox-browser@1.0.12","maintainers":[{"name":"askjo","email":"oss+jo@askjo.ai"}],"homepage":"https://github.com/jo-inc/camoufox-browser#readme","bugs":{"url":"https://github.com/jo-inc/camoufox-browser/issues"},"dist":{"shasum":"41150b494f46030deadd4e1162e856bc71cfa1fe","tarball":"https://registry.npmjs.org/@askjo/camoufox-browser/-/camoufox-browser-1.0.12.tgz","fileCount":10,"integrity":"sha512-MxRvjK6SkX6zJSNleoO32g9iwhJAcXpaAgj4pik7y2SrYXqcHllpG7FfLkKE7d5bnBt7pO82rdarVYu6xtW2RA==","signatures":[{"sig":"MEYCIQCgzz/Bwh/bYoYuyvE83yM6Woovb69OnnqzyfSljVwriwIhANmi3J4mDiDHPSDA26kvm5RRS1VPBIAw1Kk4AJeo/AqY","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":82580},"main":"server-camoufox.js","engines":{"node":">=18"},"gitHead":"08e18660840cab816bc8555dc7d5a02a167e2478","scripts":{"test":"jest --runInBand --forceExit","start":"node server-camoufox.js","test:e2e":"jest --runInBand --forceExit tests/e2e","test:live":"RUN_LIVE_TESTS=1 jest --runInBand --forceExit tests/live","test:debug":"DEBUG_SERVER=1 jest --runInBand --forceExit","postinstall":"npx camoufox-js fetch || true","start:chrome":"node server.js"},"_npmUser":{"name":"askjo","email":"oss+jo@askjo.ai"},"openclaw":{"extensions":["plugin.ts"]},"repository":{"url":"git+https://github.com/jo-inc/camoufox-browser.git","type":"git"},"_npmVersion":"11.6.1","description":"Headless browser automation server and OpenClaw plugin for AI agents - anti-detection, element refs, and session isolation","directories":{},"_nodeVersion":"24.10.0","dependencies":{"dotenv":"^17.2.3","express":"^4.18.2","playwright":"^1.50.0","camoufox-js":"^0.8.5","playwright-core":"^1.58.0","playwright-extra":"^4.3.6","puppeteer-extra-plugin-stealth":"^2.11.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0"},"_npmOperationalInternal":{"tmp":"tmp/camoufox-browser_1.0.12_1769980091266_0.48117481691722075","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @askjo/camofox-browser"}},"time":{"created":"2026-02-01T00:08:03.146Z","modified":"2026-02-10T16:57:39.599Z","1.0.0":"2026-02-01T00:08:03.382Z","1.0.1":"2026-02-01T00:09:29.178Z","1.0.2":"2026-02-01T00:29:00.956Z","1.0.3":"2026-02-01T00:34:07.545Z","1.0.5":"2026-02-01T01:05:06.869Z","1.0.6":"2026-02-01T01:23:20.649Z","1.0.7":"2026-02-01T01:26:01.880Z","1.0.8":"2026-02-01T01:27:15.865Z","1.0.9":"2026-02-01T01:32:37.782Z","1.0.11":"2026-02-01T04:47:11.890Z","1.0.12":"2026-02-01T21:08:11.420Z"},"bugs":{"url":"https://github.com/jo-inc/camoufox-browser/issues"},"author":{"name":"Jo Inc","email":"oss@askjo.ai"},"license":"MIT","homepage":"https://github.com/jo-inc/camoufox-browser#readme","keywords":["browser","automation","headless","scraping","camoufox","anti-detection","ai-agent","openclaw","clawdbot","moltbot","playwright","firefox"],"repository":{"url":"git+https://github.com/jo-inc/camoufox-browser.git","type":"git"},"description":"Headless browser automation server and OpenClaw plugin for AI agents - anti-detection, element refs, and session isolation","maintainers":[{"name":"askjo","email":"oss+jo@askjo.ai"}],"readme":"# camoufox-browser\n\nA headless browser automation server designed for AI agents. Powered by [Camoufox](https://camoufox.com) - a Firefox-based browser with C++ anti-detection that bypasses bot detection including Google captcha.\n\nThis is the same browser engine that powers [askjo.ai](https://askjo.ai)'s web scraping capabilities.\n\n**Perfect for:** [OpenClaw](https://openclaw.ai), Claude Code, LangChain agents, AutoGPT, and any AI system that needs to browse the web.\n\n## Motivation\n\nAI agents need to browse the web, but current solutions have significant limitations:\n\n- **Playwright/Puppeteer + stealth plugins** get detected and blocked by Google, Cloudflare, and most anti-bot systems. JavaScript-level evasion isn't enough.\n- **Headless Chrome** is trivially fingerprinted. Sites check for hundreds of browser characteristics that reveal automation.\n- **API-based scrapers** (Browserless, ScrapingBee) work but cost money per request and add latency.\n- **Raw HTTP requests** can't handle JavaScript-rendered content or complex interactions.\n\nCamoufox solves this with **C++ level anti-detection** baked into the Firefox source code itself - not a plugin that can be detected, but fundamental changes to how the browser reports its fingerprint. This is the same approach used by commercial anti-detect browsers.\n\nThis project wraps Camoufox in a simple REST API optimized for AI agents: accessibility snapshots instead of bloated HTML, stable element refs for reliable clicking, and search macros for common sites.\n\n## Features\n\n- **Anti-Detection** - Camoufox engine (Firefox-based) with C++ fingerprint spoofing, bypasses Google captcha\n- **Element Refs** - Stable `e1`, `e2`, `e3` references for clicking/typing\n- **Session Isolation** - Separate cookies/storage per user, tabs grouped by conversation\n- **Search Macros** - 13 built-in URL macros (`@google_search`, `@youtube_search`, etc.)\n- **Token-Efficient** - Accessibility snapshots instead of full HTML (90% smaller)\n- **Docker Ready** - Production Dockerfile with pre-baked Camoufox binary\n\n## Quick Start\n\n### OpenClaw Plugin\n\nInstall as an OpenClaw plugin for agent tool access:\n\n```bash\nopenclaw plugins install @askjo/camoufox-browser\n```\n\nThen start the server and configure:\n\n```yaml\n# ~/.openclaw/openclaw.json\nplugins:\n  entries:\n    camoufox-browser:\n      enabled: true\n      config:\n        url: \"http://localhost:9377\"\n```\n\nThe plugin provides these agent tools:\n- `camoufox_create_tab` - Create a browser tab\n- `camoufox_snapshot` - Get page snapshot with element refs\n- `camoufox_click` - Click elements by ref\n- `camoufox_type` - Type into elements\n- `camoufox_navigate` - Navigate to URLs or use search macros\n- `camoufox_scroll` - Scroll the page\n- `camoufox_screenshot` - Take screenshots\n- `camoufox_close_tab` - Close tabs\n- `camoufox_list_tabs` - List open tabs\n\n### Standalone Server\n\n```bash\n# Clone and install\ngit clone https://github.com/jo-inc/camoufox-browser\ncd camoufox-browser\nnpm install\n\n# Start server (downloads Camoufox browser on first run)\nnpm start                    # Default port 3000\n./run-camoufox.sh -p 3001    # Custom port\n\n# Server runs on http://localhost:3000\n```\n\n## API Overview\n\n### Create a Tab\n```bash\ncurl -X POST http://localhost:3000/tabs \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"userId\": \"user1\", \"sessionKey\": \"conv1\", \"url\": \"https://example.com\"}'\n```\n\n### Get Page Snapshot (with element refs)\n```bash\ncurl \"http://localhost:3000/tabs/TAB_ID/snapshot?userId=user1\"\n```\n\nResponse includes refs for interaction:\n```json\n{\n  \"snapshot\": \"[button e1] Submit  [link e2] Learn more\",\n  \"refs\": {\n    \"e1\": { \"role\": \"button\", \"name\": \"Submit\" },\n    \"e2\": { \"role\": \"link\", \"name\": \"Learn more\" }\n  },\n  \"url\": \"https://example.com\"\n}\n```\n\n### Click an Element\n```bash\ncurl -X POST http://localhost:3000/tabs/TAB_ID/click \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"userId\": \"user1\", \"ref\": \"e1\"}'\n```\n\n### Search with Macros\n```bash\ncurl -X POST http://localhost:3000/tabs/TAB_ID/navigate \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"userId\": \"user1\", \"macro\": \"@google_search\", \"query\": \"best coffee beans\"}'\n```\n\n## All Endpoints\n\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | `/health` | Health check |\n| GET | `/tabs?userId=X` | List all tab groups for user |\n| POST | `/tabs` | Create new tab |\n| DELETE | `/tabs/:tabId` | Close tab |\n| POST | `/tabs/:tabId/navigate` | Navigate to URL or macro |\n| GET | `/tabs/:tabId/snapshot` | Get accessibility snapshot with refs |\n| POST | `/tabs/:tabId/click` | Click element by ref or selector |\n| POST | `/tabs/:tabId/type` | Type into element |\n| POST | `/tabs/:tabId/scroll` | Scroll page |\n| POST | `/tabs/:tabId/back` | Go back |\n| POST | `/tabs/:tabId/forward` | Go forward |\n| POST | `/tabs/:tabId/refresh` | Refresh page |\n| GET | `/tabs/:tabId/links` | Get all links |\n| GET | `/tabs/:tabId/screenshot` | Get screenshot |\n| DELETE | `/sessions/:userId` | Close all tabs for user |\n\n## Search Macros\n\nNavigate supports these macros for common sites:\n\n- `@google_search` - Google\n- `@youtube_search` - YouTube\n- `@amazon_search` - Amazon\n- `@reddit_search` - Reddit\n- `@wikipedia_search` - Wikipedia\n- `@twitter_search` - Twitter/X\n- `@yelp_search` - Yelp\n- `@spotify_search` - Spotify\n- `@netflix_search` - Netflix\n- `@linkedin_search` - LinkedIn\n- `@instagram_search` - Instagram\n- `@tiktok_search` - TikTok\n- `@twitch_search` - Twitch\n\n## Architecture\n\n```\nBrowser Instance\n└── User Session (BrowserContext) - isolated cookies/storage\n    ├── Tab Group (sessionKey: \"conv1\") - conversation A\n    │   ├── Tab (google.com)\n    │   └── Tab (github.com)\n    └── Tab Group (sessionKey: \"conv2\") - conversation B\n        └── Tab (amazon.com)\n```\n\n- One browser instance shared across users\n- Separate BrowserContext per user (isolated cookies/storage)\n- Tabs grouped by `sessionKey` (conversation/task)\n- 30-minute session timeout with automatic cleanup\n\n## Running Locally\n\n```bash\n# Start with default port (3000)\n./run-camoufox.sh\n# Or: npm start\n\n# Start with custom port\n./run-camoufox.sh -p 3001\n```\n\nFirst run downloads the Camoufox browser (~300MB).\n\n### Experimental\n\nSee [`experimental/`](experimental/) for alternative browser engines.\n\n## Docker Deployment\n\n```bash\n# Build with Camoufox (recommended)\ndocker build -f Dockerfile.camoufox -t camoufox-browser .\n\n# Run\ndocker run -p 3000:3000 camoufox-browser\n```\n\n## Fly.io Deployment\n\n```bash\nfly launch --no-deploy\nfly deploy\n```\n\n## Testing\n\n```bash\nnpm test                 # Run all e2e tests\nnpm run test:live        # Run live Google tests (may hit captcha)\nnpm run test:debug       # Show server output for debugging\n```\n\n## Environment Variables\n\n| Variable | Description | Default |\n|----------|-------------|---------|\n| `PORT` | Server port | 3000 |\n| `NODE_ENV` | Environment | development |\n\n## Contributing\n\nContributions are welcome! Please open an issue or submit a PR.\n\n## Credits\n\n- [Camoufox](https://camoufox.com) - Firefox-based browser with C++ anti-detection\n- [Amp](https://ampcode.com) - AI coding agent\n\n## License\n\nMIT\n","readmeFilename":"README.md"}