{"_id":"@nannier-com/lookout","_rev":"75-496f0b04556c9bc1e6712cdcadc82fe9","name":"@nannier-com/lookout","dist-tags":{"latest":"0.59.6"},"versions":{"0.1.0":{"name":"@nannier-com/lookout","version":"0.1.0","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.1.0","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"e4da96a25126b899c0b34c3523991c83a7888adf","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.1.0.tgz","fileCount":52,"integrity":"sha512-gQDtyLInf4inF3Cy4PpVT1uH5shH0Mko7kR+GXakWXem6M1ZuLVh34F8c0evERkDd3663RGwzUEuDALQYe/q5Q==","signatures":[{"sig":"MEUCIDFvXf6Op3JbXgmjZfsLOhdKWvH8wpLsz7xU1JkwGpKUAiEA2OqGiLwG5WcJ4PBfa68eSSi0A4qacaRIXRsEzltYm2M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":166761},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"0ae1f7349c31ebec37a10726f892d6efe6f4fc54","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"node tools/licensegen/generate.mjs && bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.1.0_1787716356187_0.6056021834818845","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@nannier-com/lookout","version":"0.1.1","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.1.1","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"7bd6a6ae3863dd3875b92cabb1a1aa9834726cae","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.1.1.tgz","fileCount":53,"integrity":"sha512-HKrgiwU2InMfh2cIgfZqjbBUWQD+MUhCoyEt1FQbRyiIgp1YLnMyFuyQgen+O7z5ww4gve/3ea+M2NgE1mjqJg==","signatures":[{"sig":"MEUCIAYzBdWOSOL27Jk2GeCJsMwit6ROtpSoeXMP5Qu4/u6rAiEA5naM+AmOe7C2qSRF4QnuCz77RqP7rmJDOwAb7GZqDpk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":167097},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"b6580830e6dd69338a66d7ebad7c8c5c3894a5a7","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"node tools/licensegen/generate.mjs && bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.1.1_1787716751189_0.9975984650994789","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@nannier-com/lookout","version":"0.2.0","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.2.0","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"8a5cf3b8d812114e8047b3363818db90aa5ad70c","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.2.0.tgz","fileCount":53,"integrity":"sha512-mQhvy+i+nxB4pyra1D5GWwRdShDBiUZj1lZh8cMAdYsXdd+fw4doIrLvUbdw0ObW50tIabqo0Rv6SDJ+V5Zg4A==","signatures":[{"sig":"MEUCIFobouXjWmcx/LaBEeEVKrl3vdevjdazVUxlZgEJHShZAiEAsdNyJsubZpzPJ482jeIWnpq3TknCawaebMM8kXMx8zI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":177987},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"ae1915c3ebd896e09f6a138acb89a15e4f70bf3a","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"node tools/licensegen/generate.mjs && bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.2.0_1787763670238_0.19937552886207777","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@nannier-com/lookout","version":"0.3.0","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.3.0","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"65b75791cd049eab4625a6fd9857d375177cf602","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.3.0.tgz","fileCount":63,"integrity":"sha512-Krp966Oje5IBPSVQ6tnO9ZnNsCfIRFqdOb4uSfK44kkb6td257jSyG6HTjyOginKk/fjqVSYccHQV6bXwezr9Q==","signatures":[{"sig":"MEYCIQDuMgIDJgp7ByxoQfxAX/7oIpQBFvpld7B+9ELi5QVXWgIhAJ816naRrJZE0bEX21LEqF4rx5u+AasG50Uwt976R0dm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":219971},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"2fed854e3ea6ad7cc1a75bb1e00a9c565ce538b8","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"node tools/licensegen/generate.mjs && bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.3.0_1787764670834_0.7555870494459382","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@nannier-com/lookout","version":"0.4.0","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.4.0","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"29c3ab76bbb20d0fae606db9712920a2f345accd","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.4.0.tgz","fileCount":77,"integrity":"sha512-iGSDugBBT97MMJ8MZqRSpUwnXIdZmg/+r2ZOoG30EYmSk2uab5zazuKVcFKQoY5XOrcGmucHVxi6uZ6aM45K3g==","signatures":[{"sig":"MEYCIQDBgaHGmhqTBv9kU7jJTm3+sbPWDnYVprrzzbdRXq+FoQIhANRbgOaJIPz+mFuaKnp/l2ii9Q8TUPnb4uoFmclyOH29","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":284189},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"bfa560a669ce00b5d5b363cfaed83b4a7c3df487","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"node tools/licensegen/generate.mjs && bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.4.0_1787765924146_0.1393420002093213","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@nannier-com/lookout","version":"0.4.1","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.4.1","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"3ba3b6abbb5d6f62c76ce73670ffde2c2e9567a3","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.4.1.tgz","fileCount":77,"integrity":"sha512-VG5uinOlc/uV03uOW0WBpUuGZHTMLQ38PfFSQ3JSW+eV13rg33ygjnRrZF4QjeFvQmYeBd4R93soS2ymT2ljhQ==","signatures":[{"sig":"MEUCICk1RsBnEn3rZR3SynIycuKal4jDn5Wo0R1DElt10mo+AiEAiscMXB82425hFxnsY61ZFV4IQpxUEwZhDG8CY1Nn6Nc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":287236},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"0accef84dcd0d1dcb8f84575c516068806f654eb","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"node tools/licensegen/generate.mjs && bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.4.1_1787766029284_0.9581817740566874","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"@nannier-com/lookout","version":"0.4.2","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.4.2","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"ef6473dfd213d5600c211327280e307fea39099f","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.4.2.tgz","fileCount":77,"integrity":"sha512-DErUk8Uee0KAkuWcQORwu7Q7Vl8JnF80Oh6EwlQCVFXKhY1JxKT0C6mCF8uPBSlZ3AeLKnUD+Sx6+ukmQqvYBA==","signatures":[{"sig":"MEUCIHII/JQaRotCBfGmZtah6020IAZINim2LKCYua0i72m2AiEA9n/ESTeDJwjFk3jo+B7fw5pFE86tGffTiiaOfwK4ayY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":288338},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"582cf20992396b1ab6ca3f8c90bd1a968d9c21be","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"node tools/licensegen/generate.mjs && bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.4.2_1787766121270_0.5964050248533694","host":"s3://npm-registry-packages-npm-production"}},"0.4.3":{"name":"@nannier-com/lookout","version":"0.4.3","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.4.3","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"8148b2691eaaa44a95f1eeb0190af41dee116bd6","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.4.3.tgz","fileCount":81,"integrity":"sha512-c1/lmOFUGWUjIqlSmHl+LMhOjHAS6Va51oXYuiNLToEeLHUeoDH2xJi+iy0ERHeNFzjha2uVrWtGvb88wywhOA==","signatures":[{"sig":"MEUCICV2ykGztZ+DDT/kVEwuby/i9ZsH3P1hn55qknDaSEpNAiEAz/JL6CERalU3KxPsA1qJFiS6EdpCtu6f74n++UbCL+E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":327009},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"9f0ec934014604dd372fb2f8d5923865a34b9029","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"node tools/licensegen/generate.mjs && bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.4.3_1787767610337_0.28625170580357917","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@nannier-com/lookout","version":"0.5.0","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.5.0","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"2fea48cd1e7bfb099b0098bf00fd6ac90c855fdb","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.5.0.tgz","fileCount":81,"integrity":"sha512-5W0i/BF9otXtitpxAxU3o88IGH5cnbLHXqiVfQwm2JZhUbd6zPh0OkX3yIK+5D67bwtFVWmp7LGfgwIT2OIhbg==","signatures":[{"sig":"MEQCIBqLtFhEPUeLP0w0oGzsKeNUkSpAdZE7VJMbXZ6Es1NrAiBEZrMz/xDzaS3eaCE/BE8w/RlHvTxxoUzr8+rzNMriEA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":332942},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"be82eb8f8e801e5b687c5da71290429b9d46bf7a","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"node tools/licensegen/generate.mjs && bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.5.0_1787769304433_0.8837464980146843","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@nannier-com/lookout","version":"0.5.1","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.5.1","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"bc3e233b19d05dd7d20c61a6487c75ba3749e528","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.5.1.tgz","fileCount":81,"integrity":"sha512-LFIHsRW68D8X/z2GmDCPurw0Rz5GQXqAUp4XUTk0y5t8EA46zvxkJurXWFChF3dZAJMjJl6s61kzSOd/NFl9Hg==","signatures":[{"sig":"MEQCIAOA8vg/qf/3Mp7qQwQK+djoJShccVx1CzDoK5cwvBjoAiA9EDv9J9pbyINDdupGKHGNG1DME4xpmWPaMC4THJEE0Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":337953},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"589ed65eabaf3a69893fa9015396531b0fa0286f","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"node tools/licensegen/generate.mjs && bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.5.1_1787770215953_0.4227947223521802","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@nannier-com/lookout","version":"0.6.0","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.6.0","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"bee97926c3af90acd402afb1c9e70e1fe8bda151","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.6.0.tgz","fileCount":81,"integrity":"sha512-4DmN0f28iID5/Ec7wbXnSrogMUWUFQ8B1jRBWsh4wuGP2vO0u8kRCjgn9dIGYOJPg/F5QBBsg+4exz4DMkrmJg==","signatures":[{"sig":"MEYCIQC/ZpTZijlPniw4hxmOgBOxdmk29zGUsbYT4HVQtSb3uwIhAJkQxRgQOQhxty1gUNo9hh7sxOcTD4XOgyUn63InzEY6","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":348356},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"e19a24a58f7ba57e15c9d6928aca91973896b8ef","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"node tools/licensegen/generate.mjs && bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.6.0_1787774506657_0.07123913608040566","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@nannier-com/lookout","version":"0.7.0","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.7.0","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"5e32ad9abcadcc621876d70d8261bdb467a4b324","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.7.0.tgz","fileCount":83,"integrity":"sha512-J2SWAmlHGOONHqP5c0AWeylRK/jRHVPrUyBtBQXcLS68ZTY/iA+zGP5kn44/vQ8j58lvjv96zjOW2kL4zNmEGw==","signatures":[{"sig":"MEQCICxf6EJRsODr5/LLXmmR93TanoHzvxNRKFhP2I8viuyCAiBBGVuThSG0J6TEkIBwquuPbHT0lxnTKwNbvFvK+1i1xg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":366344},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"28015c44b30afef3896560677110f74c6c60a7b3","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"node tools/licensegen/generate.mjs && bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.7.0_1787774976248_0.49465559222544164","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@nannier-com/lookout","version":"0.8.0","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.8.0","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"cf8c1b1b2333e8e05ed58eabf2751a8056f0f1d2","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.8.0.tgz","fileCount":83,"integrity":"sha512-GhU/0CRScMazlCkvv14ouwKfYueV1zquhKrjy4gXhn+/CHhcic3nM1pgqz/M5YizWCd7olLNKZcTAA4zz8YPow==","signatures":[{"sig":"MEUCIQCU4QQPTEbO+kG9O5FhT2IWoAzmBhGuY/dy3N5tMb76RwIgTVBFnHJnxcaS5rPwuvxJYYLy4+Q5U31VAVQDimqGPdo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":375793},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"0ea46ca7c2cfa5e19a1211c9f6391d117a0cb93a","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"node tools/licensegen/generate.mjs && bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.8.0_1787775412062_0.21440214297752203","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@nannier-com/lookout","version":"0.9.0","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.9.0","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"c94173d2726d8d909c61b85b628fb688fe4179aa","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.9.0.tgz","fileCount":83,"integrity":"sha512-KFDaG5cZbEv/YxhA5bfZLQJ0efhss/RCbWL3/47ehVB73I2eQuK7SIPL+TnsgmPYnNvGGBSDn8zpg6EW+ND+dg==","signatures":[{"sig":"MEQCIDXGqqKFMxLWmGoOJyXpuuniXtToBcM2K8WfvbapiCqMAiBAh/ldeVXKUWQHx/j2aRM5/j/rLuJSKDqOF2woNMoQXw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":381339},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"b2b4b4118e9ae2a65466ddd77a7ad308060dbbd2","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"node tools/licensegen/generate.mjs && bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.9.0_1787775835874_0.8532667457280199","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"@nannier-com/lookout","version":"0.10.0","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.10.0","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"248d0a3c06730969dcc0cc8adcfbb2ac83c2e32d","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.10.0.tgz","fileCount":79,"integrity":"sha512-PhO4Y7FadHOsXylVqJsQiMCCghyimNr8dqHhibjN/0i/n28F0gd/8Uc2qsRZr2RjMttAAMBquoP090bnKPYuuA==","signatures":[{"sig":"MEQCICvbdhOli+2OWzznmmdKh29ejBaFuLHAoBOJE5IbadEQAiAw+6AGR5js2bIMZJ4E3YjdwRjWzIS8PVC+JF9F1qqAMg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":330852},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"2536e678e15f9208bf84bdf089b4bbf3a23d29e3","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"node tools/licensegen/generate.mjs && bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.10.0_1787776601583_0.3278849062354927","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"@nannier-com/lookout","version":"0.11.0","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.11.0","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"c86c0c83db92f6c1b0324db3be1fc127a1a4d4ce","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.11.0.tgz","fileCount":81,"integrity":"sha512-20potMUFMlRCSzEYWlG9IW+9hCXEYIMxV6ncXj5V1vAeyVWpCveBc1vOs8XW0II0hhXRd19EkdfLCafraNN7uQ==","signatures":[{"sig":"MEQCIB89Hrfnb4LsRN/gbX99hr57jhad5e44N2dSAVJlSHhrAiApZCEfaz0oewbswuappeEpoO5DYh9YPyowb//c0edqTg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":346278},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"71ad102997580a885a0e8fe5384ace2cbcd82987","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"node tools/licensegen/generate.mjs && bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.11.0_1787776863578_0.5055940698415085","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"@nannier-com/lookout","version":"0.12.0","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.12.0","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"8ddd517f6bc7934251d9dfb239b345ea0ce14df1","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.12.0.tgz","fileCount":77,"integrity":"sha512-kq5ICsfDFx4QMkIKhuBnq0GthZ/2QtFvDF816eLLN8SbbjtLX2sjIpIGlsVzwb+BFj0ZOVgVHYYJx7OhADmSvw==","signatures":[{"sig":"MEQCIBJtGujhR9VwtxmDhnHf1/ivkDK3k923htGMhKq53xjBAiBBesump5B1Brkvbcf7wSyNs+GArW9nnoRAh/ObRTpIyg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":337686},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"b52470406ade214602902830b11b5e223c2913e2","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"node tools/licensegen/generate.mjs && bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.12.0_1787778994531_0.7713045888920866","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"name":"@nannier-com/lookout","version":"0.13.0","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.13.0","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"a767f81cb64373605356bb7e9d90168477330bba","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.13.0.tgz","fileCount":77,"integrity":"sha512-kdGBsHBOo6sBEJTCcj72U+L4Lq6Ryv1MSh4wbidA5whewIxcEelENfI2qazdDjeqkQeUs/tcjkC12UXN4Eh3gg==","signatures":[{"sig":"MEQCIFRt/3Sdfqmmd7ykVJfYmnlFaLhIuUCK9Fmc6ZAinqt7AiApdzxl+xi0cGysE+GWvewl2a+aQ/xd5MRpauDnf7L0Pw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":350637},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"818664d7f9c234300a3daab71397798f0d897aaf","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"node tools/licensegen/generate.mjs && bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.13.0_1787779979545_0.10974406038642104","host":"s3://npm-registry-packages-npm-production"}},"0.13.1":{"name":"@nannier-com/lookout","version":"0.13.1","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.13.1","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"a4f7f979f0501f03a00240f1eb9304ab57ef326b","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.13.1.tgz","fileCount":77,"integrity":"sha512-vTFeI5aLp7fH8D39/oiC99qnAs5/7F3pqOrWpqCYA84+k75RtuLzy8OBRzNAxmfuYuCCD602c+LoY6TJePY2xA==","signatures":[{"sig":"MEUCIBQFNv3ZVl7sV4GlzXxplVtcXnQYZeqh0AQqTCEhQVvsAiEA+44e6/RshQHQI+er0ud0L1wO6f52jwsdraqzF6mBSaw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":352255},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"bbd64bd2fea6a54267309af34088210c15f8ab35","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"node tools/licensegen/generate.mjs && bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.13.1_1787781232070_0.4919165366331726","host":"s3://npm-registry-packages-npm-production"}},"0.13.2":{"name":"@nannier-com/lookout","version":"0.13.2","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.13.2","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"9028652a4434d6b262a2b881bb892622aaeda755","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.13.2.tgz","fileCount":77,"integrity":"sha512-fcCBXpjVR5+WN8mVBhvz/D/+BJeXEb9yaz/+kd5FdJzAeZRxF2jrWHOGAgaCBrIZVu/7uh+Rar4XG+sz0FCT2g==","signatures":[{"sig":"MEQCIBOEzHnQPKfwpRpEPmerIUCVyF6nwbERwTP9+p8Lmlh3AiBi+QxlyuB8MnWL423/wfg+pHmSMVI6mrx0wrReaWYpVw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":357268},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"017ce35699689ef06665a825c559e1f939f60717","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"node tools/licensegen/generate.mjs && bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.13.2_1787781732460_0.9136547550948837","host":"s3://npm-registry-packages-npm-production"}},"0.14.0":{"name":"@nannier-com/lookout","version":"0.14.0","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.14.0","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"0e6c1e7b7103017c8fe522af828281a5a974f4a0","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.14.0.tgz","fileCount":77,"integrity":"sha512-RN/RuLw/7GtjWC8sGBtNSKiVdEliXF7gMO74SYsohS7xbLhhMw0ZcX0/D3DsjQ8lhoh4a78k4UxOecYEGGSONg==","signatures":[{"sig":"MEQCIEwRcFVyUIJG8jjnwIJUDHP8qpnGeoDVfqvRqmzUvnZfAiAZXt/KcqtEPEy+RJvpYc+aQoDCA7fRlmEluX6WguCwGQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":357727},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"1110c611526245eae0f43512db18edb2bed9f15f","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"node tools/licensegen/generate.mjs && bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.14.0_1787782777666_0.5237047114348197","host":"s3://npm-registry-packages-npm-production"}},"0.14.1":{"name":"@nannier-com/lookout","version":"0.14.1","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.14.1","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"ebfa269905cb25ffb78cdf5f3307c2c764f1dedc","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.14.1.tgz","fileCount":77,"integrity":"sha512-AMJG9Hu+d/QlfhMtB9JWZR6SAv+z+Iae57gGE96Iz0XARjwXUFqrOoxGfdLLYfYIKyvE1KZhfdw4nwMckRp5zQ==","signatures":[{"sig":"MEYCIQCcFBnwhDYSfprhqiIh5wFuyCwx/yAJwmeoPScod/QuqgIhALtYuMdLBM5vNsQh9G2UdnkEPHcVNp/HT9MyYupqi/T9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":360973},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"8bafb30ae5227b80ed88d0fbc41601bb8bc2fe40","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"node tools/licensegen/generate.mjs && bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.14.1_1787783197775_0.4910155300430463","host":"s3://npm-registry-packages-npm-production"}},"0.15.0":{"name":"@nannier-com/lookout","version":"0.15.0","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.15.0","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"90a4e0e6e084374082ef209b63c5c39344770714","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.15.0.tgz","fileCount":77,"integrity":"sha512-aukCndl8Bk0h6PcNBnbVS2XJzG0LqpjTSCGMDG9QHepToPhw6mc8pH+6QHQ9m9gPZJMCuVKiDs8FAWE1sR3/kQ==","signatures":[{"sig":"MEQCIF4N912rj6NLzIkRkyXmtxTsBfgeV4M5e7o+50hYxuVLAiAyza0LB42C7oWh42QBJIU+OZKOtn2MWjEZ6VXaGprBow==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":357702},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"c3fe2c2ef1d73dc5f2a063a1dea1d479cac42170","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"node tools/licensegen/generate.mjs && bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.15.0_1787783645336_0.7213743324179671","host":"s3://npm-registry-packages-npm-production"}},"0.15.1":{"name":"@nannier-com/lookout","version":"0.15.1","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.15.1","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"d2273f49bffcfd4bd63f8ef4cabf164934df0d6a","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.15.1.tgz","fileCount":77,"integrity":"sha512-mtkqVz00W0WyhJwWpRQ0znss/vfo/6fICcL5ab+lOWEvBQQ3NhMBqFQJ5pvK84AeizRCfPXVgH1dqP7IV/Y7QQ==","signatures":[{"sig":"MEQCIA/ja1K0DS6VF7Bw5iKABS7mNq4QTpBKqNf34ssrvb+XAiAMtcr+/+XiCAe57UWxy1+gTZyhMBTMquZJ80dR8f4RvQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":361673},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"0507a19ec4304919db5efb1670ce208bd64658d8","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"node tools/licensegen/generate.mjs && bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.15.1_1787783855281_0.9642095567426747","host":"s3://npm-registry-packages-npm-production"}},"0.16.0":{"name":"@nannier-com/lookout","version":"0.16.0","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.16.0","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"669824eb4cfd498f47723ad5f7a9a038e664e39c","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.16.0.tgz","fileCount":83,"integrity":"sha512-B6elPfLCYnOAV1GxBNm922HdjxKh409LYOQxcbMMtELOhNINQn0CIHCd/ZXJUssNgFIsLYI2Gl+Ao+gEnBR+RA==","signatures":[{"sig":"MEUCIGTHoULswAGHs6Fu5aEWHRW9a6SQja1zygO2BSMq8HgwAiEA6f7gNSDbCn98XHRkMBgR+TU1+C5nYmOP/22gG0fOfBs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":375689},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"e9917a81ea52dc056b2347223f3e10c3f694ec2a","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"node tools/licensegen/generate.mjs && bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.16.0_1787796349236_0.2621526516518844","host":"s3://npm-registry-packages-npm-production"}},"0.17.0":{"name":"@nannier-com/lookout","version":"0.17.0","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.17.0","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"3232b7cb24711e48e0161cb4bb72a53047b9cbfb","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.17.0.tgz","fileCount":93,"integrity":"sha512-06JOUfjwtHw6ZPUpF7PoWXK3P1nRj4B6TkUtDwL2gET4eZQnYHJ8bAkiRWKlpdp4OK1ytn78tJ1p9R0T8B9f4w==","signatures":[{"sig":"MEQCIGHlvEHtIM2WkUvtlNZDg8n7ntRz0hhPht/MJjQmT+brAiBJIps/SU9ZCNudV5vnhYjOUiYQQcoEvFGgZKlv7mUaAg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":401307},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"d3d4f2ca3e71c3501d389c49b9724d58cb2cf81d","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"node tools/licensegen/generate.mjs && bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.17.0_1787797118564_0.33805279286021106","host":"s3://npm-registry-packages-npm-production"}},"0.18.0":{"name":"@nannier-com/lookout","version":"0.18.0","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.18.0","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"c4c989604211863890450f4f40ada7d85f95543c","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.18.0.tgz","fileCount":95,"integrity":"sha512-vRaCd6J1MHjrp8v5s0uqRG02zqja8sCHO5SSezPo77i9YFhwC981stcXOZBoiS714iOfSM7AB8hoKRnlAhQIDQ==","signatures":[{"sig":"MEUCIQDm9izQJPKLTKWyX0FIcIQ5D8VGx950I5zK+68osBEadQIgH1V/D1v46yNxryA1Ep9emEn36e07dra3YGYlk2k9/Lk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":407881},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"8845fdbbf58199387bb933a857a361a104d40534","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"node tools/licensegen/generate.mjs && bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.18.0_1787797379325_0.9516510194490906","host":"s3://npm-registry-packages-npm-production"}},"0.19.0":{"name":"@nannier-com/lookout","version":"0.19.0","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.19.0","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"61221f5d59b0f67befb9b6b9076b7217b052b158","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.19.0.tgz","fileCount":99,"integrity":"sha512-oLK9w1EVwcKgoCUQfIKmNxv0iLKJ5rakWym/WGAGpSz4Qa2nJhsdXdjnPvzoQTtYcqen92lLR4uKsT/dQoS1BA==","signatures":[{"sig":"MEUCICrKf/yVB561mSK6I9m57eYglCitswIw3khN8ByFcW6UAiEAydybQGA5RlQvayEAVYhR6ZS22q9JNmz7fFqBnbGQrVY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":436875},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"82f60e49d75e555455cd17ba8a2101ba82fc9544","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"node tools/licensegen/generate.mjs && bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.19.0_1787798116264_0.45034202867416573","host":"s3://npm-registry-packages-npm-production"}},"0.20.0":{"name":"@nannier-com/lookout","version":"0.20.0","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.20.0","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"79839cf9d39569263a64fad5b85ff4e38dd177e8","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.20.0.tgz","fileCount":106,"integrity":"sha512-KY1FuqcxaMeSRfsUTWWEYwbY2ybi8V46PX+KOgdKiek7/f8S6OAkNHK4CykqS6t6k5yK3F5/ftAsRt+AjoHi5A==","signatures":[{"sig":"MEQCIFrp/W1bWmGOd2aG/WJE7LQYxJIL5YAqWc01hk2IlXTKAiBTVsZr46GK2mWsyIMFomMsIXI/6yd65pm0JvCJLS2FXw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":476617},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"2570e4d6bf440d7c4649a1b432780a3c1cb2b440","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"node tools/licensegen/generate.mjs && bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.20.0_1787798575573_0.3172050025667559","host":"s3://npm-registry-packages-npm-production"}},"0.21.0":{"name":"@nannier-com/lookout","version":"0.21.0","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.21.0","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"1745852b5c036cf79301b7c7d1f33e9f4dd69bac","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.21.0.tgz","fileCount":111,"integrity":"sha512-YDsBNnnxZTwy6MaWek6p9AzsFASM7BU93J645VMic49Kvn3NIn8a9Xd9nJakq4yemm5bCgfcZmuLPRqbNLPnPA==","signatures":[{"sig":"MEUCIQDZ70iQYFN/qsWN/iHpjduohCld4fp6+zwLafso51g4TQIgXGgLSBHenq5MMM4JJoC9BCtCpQxhkaZaXRAJhwwMycY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":501043},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"bcba466f3e9811d015f1f12801c83c782fd575ea","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"node tools/licensegen/generate.mjs && bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.21.0_1787798899558_0.7756105820703112","host":"s3://npm-registry-packages-npm-production"}},"0.21.1":{"name":"@nannier-com/lookout","version":"0.21.1","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.21.1","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"2702e6aa5d5ac618076040a69c4411e59e85f897","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.21.1.tgz","fileCount":111,"integrity":"sha512-v6sME53OHKrLZLkXsmute2yS2/Fv4+ah9C79LBhlG+uU24WQZOMr42GFKSgERTS+7+A/nRkipXj8I/qXH/nW0g==","signatures":[{"sig":"MEUCIHQ+lvbwsIotrre+vudLylWHLk/qSpcOevMbvjH5tf0oAiEA2E+AkfbYb0L0BmifU/iCBImwqui5YX1Rq1LV716wqzg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":502700},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"8a1e1371ae620d85cf2b3ff083fadfd70eaf25ed","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"node tools/licensegen/generate.mjs && bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.21.1_1787801622228_0.5469771988570193","host":"s3://npm-registry-packages-npm-production"}},"0.21.2":{"name":"@nannier-com/lookout","version":"0.21.2","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.21.2","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"f5e4fc9ea22200231d04e00ed8ea97e7d82d3ec8","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.21.2.tgz","fileCount":111,"integrity":"sha512-01PJfMC/i3WdP5aKpzx3BjhCe155SWZQGN7uRYKKxZaN9Vu8DElUbHIifqp7L8NW4NzmKm4MRaZ40zKB/Xmpyw==","signatures":[{"sig":"MEYCIQCoUIeHM/KXuym/GbsW8fQ9URwJVh37RHYbtPS4Uve5fgIhAI9vEu4HwAtjoBiIlbN/40/rGHIWfES+AEIUKbq553GH","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":500926},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"c1959128199c8c954d2219403eda16b5c7ab5f34","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"node tools/licensegen/generate.mjs && bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.21.2_1787803306267_0.6400527257410242","host":"s3://npm-registry-packages-npm-production"}},"0.21.3":{"name":"@nannier-com/lookout","version":"0.21.3","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.21.3","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"4bcf8982739adcaf31e693f8e526f69a28537c6d","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.21.3.tgz","fileCount":111,"integrity":"sha512-7hUZcC/e+MuhNYre1ZJ9fl/v/CgVdb6LGD7wiFSlt8hc51EopIdbaoyvbSxBv6LFkTICk+g0qWmkP+w/ZVFB1A==","signatures":[{"sig":"MEUCIF7ZvoKB4qGlYcCejZTZ/igjLcXTX2FLwiS11Lgbv8gLAiEA7Ti83uLLEtFlPvUkG3R/UQ16fVp233u1iVCzcXELmcc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":510579},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"df04852c7d22d6f8769adeabcb27074a5bbed2e1","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"node tools/licensegen/generate.mjs && bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.21.3_1787870067760_0.8890391356765459","host":"s3://npm-registry-packages-npm-production"}},"0.21.4":{"name":"@nannier-com/lookout","version":"0.21.4","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.21.4","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"a627d4e2bf7f187d8dc0a640a512f653541b64b2","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.21.4.tgz","fileCount":111,"integrity":"sha512-H8GG24K8+6ez5WUi7h7h1omBRtFKVhxQ7ecd+R255/AkOtR1Fw1DYm6kxzrGHvTzzgGtsflaTg0mmCJIQoyf4A==","signatures":[{"sig":"MEYCIQC10tPrhibJvhxPbJmd4I4X3Q8NjPNv+NVPYIc1RDs6ewIhAPwhHAIZ9jCC/eHUZk81q//CIBDjjYs0bl8oLePQhmN0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":512672},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"9f9133391105c78509cbc51e4db288f520966d50","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"node tools/licensegen/generate.mjs && bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.21.4_1787870166258_0.9201560828227748","host":"s3://npm-registry-packages-npm-production"}},"0.21.5":{"name":"@nannier-com/lookout","version":"0.21.5","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.21.5","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"81f99193d404c4bece8d61071142ad2649712062","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.21.5.tgz","fileCount":111,"integrity":"sha512-xSAwY3Ir8yFeQkXtfNQ2Vliftw5sU5TWGjxK+BxF+5UCPfovFEgkf4ZW0OlfrMP/i6oi7LOJE9ccUvVU41d0nQ==","signatures":[{"sig":"MEUCIQCOuF9XXS7gaUZ85HD9ChXn6SF5E8+mUH85eRZdDsQRLgIgCuDDWuXM/XOAFxNXqiLCZpVFnBV2Sg+reDtiuoAa0OI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":517351},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"6245764249e7643c54e3fdd4ca56abe767ed9fac","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"node tools/licensegen/generate.mjs && bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.21.5_1787870348190_0.17413367671345914","host":"s3://npm-registry-packages-npm-production"}},"0.21.6":{"name":"@nannier-com/lookout","version":"0.21.6","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.21.6","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"8375a6b10cc5fc0a397c4b0b465550c775122e82","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.21.6.tgz","fileCount":111,"integrity":"sha512-fZhPZZJqwK3SPEjSfO+pwpfenCIJK1wS3rnf6IkOpe7iXOU44MmZsnDzB5A0hngodYI+zMFV+TDA3zmM+XD1jg==","signatures":[{"sig":"MEYCIQCWy6DPKnIKkOC6bMRA20YavM6tiVYLEUP0sFoqVW7HqAIhAPsHFUqd91tZdVxgzNFu00X07bXUFw73ZE4KT1iDOSMD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":526286},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"46d881e78699790f33e41a7d9d5f261e9d949712","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"node tools/licensegen/generate.mjs && bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.21.6_1787870590473_0.29271672579015573","host":"s3://npm-registry-packages-npm-production"}},"0.22.0":{"name":"@nannier-com/lookout","version":"0.22.0","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.22.0","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"1b5d5e2c9269ba0ee73ec0c9af886310bdbbf89e","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.22.0.tgz","fileCount":112,"integrity":"sha512-ygj0kbVi9Hi5AVViujBG9GOeYJ9h2JJ+JPNwm0fp16Zbk8ryrGrs3jpuz0Wcw6i2qJkcxeU0xZ92WSP4EKXGqA==","signatures":[{"sig":"MEUCIHcqOKhYJ1hTw2QsUB9Xgf09itv1fOh0hCFC50eUHoVYAiEAkgZnrrr00dpykk2h75dY744zaLo1dffUs06sI3Gxbxg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":537328},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"f3783a07b6aa208bbe6f021284856c0de1c7385d","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"node tools/licensegen/generate.mjs && bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.22.0_1787870878329_0.7315878607497892","host":"s3://npm-registry-packages-npm-production"}},"0.22.1":{"name":"@nannier-com/lookout","version":"0.22.1","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.22.1","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"6c912eb5898b9833272913e1fb83bd4449d1fe5e","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.22.1.tgz","fileCount":112,"integrity":"sha512-WE/JoTpvJotRDoiVPhZ7qSUs90C0pgTfZQj53klZdeSvNspWb3xF2/ffKtBkXKhqhkNrXqQw7z/Fj3iC+/c+0Q==","signatures":[{"sig":"MEQCIDFD/6OqadVi2ICm0S3hONIdOx6Hgc3Uie3C4XrFKWZ5AiAA01gIiF/r4MGwi2WVcHT8JXw50xPViYLGiv4I43q0HQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":543212},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"7e4a8497175b925710cf612f6207b18dfeb2858d","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"node tools/licensegen/generate.mjs && bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.22.1_1787871025933_0.8615537952583114","host":"s3://npm-registry-packages-npm-production"}},"0.22.2":{"name":"@nannier-com/lookout","version":"0.22.2","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.22.2","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"48f83890168b196c1790ccd41f87c2ccbceb685e","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.22.2.tgz","fileCount":112,"integrity":"sha512-YTte+0XUuuJdHloYJwg7hhsuv167KMqnc1EU7p/g9rN+Ey5iq6fQVEgrABjAL+7AlYPhIWDQk1oFlU5TTSiwXQ==","signatures":[{"sig":"MEUCIQCBRUBLhsKiqQC60lDEc638ejI+aj0mCxE8IDiMwBLQqAIgVS0kKAL0tZOE2bnbrfCSg8KsOyZEXvzJttQY4UGs/4M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":550195},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"0cfa0da2f653c02bd4457710a2b6454b0281ad71","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"node tools/licensegen/generate.mjs && bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.22.2_1787871238724_0.7872084326854112","host":"s3://npm-registry-packages-npm-production"}},"0.23.0":{"name":"@nannier-com/lookout","version":"0.23.0","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.23.0","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"d2d54a4eb6468b360b511a8fa6e9ff63c62f334b","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.23.0.tgz","fileCount":114,"integrity":"sha512-bvM+DZ4Zriwen6N+uwfPaRv9oTREr43zK3eMURPpEYH/iqdkXp+2rkuifmO/zWWzsSYLbo+SHPy27bhH4c1m4g==","signatures":[{"sig":"MEUCIQDqD//Eycsmbnwmx1tGwUAWqYyBqFgUqDk99KSeM1htlAIgD9Gj65y4/RVjvPB+3qlXfQCIGzBy/Yr1j7Q4RyBSEXA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":560264},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"4488ad654587d211ead4e1c8169027446026f12a","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"node tools/licensegen/generate.mjs && bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.23.0_1787871461223_0.02143449194248004","host":"s3://npm-registry-packages-npm-production"}},"0.23.1":{"name":"@nannier-com/lookout","version":"0.23.1","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.23.1","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"b95abd78698d677e13f4971bfd0d31e9e5b3be2b","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.23.1.tgz","fileCount":114,"integrity":"sha512-C42nik2ym4CxMtF6f1hnU5oWO7ZdJo5Rm8PP6walwAsecEEQAJDf2GPAyM97s+dbGcZ3zeiJXvjFNN00USEJmg==","signatures":[{"sig":"MEUCIAyyZhuKrqxrudyzTP6R/HkoROYJkFhkcJIg1bP5N+EbAiEA6wCisEiEpbmQdoMyAjHISoivvyL+B1VsFJy+JTWRLGw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":568929},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"edcc90e405297f9cf2d3f3d0e647e7151cbe9f70","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"node tools/licensegen/generate.mjs && bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.23.1_1787933609179_0.5401928159804374","host":"s3://npm-registry-packages-npm-production"}},"0.23.2":{"name":"@nannier-com/lookout","version":"0.23.2","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.23.2","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"8d5673590674e13ba2173bb3faa767dddbfd8551","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.23.2.tgz","fileCount":114,"integrity":"sha512-n3ZMB0tXVH4Bx6SBIJKoQwWqWssmniOLlstu90jbEfd/iCz+6+99wFM0n0sOgd3/Q9XRBkqSRwM2ssCiEAVPdA==","signatures":[{"sig":"MEQCICfIcgXajEiAGe3xudoh20BVzNnJwAkPmtNJ+p2leOUCAiBmUEpkBVj8bwl5txAF/2sR3oqaNvzKlaDSXXOcQbQucA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":609803},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"32f42dd2ff571bf77f509021f40a9d5bbe38de89","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"node tools/licensegen/generate.mjs && bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.23.2_1787933964187_0.8180347339418936","host":"s3://npm-registry-packages-npm-production"}},"0.24.0":{"name":"@nannier-com/lookout","version":"0.24.0","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.24.0","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"a707804beb1feb77c74ddb4c55e203b174f53ab1","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.24.0.tgz","fileCount":116,"integrity":"sha512-qntBoCd+w7sxDIK9dzwpQd8akMdJAAx556cE9AoSQRqKKyi4YBrNieDFmeeIxfTRPXRFY7Tn0LX5vU96i8lwjQ==","signatures":[{"sig":"MEUCIQDPvL1t3y6D86vVK149ye+aoNl8aAlkDHwqgBjkqKTBJQIgFYUN0Ushbe8Qz3Nfagn5mrPoaY/dkDZnBEQIsVxM9do=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":635532},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"89ab4ee2a4d07a7449f7bdc812b4ac824ab502b8","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"node tools/licensegen/generate.mjs && bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.24.0_1787948407837_0.6610926557301957","host":"s3://npm-registry-packages-npm-production"}},"0.48.0":{"name":"@nannier-com/lookout","version":"0.48.0","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.48.0","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"4d45a4762b2069beb875902eaa920d72703bc8c5","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.48.0.tgz","fileCount":407,"integrity":"sha512-fkCVzH1lS3GXwXKSjz8kn94VjEQcfOtQ5MZLeB9i9yf/5ucP6X0o4Z0+dRqk6YfWenc0Dy9Q1MEBNxzvJcSk6Q==","signatures":[{"sig":"MEUCIA7RAYVWVLVthdG4X2mRZ4ang0EFrZUo7oJQM8FnJrjCAiEAqlcOt6uExcFN+U0n2tnioXqt2tyKvcapEVHmlbTQdTI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1902511},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"96267703755cf7ef0cc9ce8cc054f9d7dde5fc83","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && cp src/ui/client/*.css src/ui/client/*.html dist/ui/client/ && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.48.0_1788389215323_0.6800325635773006","host":"s3://npm-registry-packages-npm-production"}},"0.48.1":{"name":"@nannier-com/lookout","version":"0.48.1","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.48.1","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"1cc65e49dc462d730ca3cca32b240aaa548e8d9d","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.48.1.tgz","fileCount":409,"integrity":"sha512-70y1eEeuaQRC0dxkAPcm1cf2P3WIwlKhtCCrfCYJWWYEZpckT3hM9y2SvdhebX6WhSIuCGtQ+SpixVjabmYIqg==","signatures":[{"sig":"MEQCIFBr9Lf4WHARBjbrMMKJf830GBhQszFuM6T+W6I4Zqq3AiAYFlR2gyomjMPB6Z3xno9MhCWDkqrVYf4ygS2ZnESJYw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1914671},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"bf563a135552b4f2a805c03dfdadeb34c1ed347c","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && cp src/ui/client/*.css src/ui/client/*.html dist/ui/client/ && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.48.1_1788391841357_0.6587149009117019","host":"s3://npm-registry-packages-npm-production"}},"0.49.0":{"name":"@nannier-com/lookout","version":"0.49.0","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.49.0","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"4c4e474418c3be624bc62186df9cdfa729ccd862","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.49.0.tgz","fileCount":427,"integrity":"sha512-G6AIDcNM5mbozHywSe21iL4om0UG8IaFQVBCIt2jgwHLYX7iAj8biTnCIgtSzYTOZFd9KcRcQ1IehBnEXB4A0A==","signatures":[{"sig":"MEUCIQDlU++7G8NicfT28NJeQHAHuc8cBRHl3lPfghwO2dW1yAIge94NC6GhdOZDjr9hcWg0AXaWFI2Rb6pDopk2NdR1LNE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2029348},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"6d11ae1ce04dac8c264222fb64ea8469a07b1b7e","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && cp src/ui/client/*.css src/ui/client/*.html dist/ui/client/ && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.49.0_1788795264279_0.30414092658832237","host":"s3://npm-registry-packages-npm-production"}},"0.50.0":{"name":"@nannier-com/lookout","version":"0.50.0","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.50.0","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"0f1b6135c99675fd0fcc44c25c53056ffedb586f","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.50.0.tgz","fileCount":431,"integrity":"sha512-DeQE6765bdHoCpthRWi9Ek/e/pHijG04Rzc/uTfAdgYgg+6JcLvIoaIXc7D8HrEqkgzVOpAlOoC33Rc1WucYjw==","signatures":[{"sig":"MEUCIHYUE6X/u1YYPGJG4EAwve/C/kByliYzPvBXmvW+/iOVAiEAszp5XOVRWtCZIkfJSrnpc8hFrlHNzSvT2S5+ODtWd2U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2052072},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"27bd0c1857a6a560d61d7084d850867c221c6400","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && cp src/ui/client/*.css src/ui/client/*.html dist/ui/client/ && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.50.0_1788795796384_0.817947481833468","host":"s3://npm-registry-packages-npm-production"}},"0.50.1":{"name":"@nannier-com/lookout","version":"0.50.1","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.50.1","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"295630ad3d58ce4823569b524c3574fa5e2a4569","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.50.1.tgz","fileCount":431,"integrity":"sha512-GoxDVLjyuadTmw6J6QiAIxdeThcNvLmK4BxeqGgtkbO7M2fw+5dlmR2QU6AkDRcD/7tiagAh7FRY23yTb8Fheg==","signatures":[{"sig":"MEQCICrXucWoPZN0fbX/l3Xmayv9zb6aE0M+ZJvmUr/h7NYHAiAs4JTzQKphB13BsRXIfkMVcGDortVgBGYmrem3Gan+aQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2060011},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"a22908e40869e579e3fa1907d504737ec0538135","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && cp src/ui/client/*.css src/ui/client/*.html dist/ui/client/ && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.50.1_1788796308738_0.41678212664088465","host":"s3://npm-registry-packages-npm-production"}},"0.51.0":{"name":"@nannier-com/lookout","version":"0.51.0","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.51.0","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"7bd87d01fa6f014663d865a200af04d37c180b43","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.51.0.tgz","fileCount":431,"integrity":"sha512-+akPDY66xUavXkbYFTSHOR3x+yypOQueLp8BL2Jw74ssyyIaTdvlUjtsbIyYDM45zBrJbVP85VDzFVMwN8yZ6w==","signatures":[{"sig":"MEUCIHBC5YD1z+74GQTdz9OZxKv3yS5yPhM72UjP6oKEO9UAAiEA56P661XJ9rfthPPA9FaGlraJPxejCgUKQkxEANTcx+E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2071030},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"b3f6e2fe1702703a0130ab7ab2deb74f9177b1fa","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && cp src/ui/client/*.css src/ui/client/*.html dist/ui/client/ && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.51.0_1788798078999_0.28700149492528637","host":"s3://npm-registry-packages-npm-production"}},"0.51.1":{"name":"@nannier-com/lookout","version":"0.51.1","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.51.1","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"dac818c609fe85d6f4b023d56f545dbfc7fde7d4","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.51.1.tgz","fileCount":431,"integrity":"sha512-SC19LjtKT1l/TND2EHtrIk2sbKna4Gw+EKDaaNRMRsyQpWLSH739te8iHapDtUz3R9qpfDb2ircQQ4R55jU+sw==","signatures":[{"sig":"MEYCIQDM1OBejXdhPUX3lSDzkNbXyjcVvYGEYBYpY3wyhe4qJgIhAM3EepxjKZAbzddOlfcZ9d51H83hKysyFbgx5exbi+7M","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2074478},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"ce9aa54e9864a6c599069f41f904d3265bf544ed","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && cp src/ui/client/*.css src/ui/client/*.html dist/ui/client/ && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.51.1_1788798269789_0.14636514519889032","host":"s3://npm-registry-packages-npm-production"}},"0.52.0":{"name":"@nannier-com/lookout","version":"0.52.0","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.52.0","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"2d32ecd6df7c54bff5998d40d31666b6cd83fd1b","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.52.0.tgz","fileCount":431,"integrity":"sha512-v6iB+BuNRfDoX/R/AbcxyYTpP0wEjgZGJBJ/Cwnh9DZ9YVxiLezaIV17gpSngRZH4LzTqJPNHk/dpsVF1r8a/g==","signatures":[{"sig":"MEYCIQCWj2KnWh5IDL7MxFLH5OC/Ak/ZCl1uDTEBDyaqsrqwOAIhALwG0QedQHAQ/pPOT0jiEKF/OlBJ4hUOF+gXAJum1QG0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2087735},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"be5ef807e4f796e8f1088ba6a8dfdf69d4df3e85","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && cp src/ui/client/*.css src/ui/client/*.html dist/ui/client/ && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.52.0_1788798941455_0.1054116110383374","host":"s3://npm-registry-packages-npm-production"}},"0.52.1":{"name":"@nannier-com/lookout","version":"0.52.1","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.52.1","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"4570b9bfd1328db0f99fb606df418cca7f1552f9","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.52.1.tgz","fileCount":431,"integrity":"sha512-DlPzR5GFIL1pOKmNseklTs/whuiGgwMocYqNnGvpyYghrUJE4vDi3O+jzDECR3H5+tmi+NFnHZQuGYhiyHFdJw==","signatures":[{"sig":"MEYCIQD045Ww6awyluaxAQ8MM6nqIDDPYcxfjhC1IcYXKbSPrwIhAN/J4zh5OP1PxV0CgmoP1ddvZxainVZqMjM/CfSa6oTI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2090014},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"2ed2cb8b0bf2ed2be8363b128de2b8be961dbbfc","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && cp src/ui/client/*.css src/ui/client/*.html dist/ui/client/ && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.52.1_1788799476604_0.16333882642809283","host":"s3://npm-registry-packages-npm-production"}},"0.52.2":{"name":"@nannier-com/lookout","version":"0.52.2","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.52.2","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"c791749f7d708ff9101ae2815fa6083589988cea","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.52.2.tgz","fileCount":431,"integrity":"sha512-56aTHwtsMr5LbjpaBcZRj0mky22cwFY0gh70SXYeIyIDh4yW02pejUR+p/6gQRFWyFL4Q8qJQiZ/Guj8YIb4VA==","signatures":[{"sig":"MEQCIDuO/OdpRMIoByIFtWNfFTx9xndv/S5isXvlYOjTcJAlAiAPAB727Z7e3A2wXt/uvo6wxcndxO4zGGHy1pgVY5sfFg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2093242},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"15c2a5e5d08f3829d62ee00c1a6dc6ef08749b4e","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && cp src/ui/client/*.css src/ui/client/*.html dist/ui/client/ && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.52.2_1788809728951_0.9436312121656885","host":"s3://npm-registry-packages-npm-production"}},"0.53.0":{"name":"@nannier-com/lookout","version":"0.53.0","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.53.0","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"52bde04f85f2771144a3d44e04d1a3415d66bb8b","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.53.0.tgz","fileCount":433,"integrity":"sha512-03VK8fZoU/28g5SMLyf+EK/jEuyl1BpIB3ODoaA5cAvBVvgihEM7oYzaNaLlDjw+jj0nbp0711b+KMQvim9AvA==","signatures":[{"sig":"MEYCIQDFcoFasAvOnOT6q08BoHT7C1R5AcBoUHRdIWNIyWwPUAIhALy4hVEDhtrxku7FstC8aygdbLXLXsrt653L9mqZlYIS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2110981},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"f30ac872fc690bef1f9451c1becf5c760226d4b7","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && cp src/ui/client/*.css src/ui/client/*.html dist/ui/client/ && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.53.0_1788811222194_0.6241908231649103","host":"s3://npm-registry-packages-npm-production"}},"0.53.1":{"name":"@nannier-com/lookout","version":"0.53.1","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.53.1","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"9e4ca82ecb4f46e4afa7e1b57f93e096c1b9c78a","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.53.1.tgz","fileCount":433,"integrity":"sha512-czSf2pcCPfZKqSN61q+x5y6/JyE0+nqQfsHj2k+mKERK8fRea+iEUl9/1SjjdOO13wkFZhoLH4hgjZFJLjMs6g==","signatures":[{"sig":"MEYCIQC7VTO4KdwA0nCWSMQNc84dVBfFp0WAJRW+sqlYPwYZwAIhAI284qwljIti2F6yzbebbgdbrJ63fc5BJAPBcbNNDCM5","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2114111},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"6ae6eedf6535205251c327eafa70d03461d3b986","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && cp src/ui/client/*.css src/ui/client/*.html dist/ui/client/ && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.53.1_1788811661472_0.6194756750676327","host":"s3://npm-registry-packages-npm-production"}},"0.53.2":{"name":"@nannier-com/lookout","version":"0.53.2","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.53.2","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"fddfa9cd79b7370c16ea76d973d2d30fc7bcdd67","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.53.2.tgz","fileCount":433,"integrity":"sha512-OlBLYI4TKZRummk/v4MlG4Qk9nVmU1x0ou+n9RlfhUpX18egOpG9Z3vx/zQo7EofMN5EZ+6kmduArMxQEEomkQ==","signatures":[{"sig":"MEUCIQD8nqUrzeBSn/aRUFdxJHee+YmDy+LsQ/yJMAs630HYBAIgL2HgtLkSExhcEVIb5gp2pUQJ88Pr0mEU+uhXlbWjbWY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2114647},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"36e2d9b88ce103b2796f739143325596fae5ee6f","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && cp src/ui/client/*.css src/ui/client/*.html dist/ui/client/ && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.53.2_1788812744725_0.8317577908582177","host":"s3://npm-registry-packages-npm-production"}},"0.53.3":{"name":"@nannier-com/lookout","version":"0.53.3","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.53.3","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"a95ed500e99b8b4edff241a9896625b471c2bdee","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.53.3.tgz","fileCount":433,"integrity":"sha512-KTnSLGR5rfZttMQ/on/L2ZNaInxiUhYE+Jv034axNHL403RILjgejjptihSYF25u+Evi/nqoBDM/WoS43UmEag==","signatures":[{"sig":"MEQCIFczF9FdoresU83qcpRsZ0VM2I6PvTbcAKrRVmMTT8wrAiAfppB6XH/nU0emXbRU4cV9aghKZsAxXZOUKlV2EohDEA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2115961},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"fed1bed6cc41d2ffdcbf7cbb1ea8323529059005","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && cp src/ui/client/*.css src/ui/client/*.html dist/ui/client/ && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.53.3_1788813063059_0.4551086427705453","host":"s3://npm-registry-packages-npm-production"}},"0.54.0":{"name":"@nannier-com/lookout","version":"0.54.0","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.54.0","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"646198c526b23b650b67ff9ef80f52b216a2cd4b","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.54.0.tgz","fileCount":439,"integrity":"sha512-ZHQnptwucfgE+cPf0mpNtsH3aceMckQan7Aoiv4JHhsrtEiTTZUA6UApE5Qq3atxFKSx+CM3ZQ93ZTDD2hJUJQ==","signatures":[{"sig":"MEUCIQDa0YZuZid5Y/D+x1ssXaP52UcmGMJzBbyVm3FtQ+KZ4QIgcuvvHe8ODvvp5H7Xikjd+wgLEn/2bUvNoWAJMCrOAD8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2139253},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"7308411c73fb23d21e8de83d80ff62f76d39d44c","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && cp src/ui/client/*.css src/ui/client/*.html dist/ui/client/ && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.54.0_1788815384058_0.025018710340525274","host":"s3://npm-registry-packages-npm-production"}},"0.54.1":{"name":"@nannier-com/lookout","version":"0.54.1","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.54.1","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"58ba0ba0a40b2d63af3efabb4400724bbe994309","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.54.1.tgz","fileCount":439,"integrity":"sha512-v/DZKDAvfe9iHrYg+ulnMdKy+folv7maPSEuZ979JLcT0QW/aiSOL9VzuZOqFNFQIYGkBQnuW+eDmLQKJrMt0w==","signatures":[{"sig":"MEUCIEUbgEO+4YPVYygA2TQuhObwplLkbgs09ZLzmbg4qsjiAiEA6iCCCUr+vX9Sf8bYZKCvN7MSf9ABZKd2mVGSQKVOdkQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2145139},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"c59accaeae88c0c96069a26485c9690bf4067c9d","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && cp src/ui/client/*.css src/ui/client/*.html dist/ui/client/ && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.54.1_1788815651639_0.8895289544709777","host":"s3://npm-registry-packages-npm-production"}},"0.54.2":{"name":"@nannier-com/lookout","version":"0.54.2","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.54.2","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"7e8840c880a24becddbd29f8ef276e480de48ff4","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.54.2.tgz","fileCount":443,"integrity":"sha512-y8798nsjMZhpSfUhgdGMW+W7jXRFfkYT8zUyN4LtUnVB5cNUMea711QK5jxJbd6v34U2Kn3iS0m+gvFI2+zAJQ==","signatures":[{"sig":"MEUCIEYasFYYSM7DCAsVBIdhQwusaXjNV/8ESEr7wDftAzENAiEAjN9v0U4kTz55N2jEuzMjCJjP+qDteppeCDPkyCGCXSU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2166540},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"68cebabbd96274ac0cea67c5ee308dc312e3230f","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && cp src/ui/client/*.css src/ui/client/*.html dist/ui/client/ && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.54.2_1788816496782_0.5979154324357663","host":"s3://npm-registry-packages-npm-production"}},"0.54.3":{"name":"@nannier-com/lookout","version":"0.54.3","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.54.3","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"613333955882eb4b649d62a5f24349e45947e25d","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.54.3.tgz","fileCount":449,"integrity":"sha512-FmiAdoUaDFNf5T90bjbs1pXbQTHDRtKmKyKCH8N660GHFWY4v1gopKhzyvNx6dcuWLNz80DA3Ta5zHI3RjrbBA==","signatures":[{"sig":"MEUCIQC7rg+tKpYz+loiJKtkl8wYPQC9F7oqRTCHWKUxOAJjwQIgelEzPf8S+Ml1x9ENflAgj+OIkyZQLv+DhyNoHqVPjh0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2187808},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"21e8e704dd6e1e2e4a883596da281e561ec4180c","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && cp src/ui/client/*.css src/ui/client/*.html dist/ui/client/ && chmod +x dist/cli.js","release":"changeset publish","changeset":"changeset","typecheck":"tsc --noEmit","prepublishOnly":"bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","proper-lockfile":"^4.1.2","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0","@types/proper-lockfile":"^4.1.4"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.54.3_1788820612621_0.1554515112404915","host":"s3://npm-registry-packages-npm-production"}},"0.54.4":{"name":"@nannier-com/lookout","version":"0.54.4","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.54.4","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"f52f2355a9c1c60dbf72d7304833cf8af0c8669e","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.54.4.tgz","fileCount":449,"integrity":"sha512-KG4+oktDEMX6pO1HgEdPIHsh1EeWyXD+W885vxm8DKKxKG1UjzliZX0FknoQNZhtfq7lQuRKXx8vMFWMnMGnTw==","signatures":[{"sig":"MEQCIGbJbxb0tLKPlZhVYO25HUKr5/r3ikBcixYAft7deLCnAiAQyICfrCicjmYpr3vQmnBaVYphCirTkMpqZwjLFRdiEw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2188304},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"d6ca008eda0e7e8797f10a04e5934961b832b517","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && cp src/ui/client/*.css src/ui/client/*.html dist/ui/client/ && chmod +x dist/cli.js","release":"changeset publish","test:ui":"bun tools/ui-check/run.ts ci","changeset":"changeset","typecheck":"tsc --noEmit","test:package":"bun tools/package/smoke.ts","prepublishOnly":"bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","proper-lockfile":"^4.1.2","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0","@types/proper-lockfile":"^4.1.4"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.54.4_1788824095959_0.09862514534300781","host":"s3://npm-registry-packages-npm-production"}},"0.54.5":{"name":"@nannier-com/lookout","version":"0.54.5","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.54.5","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"96d4ef459bcc4093d3385e4884addb0b4bc13cc2","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.54.5.tgz","fileCount":451,"integrity":"sha512-rqnYxFGQf5s/s9uMAxJSiwKebxB6o9TY/XLXs/J9e6X60qMbHuNRUXYrgJBrwEgU7TBEFDOd9gwPNOZ9dX3t1Q==","signatures":[{"sig":"MEQCIBu35EdmeoISBzjodAcDm0azWhcgXxuRYNi6pQLdqkQPAiAk+JNInASTrD0kd9XLTnpaSNtxPFqABtAPkE81j55sAw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2198321},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"cc75586e32c248be1c604b60e81a4b0e781f8726","scripts":{"lint":"eslint .","test":"bun test","build":"rm -rf dist && tsc -p tsconfig.build.json && cp src/ui/client/*.css src/ui/client/*.html dist/ui/client/ && chmod +x dist/cli.js","release":"changeset publish","test:ui":"bun tools/ui-check/run.ts ci","changeset":"changeset","typecheck":"tsc --noEmit","test:package":"bun tools/package/smoke.ts","prepublishOnly":"bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","proper-lockfile":"^4.1.2","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@changesets/cli":"^2.31.0","typescript-eslint":"^8.64.0","@types/proper-lockfile":"^4.1.4"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.54.5_1788829104032_0.8720784782217599","host":"s3://npm-registry-packages-npm-production"}},"0.54.6":{"name":"@nannier-com/lookout","version":"0.54.6","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.54.6","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"98ad4966fc832f74b9ed3dfbaa07cdf023888ec0","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.54.6.tgz","fileCount":411,"integrity":"sha512-WgoojK9EMDVS3N1yuXyGaGBdt8d6wHBdNUQIIZtZj5pXyDvAhccRfUa1O7ywvvjmONj4UHd84AnMQzgY1TJ6ag==","signatures":[{"sig":"MEQCIB6HgIjrABNN6JUATQdYpbOuHQXcUEeHMepv239+7GxEAiAc5DuOmHfscHT5S+swYE+laT1qMtmYJUCRIMYCN5jsow==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2764340},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"8bc614f8ff57bd04edd9a3bdb21e63ae1142b137","scripts":{"lint":"eslint .","test":"bun test --max-concurrency=1","build":"rm -rf dist && tsc -p tsconfig.build.json && vite build && chmod +x dist/cli.js","release":"changeset publish","test:ui":"bun tools/ui-check/run.ts ci","changeset":"changeset","typecheck":"tsc --noEmit","test:package":"bun tools/package/smoke.ts","prepublishOnly":"bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","proper-lockfile":"^4.1.2","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"7.1.7","react":"19.2.0","buffer":"^6.0.3","eslint":"^9","react-dom":"19.2.0","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@types/react":"19.2.2","@changesets/cli":"^2.31.0","@types/react-dom":"19.2.2","react-native-svg":"15.15.1","react-native-web":"0.21.2","typescript-eslint":"^8.64.0","@nannier-com/canvas":"2.62.1","@vitejs/plugin-react":"5.0.4","@types/proper-lockfile":"^4.1.4","@react-native/assets-registry":"0.81.5"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.54.6_1788832218394_0.9586432874485593","host":"s3://npm-registry-packages-npm-production"}},"0.55.0":{"name":"@nannier-com/lookout","version":"0.55.0","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.55.0","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"f19d1f1d461f31d9e7ccfb89dfd3fa89524045bc","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.55.0.tgz","fileCount":416,"integrity":"sha512-AfZfu6FNJhIhLHMYks9LqmcdOhO7iSkZIU8AqaDn1n3r+555kRH+A41lAYovhr5pNRu6XrgO+5ExFmr2LU8jQg==","signatures":[{"sig":"MEYCIQCPGCxz8anN4YbaOmLiRfmp5d59Iu9gw+KyaR3g84NWlAIhAJgFSLb7LYz33mZvRY0hdsCSDqz1ecC3XfZCVQalkFdJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2787672},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"d59cf15e77a164c83defb8da4a5330dd9389c488","scripts":{"lint":"eslint .","test":"bun test --max-concurrency=1","build":"rm -rf dist && tsc -p tsconfig.build.json && vite build && chmod +x dist/cli.js","release":"changeset publish","test:ui":"bun tools/ui-check/run.ts ci","changeset":"changeset","typecheck":"tsc --noEmit","test:package":"bun tools/package/smoke.ts","prepublishOnly":"bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","proper-lockfile":"^4.1.2","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"7.1.7","react":"19.2.0","buffer":"^6.0.3","eslint":"^9","react-dom":"19.2.0","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@types/react":"19.2.2","@changesets/cli":"^2.31.0","@types/react-dom":"19.2.2","react-native-svg":"15.15.1","react-native-web":"0.21.2","typescript-eslint":"^8.64.0","@nannier-com/canvas":"2.62.1","@vitejs/plugin-react":"5.0.4","@types/proper-lockfile":"^4.1.4","@react-native/assets-registry":"0.81.5"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.55.0_1788835081288_0.6018283159561071","host":"s3://npm-registry-packages-npm-production"}},"0.56.0":{"name":"@nannier-com/lookout","version":"0.56.0","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.56.0","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"df35c7deb6903a743d976b3ab067683fd48b0e58","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.56.0.tgz","fileCount":416,"integrity":"sha512-vBXVmhovie0oEfI5BeNRDRRJZTLVGSN+1kbTsY2La2higCLpN+EtPgOx7VxaKYEMwe6nW0OL4tkyLyFZsMNjpg==","signatures":[{"sig":"MEUCIHU3rTUt3AuvAOOw1frIGK5t5wk3lem3nI+80J5G/KPAAiEAyx5UItELhIm74fsXJ9NToDRJcVxF+glBUqp9MFEY7u8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2796434},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"fd6deb3d7139a175d9a81c3408b23743ac7cf330","scripts":{"lint":"eslint .","test":"bun test --max-concurrency=1","build":"rm -rf dist && tsc -p tsconfig.build.json && vite build && chmod +x dist/cli.js","release":"changeset publish","test:ui":"bun tools/ui-check/run.ts ci","changeset":"changeset","typecheck":"tsc --noEmit","test:package":"bun tools/package/smoke.ts","prepublishOnly":"bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","proper-lockfile":"^4.1.2","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"7.1.7","react":"19.2.0","buffer":"^6.0.3","eslint":"^9","react-dom":"19.2.0","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@types/react":"19.2.2","@changesets/cli":"^2.31.0","@types/react-dom":"19.2.2","react-native-svg":"15.15.1","react-native-web":"0.21.2","typescript-eslint":"^8.64.0","@nannier-com/canvas":"2.62.1","@vitejs/plugin-react":"5.0.4","@types/proper-lockfile":"^4.1.4","@react-native/assets-registry":"0.81.5"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.56.0_1788835671711_0.7797910367900078","host":"s3://npm-registry-packages-npm-production"}},"0.57.0":{"name":"@nannier-com/lookout","version":"0.57.0","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.57.0","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"c9fbaca572c81af30253365f4b9e7697bd914181","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.57.0.tgz","fileCount":418,"integrity":"sha512-U0bhh1eMewZh5rmVzb8/0S8pTTDkbir16CPRxFiVODKK1SJ248NJV35w0Ep5HvwsX7OmFR3lDnwwFDhKaeXkzQ==","signatures":[{"sig":"MEUCIQDWR5ANZJRvxdXWHuqgloOmQ4rLRmU7lpqWI3PMPRrdqwIgHJdLaJXg6yxCBUYLk7uC4re6iQqBvEdc79f4WQ1Pv5Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2810552},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"78c2948ad7d48e7887493e53f12cf89633bfc164","scripts":{"lint":"eslint .","test":"bun test --max-concurrency=1","build":"rm -rf dist && tsc -p tsconfig.build.json && vite build && chmod +x dist/cli.js","release":"changeset publish","test:ui":"bun tools/ui-check/run.ts ci","changeset":"changeset","typecheck":"tsc --noEmit","test:package":"bun tools/package/smoke.ts","prepublishOnly":"bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","proper-lockfile":"^4.1.2","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"7.1.7","react":"19.2.0","buffer":"^6.0.3","eslint":"^9","react-dom":"19.2.0","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@types/react":"19.2.2","@changesets/cli":"^2.31.0","@types/react-dom":"19.2.2","react-native-svg":"15.15.1","react-native-web":"0.21.2","typescript-eslint":"^8.64.0","@nannier-com/canvas":"2.62.1","@vitejs/plugin-react":"5.0.4","@types/proper-lockfile":"^4.1.4","@react-native/assets-registry":"0.81.5"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.57.0_1788836737471_0.7937222115421549","host":"s3://npm-registry-packages-npm-production"}},"0.58.0":{"name":"@nannier-com/lookout","version":"0.58.0","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.58.0","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"64a7456a97f012948d779f5de00c7db44bda4c71","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.58.0.tgz","fileCount":420,"integrity":"sha512-RxH7eTd/unLIg+7j/5K1DD4LFAAIDIxUmqeZKbO8Jcn2rNnAx/85HrqMJnZqoTLz/glR0J+BjIj+DIWasMfUxw==","signatures":[{"sig":"MEQCIGxmGHlkjroSriD6vxbVLvuMBkD+1Y3yZsMzOQiXic9BAiBXfC/ImQQUiTAYKxkTugKqRnuDuWS5TSpgznUWWYu/Iw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2817042},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"4c40e4cdc950e51930226c4bd9f1686f00117690","scripts":{"lint":"eslint .","test":"bun test --max-concurrency=1","build":"rm -rf dist && tsc -p tsconfig.build.json && vite build && chmod +x dist/cli.js","release":"changeset publish","test:ui":"bun tools/ui-check/run.ts ci","changeset":"changeset","typecheck":"tsc --noEmit","test:package":"bun tools/package/smoke.ts","prepublishOnly":"bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","proper-lockfile":"^4.1.2","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"7.1.7","react":"19.2.0","buffer":"^6.0.3","eslint":"^9","react-dom":"19.2.0","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@types/react":"19.2.2","@changesets/cli":"^2.31.0","@types/react-dom":"19.2.2","react-native-svg":"15.15.1","react-native-web":"0.21.2","typescript-eslint":"^8.64.0","@nannier-com/canvas":"2.62.1","@vitejs/plugin-react":"5.0.4","@types/proper-lockfile":"^4.1.4","@react-native/assets-registry":"0.81.5"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.58.0_1788837329044_0.3885937150263188","host":"s3://npm-registry-packages-npm-production"}},"0.59.0":{"name":"@nannier-com/lookout","version":"0.59.0","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.59.0","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"c77365720316e7ebeff1ae280f0cab06e41fbd30","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.59.0.tgz","fileCount":423,"integrity":"sha512-SrriarD2ubxu7mJDogEwjqyKcvIg+nz+aGENNlCmYMBlUz7kgj9fXSJBmmVkgy0Ds8HHkkSsMa8LQe64+qBJkg==","signatures":[{"sig":"MEQCICoetZcQGjHCce4fHFcM2WMMii+ev0LyVCiNe2lqPL/+AiBoF9A9qQPbl8nybZQGJ/qDJ8siaZT+5KLOdTSNWwTCnA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2829560},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"ec533b333fac979ff457eaa3dcbb9653f8453b56","scripts":{"lint":"eslint .","test":"bun test --max-concurrency=1","build":"rm -rf dist && tsc -p tsconfig.build.json && vite build && chmod +x dist/cli.js","release":"changeset publish","test:ui":"bun tools/ui-check/run.ts ci","changeset":"changeset","typecheck":"tsc --noEmit","test:package":"bun tools/package/smoke.ts","prepublishOnly":"bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","proper-lockfile":"^4.1.2","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"7.1.7","react":"19.2.0","buffer":"^6.0.3","eslint":"^9","react-dom":"19.2.0","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@types/react":"19.2.2","@changesets/cli":"^2.31.0","@types/react-dom":"19.2.2","react-native-svg":"15.15.1","react-native-web":"0.21.2","typescript-eslint":"^8.64.0","@nannier-com/canvas":"2.62.1","@vitejs/plugin-react":"5.0.4","@types/proper-lockfile":"^4.1.4","@react-native/assets-registry":"0.81.5"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.59.0_1788838043109_0.8271104157960762","host":"s3://npm-registry-packages-npm-production"}},"0.59.1":{"name":"@nannier-com/lookout","version":"0.59.1","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.59.1","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"55bfc01285b2e9fa9b1e12dd6f71a6295f2dbdcb","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.59.1.tgz","fileCount":423,"integrity":"sha512-HTqHZkYLjLu+C9fxZUzx/YEFDBFZQ+9Uk0TfzslBJoSp8Ghq8PG7HOxSruHv1UDsxy9djCzl7ujPNtIlTRQG3w==","signatures":[{"sig":"MEUCIQDeuI+eJmdMoiPDBwG/wrtPh10lMXjsELMQ1igkn+WR6gIgBtsndr4a9bQOSRSCiVFlE6E30NRfiXEYPhJMpVw7YHc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2830260},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"0d05747efb4497dceedb27955fc8af0170f0155a","scripts":{"lint":"eslint .","test":"bun test --max-concurrency=1","build":"rm -rf dist && tsc -p tsconfig.build.json && vite build && chmod +x dist/cli.js","release":"changeset publish","test:ui":"bun tools/ui-check/run.ts ci","changeset":"changeset","typecheck":"tsc --noEmit","test:package":"bun tools/package/smoke.ts","prepublishOnly":"bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","proper-lockfile":"^4.1.2","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"7.1.7","react":"19.2.0","buffer":"^6.0.3","eslint":"^9","react-dom":"19.2.0","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@types/react":"19.2.2","@changesets/cli":"^2.31.0","@types/react-dom":"19.2.2","react-native-svg":"15.15.1","react-native-web":"0.21.2","typescript-eslint":"^8.64.0","@nannier-com/canvas":"2.62.1","@vitejs/plugin-react":"5.0.4","@types/proper-lockfile":"^4.1.4","@react-native/assets-registry":"0.81.5"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.59.1_1788839047389_0.7934574105041012","host":"s3://npm-registry-packages-npm-production"}},"0.59.2":{"name":"@nannier-com/lookout","version":"0.59.2","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.59.2","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"9f02f759c032e069e5ad25f68bfc361d52eb56b7","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.59.2.tgz","fileCount":423,"integrity":"sha512-0n1JQwzyuWIjdaiMDZ0wDLQpusKs4ZKrInrMfpNyNFKcWQ/Z7AzX9aT+mLO4FQSwg1Cpz8RKi1bQQv63qlYT/w==","signatures":[{"sig":"MEUCIADq+BgLwVyGM7JbxVlu2JYos1N+PJAL2MskucS64FDEAiEAu8oEjmpXCZ9t2xk/pJukyoFZrsvAPePm8zTVIXUj/Mw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2831378},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"0df4b0f9be9db19623bc2d9576529bef4d476538","scripts":{"lint":"eslint .","test":"bun test --max-concurrency=1","build":"rm -rf dist && tsc -p tsconfig.build.json && vite build && chmod +x dist/cli.js","release":"changeset publish","test:ui":"bun tools/ui-check/run.ts ci","changeset":"changeset","typecheck":"tsc --noEmit","test:package":"bun tools/package/smoke.ts","prepublishOnly":"bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","proper-lockfile":"^4.1.2","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"7.1.7","react":"19.2.0","buffer":"^6.0.3","eslint":"^9","react-dom":"19.2.0","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@types/react":"19.2.2","@changesets/cli":"^2.31.0","@types/react-dom":"19.2.2","react-native-svg":"15.15.1","react-native-web":"0.21.2","typescript-eslint":"^8.64.0","@nannier-com/canvas":"2.62.1","@vitejs/plugin-react":"5.0.4","@types/proper-lockfile":"^4.1.4","@react-native/assets-registry":"0.81.5"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.59.2_1788839458073_0.44201925354146954","host":"s3://npm-registry-packages-npm-production"}},"0.59.3":{"name":"@nannier-com/lookout","version":"0.59.3","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.59.3","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"6aa52ce78ff8bc1b7a3225f2adfd6b6ab475af9e","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.59.3.tgz","fileCount":423,"integrity":"sha512-SLKiY2IPbYkfZeiSnrLc+mCYlQxjEmiqrtmg3UVAthmIaT3qm23k7qRC59TJFjGWC0XhHV1Q+0+ovtlJENpUKw==","signatures":[{"sig":"MEUCIDmpPAbj1CYAFbJzF0nHP/Ff3JypBEfF3jvfAY44hPWBAiEAkB2H0pvLyknRXOeBO4OD60jdKkC+MmWVJkr0M+zYv7U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2833064},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"f35c29888c84a65c2a59d6bdf59c31588c297319","scripts":{"lint":"eslint .","test":"bun test --max-concurrency=1","build":"rm -rf dist && tsc -p tsconfig.build.json && vite build && chmod +x dist/cli.js","release":"changeset publish","test:ui":"bun tools/ui-check/run.ts ci","changeset":"changeset","typecheck":"tsc --noEmit","test:package":"bun tools/package/smoke.ts","prepublishOnly":"bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","proper-lockfile":"^4.1.2","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"7.1.7","react":"19.2.0","buffer":"^6.0.3","eslint":"^9","react-dom":"19.2.0","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@types/react":"19.2.2","@changesets/cli":"^2.31.0","@types/react-dom":"19.2.2","react-native-svg":"15.15.1","react-native-web":"0.21.2","typescript-eslint":"^8.64.0","@nannier-com/canvas":"2.62.1","@vitejs/plugin-react":"5.0.4","@types/proper-lockfile":"^4.1.4","@react-native/assets-registry":"0.81.5"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.59.3_1788840842862_0.32239352402183896","host":"s3://npm-registry-packages-npm-production"}},"0.59.4":{"name":"@nannier-com/lookout","version":"0.59.4","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.59.4","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"4178f2cbba7686dac934957adff22f2783880eb6","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.59.4.tgz","fileCount":423,"integrity":"sha512-NvewJOmSZ5CcsTv26h0tZ3xy45KCO1DjlZ8JuyvqY7iJn/EXF9lsu9lhC0DSHKf5lV45fvXuNJy6SsQwjq+1fw==","signatures":[{"sig":"MEUCIQDa5RDDxuzr6SptamdXhwzDH/IUC+GSaRFBzkaEjKAqXAIgT1aWozrXa03BXlxGxFTPpjmIajXqQsfF9KMDWCsMXJ8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2834270},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"aa4d08a9b1eaff2217ef0632a134ea2073e7138e","scripts":{"lint":"eslint .","test":"bun test --max-concurrency=1","build":"rm -rf dist && tsc -p tsconfig.build.json && vite build && chmod +x dist/cli.js","release":"changeset publish","test:ui":"bun tools/ui-check/run.ts ci","changeset":"changeset","typecheck":"tsc --noEmit","test:package":"bun tools/package/smoke.ts","prepublishOnly":"bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","proper-lockfile":"^4.1.2","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"7.1.7","react":"19.2.0","buffer":"^6.0.3","eslint":"^9","react-dom":"19.2.0","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@types/react":"19.2.2","@changesets/cli":"^2.31.0","@types/react-dom":"19.2.2","react-native-svg":"15.15.1","react-native-web":"0.21.2","typescript-eslint":"^8.64.0","@nannier-com/canvas":"2.62.1","@vitejs/plugin-react":"5.0.4","@types/proper-lockfile":"^4.1.4","@react-native/assets-registry":"0.81.5"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.59.4_1788842927680_0.7970788477431123","host":"s3://npm-registry-packages-npm-production"}},"0.59.5":{"name":"@nannier-com/lookout","version":"0.59.5","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"license":"MIT","_id":"@nannier-com/lookout@0.59.5","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"homepage":"https://github.com/nannier-com/lookout#readme","bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"bin":{"lookout":"dist/cli.js"},"dist":{"shasum":"412967b94ab766959cdc8c055c02102c50453b8c","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.59.5.tgz","fileCount":423,"integrity":"sha512-ItzpyqRgi6WmFaKMEte1kbs3VzL7/OWVeClMBcER0QKcX76I+xAfDEpV2lGFP8Ypm4rQv4k83DvAmf/1M5I2Sw==","signatures":[{"sig":"MEYCIQDwCXHC+UQJ3TArmnCRWdoUs6BGn79nfa4QxI2zrE29nAIhAKn//8Hv4eG0iIJj8OX+yJQvADJfNlxA57biLtyoxztg","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2835945},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"79b02f87c7c54f67aef7f192ad31e8e07f283818","scripts":{"lint":"eslint .","test":"bun test --max-concurrency=1","build":"rm -rf dist && tsc -p tsconfig.build.json && vite build && chmod +x dist/cli.js","release":"changeset publish","test:ui":"bun tools/ui-check/run.ts ci","changeset":"changeset","typecheck":"tsc --noEmit","test:package":"bun tools/package/smoke.ts","prepublishOnly":"bun run build","version-packages":"changeset version"},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"repository":{"url":"git+https://github.com/nannier-com/lookout.git","type":"git"},"_npmVersion":"10.9.8","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"sharp":"^0.35.0","playwright":"^1.60.0","proper-lockfile":"^4.1.2","@axe-core/playwright":"^4.10.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"7.1.7","react":"19.2.0","buffer":"^6.0.3","eslint":"^9","react-dom":"19.2.0","@eslint/js":"^9","@types/bun":"^1.2.23","typescript":"^5.8.3","@types/node":"^25.9.3","@types/react":"19.2.2","@changesets/cli":"^2.31.0","@types/react-dom":"19.2.2","react-native-svg":"15.15.1","react-native-web":"0.21.2","typescript-eslint":"^8.64.0","@nannier-com/canvas":"2.62.1","@vitejs/plugin-react":"5.0.4","@types/proper-lockfile":"^4.1.4","@react-native/assets-registry":"0.81.5"},"_npmOperationalInternal":{"tmp":"tmp/lookout_0.59.5_1788909100827_0.8558771199462563","host":"s3://npm-registry-packages-npm-production"}},"0.59.6":{"name":"@nannier-com/lookout","version":"0.59.6","description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","license":"MIT","repository":{"type":"git","url":"git+https://github.com/nannier-com/lookout.git"},"bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"type":"module","bin":{"lookout":"dist/cli.js"},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"publishConfig":{"access":"public"},"scripts":{"typecheck":"tsc --noEmit","lint":"eslint .","build":"rm -rf dist && tsc -p tsconfig.build.json && vite build && chmod +x dist/cli.js","test":"bun test --max-concurrency=1","test:ui":"bun tools/ui-check/run.ts ci","test:package":"bun tools/package/smoke.ts","changeset":"changeset","version-packages":"changeset version","release":"changeset publish","prepublishOnly":"bun run build"},"dependencies":{"@axe-core/playwright":"^4.10.2","playwright":"^1.60.0","proper-lockfile":"^4.1.2","sharp":"^0.35.0"},"devDependencies":{"@changesets/cli":"^2.31.0","@eslint/js":"^9","@nannier-com/canvas":"2.62.1","@react-native/assets-registry":"0.81.5","@types/bun":"^1.2.23","@types/node":"^25.9.3","@types/proper-lockfile":"^4.1.4","@types/react":"19.2.2","@types/react-dom":"19.2.2","@vitejs/plugin-react":"5.0.4","buffer":"^6.0.3","eslint":"^9","react":"19.2.0","react-dom":"19.2.0","react-native-svg":"15.15.1","react-native-web":"0.21.2","typescript":"^5.8.3","typescript-eslint":"^8.64.0","vite":"7.1.7"},"_id":"@nannier-com/lookout@0.59.6","gitHead":"4fc4e9566a959f0f824ac496f4e5bd1b32b3eeaa","homepage":"https://github.com/nannier-com/lookout#readme","_nodeVersion":"22.23.2","_npmVersion":"10.9.8","dist":{"integrity":"sha512-sE8CrREuqPeI5SeNKxSKZNxl4gAgFhQpG3u7lnygrND3KOIhEtjU8QWTSrx+hdMb78Q4Nj9Qys1bET53c91LoQ==","shasum":"69e8e9496294f7543ed9307b963ca928edf1a3cd","tarball":"https://registry.npmjs.org/@nannier-com/lookout/-/lookout-0.59.6.tgz","fileCount":423,"unpackedSize":2838069,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIFHL6qo+lT/N9TRgd298383UA/uaylRavu66TKrf0E0EAiBIrXHBRQpxiE2GWDQ7wEOEDcXv47C8oPP/5i/NF+TytA=="}]},"_npmUser":{"name":"nannier","email":"bobby.nannier@gmail.com"},"directories":{},"maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/lookout_0.59.6_1788914781188_0.6442822198686298"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-26T03:52:35.976Z","modified":"2026-09-09T00:46:21.554Z","0.1.0":"2026-08-26T03:52:36.338Z","0.1.1":"2026-08-26T03:59:11.317Z","0.2.0":"2026-08-26T17:01:10.383Z","0.3.0":"2026-08-26T17:17:51.004Z","0.4.0":"2026-08-26T17:38:44.304Z","0.4.1":"2026-08-26T17:40:29.447Z","0.4.2":"2026-08-26T17:42:01.426Z","0.4.3":"2026-08-26T18:06:50.483Z","0.5.0":"2026-08-26T18:35:04.587Z","0.5.1":"2026-08-26T18:50:16.116Z","0.6.0":"2026-08-26T20:01:46.824Z","0.7.0":"2026-08-26T20:09:36.393Z","0.8.0":"2026-08-26T20:16:52.233Z","0.9.0":"2026-08-26T20:23:56.048Z","0.10.0":"2026-08-26T20:36:41.749Z","0.11.0":"2026-08-26T20:41:03.727Z","0.12.0":"2026-08-26T21:16:34.740Z","0.13.0":"2026-08-26T21:32:59.730Z","0.13.1":"2026-08-26T21:53:52.203Z","0.13.2":"2026-08-26T22:02:12.625Z","0.14.0":"2026-08-26T22:19:37.877Z","0.14.1":"2026-08-26T22:26:37.922Z","0.15.0":"2026-08-26T22:34:05.527Z","0.15.1":"2026-08-26T22:37:35.452Z","0.16.0":"2026-08-27T02:05:49.387Z","0.17.0":"2026-08-27T02:18:38.847Z","0.18.0":"2026-08-27T02:22:59.480Z","0.19.0":"2026-08-27T02:35:16.470Z","0.20.0":"2026-08-27T02:42:55.734Z","0.21.0":"2026-08-27T02:48:19.716Z","0.21.1":"2026-08-27T03:33:42.366Z","0.21.2":"2026-08-27T04:01:46.456Z","0.21.3":"2026-08-27T22:34:27.912Z","0.21.4":"2026-08-27T22:36:06.412Z","0.21.5":"2026-08-27T22:39:08.333Z","0.21.6":"2026-08-27T22:43:10.684Z","0.22.0":"2026-08-27T22:47:58.486Z","0.22.1":"2026-08-27T22:50:26.076Z","0.22.2":"2026-08-27T22:53:58.905Z","0.23.0":"2026-08-27T22:57:41.378Z","0.23.1":"2026-08-28T16:13:29.387Z","0.23.2":"2026-08-28T16:19:24.312Z","0.24.0":"2026-08-28T20:20:07.990Z","0.48.0":"2026-09-02T22:46:55.471Z","0.48.1":"2026-09-02T23:30:41.543Z","0.49.0":"2026-09-07T15:34:24.450Z","0.50.0":"2026-09-07T15:43:16.534Z","0.50.1":"2026-09-07T15:51:49.021Z","0.51.0":"2026-09-07T16:21:19.139Z","0.51.1":"2026-09-07T16:24:29.998Z","0.52.0":"2026-09-07T16:35:41.625Z","0.52.1":"2026-09-07T16:44:36.735Z","0.52.2":"2026-09-07T19:35:29.255Z","0.53.0":"2026-09-07T20:00:22.335Z","0.53.1":"2026-09-07T20:07:41.673Z","0.53.2":"2026-09-07T20:25:44.956Z","0.53.3":"2026-09-07T20:31:03.246Z","0.54.0":"2026-09-07T21:09:44.223Z","0.54.1":"2026-09-07T21:14:11.849Z","0.54.2":"2026-09-07T21:28:16.950Z","0.54.3":"2026-09-07T22:36:52.826Z","0.54.4":"2026-09-07T23:34:56.114Z","0.54.5":"2026-09-08T00:58:24.208Z","0.54.6":"2026-09-08T01:50:18.578Z","0.55.0":"2026-09-08T02:38:01.453Z","0.56.0":"2026-09-08T02:47:51.868Z","0.57.0":"2026-09-08T03:05:37.641Z","0.58.0":"2026-09-08T03:15:29.233Z","0.59.0":"2026-09-08T03:27:23.267Z","0.59.1":"2026-09-08T03:44:07.617Z","0.59.2":"2026-09-08T03:50:58.230Z","0.59.3":"2026-09-08T04:14:03.035Z","0.59.4":"2026-09-08T04:48:47.851Z","0.59.5":"2026-09-08T23:11:41.001Z","0.59.6":"2026-09-09T00:46:21.347Z"},"bugs":{"url":"https://github.com/nannier-com/lookout/issues"},"license":"MIT","homepage":"https://github.com/nannier-com/lookout#readme","keywords":["visual-testing","ai","qa","screenshots","playwright","claude","acceptance-criteria","accessibility","cli"],"repository":{"type":"git","url":"git+https://github.com/nannier-com/lookout.git"},"description":"Project-agnostic visual AI tester: captures what an app actually renders, judges it against UI best practices and per-project rules via the local Claude Code CLI, verifies acceptance criteria, and tracks findings in an adjudicated backlog.","maintainers":[{"name":"nannier","email":"bobby.nannier@gmail.com"}],"readme":"# lookout\n\nA project-agnostic visual AI tester. lookout captures what an app actually\nrenders (web pages across form factors and color schemes; iOS simulator and\nAndroid emulator screens), judges the evidence against UI best practices and\nper-project rules through the locally installed Claude Code CLI, verifies\nacceptance criteria from a ticket, answers free-form fact-check questions, and\ntracks findings in an adjudicated per-project backlog.\n\nlookout is a pure oracle: it never edits code and never starts services. Agents\n(or humans) working in the target repo do the fixing; lookout verifies.\n\n## Requirements\n\n- [bun](https://bun.sh) (the CLI runs under bun so TypeScript configs are\n  first-class)\n- [Claude Code](https://claude.com/claude-code) logged in locally (judging\n  shells out to `claude -p`)\n- Playwright chromium: `bunx playwright install chromium`\n- Optional, for native capture: Xcode command line tools (iOS simulator) and\n  Android platform-tools (`adb`)\n\nCheck everything with:\n\n```bash\nlookout doctor\n```\n\n## Quick start\n\n```bash\n# zero-config: point it at any local app\nlookout targets --url http://localhost:3000\n\n# per-repo setup\nlookout init                  # writes lookout.config.ts at the project root\nlookout targets               # resolve + probe the configured targets\n```\n\n## Verbs\n\n| verb      | what it does |\n| --------- | ------------ |\n| `capture` | screenshots + deterministic findings (console errors, overflow, clipped content, axe), no AI |\n| `check`   | capture + AI judge against the base rubric plus the project rubric; findings merge into `.lookout/backlog.json` |\n| `verify-fix` | rule on a claimed fix: re-capture and re-judge one issue's routes, then close it or leave it open with a note on what the judge still sees |\n| `verify`  | judge the app against acceptance criteria (`--criteria ticket.md` or inline text); per-criterion pass / fail / not-visually-verifiable with evidence |\n| `ask`     | answer a free-form question about the rendered app, grounded in fresh screenshots of every form factor (dark only by default; `--viewports` and `--schemes` change that) |\n| `backlog` | adjudicate findings: merge, set statuses (fixed / by-design / blocked, with mandatory reasons), regenerate the report, `check` for staleness |\n| `targets` | list configured targets and probe reachability |\n| `design-system` | what the project is built from (component kit, tokens, adoption), and where a visual fix belongs; `--audit` reads the application and says whether it is actually built out of that kit |\n| `skills`  | lookout's own instructions: `list`, `diff`, `freeze`, `replay`, `improve` |\n| `self-heal` | fix what lookout keeps getting wrong, in lookout's own source |\n| `init`    | write `lookout.config.ts` at the project root (and migrate a pre-root `.lookout/config.ts`) |\n| `status`  | what the run in flight is doing, folded out of the event log; exit 1 while a run is going, so an agent can poll it |\n| `ui`      | a local page rendering that same log live, with thumbnails, findings and verdicts, plus a second area for what lookout has changed about itself |\n| `protocol`| the operating contract, printed by lookout itself, for whichever agent is driving it |\n| `doctor`  | verify prerequisites |\n\nExit codes: `0` clean, `1` findings / failed criteria, `2` execution error, so\nagents and CI can gate on the result. `verify-fix` adds `3` for an issue\nblocked after exhausting its attempts. Every verb takes `--json` for\nmachine-readable output.\n\n## Watching a run\n\nA run takes minutes, and a subprocess's stdout does not reach its caller until\nit exits. So lookout narrates to `.lookout/evidence/events.jsonl` as it goes,\nand two readers render it while the run is still going:\n\n```bash\nlookout status          # for an agent: phase, shots, findings, issues\nlookout ui              # for a person: the same log as a live local page\n```\n\nBoth are readers. Either can watch a run started by anything, in any terminal.\n\n`capture`, `check` and `verify-fix` also composite every shot into one labelled\ncontact sheet, a view's dark and light captures side by side and defect-carrying\ntiles marked, so a session can see what lookout saw for the cost of one read.\nFull-resolution paths are printed beside it for close reading.\n\n## Watching lookout change itself\n\n`lookout ui` has two areas, switched from the icon rail down the left edge. The\nfirst is the issues: what lookout found in the application. The second is\nlookout on lookout, where `skills improve` and `self-heal` become something you\ncan read rather than files you have to know to open:\n\n- **its instructions**: every skill with the version this project judges at,\n  which ones this project has amended, any amendment written down as a proposal\n  because nothing could grade it, the frozen screenshots that gate the next one,\n  and every amendment applied, rolled back or proposed, a rollback carrying the\n  settled verdict that killed it\n- **its own code**: the failures lookout keeps hitting in this project, the\n  heals a gate reverted with the gates that failed and the diff kept on disk,\n  and the commits that stuck\n\nThe rail's dot says when either is happening right now, from whichever area is\nopen: both verbs hold a lock file while they run, and the page reads it.\n\n## Design systems\n\nMost applications are built out of a component kit, and a defect found on a\nscreen is usually fixed in a component: a different file, and often a different\npackage. Fix it on the screen instead and the kit stays broken for every other\nconsumer, the screen acquires an override that will drift, and the next person\nto touch that component has no idea why it is special.\n\nSo lookout reads the repository and works out what it is built from:\n\n```bash\nlookout design-system          # the inventory\nlookout design-system --refresh   # re-read the repository rather than the cache\n```\n\nIt resolves a kit four ways, and the distinction that matters most is whether\nthe kit is **this repository's to edit**:\n\n- the repository IS the kit (a design system's own repo), told from an ordinary\n  application by whether the package publishes an entry point\n- a workspace-local kit, found by asking which workspace package the\n  application source actually imports\n- a vendored kit such as shadcn/ui, found by its marker file and located on disk\n- an installed kit from the dependency list, which is **not** editable here: the\n  fix is to the application's use of it, never a patch inside `node_modules`\n\nThe result caches to `.lookout/design-system.json`. Where the scan cannot work\nit out (an in-house kit with no dependency, marker or workspace package to name\nit), declare it and the declaration wins:\n\n```ts\nexport default {\n  targets: [...],\n  designSystem: {\n    name: \"House\",\n    packageRoot: \"../packages/ui\",\n    componentRoots: [\"../packages/ui/src/components\"],\n    importPrefixes: [\"@house/ui\"],\n    tokenFiles: [\"../packages/ui/src/tokens.ts\"],\n  },\n};\n```\n\nWorking out where a defect belongs costs one model call per newly filed issue\n(roughly $0.30 on sonnet), capped per run. Turn it off with\n`lookout check --no-placement`, or change the cap with `--max-placements N`;\nwhatever is left over is placed on the next run rather than dropped.\n\nEvery issue lookout files in such a project carries a **Where this belongs**\nsection, above the description of the defect on purpose: somebody who reads\nwhat is wrong first has already started planning to fix it on the screen they\nsaw it on. The section names the file to change, why there and not the other\nplace, how many other callers a kit change would reach, and what it moves.\n\nlookout also files what it can see without a screenshot. A control an\napplication hand-rolls out of raw elements, in a project whose kit already\nprovides it, is a real defect that no photograph can show: it drifts from the\nkit the moment either side changes, it is invisible to the kit's own tests, and\nit hides whatever gap in the kit made hand-rolling it seem necessary. Those are\nfiled on their own channel and ruled by re-reading the source, so `verify-fix`\ncloses them on evidence exactly like any other issue.\n\n### Is the application actually built out of its kit\n\nHaving a kit and using it are different facts, and only the second one shows up\nin the code. So lookout reads the application as well as scanning it.\n\nThe scan is a regex: it fires on a declaration whose name ends in a control word,\nin a file that imports the kit nowhere. Both restrictions keep it honest, and\ntogether they miss the common case, which is a screen that imports the kit for\nits text and layout and then builds a button out of a styled `div` in the same\nfile. No pattern separates that from ordinary scaffolding, because the difference\nis what the thing IS.\n\nThe reading pass is the `kit-conformance` skill, handed the kit's actual export\nlist and the files densest in raw interactive markup. It adds the hand-rolls the\nscan cannot see and refutes the ones the scan got wrong, and nothing it says is\ntaken on trust: every claim names a file, a symbol and a line, the symbol is\nlooked up in the file and the file's own line wins, and a kit component the kit\ndoes not export is dropped rather than repeated.\n\n```bash\nlookout check                       # reads the application as part of the run\nlookout check --no-conformance      # skip it\nlookout check --max-conformance 12  # read at most 12 files\nlookout design-system --audit       # read it on its own; files nothing, exits 1 on findings\n```\n\nIt is on by default because it is nearly free the second time. A verdict is kept\nper file, keyed on that file's own bytes plus the skill's version and the kit's\nexport list, so an unchanged file costs nothing, a changed one is read again, and\namending the skill or moving the kit drops every cached verdict at once. A file\nthe reply never accounted for is recorded as unread rather than cached clean.\n\nTwo defects come out of this, and they are not the same work. A **duplicate**\nhas something in the kit to be replaced by, and the finding names it. A **gap**\ndoes not: the kit ships no equivalent, so the fix is to add the control to the\nkit, backwards-compatibly, and consume it from there. Findings the reading pass\nfiled are ruled by asking it again about that file, never by the scan, because\nthe scan is exactly what could not see them in the first place.\n\n## Issues\n\nOpen findings group into issues by root cause rather than by screenshot: one\ntarget + category + attribute, so a theme that never switches is one issue\nacross every route it spoils rather than one per shot. Co-located\naccessibility violations group by route instead, because an axe rule id names\nthe rule that fired rather than the thing that is wrong, and one malformed\nwidget trips several at once.\n\nEach issue gets a six-digit id and a folder under `.lookout/issues/<id>/`, and\n`Issue.md` in that folder is the self-contained document a fix session is\nhanded: what is wrong and where, the screenshots (copied into `img/pre/` and\nlisted by absolute path), the acceptance criteria it will be graded against,\nand what lookout has ruled so far. The pictures are frozen when the issue is\nfiled rather than read live, because the evidence store keeps one file per\nview and overwrites it on every capture: without that, a dossier opened after\nthe next run describes the defect using a picture of whatever replaced it. lookout writes the folders and rules on\nthe outcomes; who fixes an issue, and how, is not lookout's call.\n\nEvery card on `lookout ui` links its own `Issue.md`, and the page serves it: a\nbrowser will not follow a `file://` link out of a page it loaded over HTTP, so\nthe folder path a card prints is only useful to somebody with a terminal open.\nAn issue whose folder is not on disk shows no link rather than one that answers\n404.\n\nWhen a fix is claimed, lookout rules on the claim:\n\n```bash\nlookout verify-fix --issue <id> --commit <sha> --note \"<root cause>\"\n```\n\nThat re-captures and re-judges only that issue's routes. Exit `0` means the\ndefect is gone and the backlog is adjudicated to `fixed` with the commit. Exit\n`1` means it is not: the finding stays open, with a note on what the judge\nsees now. Exit `2` means lookout could not rule, and no attempt was spent.\nExit `3` means the issue exhausted `--max-attempts` (default 2) and is\nrecorded as `blocked` with a reason. `--commit` may be left out (HEAD is\nread); `--note` is recorded with the attempt verbatim and printed in the\nissue's `Issue.md` for whoever tries next, beside what lookout observed in the\nrepository and what the judge saw. A fix session never grades its own work.\n\nEach screenshot is compared against the capture of the previous ruling, or\nagainst the frame frozen when the issue was filed: a `check` or `capture` run\nbetween the edit and the ruling does not move that baseline, so a real fix is\nnever ruled \"nothing changed\" because the workspace already held it.\n\n### Pre and post fix, on every issue\n\nProving a defect gone destroys the evidence of it. The evidence store writes\neach view back to the path it came from, so any capture of that route overwrites\nthe picture of what was wrong, and a card reading the store can only claim to\nshow the defect until the next run.\n\nSo every issue is frozen when it is filed. The **pre-fix** frame is copied aside\nby the save that files the finding, which is the last moment the store still\nholds the pixels the judge ruled on, and it is written once: a third fix attempt\nstill compares against the defect as filed rather than as the last attempt left\nit. The **post-fix** frame is copied when `verify-fix` rules a fix passed, which\nis the only moment lookout will say the screen is fixed. They live in the\nissue's own folder, under `issues/<id>/img/pre/` and `img/post/`, with\n`frames.json` beside them saying what each is a picture of; no capture writes\nthere. The card pairs them per view, saying which half is missing while an\nissue is still open.\n\nAn issue that has already spent a fix attempt is never backfilled: something has\nclaimed to change that screen since it was filed, so its store frames are of\nunknown vintage and filing them as the defect would be a picture of somebody's\nfix under the wrong label. `lookout backlog check` lists issues with no pre-fix\nframe instead.\n\nA fixed issue also carries **the commit it landed in**, linked to wherever the\nrepository lives: GitHub, GitLab, Bitbucket and Azure by their own URL shapes,\nany other forge by the `/commit/<sha>` convention with its host shown beside it,\nand a bare sha when the checkout has no remote. \"Fixed in\" is a verdict lookout\nreached; \"Claimed at\" is an attempt still open.\n\n### Filing an issue away\n\nA confirmed fix is not work any more, and the board is for work. `lookout ui`\noffers **Archive** on a done issue, where an open one offers to hand off to a\ncoding tool:\n\n```\n.lookout/issues/<id>/  ->  .lookout/issues/archive/<id>/\n```\n\nThe record decides which side the folder belongs on and the next save moves it,\nso the two cannot drift, and anything holding an id finds the folder wherever it\nis. Archiving records *why*, so an issue somebody fixed is never described as one\nsomebody adjudicated intentional.\n\nTwo things it will not do. It refuses while any finding is still open, because\nhiding live work is the one failure an archive can have. And an archived issue\nwhose defect comes back un-archives itself, folder included, on the save that\nreopens it. Archived cards carry a restore button for everything else.\n\n## Safety defaults\n\n- Targets must be localhost unless `--allow-remote` is passed explicitly.\n- lookout never starts services; a down target prints the project's\n  `startHint` and exits.\n- Judging runs `claude -p` with read-only tool access, cwd-pinned to the\n  evidence directory.\n\n## Per-project config\n\n`lookout.config.ts` sits at the project root, beside `package.json`. It is a\nTypeScript module (the CLI runs under bun, so recipes are real functions)\ndefault-exporting a `LookoutConfig`. Everything below is optional except\n`targets`.\n\nlookout writes and maintains this file. `lookout init` creates it; a verb that\nneeds a config and finds none creates it too, seeded from `--url` when the run\ngave one and left as a template to edit when it did not. A project still\nholding the older `.lookout/config.ts` keeps working: the first run that finds\none moves it to the root and repoints the `rubric` and route `design` paths\ninside it, since those resolve relative to the config file. `--config <path>`\nstill overrides the search entirely, and `.js`, `.mjs` and `.json` are read as\nwell (a JSON config cannot carry recipes).\n\n```ts\nimport type { LookoutConfig } from \"@nannier-com/lookout\";\nimport type { Page } from \"playwright\";\n\nconst config: LookoutConfig = {\n  project: \"myapp\",\n\n  targets: [\n    {\n      name: \"app\",                       // handle for --targets and fingerprints\n      url: \"http://localhost:3000\",\n      startHint: \"bun run dev\",          // printed when down; lookout never starts services\n      readyPath: \"/\",                    // polled for reachability\n      routes: [\n        \"/\",                             // string shorthand\n        { path: \"/checkout\", name: \"Checkout\", states: [\"cart-open\"] },\n        { path: \"/settings\", element: \"main\" },  // element screenshot instead of full page\n      ],\n    },\n  ],\n\n  // Viewport presets (desktop-first defaults: 1440x900 / 834x1112 / 390x844).\n  viewports: { phone: { width: 375, height: 812 } },\n\n  // How the app switches dark/light:\n  //   emulate (default)  prefers-color-scheme emulation\n  //   url-param          lookout appends ?<param>=dark|light to every route\n  //   recipe             this module also exports setScheme(page, scheme)\n  scheme: { mode: \"url-param\", param: \"scheme\" },\n\n  // Which schemes the app actually ships. `scheme` above is how to switch;\n  // this is what there is to switch to. Left out, both are photographed. An\n  // app with one scheme should say so: it halves the shots, and stops two\n  // identical captures reading as a scheme mechanism that failed.\n  schemes: [\"dark\", \"light\"],\n\n  // Named interaction recipes. A route opts in via states: [\"name\"]; each\n  // state is captured at every requested form factor and scheme, right after\n  // prepare() returns. restore() puts the page back; without it lookout\n  // reloads between states.\n  states: {\n    \"cart-open\": {\n      prepare: async (page: Page) => {\n        await page.getByRole(\"button\", { name: \"Cart\" }).click();\n        await page.getByRole(\"dialog\").waitFor();\n      },\n      restore: async (page: Page) => {\n        await page.keyboard.press(\"Escape\");\n      },\n    },\n  },\n\n  // Navigation discovery: hand-written states cover what you thought of;\n  // this covers the rest. See \"Navigation discovery\" below before enabling:\n  // lookout will click destructive controls too.\n  navigation: {\n    enabled: true,\n    maxStatesPerRoute: 5,     // judged interaction states per route\n    maxChecksPerRoute: 8,     // link-verification clicks (no judging cost)\n    exclude: [\"Sign out\"],    // CSS selectors or accessible-name substrings\n  },\n\n  // Project judging rules, layered into the judge-core skill in every judge\n  // prompt. Editing this file re-judges whatever it could have changed: the\n  // ledger is keyed on the composed prompt itself, so nothing has to be bumped\n  // by hand. An optional `rubricVersion: N` header is still read, and shows up\n  // in the key for anyone reading ledger.json.\n  rubric: \"./rubric.md\",\n\n  // One-line suppressions for things the base rubric would flag but this\n  // project does on purpose.\n  neverFile: [\"the marketing hero intentionally overflows on phone\"],\n\n  // The design direction this project chose: a shipped preset, your own\n  // DESIGN.md, or both. The taste panel judges against it, what it declares is\n  // never filed, and it enters only the taste panel's cache key.\n  direction: { preset: \"utility-dense\", file: \"./DESIGN.md\" },\n\n  // Knobs for the checks lookout MEASURES, as opposed to neverFile above,\n  // which speaks to the judges. A measurement is never suppressed by a rule\n  // written for a model, so anything that renders outside its box on purpose\n  // is named here instead.\n  checks: { edgeClip: { ignore: [\".carousel__track\"] } },\n\n  // Native apps. Declaring a platform here puts the project in the device\n  // fold: every run photographs the booted devices of that platform, one\n  // phone and one tablet (an iPad is recorded as `tablet`), each needing the\n  // app installed. `devices` names the kinds a run must have (default phone);\n  // `startHint` is printed, in your words, when one is missing. Both schemes\n  // on a device need appearanceParam: the app must read the scheme from the\n  // deep link, because OS-level appearance flips cannot reach apps that\n  // manage their own theme.\n  native: {\n    target: \"app\",\n    ios: { deepLinkScheme: \"myapp\", bundleId: \"com.example.myapp\", devices: [\"phone\", \"tablet\"], startHint: \"make ios-sim\" },\n    android: { deepLinkScheme: \"myapp\", bundleId: \"com.example.myapp\", settleMs: 14000 },\n  },\n\n  // Which fold to judge in, when the repository should not decide: \"web\"\n  // walks the three viewports, \"ios\" and \"android\" walk the devices.\n  // platforms: [\"web\"],\n};\n\nexport default config;\n```\n\n### Form factors: two folds\n\nA project is judged in one of two folds, or both, and `lookout targets` says\nwhich and why:\n\n- **Web**: every route is photographed at desktop (1440x900), tablet (834x1112)\n  and phone (390x844), in CSS pixels at 2x, in dark and light. The presets can\n  be resized per key in `viewports`; none can be added or removed.\n- **Devices**: a native or React Native project (a `react-native` or `expo`\n  dependency, an `ios/` Xcode project, a Gradle build) is photographed on its\n  booted iOS and Android devices once the config has a `native` block, one\n  phone and one tablet per platform. Detection only suggests; the `native`\n  block enables, and `platforms` in the config decides outright.\n\n`capture`, `check`, `verify` and `verify-fix` walk the whole fold; `ask`\nwalks every form factor in dark. `--viewports`, `--schemes` and `--platforms`\nnarrow one run, and a criterion about a form factor, device or scheme that\nwas not captured is ruled not verifiable.\n\nEvery form factor is judged as a rendering of its own, before anything is\ncompared: the rubric says what a phone layout, a tablet layout and a device\nshot must do, and every panel names its phone, tablet and device instances.\nThe judge is told which form factors and schemes a batch holds and which were\nnot captured; a screenshot taller than the model can read exactly (8000 px)\nis handed over in pieces cut from the same bytes; a shot the judge called\nclean without opening is judged again rather than recorded clean; and every\ncheck prints what it judged per platform and form factor. The accessibility\nscan runs at every form factor, filing at a narrower one only what the wider\nlayouts did not show.\n\n### Navigation discovery\n\nHand-written state recipes photograph the interactions you thought to write\ndown. Navigation discovery covers the rest of a route: with\n`navigation.enabled`, every capture harvests the route's visible buttons,\nlinks, and CTAs, and `check` asks the `plan-navigation` skill to curate them\ninto an interaction plan. The plan is cached in `.lookout/navigation.json`\nand keyed by a signature of the route's affordances, so the model is spent\nonly when a route's controls actually change (at most ten routes per run;\n`--navigate` forces a re-plan, `--no-navigation` skips discovery for a run).\nCapture then executes the plan deterministically: overlays and in-page\nchanges become states judged like any other, a click that leaves the route\nphotographs the destination page as a state of this route, and links to\nroutes already in the config are merely clicked and verified, filing\n`dead-interaction` or error findings when they do not work. Each state is a\nview group of its own, so every planned state costs one more judge batch per\nrun when its pixels change.\n\n**lookout clicks everything it plans, destructive controls included.** Risk\nclassification orders the clicks (risky last, session-enders last of all,\nwith the target's `signIn` re-run afterward); it does not prevent them.\nPoint targets at a disposable environment, and put anything untouchable in\n`navigation.exclude`. A failed synthesized interaction never kills the\nroute: it files a `capture-error` finding on the rest shot and the capture\nmoves on. Discovered same-origin pages that are not in the config are\nreported as coverage suggestions; lookout never edits the config itself.\n\n### Skills: where lookout's AI behaviour lives\n\nEvery AI capability is an instruction file, not a string in the binary. They\nship in the standard Agent Skill layout, one directory each:\n\n```\nskills/\n  judge-core/           SKILL.md + rubric.md: the shared judging core: bands,\n                        severity ladder, regions, procedure, the output contract\n  judge-integrity/      SKILL.md: render failures, broken states, missing anatomy\n  judge-geometry/       SKILL.md: overflow, alignment, spacing, responsive\n  judge-visibility/     SKILL.md: color-scheme, contrast, visually evident a11y\n  judge-text/           SKILL.md: typography and broken copy\n  judge-craft/          SKILL.md: hierarchy, composition, consistency\n  judge-design-parity/  SKILL.md: divergence from a design hand-off; judges only\n                        design-bearing views. handoff.md: how to compare\n  judge-taste/          SKILL.md: the defaults nobody chose: template shapes,\n                        generated palettes, ornament, copy voice, first screens\n  refute-finding/       SKILL.md: the adversarial pass that kills false findings\n  verify-acceptance/    SKILL.md: ruling on a ticket's criteria from evidence alone\n  fact-check/           SKILL.md: answering one question from screenshots\n  design-placement/     SKILL.md: where a defect belongs, in a project with a kit\n  kit-conformance/      SKILL.md: whether the application is built out of that kit\n  plan-navigation/      SKILL.md: which of a route's affordances to actuate, what\n                        to name each state, and what only needs verifying\n```\n\nA skill carries the whole prompt shape, placeholders and all. lookout supplies\nonly data: the shot manifest, the paths, the question. Each declares\n`{{amendments}}`, the slot where a project's own layer lands.\n\nThe visual judge is seven specialists, each judging every view group in its own\ncall. The closed category vocabulary is partitioned across them (the registry\nin `src/judge/panels.ts` is the single source of that partition), and each\njudge's prompt is assembled from the `judge-core` skill (severity ladder, the\njudging procedure, the universal never-file list), that panel's own vocabulary\nand layer, then this project's `.lookout/skills/` layers, its `rubric` file,\nand its `neverFile` lines. A finding outside the vocabulary, or outside the\nfiling panel's own lane, is rejected at ingestion, so project extensions\nrefine judgment; they cannot invent new taxonomies. Every finding states which\njudge filed it, and `--panels` narrows a run to named judges.\n\nTwo AIs can judge together. `--challenger codex:gpt-6-astra` asks a second AI\nto rule on what the first one filed against the same screenshots: it agrees or\ndisputes each finding and adds anything it missed, and the finding then carries\nboth accounts. It answers by number and never restates a finding's category or\nattribute, because those are its identity and rewording them would turn one\ndefect into two. A disputed finding is still filed and still open: a\ndisagreement is recorded for a person to settle, never applied, because letting\none AI close another's finding would hand a single vendor a veto. The AI must\nbe one lookout has a judging adapter for, and it must be named with a model,\nsince only some CLIs publish an alias that survives a release.\n\nThe ledger keys one entry per view group PER PANEL, on the composed prompt\nitself, judging and refuting instructions together: amending one specialist, a\nproject rubric or a `neverFile` line invalidates exactly the cached verdicts\nit could have changed, and the other panels' rulings stand. That covers the\nrefuting skill too, because what the ledger stores is what survived it.\n\n### What the judge rules on\n\nThe rubric sorts everything it could say into three bands, because the useful\nquestion is not \"is this good\" but \"is this mine to call\".\n\n**Execution defects** are filed without argument: broken, illegible,\noverlapping, clipped, unrendered.\n\n**Design quality** is filed too, on one condition: the finding must name the\nprinciple it breaks and what that costs the person using the screen. \"The card's\ntitle, metadata and body are all one size and weight, so the eye has no entry\npoint\" is a finding; \"the card looks bad\" is not. This is the band a model is\nactually strongest in, because it is a judgment about the whole rather than a\nmeasurement, and the citation requirement is what keeps it falsifiable enough to\nverify and to write acceptance criteria for.\n\n**Taste** is judged against the defaults a generic build falls into, never\nagainst the judge's own preference. A choice the project declared (a `neverFile`\nline, a `design:` hand-off, a declared `direction`) is settled and never filed:\nwhich blue, which typeface, how round the corners, how dense the information.\nAn undeclared choice is weighed by the taste panel against a short list of tells\nevery design practice agrees on: a violet-to-blue wash, a coloured glow, three\nequal feature cards, a headline wrapped into a wall, a label numbering nothing,\n\"scroll to explore\", copy made of clichés. A tell is filed only when it is\nvisible in the pixels, opens at low, and reaches medium only when several\ncompound until the whole view reads as a template. Consequences stay in their\nlanes: a brand colour that leaves text unreadable is still a contrast defect,\nand the refuter strikes any taste finding that re-litigates a declared choice.\n\n**Declaring a direction.** Beyond the defaults every practice rejects, design\npractices contradict each other: no radius against soft corners, gradients\nbanned against gradients encouraged, one call to action against exactly two.\nNone of that is judgeable until a project says which direction it chose, and\n`direction` in `lookout.config.ts` is where it says so: a shipped preset\n(`minimalist-editorial`, `industrial-brutalist`, `premium-agency`,\n`utility-dense`, `terminal-native`, `cinematic-product`, `friendly-saas`), the\nproject's own DESIGN.md, or both. What a direction\ndeclares is settled and never filed; the rules it adds are judged where a still\ncan show them, and its rules about motion, hover or code are not, because a\ncapture cannot see them. lookout reads the file when it composes the prompt\nand the judge never opens it; the first 12 KB reach the judge, with a\nStitch-format `components:` table dropped first when the file is over budget\nand a marker saying how much was cut. The text enters only the taste panel's\ncache key, so editing a DESIGN.md re-judges taste and leaves every other\npanel's verdicts standing. A preset ships in the package under\n`skills/judge-taste/directions/`; no brand's DESIGN.md does.\n\nTwo things follow from this that are worth knowing. The judge is told it cannot\nmeasure, because it is reading an image: it files a geometry finding only when\nthe deviation is visible without looking for it, and never quotes a pixel value\nit did not read off the screen. And it is told not to rule on anything a still\nimage cannot show, such as focus order, which is what the deterministic axe pass\nand the console checks are for.\n\nWhere a defect IS a measurement, lookout takes it rather than asking. The\nhorizontal-overflow check owns content that makes the page scroll sideways, and\nthe clip check owns content drawn outside the box that holds it where nothing\nscrolls to reach it: a control pushed past a header with hidden overflow, a\ntable column cut off by its panel. Both arrive already verified, name the\nelements they measured, and reach the judges as `signals:` lines the rubric\ntells them not to restate. The clip check stays silent about content inside a\nhorizontal scroller (it is reachable), a label truncated with an ellipsis, and\nanything hidden on purpose; a project can exempt more with\n`checks.edgeClip.ignore`, and `--no-edge-clip` turns the whole check off for a\nrun (`verify-fix` refuses that flag, for the same reason it refuses `--axe off`).\n\nControl size is measured the same way. axe ships its `target-size` rule\ndisabled, so the ordinary scan never runs it at any form factor however widely\nthat scan reaches. lookout selects it by name on phone rest shots, where a\nfinger is the pointer, files it under `a11y` as `axe-target-size`, and carries\nthe measured sizes. It opens at medium rather\nthan at axe's own severity: the measurement is the element's box, which is not\nalways its hit area, and nothing refutes a deterministic finding.\n\nA third measurement compares elements with each other rather than with their\ncontainer: `box-collision` finds content painted over other content, a chip\nacross the name beside it, a control covering a table row. Overlap alone means\nnothing, since a page is layers, so it counts only two ordinary siblings in\nnormal flow whose overlap the browser confirms at the intersection. Anything\npositioned out of flow is excluded, along with everything inside it, because\nthat is how an overlay, a dropdown and a sticky bar are built, and covering\nsomething is their job.\n\n### Where the keyboard and the pointer are\n\nlookout's rubric has always refused to file focus rings, and it was right to:\nnothing in a rest, overlay or in-page shot holds keyboard focus on purpose, so\na ring there is an accident of whatever was clicked last, and a still image\ncannot show focus ORDER at all. Both of those stay true. What is new is that\nthe navigation planner can pick one control per route to put the keyboard on,\nand one to put the pointer on, and photograph each deliberately. The manifest\nline then names the control, and that control's indicator on that one shot is\nevidence rather than an accident. Focus order is still never filed.\n\n`focus` presses Tab to put Chromium into keyboard modality, focuses the named\ncontrol, and verifies the browser really is showing it as keyboard focus; a\ncontrol that will not show one is skipped rather than photographed, because\nthat shot would file lookout's own capture as the application's defect. `hover`\nrests the pointer on the control and waits for anything on a JS delay to\nappear, and is skipped entirely at phone width, where there is no pointer to\nrest. Defaults are one of each per route (`navigation.maxFocusStatesPerRoute`,\n`navigation.maxHoverStatesPerRoute`, `0` for neither), counted separately from\n`maxStatesPerRoute` so a route already spending its budget on overlays can\nstill have them.\n\nThe half a judge cannot see is measured instead. A screenshot never draws the\ncursor, and a judge is shown a state's view group without its rest sibling, so\n\"hovering this did nothing\" is a comparison rather than something visible in\nthe evidence. lookout compares each indicator shot with its own rest shot and\nfiles `focus-invisible` or `hover-silent` when they are identical. It is\none-sided on purpose: identical pixels prove the interaction did nothing, while\ndifferent pixels prove only that something moved, which a clock can do by\nitself.\n\n### The one piece of evidence that is not a picture\n\nEvery web shot is captured with the page's accessibility tree beside it, written\nas `<shot>.png.aria.json` and holding what the browser exposed: each meaningful\nelement as a role, its accessible name, and for some controls its state. It is\ngiven to two judge panels only. Integrity rules on a control missing an expected\npart, and text rules on what a string says; both were inferring from pixels\nthings the tree simply states. A dialog whose tree holds a `button \"Close\"` has\nits dismiss affordance whatever the picture suggested, a `textbox \"Email\naddress\"` has its label, and a paragraph the layout cut off with an ellipsis\nreads whole in the tree, which turns \"that looks truncated\" into a finding worth\nfiling. Their skills say so in as many words, and say the other half too: a\nfinding the tree contradicts is not filed, the tree says nothing about how\nanything looks, and a tree cut for length proves nothing by what it leaves out.\n\nGeometry, visibility and craft are not shown it. It is evidence about what\nexists, and they rule on how things look, so it would cost them prompt and\nreturn nothing.\n\nA tree already shown in a batch is named rather than repeated. On a real admin\npanel that halved them rather than reducing them to one: within a six-shot view\ngroup, desktop and tablet shared a tree, phone differed because its layout does,\nand dark and light differed by a single line, the theme toggle naming the scheme\nit switches to.\n\nThe tree is a judge input for the two panels given it, so it enters their cached\nverdicts' identity the way a design hand-off does: change an `aria-label` and\nthose two re-judge while the other three serve from cache, even though not one\npixel moved. Native captures have no DOM, so they carry no sidecar and their\nprompts promise none. `aria: false` in the config, or `--no-aria` for one run,\nturns the whole thing off.\n\n### Skills that improve themselves\n\n```bash\nlookout skills list               # what lookout knows how to judge, and what this project has amended\nlookout skills freeze             # freeze the settled verdicts into a regression set\nlookout skills improve            # learn from this project's runs, and keep it only if the set holds\nlookout skills replay             # judge the frozen set with the skills as they stand\n```\n\n`improve` reads signals lookout already records: findings the adversarial\nverifier refuted, findings a person adjudicated by-design and wrote a reason\nfor, defects that survived every attempt, acceptance criteria that could not be\ndecided from a screenshot, and replies that failed the output contract. It\nwrites the amendment that would have prevented the most of them into this\nproject's layer. Each pass sees only signals no earlier pass was shown\n(`.lookout/skills/signals-seen.json` is the watermark;\n`--all-signals` replays everything), so the same evidence never pays twice.\n\nYou rarely run it by hand: `lookout check` and `lookout verify-fix` run it\nthemselves once enough new evidence accumulates. Three new signals, or a\nsingle new by-design adjudication, and the run ends by learning from them.\nDecline it with `--no-improve` for one run or `learn: { auto: false }` in the\nconfig for good; `learn.threshold` and `learn.cooldownHours` (default 3 and\n24) tune it, and CI environments never auto-learn. When nothing frozen could\ngrade an amendment, the automatic path spends nothing; a manual run needs\n`--propose` to pay for an outcome that can only be an unapplied `PROPOSED.md`.\n\nIt applies automatically, and what makes that safe is the gate. `.lookout/regression/`\nholds screenshots whose verdicts were settled when the pixels were fresh: what a\nperson ruled intentional, and what the verifier confirmed. The candidate is\nreplayed over them, and an amendment that re-files a suppressed finding or loses\na confirmed one is rolled back, with the attempt and its violations written to\n`.lookout/skills/history.jsonl`. An amendment nothing can grade, because the set\nis empty or its pixels are not on this machine, is written to `PROPOSED.md`\ninstead of being applied.\n\nThe manifest survives evidence cleans and the frozen pixels may not;\n`lookout skills freeze` rebuilds them from the evidence store.\n\n### Healing itself\n\n```bash\nlookout self-heal\n```\n\nFailures lookout hits are appended to the incident log of the project they\nhappened in, `<project>/.lookout/incidents.jsonl`: crashes, operator errors,\njudge replies that could not be parsed, findings rejected at ingestion. A\nfailure with no configured project in scope goes to lookout's own checkout\ninstead, and nowhere at all on an installed package, which has no source to\nheal. `self-heal` reads the checkout's log, the log of the project it was run\nin, and the one `--project` names. (A log compacts entries older than 90 days\nonce it outgrows 2000 lines; nothing else ever rewrites one.) `self-heal` groups them and picks the one group the run works\non itself: the heaviest active pressure in the last 30 days, where a group\nhealed before that came back outranks everything, and one with two reverted\nattempts on record waits for a person. It fixes that group's cause in\nlookout's own checkout, and is not believed about any of it. Committed heals\nare marked in the checkout's own `.lookout/self-heal/heals.jsonl`, beside the\nsource they changed, so a settled group stops being offered whichever project\nthe next run starts from. This verb never runs itself: it edits the code that does the\njudging, and starting it stays a person's deliberate act.\n\nThe subprocess may read and edit inside the checkout and may not run a single\ncommand. lookout runs `tsc --noEmit`, `eslint`, `bun test` and the build itself,\nplus a replay of frozen regression sets from the projects it read incidents\nfrom that hold one (`--project` names one explicitly); when none can grade the\njudge, the commit says so. A reply that breaks the report\ncontract forfeits its edits outright: reverted, kept with the raw reply for\na person, recorded as an incident. Any gate failing reverts everything, keeps\nthe diff and the gate output under the checkout's\n`.lookout/self-heal/attempts/<stamp>/`, and records the rollback as an\nincident. The checkout has to ignore `.lookout/` before any of this runs, since\na failed gate reverts with `git clean`; lookout's own repository always has.\nEvery gate passing commits the change alone with a patch changeset, and does not\npush: a local commit is one `git revert` away.\n\nIt refuses to run on an installed package (no source, no repository), over a\ndirty checkout, or while another heal holds the lock. What it has done, and\nwhat it tried and lost, is on the second area of `lookout ui`.\n\n### Where things land\n\nThe config is the one file meant to be shared, so it is the one file outside\nthis directory: `lookout.config.ts` sits at the project root and is committed\nlike any other tool's config.\n\nThe whole of `.lookout/` is lookout's state for that project, and lookout keeps\nit out of git: whenever it writes a config it adds `.lookout/` to the project's\n`.gitignore`, creating that file if there is none. It is per-checkout: it does\nnot follow the repo to another machine, and deleting the directory re-rolls\nevery issue id. lookout keeps nothing in a home directory of its own, and a\n`~/.lookout` from an older version is no longer read (`lookout doctor` says so\nwhen it finds one).\n\nA zero-config `--url` run in a directory that is not a project writes its\nworkspace to `<cwd>/.lookout/workspace/`, where the run was started.\n\n```\nlookout.config.ts  the project's targets and recipes (at the root, in git)\n\n.lookout/\n  backlog.json     adjudicated findings (managed via `lookout backlog`)\n  BACKLOG.md       generated report (regen via `lookout backlog regen`)\n  ledger.json      judge verdict cache\n  design-system.json  what the project is built from, cached\n  conformance.json    the source reading pass, cached\n  issues/<id>/     one folder per issue, named by its six-digit id:\n                     Issue.md, Issue.json, state.json, frames.json, img/pre/,\n                     img/post/ (the frames either side of a fix, frozen when\n                     the issue is filed and when a fix is ruled)\n  issues/archive/<id>/  issues filed away, same folder, moved whole\n  skills/          this project's layer over lookout's shipped skills,\n                     plus signals-seen.json, the learned-from watermark\n  incidents.jsonl  what went wrong with lookout itself while it was here\n  ui.json          what `lookout ui` remembers: base URL, click consent\n  workspace/       screenshots, each with its provenance and accessibility-tree sidecars, capture-report.json,\n                     judge-report.json, verify-report.json, events.jsonl, the\n                     narration, the contact sheets. Rebuilt by any capture.\n  evidence/        the pre-0.35 workspace, still read if an older lookout left\n                     one; never written again, safe to delete\n```\n\nlookout's own checkout carries the same directory for what lookout does to\nitself: `.lookout/incidents.jsonl` for a failure with no project in scope, and\n`.lookout/self-heal/` for the heals that stuck, the reverted attempts and the\nlock.\n\n### The fix loop (for agents)\n\nlookout never edits code. The loop it is built for:\n\n1. `lookout check` in the target repo: findings merge into the backlog.\n2. Fix the code in that repo, per that repo's own conventions.\n3. Optionally, `lookout check --targets x --routes /y` to see what the judge\n   says now; unchanged pixels stay ledger-cached. This does not move what the\n   ruling in the next step is measured against.\n4. `lookout verify-fix --issue <id> --commit <sha> --note \"<root cause>\"` is\n   the only thing that closes a finding. It rules on that issue alone: a fix\n   that clears the defect and causes another one passes, and the new defect is\n   filed as its own numbered issue with a note saying which fix surfaced it.\n   A ruling that does not pass spends an attempt; what it saw is printed and\n   written into the issue's `Issue.md` under \"What has been tried\".\n5. `lookout backlog set <fingerprint> --status fixed --commit <sha>`; use\n   `--status by-design --reason \"...\"` for intended behavior (suppressed in\n   every later merge) and `--status blocked --reason \"...\"` after repeated\n   failed attempts.\n6. `lookout backlog check` as the gate: schema, mandatory reasons, missing\n   issue ids, markdown freshness, and drift detection all fail loud. A\n   finding whose problem is written for one reader is a warning; `--strict`\n   makes warnings fail too.\n\n## License\n\nMIT. See [LICENSE](LICENSE). The grant covers this repository as well as the\npackage published to npm; it used to cover the published package alone.\n","readmeFilename":"README.md"}