{"_id":"@critiquedotsh/harness","_rev":"14-b3d584be1152af39912b732db03a74e2","name":"@critiquedotsh/harness","dist-tags":{"latest":"0.1.14"},"versions":{"0.1.0":{"name":"@critiquedotsh/harness","version":"0.1.0","keywords":["critique-code","coding-agent","claude-code","author-agent","pi-coding-agent"],"license":"MIT","_id":"@critiquedotsh/harness@0.1.0","maintainers":[{"name":"repath500","email":"repath500@gmail.com"}],"homepage":"https://critique.sh/docs/platform/critique-code","bugs":{"url":"https://github.com/repath500/critique/issues"},"bin":{"critique-code":"dist/cli.js"},"dist":{"shasum":"026726a4d2eaeebbbc919dae4c9363b40e99f281","tarball":"https://registry.npmjs.org/@critiquedotsh/harness/-/harness-0.1.0.tgz","fileCount":3,"integrity":"sha512-5qq2F/34YDKSsTC5gY3qzp8Rjlz+lh1qibbdHwMVxeKDOiVa7v+mcPigB+jbLLjxeZcUgoW2MEIS5hqy4/46OQ==","signatures":[{"sig":"MEQCIFAf4Om6S/gwbTy55WF1F4Dy4iaBYsC3sk6tiUGzDOviAiBVXNMBsjAc/Fou6JlFswTULj6j7ocCNPW4MlE+x8ytKA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1005775},"type":"module","engines":{"node":">=20.19.0"},"gitHead":"0f60ff8c9d4a7b75c6e2cd8d0adb81d6dec11aa4","scripts":{"test":"node --import ../../scripts/register-test-path-alias.mjs --experimental-strip-types --test ../../lib/finish/critique-code-program.test.ts ../../lib/finish/critique-code-local-session.test.ts ../../lib/finish/critique-code-local-author.test.ts ../../lib/finish/critique-code-author-apply.test.ts ../../lib/finish/critique-code-local-repair.test.ts ../../lib/finish/critique-code-author-coordinator.test.ts ../../lib/finish/critique-code-repair-kernel.test.ts ../../lib/finish/critique-code-review-checkpoint.test.ts ../../lib/finish/critique-code-runtime-config.test.ts ../../lib/finish/critique-code-model-defaults.test.ts ../../lib/finish/critique-code-pi-providers.test.ts ../../lib/finish/critique-code-settings-tui.test.ts ../../lib/finish/critique-code-tui-theme.test.ts ../../lib/finish/earendil-pi-driver.test.ts ../../lib/finish/critique-code-device-login.test.ts ../../lib/finish/critique-code-author-commands.test.ts","build":"node scripts/build-cli.mjs","start":"node --import ../../scripts/register-test-path-alias.mjs --experimental-strip-types src/cli.ts","install:pi":"npm install --prefix .vendor","prepublishOnly":"npm run build"},"_npmUser":{"name":"repath500","email":"repath500@gmail.com"},"repository":{"url":"git+https://github.com/repath500/critique.git","type":"git","directory":"packages/critique-code"},"_npmVersion":"11.17.0","description":"CritiqueCode author agent — implement, then forced review and verified repair. Same org as @critiquedotsh/cli; not the sidecar.","directories":{},"_nodeVersion":"26.5.0","dependencies":{"typescript":"^5.9.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22","@critique/protocol":"workspace:*"},"optionalDependencies":{"typebox":"1.3.7","@earendil-works/pi-coding-agent":"0.84.1"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.1.0_1786858017689_0.9992091897823547","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@critiquedotsh/harness","version":"0.1.1","keywords":["critique-code","coding-agent","claude-code","author-agent","pi-coding-agent"],"license":"MIT","_id":"@critiquedotsh/harness@0.1.1","maintainers":[{"name":"repath500","email":"repath500@gmail.com"}],"homepage":"https://critique.sh/docs/platform/critique-code","bugs":{"url":"https://github.com/repath500/critique/issues"},"bin":{"critique-code":"dist/cli.js"},"dist":{"shasum":"252bc5a6fcc2170d73e825639d26ad87efa46daa","tarball":"https://registry.npmjs.org/@critiquedotsh/harness/-/harness-0.1.1.tgz","fileCount":3,"integrity":"sha512-eiibroOAbyKP2JO89VMDx1Q40e/7L661FHietUMu+ygqgqgC9JIt2BiGooyWMMAmTBvdviHS6MTESgnaAAgB5w==","signatures":[{"sig":"MEQCIGHId3C7rVK5KqXIqiZAS+VhUzVdtNkHV2ZOdZ14ahX+AiB8B0lzWZ3VYVICVvhOiAjp7Vj6Ltt4MVElqljZI40JSQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1015548},"type":"module","engines":{"node":">=20.19.0"},"gitHead":"0f60ff8c9d4a7b75c6e2cd8d0adb81d6dec11aa4","scripts":{"test":"node --import ../../scripts/register-test-path-alias.mjs --experimental-strip-types --test ../../lib/finish/critique-code-program.test.ts ../../lib/finish/critique-code-local-session.test.ts ../../lib/finish/critique-code-local-author.test.ts ../../lib/finish/critique-code-author-apply.test.ts ../../lib/finish/critique-code-local-repair.test.ts ../../lib/finish/critique-code-author-coordinator.test.ts ../../lib/finish/critique-code-repair-kernel.test.ts ../../lib/finish/critique-code-review-checkpoint.test.ts ../../lib/finish/critique-code-runtime-config.test.ts ../../lib/finish/critique-code-model-defaults.test.ts ../../lib/finish/critique-code-pi-providers.test.ts ../../lib/finish/critique-code-settings-tui.test.ts ../../lib/finish/critique-code-tui-theme.test.ts ../../lib/finish/earendil-pi-driver.test.ts ../../lib/finish/critique-code-device-login.test.ts ../../lib/finish/critique-code-author-commands.test.ts","build":"node scripts/build-cli.mjs","start":"node --import ../../scripts/register-test-path-alias.mjs --experimental-strip-types src/cli.ts","install:pi":"npm install --prefix .vendor","prepublishOnly":"npm run build"},"_npmUser":{"name":"repath500","email":"repath500@gmail.com"},"repository":{"url":"git+https://github.com/repath500/critique.git","type":"git","directory":"packages/critique-code"},"_npmVersion":"11.17.0","description":"CritiqueCode author agent — implement, then forced review and verified repair. Same org as @critiquedotsh/cli; not the sidecar.","directories":{},"_nodeVersion":"26.5.0","dependencies":{"typescript":"^5.9.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22","@critique/protocol":"workspace:*"},"optionalDependencies":{"typebox":"1.3.7","@earendil-works/pi-coding-agent":"0.84.1"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.1.1_1786858269567_0.8865165421006738","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@critiquedotsh/harness","version":"0.1.2","keywords":["critique-code","coding-agent","claude-code","author-agent","pi-coding-agent"],"license":"MIT","_id":"@critiquedotsh/harness@0.1.2","maintainers":[{"name":"repath500","email":"repath500@gmail.com"}],"homepage":"https://critique.sh/docs/platform/critique-code","bugs":{"url":"https://github.com/repath500/critique/issues"},"bin":{"critique-code":"dist/cli.js"},"dist":{"shasum":"8b86bc90f5cf1b3e9eeceed01d73d2ac20d55206","tarball":"https://registry.npmjs.org/@critiquedotsh/harness/-/harness-0.1.2.tgz","fileCount":3,"integrity":"sha512-joBquD70rb2gOK3R7FQXDTr+9i4l2p3CLnQlckQ9INe2YVTzS34Dyou6GZzQ5getN5SwjkyoVsb6iyuMeuwSWA==","signatures":[{"sig":"MEYCIQCN/UVx7TPO2OkQASceLx1YzEZ7eVLRGIPBCdfuyT8B5AIhAI/62DXtqkm/fdwpmGNVkNBWk+ysE4494HfOVWvlxJBU","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1034005},"type":"module","engines":{"node":">=20.19.0"},"gitHead":"593dfdd904b4414a6de64e1fbc355566bf22f66f","scripts":{"test":"node --import ../../scripts/register-test-path-alias.mjs --experimental-strip-types --test ../../lib/finish/critique-code-program.test.ts ../../lib/finish/critique-code-local-session.test.ts ../../lib/finish/critique-code-local-author.test.ts ../../lib/finish/critique-code-author-apply.test.ts ../../lib/finish/critique-code-local-repair.test.ts ../../lib/finish/critique-code-author-coordinator.test.ts ../../lib/finish/critique-code-repair-kernel.test.ts ../../lib/finish/critique-code-review-checkpoint.test.ts ../../lib/finish/critique-code-runtime-config.test.ts ../../lib/finish/critique-code-model-defaults.test.ts ../../lib/finish/critique-code-pi-providers.test.ts ../../lib/finish/critique-code-settings-tui.test.ts ../../lib/finish/critique-code-tui-theme.test.ts ../../lib/finish/earendil-pi-driver.test.ts ../../lib/finish/critique-code-device-login.test.ts ../../lib/finish/critique-code-author-commands.test.ts ../../lib/finish/critique-code-skills.test.ts","build":"node scripts/build-cli.mjs","start":"node --import ../../scripts/register-test-path-alias.mjs --experimental-strip-types src/cli.ts","install:pi":"npm install --prefix .vendor","prepublishOnly":"npm run build"},"_npmUser":{"name":"repath500","email":"repath500@gmail.com"},"repository":{"url":"git+https://github.com/repath500/critique.git","type":"git","directory":"packages/critique-code"},"_npmVersion":"11.17.0","description":"CritiqueCode author agent — implement, then forced review and verified repair. Same org as @critiquedotsh/cli; not the sidecar.","directories":{},"_nodeVersion":"26.5.0","dependencies":{"typescript":"^5.9.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22","@critique/protocol":"workspace:*"},"optionalDependencies":{"typebox":"1.3.7","ffmpeg-static":"5.2.0","@earendil-works/pi-coding-agent":"0.84.1"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.1.2_1786859499398_0.49118417126708525","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@critiquedotsh/harness","version":"0.1.3","keywords":["critique-code","coding-agent","claude-code","author-agent","pi-coding-agent"],"license":"MIT","_id":"@critiquedotsh/harness@0.1.3","maintainers":[{"name":"repath500","email":"repath500@gmail.com"}],"homepage":"https://critique.sh/docs/platform/critique-code","bugs":{"url":"https://github.com/repath500/critique/issues"},"bin":{"critique-code":"dist/cli.js"},"dist":{"shasum":"196b25f2e8617202365ed4911986b4787e8a0843","tarball":"https://registry.npmjs.org/@critiquedotsh/harness/-/harness-0.1.3.tgz","fileCount":3,"integrity":"sha512-I1Q07USrWrzhGFbBh7sgtO7sCfm+tYDQYkg1IwjGK826zX0/h4dkOrGoBZhVLj9hnel05GblrBINQ17hiqftyg==","signatures":[{"sig":"MEUCIEh9/S8J20HZRS/4ZnhS69ZxKvm3dpJvCth2TqzbU9wfAiEAnuehipGeBQoAKRfXpc25Qf1uUxGtElq/azjCpXwxzsg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1041493},"type":"module","engines":{"node":">=20.19.0"},"gitHead":"4c20899797a5b19becf9e533770ce43e1ce355ed","scripts":{"test":"node --import ../../scripts/register-test-path-alias.mjs --experimental-strip-types --test ../../lib/finish/critique-code-program.test.ts ../../lib/finish/critique-code-local-session.test.ts ../../lib/finish/critique-code-local-author.test.ts ../../lib/finish/critique-code-author-apply.test.ts ../../lib/finish/critique-code-local-repair.test.ts ../../lib/finish/critique-code-author-coordinator.test.ts ../../lib/finish/critique-code-repair-kernel.test.ts ../../lib/finish/critique-code-review-checkpoint.test.ts ../../lib/finish/critique-code-runtime-config.test.ts ../../lib/finish/critique-code-model-defaults.test.ts ../../lib/finish/critique-code-pi-providers.test.ts ../../lib/finish/critique-code-settings-tui.test.ts ../../lib/finish/critique-code-tui-theme.test.ts ../../lib/finish/earendil-pi-driver.test.ts ../../lib/finish/critique-code-device-login.test.ts ../../lib/finish/critique-code-author-commands.test.ts ../../lib/finish/critique-code-skills.test.ts ../../lib/finish/pi-author-task.test.ts ../../lib/finish/pi-session-harness.test.ts","build":"node scripts/build-cli.mjs","start":"node --import ../../scripts/register-test-path-alias.mjs --experimental-strip-types src/cli.ts","install:pi":"npm install --prefix .vendor","prepublishOnly":"npm run build"},"_npmUser":{"name":"repath500","email":"repath500@gmail.com"},"repository":{"url":"git+https://github.com/repath500/critique.git","type":"git","directory":"packages/critique-code"},"_npmVersion":"11.17.0","description":"CritiqueCode author agent — implement, then forced review and verified repair. Same org as @critiquedotsh/cli; not the sidecar.","directories":{},"_nodeVersion":"26.5.0","dependencies":{"typescript":"^5.9.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.25.12","@types/node":"^22","@critique/protocol":"workspace:*"},"optionalDependencies":{"typebox":"1.3.7","ffmpeg-static":"5.2.0","@earendil-works/pi-coding-agent":"0.84.1"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.1.3_1786861023570_0.73939816407451","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@critiquedotsh/harness","version":"0.1.4","keywords":["critique-code","coding-agent","claude-code","author-agent","pi-coding-agent"],"license":"MIT","_id":"@critiquedotsh/harness@0.1.4","maintainers":[{"name":"repath500","email":"repath500@gmail.com"}],"homepage":"https://critique.sh/docs/platform/critique-code","bugs":{"url":"https://github.com/repath500/critique/issues"},"bin":{"critique-code":"dist/cli.js"},"dist":{"shasum":"b7f48d8a2a69cbf9cd0b891a0fbc357f5b07c67e","tarball":"https://registry.npmjs.org/@critiquedotsh/harness/-/harness-0.1.4.tgz","fileCount":3,"integrity":"sha512-OW56Kbxee9HKIKh+PI2Z9OAZJYUahE44klLn4ik9pJcCCUiduEhAA47F0X77ZOGsgnB9+uhmJo+OdCNcRSoQ7A==","signatures":[{"sig":"MEUCIQCk+sTlaCF7KNnoq23rbR/Qv2xqx/N9OnCp5rtm6htTVgIgK1s6IlG57mQEDUTPERpyCQlcbnEy0w2N5d/gfGsokpo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1077376},"type":"module","engines":{"node":">=20.19.0"},"gitHead":"6432694199af4dc8c85614c7ccadff47b6344655","scripts":{"test":"node --import ../../scripts/register-test-path-alias.mjs --experimental-strip-types --test ../../lib/finish/critique-code-program.test.ts ../../lib/finish/critique-code-local-session.test.ts ../../lib/finish/critique-code-local-author.test.ts ../../lib/finish/critique-code-author-apply.test.ts ../../lib/finish/critique-code-local-repair.test.ts ../../lib/finish/critique-code-author-coordinator.test.ts ../../lib/finish/critique-code-repair-kernel.test.ts ../../lib/finish/critique-code-review-checkpoint.test.ts ../../lib/finish/critique-code-runtime-config.test.ts ../../lib/finish/critique-code-model-defaults.test.ts ../../lib/finish/critique-code-pi-providers.test.ts ../../lib/finish/critique-code-settings-tui.test.ts ../../lib/finish/critique-code-tui-theme.test.ts ../../lib/finish/earendil-pi-driver.test.ts ../../lib/finish/critique-code-device-login.test.ts ../../lib/finish/critique-code-author-commands.test.ts ../../lib/finish/critique-code-skills.test.ts ../../lib/finish/pi-author-task.test.ts ../../lib/finish/pi-session-harness.test.ts ../../lib/finish/critique-code-web-server.test.ts","build":"node scripts/build-cli.mjs","start":"node --import ../../scripts/register-test-path-alias.mjs --experimental-strip-types src/cli.ts","install:pi":"npm install --prefix .vendor","prepublishOnly":"npm run build"},"_npmUser":{"name":"repath500","email":"repath500@gmail.com"},"repository":{"url":"git+https://github.com/repath500/critique.git","type":"git","directory":"packages/critique-code"},"_npmVersion":"11.17.0","description":"CritiqueCode author agent — implement, then forced review and verified repair. Same org as @critiquedotsh/cli; not the sidecar.","directories":{},"_nodeVersion":"26.5.0","dependencies":{"typescript":"^5.9.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.25.12","@types/node":"^22","@critique/protocol":"workspace:*"},"optionalDependencies":{"typebox":"1.3.7","ffmpeg-static":"5.2.0","@earendil-works/pi-coding-agent":"0.84.1"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.1.4_1786899408576_0.2578620966883223","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@critiquedotsh/harness","version":"0.1.5","keywords":["critique-code","coding-agent","claude-code","author-agent","pi-coding-agent"],"license":"MIT","_id":"@critiquedotsh/harness@0.1.5","maintainers":[{"name":"repath500","email":"repath500@gmail.com"}],"homepage":"https://critique.sh/docs/platform/critique-code","bugs":{"url":"https://github.com/repath500/critique/issues"},"bin":{"critique-code":"dist/cli.js"},"dist":{"shasum":"797d87e71fbdf4d9e7ac1b704662e32f9205ef70","tarball":"https://registry.npmjs.org/@critiquedotsh/harness/-/harness-0.1.5.tgz","fileCount":4,"integrity":"sha512-qJdrca5F/nVBv6j4SJ4lzBZFip7se31X/uLOROrEfJRpox5KgUm2GMBvXrbes/mvoeZg6/IZelh6JnNxmMSsQg==","signatures":[{"sig":"MEUCIFGqcwCgYFnmUKemToxeh7wz8tJ3dgTiknHFYxbKTMiBAiEA7Hv8YGg5CyW9/mb3t2RnL4JhdGDZRfR/X6Nm/WldYyY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1082876},"type":"module","engines":{"node":">=20.19.0"},"gitHead":"c24264642fe09e16f25ff661464942880385ff50","scripts":{"test":"node --import ../../scripts/register-test-path-alias.mjs --experimental-strip-types --test ../../lib/finish/critique-code-program.test.ts ../../lib/finish/critique-code-local-session.test.ts ../../lib/finish/critique-code-local-author.test.ts ../../lib/finish/critique-code-author-apply.test.ts ../../lib/finish/critique-code-local-repair.test.ts ../../lib/finish/critique-code-author-coordinator.test.ts ../../lib/finish/critique-code-repair-kernel.test.ts ../../lib/finish/critique-code-review-checkpoint.test.ts ../../lib/finish/critique-code-runtime-config.test.ts ../../lib/finish/critique-code-model-defaults.test.ts ../../lib/finish/critique-code-pi-providers.test.ts ../../lib/finish/critique-code-settings-tui.test.ts ../../lib/finish/critique-code-tui-theme.test.ts ../../lib/finish/earendil-pi-driver.test.ts ../../lib/finish/critique-code-device-login.test.ts ../../lib/finish/critique-code-author-commands.test.ts ../../lib/finish/critique-code-skills.test.ts ../../lib/finish/pi-author-task.test.ts ../../lib/finish/pi-session-harness.test.ts ../../lib/finish/critique-code-web-server.test.ts","build":"node scripts/build-cli.mjs","start":"node --import ../../scripts/register-test-path-alias.mjs --experimental-strip-types src/cli.ts","install:pi":"npm install --prefix .vendor","postinstall":"node scripts/postinstall.mjs","prepublishOnly":"npm run build"},"_npmUser":{"name":"repath500","email":"repath500@gmail.com"},"repository":{"url":"git+https://github.com/repath500/critique.git","type":"git","directory":"packages/critique-code"},"_npmVersion":"11.17.0","description":"CritiqueCode author agent — implement, then forced review and verified repair. Same org as @critiquedotsh/cli; not the sidecar.","directories":{},"_nodeVersion":"26.5.0","dependencies":{"typescript":"^5.9.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.25.12","@types/node":"^22","@critique/protocol":"workspace:*"},"optionalDependencies":{"typebox":"1.3.7","ffmpeg-static":"5.2.0","@earendil-works/pi-coding-agent":"0.84.1"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.1.5_1786918627087_0.7172833113998667","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@critiquedotsh/harness","version":"0.1.6","keywords":["critique-code","coding-agent","claude-code","author-agent","pi-coding-agent"],"license":"MIT","_id":"@critiquedotsh/harness@0.1.6","maintainers":[{"name":"repath500","email":"repath500@gmail.com"}],"homepage":"https://critique.sh/docs/platform/critique-code","bugs":{"url":"https://github.com/repath500/critique/issues"},"bin":{"critique-code":"dist/cli.js"},"dist":{"shasum":"bf469574e624e4409e842656abc7bef8cae75065","tarball":"https://registry.npmjs.org/@critiquedotsh/harness/-/harness-0.1.6.tgz","fileCount":4,"integrity":"sha512-BKTX1VMTzGf/E2qekJNvMn0XXVB2k4vWoX20cDHWZQFwE5gXdmUICDEm5Un9Oadken/XO47prPw4jDTdxNEscg==","signatures":[{"sig":"MEYCIQCNgtp7qDcE0sCx876dEOYinIJTxa/zMZlzyIxm+lLqAAIhAIIGXM/0apMzK8EmoXFj2LJmtEotLIoiO3gMxc9mkjQ7","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1180748},"type":"module","engines":{"node":">=20.19.0"},"gitHead":"e31b2bda6d1027745e91874c91801eabc2c2240c","scripts":{"test":"node --import ../../scripts/register-test-path-alias.mjs --experimental-strip-types --test ../../lib/finish/critique-code-program.test.ts ../../lib/finish/critique-code-local-session.test.ts ../../lib/finish/critique-code-local-author.test.ts ../../lib/finish/critique-code-author-apply.test.ts ../../lib/finish/critique-code-local-repair.test.ts ../../lib/finish/critique-code-author-coordinator.test.ts ../../lib/finish/critique-code-repair-kernel.test.ts ../../lib/finish/critique-code-review-checkpoint.test.ts ../../lib/finish/critique-code-runtime-config.test.ts ../../lib/finish/critique-code-model-defaults.test.ts ../../lib/finish/critique-code-pi-providers.test.ts ../../lib/finish/critique-code-settings-tui.test.ts ../../lib/finish/critique-code-tui-theme.test.ts ../../lib/finish/earendil-pi-driver.test.ts ../../lib/finish/critique-code-device-login.test.ts ../../lib/finish/critique-code-author-commands.test.ts ../../lib/finish/critique-code-skills.test.ts ../../lib/finish/pi-author-task.test.ts ../../lib/finish/pi-session-harness.test.ts ../../lib/finish/critique-code-web-server.test.ts ../../lib/finish/critique-code-session-title.test.ts ../../lib/finish/critique-code-web-markdown.test.ts ../../lib/finish/critique-code-web-changes.test.ts ../../lib/finish/critique-code-web-mode.test.ts ../../lib/finish/critique-code-workspace-intel.test.ts ../../lib/finish/critique-code-workspace-memory.test.ts ../../lib/finish/critique-code-ts-edit.test.ts ../../lib/finish/critique-code-workspace-tool.test.ts","build":"node scripts/build-cli.mjs","start":"node --import ../../scripts/register-test-path-alias.mjs --experimental-strip-types src/cli.ts","install:pi":"npm install --prefix .vendor","postinstall":"node scripts/postinstall.mjs","prepublishOnly":"npm run build"},"_npmUser":{"name":"repath500","email":"repath500@gmail.com"},"repository":{"url":"git+https://github.com/repath500/critique.git","type":"git","directory":"packages/critique-code"},"_npmVersion":"11.17.0","description":"CritiqueCode author agent — implement, then forced review and verified repair. Same org as @critiquedotsh/cli; not the sidecar.","directories":{},"_nodeVersion":"26.5.0","dependencies":{"typescript":"^5.9.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.25.12","@types/node":"^22","@critique/protocol":"workspace:*"},"optionalDependencies":{"typebox":"1.3.7","ffmpeg-static":"5.2.0","@earendil-works/pi-coding-agent":"0.84.1"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.1.6_1786922717380_0.4137266386720724","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@critiquedotsh/harness","version":"0.1.7","keywords":["critique-code","coding-agent","claude-code","author-agent","pi-coding-agent"],"license":"MIT","_id":"@critiquedotsh/harness@0.1.7","maintainers":[{"name":"repath500","email":"repath500@gmail.com"}],"homepage":"https://critique.sh/docs/platform/critique-code","bugs":{"url":"https://github.com/repath500/critique/issues"},"bin":{"critique-code":"dist/cli.js"},"dist":{"shasum":"4aac106658c552ef9cb25ed0933b9a9980dc0fa7","tarball":"https://registry.npmjs.org/@critiquedotsh/harness/-/harness-0.1.7.tgz","fileCount":4,"integrity":"sha512-QyRQwTJN31/44aGXsOMWX7Eu5UQLLC6qmsvbiKP+onPUtNrlE5pws1Hy7sqwOCdlQQJKrzFpqSM8BpBjc3crGg==","signatures":[{"sig":"MEQCIG9Hu44tV0RadcWc/lvNsB5BGDvCseycNykDAxwlXxZnAiB4+e0eUv5FLAZLSXlMgHA+3AmKNT5pF8oAYVjbogS0+A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1181540},"type":"module","engines":{"node":">=20.19.0"},"gitHead":"4a9a8d142cb1c779c5b782cd689db626ca0fa257","scripts":{"test":"node --import ../../scripts/register-test-path-alias.mjs --experimental-strip-types --test ../../lib/finish/critique-code-program.test.ts ../../lib/finish/critique-code-local-session.test.ts ../../lib/finish/critique-code-local-author.test.ts ../../lib/finish/critique-code-author-apply.test.ts ../../lib/finish/critique-code-local-repair.test.ts ../../lib/finish/critique-code-author-coordinator.test.ts ../../lib/finish/critique-code-repair-kernel.test.ts ../../lib/finish/critique-code-review-checkpoint.test.ts ../../lib/finish/critique-code-runtime-config.test.ts ../../lib/finish/critique-code-model-defaults.test.ts ../../lib/finish/critique-code-pi-providers.test.ts ../../lib/finish/critique-code-settings-tui.test.ts ../../lib/finish/critique-code-tui-theme.test.ts ../../lib/finish/earendil-pi-driver.test.ts ../../lib/finish/critique-code-device-login.test.ts ../../lib/finish/critique-code-author-commands.test.ts ../../lib/finish/critique-code-skills.test.ts ../../lib/finish/pi-author-task.test.ts ../../lib/finish/pi-session-harness.test.ts ../../lib/finish/critique-code-web-server.test.ts ../../lib/finish/critique-code-session-title.test.ts ../../lib/finish/critique-code-web-markdown.test.ts ../../lib/finish/critique-code-web-changes.test.ts ../../lib/finish/critique-code-web-mode.test.ts ../../lib/finish/critique-code-workspace-intel.test.ts ../../lib/finish/critique-code-workspace-memory.test.ts ../../lib/finish/critique-code-ts-edit.test.ts ../../lib/finish/critique-code-workspace-tool.test.ts","build":"node scripts/build-cli.mjs","start":"node --import ../../scripts/register-test-path-alias.mjs --experimental-strip-types src/cli.ts","install:pi":"npm install --prefix .vendor","postinstall":"node scripts/postinstall.mjs","prepublishOnly":"npm run build"},"_npmUser":{"name":"repath500","email":"repath500@gmail.com"},"repository":{"url":"git+https://github.com/repath500/critique.git","type":"git","directory":"packages/critique-code"},"_npmVersion":"11.17.0","description":"CritiqueCode author agent — implement, then forced review and verified repair. Same org as @critiquedotsh/cli; not the sidecar.","directories":{},"_nodeVersion":"26.5.0","dependencies":{"typescript":"^5.9.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.25.12","@types/node":"^22","@critique/protocol":"workspace:*"},"optionalDependencies":{"typebox":"1.3.7","ffmpeg-static":"5.2.0","@earendil-works/pi-coding-agent":"0.84.1"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.1.7_1786923905415_0.10497156139006947","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@critiquedotsh/harness","version":"0.1.8","keywords":["critique-code","coding-agent","claude-code","author-agent","pi-coding-agent"],"license":"MIT","_id":"@critiquedotsh/harness@0.1.8","maintainers":[{"name":"repath500","email":"repath500@gmail.com"}],"homepage":"https://critique.sh/docs/platform/critique-code","bugs":{"url":"https://github.com/repath500/critique/issues"},"bin":{"critique-code":"dist/cli.js"},"dist":{"shasum":"8a981c0b26a7a1aee3c34fd09d0e4abacb8cdd0c","tarball":"https://registry.npmjs.org/@critiquedotsh/harness/-/harness-0.1.8.tgz","fileCount":4,"integrity":"sha512-hLCCZJ5sPCxWYqb3Br1HRPRuZir/dvowxtxqaz4LWDguJ7d4Zf7ty6aB2u41qdszm7fdLzVTIMGtlCweK1lmNw==","signatures":[{"sig":"MEYCIQDTrqirT+/dLIYxAqZY0BVFXXTWOqUxt4ZaQc6ZahzaEAIhAKG86qq7ZaXVz7cYD06Qkpjnff9znxTpX/re4FTGVkjf","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1273901},"type":"module","engines":{"node":">=20.19.0"},"gitHead":"9f9591e29ee1eec9ac0021f16a805eba41aaf8a2","scripts":{"test":"node --import ../../scripts/register-test-path-alias.mjs --experimental-strip-types --test ../../lib/finish/critique-code-program.test.ts ../../lib/finish/critique-code-cli-sidecar.test.ts ../../lib/finish/critique-code-local-session.test.ts ../../lib/finish/critique-code-local-author.test.ts ../../lib/finish/critique-code-author-apply.test.ts ../../lib/finish/critique-code-local-repair.test.ts ../../lib/finish/critique-code-author-coordinator.test.ts ../../lib/finish/critique-code-repair-kernel.test.ts ../../lib/finish/critique-code-review-checkpoint.test.ts ../../lib/finish/critique-code-runtime-config.test.ts ../../lib/finish/critique-code-model-defaults.test.ts ../../lib/finish/critique-code-pi-providers.test.ts ../../lib/finish/critique-code-settings-tui.test.ts ../../lib/finish/critique-code-tui-theme.test.ts ../../lib/finish/critique-code-tui-markdown.test.ts ../../lib/finish/critique-code-tui-select.test.ts ../../lib/finish/earendil-pi-driver.test.ts ../../lib/finish/critique-code-device-login.test.ts ../../lib/finish/critique-code-author-commands.test.ts ../../lib/finish/critique-code-session-ops.test.ts ../../lib/finish/critique-code-skills.test.ts ../../lib/finish/pi-author-task.test.ts ../../lib/finish/pi-session-harness.test.ts ../../lib/finish/critique-code-web-server.test.ts ../../lib/finish/critique-code-session-title.test.ts ../../lib/finish/critique-code-web-markdown.test.ts ../../lib/finish/critique-code-web-changes.test.ts ../../lib/finish/critique-code-web-mode.test.ts ../../lib/finish/critique-code-workspace-intel.test.ts ../../lib/finish/critique-code-workspace-memory.test.ts ../../lib/finish/critique-code-ts-edit.test.ts ../../lib/finish/critique-code-workspace-tool.test.ts","build":"node scripts/build-cli.mjs","start":"node --import ../../scripts/register-test-path-alias.mjs --experimental-strip-types src/cli.ts","install:pi":"npm install --prefix .vendor","postinstall":"node scripts/postinstall.mjs","prepublishOnly":"npm run build"},"_npmUser":{"name":"repath500","email":"repath500@gmail.com"},"repository":{"url":"git+https://github.com/repath500/critique.git","type":"git","directory":"packages/critique-code"},"_npmVersion":"11.17.0","description":"CritiqueCode author agent — implement, then forced review and verified repair. Same org as @critiquedotsh/cli; not the sidecar.","directories":{},"_nodeVersion":"26.5.0","dependencies":{"typescript":"^5.9.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.25.12","@types/node":"^22","@critique/protocol":"workspace:*"},"optionalDependencies":{"typebox":"1.3.7","ffmpeg-static":"5.2.0","@earendil-works/pi-coding-agent":"0.84.1"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.1.8_1786995147329_0.31135793046557936","host":"s3://npm-registry-packages-npm-production"}},"0.1.10":{"name":"@critiquedotsh/harness","version":"0.1.10","keywords":["critique-code","coding-agent","claude-code","author-agent","pi-coding-agent"],"license":"MIT","_id":"@critiquedotsh/harness@0.1.10","maintainers":[{"name":"repath500","email":"repath500@gmail.com"}],"homepage":"https://critique.sh/docs/platform/critique-code","bugs":{"url":"https://github.com/repath500/critique/issues"},"bin":{"critique-code":"dist/cli.js"},"dist":{"shasum":"cd7d53fc1ed67cb3d1bf340fd8baacda08c2c460","tarball":"https://registry.npmjs.org/@critiquedotsh/harness/-/harness-0.1.10.tgz","fileCount":4,"integrity":"sha512-5CvfsX7AgeFrHKdajIDAmgfMqJPoUapmpakXKPOBYOawSzB/+HrCh3Eq9LG3PeUbTpk9MGrzDhLQOoPOyANI+A==","signatures":[{"sig":"MEUCIQDHHn9j1EmUANUx1woa2CilOkLjcsGtCp0AMLJiVhDU3AIgOWsv08qOx8gW93KN4ePvUKpJk22qUUYmo3WH582aUh4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1436399},"type":"module","engines":{"node":">=20.19.0"},"gitHead":"fb7d583303eb7fc33c0ffc180cb48e029a299249","scripts":{"test":"node --import ../../scripts/register-test-path-alias.mjs --experimental-strip-types --test ../../lib/finish/critique-code-program.test.ts ../../lib/finish/critique-code-cli-sidecar.test.ts ../../lib/finish/critique-code-local-session.test.ts ../../lib/finish/critique-code-local-author.test.ts ../../lib/finish/critique-code-author-apply.test.ts ../../lib/finish/critique-code-local-repair.test.ts ../../lib/finish/critique-code-author-coordinator.test.ts ../../lib/finish/critique-code-repair-kernel.test.ts ../../lib/finish/critique-code-review-checkpoint.test.ts ../../lib/finish/critique-code-runtime-config.test.ts ../../lib/finish/critique-code-model-defaults.test.ts ../../lib/finish/critique-code-pi-providers.test.ts ../../lib/finish/critique-code-settings-tui.test.ts ../../lib/finish/critique-code-tui-theme.test.ts ../../lib/finish/critique-code-tui-markdown.test.ts ../../lib/finish/critique-code-tui-select.test.ts ../../lib/finish/earendil-pi-driver.test.ts ../../lib/finish/critique-code-device-login.test.ts ../../lib/finish/critique-code-author-commands.test.ts ../../lib/finish/critique-code-session-ops.test.ts ../../lib/finish/critique-code-skills.test.ts ../../lib/finish/pi-author-task.test.ts ../../lib/finish/pi-session-harness.test.ts ../../lib/finish/critique-code-web-server.test.ts ../../lib/finish/critique-code-session-title.test.ts ../../lib/finish/critique-code-web-markdown.test.ts ../../lib/finish/critique-code-web-changes.test.ts ../../lib/finish/critique-code-web-mode.test.ts ../../lib/finish/critique-code-workspace-intel.test.ts ../../lib/finish/critique-code-workspace-memory.test.ts ../../lib/finish/critique-code-ts-edit.test.ts ../../lib/finish/critique-code-workspace-tool.test.ts ../../lib/finish/critique-code-remote.test.ts ../../lib/finish/critique-code-portals.test.ts ../../lib/finish/critique-code-site-link.test.ts ../../lib/finish/critique-code-site-relay.test.ts ../../lib/finish/critique-code-thinking.test.ts ../../lib/finish/critique-code-slash.test.ts ../../lib/finish/critique-code-web-icons.test.ts ../../lib/finish/critique-code-web-studio.test.ts ../../lib/finish/critique-code-web-trust.test.ts ../../lib/finish/critique-code-web-workbench.test.ts","build":"node scripts/build-cli.mjs","start":"node --import ../../scripts/register-test-path-alias.mjs --experimental-strip-types src/cli.ts","install:pi":"npm install --prefix .vendor","postinstall":"node scripts/postinstall.mjs","prepublishOnly":"npm run build"},"_npmUser":{"name":"repath500","email":"repath500@gmail.com"},"repository":{"url":"git+https://github.com/repath500/critique.git","type":"git","directory":"packages/critique-code"},"_npmVersion":"11.17.0","description":"CritiqueCode author agent — implement, then forced review and verified repair. Same org as @critiquedotsh/cli; not the sidecar.","directories":{},"_nodeVersion":"26.5.0","dependencies":{"typescript":"^5.9.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.25.12","@types/node":"^22","@critique/protocol":"workspace:*"},"optionalDependencies":{"typebox":"1.3.7","ffmpeg-static":"5.2.0","@earendil-works/pi-coding-agent":"0.84.1"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.1.10_1787015099273_0.5596527489743994","host":"s3://npm-registry-packages-npm-production"}},"0.1.11":{"name":"@critiquedotsh/harness","version":"0.1.11","keywords":["critique-code","coding-agent","claude-code","author-agent","pi-coding-agent"],"license":"MIT","_id":"@critiquedotsh/harness@0.1.11","maintainers":[{"name":"repath500","email":"repath500@gmail.com"}],"homepage":"https://critique.sh/docs/platform/critique-code","bugs":{"url":"https://github.com/repath500/critique/issues"},"bin":{"critique-code":"dist/cli.js"},"dist":{"shasum":"69fbe56665e7d33c692ccee94b8ab43a9b19e00c","tarball":"https://registry.npmjs.org/@critiquedotsh/harness/-/harness-0.1.11.tgz","fileCount":4,"integrity":"sha512-Hk3OvYyTA6QYzCRZFw7CLFBKXkFt0771f4uOxUaCp6VqUkCzIOlToc3jXbKUBIDqBexKU4bgovjb5OOooFIdrg==","signatures":[{"sig":"MEYCIQCtiZqpqCgvhWnct0fBfNooxayKZCmA92/opVBevPVNrQIhALRkWzMCEff+iz/6Qd/zjWV9Iz3S3YqDweO7zXkKlxcB","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1466201},"type":"module","engines":{"node":">=20.19.0"},"gitHead":"98c7284eef73f4de9f9e9557eec27c00c323f0da","scripts":{"test":"node --import ../../scripts/register-test-path-alias.mjs --experimental-strip-types --test ../../lib/finish/critique-code-program.test.ts ../../lib/finish/critique-code-cli-sidecar.test.ts ../../lib/finish/critique-code-local-session.test.ts ../../lib/finish/critique-code-local-author.test.ts ../../lib/finish/critique-code-author-apply.test.ts ../../lib/finish/critique-code-local-repair.test.ts ../../lib/finish/critique-code-author-coordinator.test.ts ../../lib/finish/critique-code-repair-kernel.test.ts ../../lib/finish/critique-code-review-checkpoint.test.ts ../../lib/finish/critique-code-runtime-config.test.ts ../../lib/finish/critique-code-model-defaults.test.ts ../../lib/finish/critique-code-pi-providers.test.ts ../../lib/finish/critique-code-settings-tui.test.ts ../../lib/finish/critique-code-tui-theme.test.ts ../../lib/finish/critique-code-tui-markdown.test.ts ../../lib/finish/critique-code-tui-select.test.ts ../../lib/finish/earendil-pi-driver.test.ts ../../lib/finish/critique-code-device-login.test.ts ../../lib/finish/critique-code-author-commands.test.ts ../../lib/finish/critique-code-session-ops.test.ts ../../lib/finish/critique-code-skills.test.ts ../../lib/finish/pi-author-task.test.ts ../../lib/finish/pi-session-harness.test.ts ../../lib/finish/critique-code-web-server.test.ts ../../lib/finish/critique-code-session-title.test.ts ../../lib/finish/critique-code-web-markdown.test.ts ../../lib/finish/critique-code-web-changes.test.ts ../../lib/finish/critique-code-web-mode.test.ts ../../lib/finish/critique-code-workspace-intel.test.ts ../../lib/finish/critique-code-workspace-memory.test.ts ../../lib/finish/critique-code-ts-edit.test.ts ../../lib/finish/critique-code-workspace-tool.test.ts ../../lib/finish/critique-code-remote.test.ts ../../lib/finish/critique-code-portals.test.ts ../../lib/finish/critique-code-site-link.test.ts ../../lib/finish/critique-code-site-relay.test.ts ../../lib/finish/critique-code-thinking.test.ts ../../lib/finish/critique-code-slash.test.ts ../../lib/finish/critique-code-web-icons.test.ts ../../lib/finish/critique-code-web-studio.test.ts ../../lib/finish/critique-code-web-trust.test.ts ../../lib/finish/critique-code-web-workbench.test.ts","build":"node scripts/build-cli.mjs","start":"node --import ../../scripts/register-test-path-alias.mjs --experimental-strip-types src/cli.ts","install:pi":"npm install --prefix .vendor","postinstall":"node scripts/postinstall.mjs","prepublishOnly":"npm run build"},"_npmUser":{"name":"repath500","email":"repath500@gmail.com"},"repository":{"url":"git+https://github.com/repath500/critique.git","type":"git","directory":"packages/critique-code"},"_npmVersion":"11.17.0","description":"CritiqueCode author agent — implement, then forced review and verified repair. Same org as @critiquedotsh/cli; not the sidecar.","directories":{},"_nodeVersion":"26.5.0","dependencies":{"typescript":"^5.9.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.25.12","@types/node":"^22","@critique/protocol":"workspace:*"},"optionalDependencies":{"typebox":"1.3.7","ffmpeg-static":"5.2.0","@earendil-works/pi-coding-agent":"0.84.1"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.1.11_1787021220808_0.5955762962560893","host":"s3://npm-registry-packages-npm-production"}},"0.1.12":{"name":"@critiquedotsh/harness","version":"0.1.12","keywords":["critique-code","coding-agent","claude-code","author-agent","pi-coding-agent"],"license":"MIT","_id":"@critiquedotsh/harness@0.1.12","maintainers":[{"name":"repath500","email":"repath500@gmail.com"}],"homepage":"https://critique.sh/docs/platform/critique-code","bugs":{"url":"https://github.com/repath500/critique/issues"},"bin":{"critique-code":"dist/cli.js"},"dist":{"shasum":"5f6d932357347c7c9e0f0eff0954a59d557ab712","tarball":"https://registry.npmjs.org/@critiquedotsh/harness/-/harness-0.1.12.tgz","fileCount":4,"integrity":"sha512-sj+deIAHlFfzE1Ld96foBbuNN/qpX7VUmSct35Kg1PEJlodF7mQXDETiQZrXOTYk7/odvmwuHrRAyyWpj4QsoA==","signatures":[{"sig":"MEQCIHbv+mC1SS8xmgkUI34WtbzCHz6BVSyPOyXBPaLU0leTAiB6qNvuFTrKyyFlNjvzCUdYkg1vVPgmYrP5lHt0INDrkA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1466427},"type":"module","engines":{"node":">=20.19.0"},"gitHead":"609b1b60b5db1bde1c51cfecbce6abb95fddecaa","scripts":{"test":"node --import ../../scripts/register-test-path-alias.mjs --experimental-strip-types --test ../../lib/finish/critique-code-program.test.ts ../../lib/finish/critique-code-cli-sidecar.test.ts ../../lib/finish/critique-code-local-session.test.ts ../../lib/finish/critique-code-local-author.test.ts ../../lib/finish/critique-code-author-apply.test.ts ../../lib/finish/critique-code-local-repair.test.ts ../../lib/finish/critique-code-author-coordinator.test.ts ../../lib/finish/critique-code-repair-kernel.test.ts ../../lib/finish/critique-code-review-checkpoint.test.ts ../../lib/finish/critique-code-runtime-config.test.ts ../../lib/finish/critique-code-model-defaults.test.ts ../../lib/finish/critique-code-pi-providers.test.ts ../../lib/finish/critique-code-settings-tui.test.ts ../../lib/finish/critique-code-tui-theme.test.ts ../../lib/finish/critique-code-tui-markdown.test.ts ../../lib/finish/critique-code-tui-select.test.ts ../../lib/finish/earendil-pi-driver.test.ts ../../lib/finish/critique-code-device-login.test.ts ../../lib/finish/critique-code-author-commands.test.ts ../../lib/finish/critique-code-session-ops.test.ts ../../lib/finish/critique-code-skills.test.ts ../../lib/finish/pi-author-task.test.ts ../../lib/finish/pi-session-harness.test.ts ../../lib/finish/critique-code-web-server.test.ts ../../lib/finish/critique-code-session-title.test.ts ../../lib/finish/critique-code-web-markdown.test.ts ../../lib/finish/critique-code-web-changes.test.ts ../../lib/finish/critique-code-web-mode.test.ts ../../lib/finish/critique-code-workspace-intel.test.ts ../../lib/finish/critique-code-workspace-memory.test.ts ../../lib/finish/critique-code-ts-edit.test.ts ../../lib/finish/critique-code-workspace-tool.test.ts ../../lib/finish/critique-code-remote.test.ts ../../lib/finish/critique-code-portals.test.ts ../../lib/finish/critique-code-site-link.test.ts ../../lib/finish/critique-code-site-relay.test.ts ../../lib/finish/critique-code-thinking.test.ts ../../lib/finish/critique-code-slash.test.ts ../../lib/finish/critique-code-web-icons.test.ts ../../lib/finish/critique-code-web-studio.test.ts ../../lib/finish/critique-code-web-trust.test.ts ../../lib/finish/critique-code-web-workbench.test.ts","build":"node scripts/build-cli.mjs","start":"node --import ../../scripts/register-test-path-alias.mjs --experimental-strip-types src/cli.ts","install:pi":"npm install --prefix .vendor","postinstall":"node scripts/postinstall.mjs","prepublishOnly":"npm run build"},"_npmUser":{"name":"repath500","email":"repath500@gmail.com"},"repository":{"url":"git+https://github.com/repath500/critique.git","type":"git","directory":"packages/critique-code"},"_npmVersion":"11.17.0","description":"CritiqueCode author agent — implement, then forced review and verified repair. Same org as @critiquedotsh/cli; not the sidecar.","directories":{},"_nodeVersion":"26.5.0","dependencies":{"typescript":"^5.9.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.25.12","@types/node":"^22","@critique/protocol":"workspace:*"},"optionalDependencies":{"typebox":"1.3.7","ffmpeg-static":"5.2.0","@earendil-works/pi-coding-agent":"0.84.1"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.1.12_1787022282792_0.025407234402509804","host":"s3://npm-registry-packages-npm-production"}},"0.1.13":{"name":"@critiquedotsh/harness","version":"0.1.13","keywords":["critique-code","coding-agent","claude-code","author-agent","pi-coding-agent"],"license":"MIT","_id":"@critiquedotsh/harness@0.1.13","maintainers":[{"name":"repath500","email":"repath500@gmail.com"}],"homepage":"https://critique.sh/docs/platform/critique-code","bugs":{"url":"https://github.com/repath500/critique/issues"},"bin":{"critique-code":"dist/cli.js"},"dist":{"shasum":"c0ed9e1ee6cfa53b4434ab0fc967f281f1a8e34c","tarball":"https://registry.npmjs.org/@critiquedotsh/harness/-/harness-0.1.13.tgz","fileCount":4,"integrity":"sha512-7zU9EGJEmaYBNjw6pczHtPbgNzUTswMlrUtgRu5F6u0u/zEdvbj9Rwal99sTY+WRd38H+UeCzf/1UV090fX1gQ==","signatures":[{"sig":"MEUCIHR7Esmx6HkuuFOgVXOXSLQCpn/Et0n2C8oo1JjguEE0AiEAlrM4wYdapDCorHA7Nnbd29WHUmx1Q6/yLPnU6J5+PCg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1502070},"type":"module","engines":{"node":">=20.19.0"},"gitHead":"cb22ae4a0d4e3d6cafe1d6cbb2a66e68d36e447c","scripts":{"test":"node --import ../../scripts/register-test-path-alias.mjs --experimental-strip-types --test ../../lib/finish/critique-code-program.test.ts ../../lib/finish/critique-code-cli-sidecar.test.ts ../../lib/finish/critique-code-local-session.test.ts ../../lib/finish/critique-code-local-author.test.ts ../../lib/finish/critique-code-author-apply.test.ts ../../lib/finish/critique-code-local-repair.test.ts ../../lib/finish/critique-code-author-coordinator.test.ts ../../lib/finish/critique-code-repair-kernel.test.ts ../../lib/finish/critique-code-review-checkpoint.test.ts ../../lib/finish/critique-code-runtime-config.test.ts ../../lib/finish/critique-code-model-defaults.test.ts ../../lib/finish/critique-code-pi-providers.test.ts ../../lib/finish/critique-code-settings-tui.test.ts ../../lib/finish/critique-code-tui-theme.test.ts ../../lib/finish/critique-code-tui-markdown.test.ts ../../lib/finish/critique-code-tui-select.test.ts ../../lib/finish/earendil-pi-driver.test.ts ../../lib/finish/critique-code-device-login.test.ts ../../lib/finish/critique-code-author-commands.test.ts ../../lib/finish/critique-code-session-ops.test.ts ../../lib/finish/critique-code-skills.test.ts ../../lib/finish/pi-author-task.test.ts ../../lib/finish/pi-session-harness.test.ts ../../lib/finish/critique-code-web-server.test.ts ../../lib/finish/critique-code-web-images.test.ts ../../lib/finish/critique-code-session-title.test.ts ../../lib/finish/critique-code-web-markdown.test.ts ../../lib/finish/critique-code-web-changes.test.ts ../../lib/finish/critique-code-web-mode.test.ts ../../lib/finish/critique-code-workspace-intel.test.ts ../../lib/finish/critique-code-workspace-memory.test.ts ../../lib/finish/critique-code-ts-edit.test.ts ../../lib/finish/critique-code-workspace-tool.test.ts ../../lib/finish/critique-code-remote.test.ts ../../lib/finish/critique-code-portals.test.ts ../../lib/finish/critique-code-site-link.test.ts ../../lib/finish/critique-code-site-relay.test.ts ../../lib/finish/critique-code-thinking.test.ts ../../lib/finish/critique-code-slash.test.ts ../../lib/finish/critique-code-web-icons.test.ts ../../lib/finish/critique-code-web-studio.test.ts ../../lib/finish/critique-code-web-trust.test.ts ../../lib/finish/critique-code-web-workbench.test.ts","build":"node scripts/build-cli.mjs","start":"node --import ../../scripts/register-test-path-alias.mjs --experimental-strip-types src/cli.ts","install:pi":"npm install --prefix .vendor","postinstall":"node scripts/postinstall.mjs","prepublishOnly":"npm run build"},"_npmUser":{"name":"repath500","email":"repath500@gmail.com"},"repository":{"url":"git+https://github.com/repath500/critique.git","type":"git","directory":"packages/critique-code"},"_npmVersion":"11.17.0","description":"CritiqueCode author agent — implement, then forced review and verified repair. Same org as @critiquedotsh/cli; not the sidecar.","directories":{},"_nodeVersion":"26.5.0","dependencies":{"typescript":"^5.9.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.25.12","@types/node":"^22","@critique/protocol":"workspace:*"},"optionalDependencies":{"typebox":"1.3.7","ffmpeg-static":"5.2.0","@earendil-works/pi-coding-agent":"0.84.1"},"_npmOperationalInternal":{"tmp":"tmp/harness_0.1.13_1787023548591_0.2545278316274424","host":"s3://npm-registry-packages-npm-production"}},"0.1.14":{"name":"@critiquedotsh/harness","version":"0.1.14","description":"CritiqueCode author agent — implement, then forced review and verified repair. Same org as @critiquedotsh/cli; not the sidecar.","homepage":"https://critique.sh/docs/platform/critique-code","repository":{"type":"git","url":"git+https://github.com/repath500/critique.git","directory":"packages/critique-code"},"bugs":{"url":"https://github.com/repath500/critique/issues"},"keywords":["critique-code","coding-agent","claude-code","author-agent","pi-coding-agent"],"type":"module","publishConfig":{"access":"public"},"bin":{"critique-code":"dist/cli.js"},"scripts":{"build":"node scripts/build-cli.mjs","postinstall":"node scripts/postinstall.mjs","start":"node --import ../../scripts/register-test-path-alias.mjs --experimental-strip-types src/cli.ts","install:pi":"npm install --prefix .vendor","prepublishOnly":"npm run build","test":"node --import ../../scripts/register-test-path-alias.mjs --experimental-strip-types --test ../../lib/finish/critique-code-program.test.ts ../../lib/finish/critique-code-cli-sidecar.test.ts ../../lib/finish/critique-code-local-session.test.ts ../../lib/finish/critique-code-local-author.test.ts ../../lib/finish/critique-code-headless-author.test.ts ../../lib/finish/critique-code-author-apply.test.ts ../../lib/finish/critique-code-local-repair.test.ts ../../lib/finish/critique-code-author-coordinator.test.ts ../../lib/finish/critique-code-repair-kernel.test.ts ../../lib/finish/critique-code-review-checkpoint.test.ts ../../lib/finish/critique-code-runtime-config.test.ts ../../lib/finish/critique-code-model-defaults.test.ts ../../lib/finish/critique-code-pi-providers.test.ts ../../lib/finish/critique-code-settings-tui.test.ts ../../lib/finish/critique-code-tui-theme.test.ts ../../lib/finish/critique-code-tui-markdown.test.ts ../../lib/finish/critique-code-tui-select.test.ts ../../lib/finish/earendil-pi-driver.test.ts ../../lib/finish/critique-code-device-login.test.ts ../../lib/finish/critique-code-author-commands.test.ts ../../lib/finish/critique-code-session-ops.test.ts ../../lib/finish/critique-code-skills.test.ts ../../lib/finish/pi-author-task.test.ts ../../lib/finish/pi-session-harness.test.ts ../../lib/finish/critique-code-web-server.test.ts ../../lib/finish/critique-code-web-images.test.ts ../../lib/finish/critique-code-session-title.test.ts ../../lib/finish/critique-code-web-markdown.test.ts ../../lib/finish/critique-code-web-changes.test.ts ../../lib/finish/critique-code-web-mode.test.ts ../../lib/finish/critique-code-workspace-intel.test.ts ../../lib/finish/critique-code-workspace-memory.test.ts ../../lib/finish/critique-code-ts-edit.test.ts ../../lib/finish/critique-code-workspace-tool.test.ts ../../lib/finish/critique-code-remote.test.ts ../../lib/finish/critique-code-portals.test.ts ../../lib/finish/critique-code-site-link.test.ts ../../lib/finish/critique-code-site-relay.test.ts ../../lib/finish/critique-code-thinking.test.ts ../../lib/finish/critique-code-slash.test.ts ../../lib/finish/critique-code-web-icons.test.ts ../../lib/finish/critique-code-web-studio.test.ts ../../lib/finish/critique-code-web-trust.test.ts ../../lib/finish/critique-code-web-workbench.test.ts ../../lib/finish/author-engine/*.test.ts"},"dependencies":{"typescript":"^5.9.3"},"devDependencies":{"@critique/protocol":"workspace:*","@types/node":"^22","esbuild":"^0.25.12"},"optionalDependencies":{"@earendil-works/pi-coding-agent":"0.84.1","ffmpeg-static":"5.2.0","typebox":"1.3.7"},"license":"MIT","engines":{"node":">=20.19.0"},"gitHead":"6ccdc4e5c9cc9cbc1db7ca18c5869dad126ef635","_id":"@critiquedotsh/harness@0.1.14","_nodeVersion":"26.5.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-45wm5/RPAZZREhrSp/gv3XCdRggVrDY/KaLK6i7qmnPnDBtwT4sAEtzJfBamWCXh2dhcSKyiONOFgPoAoFo8MQ==","shasum":"daa2767acc29bb9bda366c0d1b076d815ed0d90d","tarball":"https://registry.npmjs.org/@critiquedotsh/harness/-/harness-0.1.14.tgz","fileCount":4,"unpackedSize":1822200,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCTBxFvKE8PK+CzDdAvQmUoSm4tRQPycwoMYfHACMqxbQIhAJeMey0XlvIQFHse+oP67lkKyezDkluQOzarxzpfac4H"}]},"_npmUser":{"name":"repath500","email":"repath500@gmail.com"},"directories":{},"maintainers":[{"name":"repath500","email":"repath500@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/harness_0.1.14_1788744705664_0.5322518510447745"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-16T05:26:57.444Z","modified":"2026-09-07T01:31:46.050Z","0.1.0":"2026-08-16T05:26:57.820Z","0.1.1":"2026-08-16T05:31:09.709Z","0.1.2":"2026-08-16T05:51:39.523Z","0.1.3":"2026-08-16T06:17:03.714Z","0.1.4":"2026-08-16T16:56:48.714Z","0.1.5":"2026-08-16T22:17:07.230Z","0.1.6":"2026-08-16T23:25:17.555Z","0.1.7":"2026-08-16T23:45:05.574Z","0.1.8":"2026-08-17T19:32:27.503Z","0.1.10":"2026-08-18T01:04:59.453Z","0.1.11":"2026-08-18T02:47:00.966Z","0.1.12":"2026-08-18T03:04:42.935Z","0.1.13":"2026-08-18T03:25:48.789Z","0.1.14":"2026-09-07T01:31:45.806Z"},"bugs":{"url":"https://github.com/repath500/critique/issues"},"license":"MIT","homepage":"https://critique.sh/docs/platform/critique-code","keywords":["critique-code","coding-agent","claude-code","author-agent","pi-coding-agent"],"repository":{"type":"git","url":"git+https://github.com/repath500/critique.git","directory":"packages/critique-code"},"description":"CritiqueCode author agent — implement, then forced review and verified repair. Same org as @critiquedotsh/cli; not the sidecar.","maintainers":[{"name":"repath500","email":"repath500@gmail.com"}],"readme":"# CritiqueCode (`@critiquedotsh/harness`)\n\n**CritiqueCode** is an author agent for a local git repository. It implements in an interactive terminal session, then the controller forces independent review and verified repair. It is a Claude Code / Codex-style coding loop, not a PR comment bot.\n\n| Product | npm package | Binary | Job |\n| --- | --- | --- | --- |\n| **CritiqueCode** (this package) | [`@critiquedotsh/harness`](https://www.npmjs.com/package/@critiquedotsh/harness) | `critique-code` | Author: write the change, then survive review |\n| **Critique CLI** | [`@critiquedotsh/cli`](https://www.npmjs.com/package/@critiquedotsh/cli) | `critique` | Sidecar reviewer for agents you already run |\n\nSame npm org. Different products. Do not install CritiqueCode by swapping `@critiquedotsh/cli`. Native evidence stays on `/review`. `/critique` and `critique_cli` spawn the installed `critique` sidecar when you want that binary.\n\nDocs: [CritiqueCode](https://critique.sh/docs/platform/critique-code) · [Inference API](https://critique.sh/docs/platform/inference-api) · [Critique CLI](https://critique.sh/docs/platform/cli)\n\n## Requirements\n\n- Node.js **20.19** or newer\n- A **git repository** (run the binary in the project you want to edit)\n- A model route: **Critique Inference** (website login, no pasted key) or a BYOK provider key\n\nOptional:\n\n- The live author kernel (installed automatically as an optional dependency)\n- [`ffmpeg-static`](https://www.npmjs.com/package/ffmpeg-static) (optional dependency; bundled microphone recorder for `/voice`)\n\n## Install\n\n```bash\nnpm install --global @critiquedotsh/harness\n```\n\nConfirm the binary:\n\n```bash\ncritique-code help\n```\n\nAlways `cd` into the repository you intend to change. CritiqueCode uses the **current working directory**.\n\n```bash\ncd /path/to/your-project\ncritique-code\n```\n\nFrom a Critique platform checkout (not the published install):\n\n```bash\ncd /path/to/your-project\nnode /path/to/critique/packages/critique-code/bin/critique-code.mjs\n```\n\n`pnpm critique-code` from the Critique checkout uses **that** checkout as cwd unless you pass `--cwd`. That is the wrong default when you are trying the agent on another project.\n\n## Quick start (no API key paste)\n\n1. Install the package.\n2. Enter your repo.\n3. Connect Critique Inference in the browser:\n\n```bash\ncd /path/to/your-project\ncritique-code login\n```\n\nThe terminal prints a URL and a short code, opens the browser when it can, and waits. Approve on [critique.sh/device](https://critique.sh/device). CritiqueCode stores a machine key under `~/.critique/code/` and sets the default route to **Critique Inference** with model `critique/auto`.\n\nSame flow from an already-open session: type `/login`.\n\nThen:\n\n```bash\ncritique-code\n```\n\nOr skip the TTY and open a local browser UI (still the same author kernel in this process, bound to `127.0.0.1` only):\n\n```bash\ncritique-code web\n```\n\nPair a phone to that same laptop process (Wi-Fi PIN, Slack/Telegram DM, or `--anywhere` with your own tunnel). The kernel never moves to Critique Cloud:\n\n```bash\ncritique-code remote\ncritique-code remote --slack --anywhere\ncritique-code slack\n```\n\nDrive it from the website instead. Open [critique.sh/connect](https://critique.sh/connect), click **Connect this PC**, then paste the printed code on this machine:\n\n```bash\ncritique-code connect K7M2-9QWX\n```\n\nThe site is a remote, not a runner: prompts, approvals, and event output relay through critique.sh, but the kernel and every file write stay on this laptop. It needs `critique-code login` (a `crt_` key) so the laptop can claim the code outbound.\n\nDescribe the change. Slash lines (`/review`, `/ship`, …) are never sent to the model.\n\n## What a session does\n\n1. **Author** implements in the working tree (writes go through a content-addressed apply path).\n2. You can ask the model to run a workspace command via `critique_run`. **You** approve or deny each request. Denied means nothing runs. Networked runs are disabled unless a controller explicitly provides an enforced sandbox. Output is not Evidence.\n3. **`/review` or `/ship`** starts the evidence harness. Author chat is withheld from the reviewer.\n4. **`/repair`** runs verified repair on promoted findings. It is not auto-applied chatter.\n5. `none_promoted` means nothing was promoted. It is **not** a correctness proof.\n\nEOF attempts to review dirty work, while `/exit` records an incomplete session without claiming completion. The session store keeps only the task contract, review handoff, capsule digest, and bounded status—not the author transcript. A later invocation resumes only when the repository still matches that digest; stale state is surfaced explicitly. Partial or failed reports cannot satisfy `/done` or `/ship` without an auditable user override.\n\nThe author can fan out **`critique_task`** workers (`explore` is read-only; `general` / `implement` can write through the same CAS path). Independent native review is still `/review`, not a worker. `critique_cli` spawns the installed Critique CLI sidecar when you ask for that binary. `critique_run` still needs your approval. Workers cannot nest `critique_task` or `critique_cli`.\n\nThe TTY shows a wordmark, a compact live status (`thinking` / `write path` / `task explore …`), then a one-line `▸` summary before the reply. It does not stream thinking paragraphs.\n\nInteractive TTY sessions keep **stdout quiet**. Pass `--json` for the session envelope. `review`, `repair`, and `capabilities` still print JSON on stdout. Live chrome goes to stderr.\n\n## CLI\n\n```text\ncritique-code\ncritique-code chat [--intent <text>] [--models provider/model,...] [--cwd <dir>] [--store <dir>] [--voice] [--json]\ncritique-code web [--port <n>] [--cwd <dir>] [--store <dir>] [--models ...]\ncritique-code remote [--anywhere] [--site] [--slack] [--telegram] [--port <n>] [--cwd <dir>]\ncritique-code connect [CODE] [--cwd <dir>]\ncritique-code slack [--port <n>] [--cwd <dir>]\ncritique-code telegram [--port <n>] [--cwd <dir>]\ncritique-code login\ncritique-code settings | keys | models\ncritique-code review [--depth quick|standard|paranoid] [--focus general,security] [--models ...] [--base <ref>] [--intent <text>] [--cwd <dir>] [--store <dir>]\ncritique-code repair <review-run-id> [--store <dir>] [--cwd <dir>] [--models ...]\ncritique-code critique [sidecar argv...] [--cwd <dir>]\ncritique-code capabilities [--cwd <dir>]\ncritique-code skills [--cwd <dir>]\ncritique-code import-skills [--cwd <dir>]\ncritique-code help\n```\n\n| Command | Purpose |\n| --- | --- |\n| `critique-code` / `chat` | Interactive author session |\n| `web` | Local browser UI on `127.0.0.1` (same author kernel; no TTY required) |\n| `remote` | Phone pairing to this laptop: LAN PIN, optional `--anywhere` tunnel. Not Critique Cloud. |\n| `connect [CODE]` | Register this PC on critique.sh/connect. The website is a remote; the kernel stays here. |\n| `slack` / `telegram` | Outbound bots. DM the agent from those apps; the kernel stays in this process. |\n| `login` | Browser device approval; connect Critique Inference |\n| `settings` / `keys` / `models` | TUI for route, stored keys, and model ids |\n| `review` | Evidence harness (JSON on stdout) |\n| `repair <id>` | Verified repair for a stored review run |\n| `critique [argv…]` | Spawn the installed Critique CLI sidecar (`critique review --json` by default) |\n| `capabilities` | Discovered local check tools |\n| `skills` | Built-in plus imported Claude Code / Codex / Cursor `SKILL.md` folders |\n| `import-skills` | Copy discovered skills into `~/.critique/code/skills` |\n\n### Flags\n\n| Flag | Meaning |\n| --- | --- |\n| `--cwd <dir>` | Repository to edit (default: process cwd) |\n| `--store <dir>` | Where review/repair artifacts are stored |\n| `--models <list>` | Comma-separated `provider/model` or `provider:family:model_id`, or a JSON array |\n| `--intent <text>` | Starting author or review intent |\n| `--depth quick\\|standard\\|paranoid` | Review depth |\n| `--focus general,security,...` | Review lenses: `general`, `stress`, `security`, `performance`, `reliability` |\n| `--base <ref>` | Review against a git base ref (not a checkout) |\n| `--voice` | Start the author session in voice mode |\n| `--json` | Print the session envelope on stdout even on a TTY |\n| `--port <n>` | Loopback port for `critique-code web` (`0` = ephemeral) |\n| `--anywhere` | For `remote`: publish an outbound `cloudflared` or `ngrok` URL. Still this laptop. |\n| `--slack` / `--telegram` | Attach those portals to `web` / `remote` |\n| `-h` / `help` | Help |\n\n`critique-code review` is read-only. Use `critique-code repair <review-run-id>` for explicit repair. `--repair apply` on `review` is rejected.\n\n## Interactive commands\n\nType `/` or `/help` for a selectable picker. **Lines that start with `/` never go to the model.**\n\n| Command | Effect |\n| --- | --- |\n| `/` `/help` | Picker / help |\n| `/login` | Connect Critique Inference in the browser |\n| `/remote` | Pair a phone; this laptop stays the agent |\n| `/slack` | Attach Slack Socket Mode |\n| `/telegram` | Attach a Telegram bot |\n| `/voice` | Record one spoken prompt (Qwen3 ASR) |\n| `/voice on` | Keep listening after each reply |\n| `/voice off` | Return to the keyboard |\n| `/goal <objective>` | Set one durable author objective; include the intended end state and proof loop |\n| `/goal` / `/goal status` | Show the objective, lifecycle, and latest native review state |\n| `/goal edit <objective>` | Change and resume the current objective |\n| `/goal pause` / `/goal resume` / `/goal clear` | Control or remove the durable objective |\n| `/review` | Evidence harness since the last review checkpoint |\n| `/review all` | Evidence harness on the current tree even if unchanged |\n| `/critique` | Spawn the Critique CLI sidecar (`critique review --json`) |\n| `/critique finish` | Sidecar `finish --repair pack`; apply stays an explicit slash |\n| `/repair` | Verified repair of promoted findings |\n| `/ship` | Review, then end if the controller allows |\n| `/settings` | Keys, route, models |\n| `/models` | Pick author/review model |\n| `/keys` | Store BYOK keys |\n| `/skills` | List built-in and imported skills |\n| `/done` | End after a review |\n| `/exit` | Leave |\n\nSpoken `review`, `repair`, `ship`, and `exit` match the typed commands when voice is on. An empty clip after `/voice on` returns to the keyboard.\n\nUnknown `/foo` is rejected in the TUI. It is not forwarded as chat.\n\n### Durable goals\n\n`/goal` keeps one controller-owned objective with the resumable author session; it is restored after a process restart without retaining the raw author transcript. An active goal autonomously takes bounded checkpoint turns until it pauses, requests final verification, or becomes genuinely blocked. Every eight autonomous turns, CritiqueCode compacts the author context and opens a fresh author kernel with the durable task, live workspace state, controller evidence, and the active goal—so a long run does not depend on an ever-growing transcript. There is no implicit one-day ceiling for an interactive goal.\n\nThe author cannot mark a goal complete. It can only request final verification through `critique_goal`; the controller then runs validation and native `/review` on the current workspace. A qualifying clean result records the goal as complete; an unresolved completion decision records it as blocked. Pausing a goal preserves it but stops autonomous turns and goal injection.\n\n## Voice mode\n\nTalk to the author and the reviewer. `/voice` records one clip (Enter to stop). `/voice on` keeps listening after each reply. `/voice off` returns to the keyboard. `critique-code --voice` starts already listening.\n\nTranscription uses **Qwen3 ASR 0.6B** (`qwen/qwen3-asr-0.6b`) on Critique Inference, billed at **$0.000003 per second** of audio. An OpenRouter key works if you are not on Inference. The recorder is bundled `ffmpeg-static`; you do not need a system `sox` or `ffmpeg` install.\n\nNeeds a microphone and an interactive TTY. Voice is dictation in. Replies stay on screen. Docs: [CritiqueCode voice mode](https://critique.sh/docs/platform/critique-code).\n\n## Skills\n\nBuilt-in author skills cover **code review**, **Critique `/review`**, and **TDD**. Sessions also load `SKILL.md` from Claude Code, Codex, Cursor, OpenCode, and Agents folders in the repo and your home directory. No export step required. Built-in names win on collision. `critique-code import-skills` copies them into `~/.critique/code/skills`.\n\n## Models and billing\n\n### Default: Critique Inference\n\nAfter `critique-code login` or a `crt_` / `CRITIQUE_API_KEY`, the default route is **Critique Inference** and the default model is **`critique/auto`**.\n\n`critique/auto` is a session coding selector over Critique-resold models: efficient specialists first, sticky while the loop is healthy, one escalate onto a frontier rung if tools keep failing. It does not search the full OpenRouter catalogue.\n\nManaged Inference traffic bills **raw USD**:\n\n```text\ninputUsd  = (prompt_tokens      / 1_000_000) × input_rate_per_M\noutputUsd = (completion_tokens  / 1_000_000) × output_rate_per_M\n```\n\nThat spend does **not** consume the PR review credit pool. Rate cards and `critique/auto` live on [critique.sh/inference-api](https://critique.sh/inference-api).\n\nVoice transcription uses Qwen3 ASR 0.6B (`POST /api/v1/audio/transcriptions`) at **$0.000003 per second** of audio.\n\n### Bring your own key\n\n`/keys` and environment variables still accept other providers. If Critique Inference is connected, it stays the default until you change the route in `/settings`.\n\n| Provider | Environment |\n| --- | --- |\n| Critique Inference | `CRITIQUE_API_KEY` or `CRITIQUE_INFERENCE_API_KEY` |\n| OpenRouter | `OPENROUTER_API_KEY` |\n| OpenAI | `OPENAI_API_KEY` |\n| Anthropic | `ANTHROPIC_API_KEY` or `ANTHROPIC_AUTH_TOKEN` |\n| Google Gemini | `GEMINI_API_KEY` or `GOOGLE_API_KEY` |\n| xAI | `XAI_API_KEY` |\n| Groq | `GROQ_API_KEY` |\n| DeepSeek | `DEEPSEEK_API_KEY` |\n| LLM Gateway | `LLM_GATEWAY_API_KEY` or `LLMGATEWAY_API_KEY` |\n| Vercel AI Gateway | `AI_GATEWAY_API_KEY` |\n| Custom OpenAI-compatible | `CUSTOM_OPENAI_API_KEY` plus base URL in settings |\n\nOpenRouter default when that route is selected: `deepseek/deepseek-v4-flash-0731`.\n\nOpenRouter Activity attributes CritiqueCode traffic to **critique.sh** (`HTTP-Referer: https://critique.sh`, title `critique.sh`), not to the underlying agent kernel.\n\nAlso:\n\n- `CRITIQUE_CODE_HOME` — override `~/.critique/code`\n- `CRITIQUE_CODE_MODELS` — same model list syntax as `--models`\n- `CRITIQUE_INFERENCE_BASE_URL` — override `https://critique.sh/api/v1`\n- `CRITIQUE_SITE_URL` — site origin for device login (default derived from the inference URL)\n- `CRITIQUE_CODE_PI_DRIVER=off` — disable the live author kernel (sessions stay `kernel_required`)\n- `SLACK_BOT_TOKEN` + `SLACK_APP_TOKEN` — Slack Socket Mode (outbound). Optional `CRITIQUE_CODE_PORTAL_USERS`\n- `TELEGRAM_BOT_TOKEN` — Telegram long poll (outbound). Optional `CRITIQUE_CODE_PORTAL_CHATS`\n- `CRITIQUE_CODE_PORTAL_SECRET` — shared secret for `POST /api/portal/inbound` from other portals\n- `CRITIQUE_CODE_TUNNEL` — prefer `cloudflared` or `ngrok` for `--anywhere`\n\n## Remote phone and portals\n\nThe agent is this process on this laptop. Phone, Slack, Telegram, and the website are remotes. They are not Critique Cloud.\n\n1. Leave the machine awake with the session running.\n2. Same Wi-Fi: `critique-code remote`, open the LAN URL on the phone, enter the PIN from the terminal.\n3. Anywhere: DM the Slack or Telegram bot (`critique-code slack` / `critique-code telegram` / `--slack`). Those open outbound sockets. No inbound port.\n4. Website: `critique-code connect CODE` after `critique-code login` claims the PC from [critique.sh/connect](https://critique.sh/connect). The site relays prompts and approvals; the kernel stays here.\n5. Optional `--anywhere` uses **your** `cloudflared` or `ngrok`. The tunnel is a pipe. Writes still happen in this working tree.\n\nSlack Socket Mode needs `SLACK_BOT_TOKEN` (`xoxb-`) and `SLACK_APP_TOKEN` (`xapp-`) with message events. Telegram needs `TELEGRAM_BOT_TOKEN`. Optional allowlists: `CRITIQUE_CODE_PORTAL_USERS`, `CRITIQUE_CODE_PORTAL_CHATS`.\n\nFrom an already-open TTY: `/remote`, `/slack`, `/telegram`.\n\n## Files on disk\n\nNothing secret is written into the repository.\n\n| Path | Contents |\n| --- | --- |\n| `~/.critique/code/auth.json` | Stored API keys (mode `0600`) |\n| `~/.critique/code/settings.json` | Route and model selection |\n| `~/.critique/code/portals.json` | Slack / Telegram / webhook portal tokens (mode `0600`) |\n| Review/repair store | Outcomes and repair artifacts (`--store` or the default store root) |\n\nProject `REVIEW_GUIDELINES.md` is loaded as a review constraint. `AGENTS.md`, `CRITIQUE.md`, and `CLAUDE.md` can seed author instructions.\n\n## Safety\n\n- The model cannot pick a working directory, open a network path, or run a process on its own.\n- `critique_run` is the only workspace exec path. You approve or deny each call; networked commands require an enforced controller sandbox and are disabled by default. Output is not Evidence.\n- Promotion of findings stays on `/review` and `/ship`.\n- Named checks are controller-owned. Author check output is not Evidence.\n- `none_promoted` is not a proof that the tree is correct.\n\n## Exit codes\n\n| Code | Meaning |\n| --- | --- |\n| `0` | OK |\n| `2` | Usage error |\n| `3` | `kernel_required` (no live driver and/or no model route) |\n| `4` | Blocked (review/repair ineligible, stale capsule, …) |\n| `5` | Infrastructure error |\n\n## Runtime\n\nThe live author kernel installs automatically with the package and runs in this process. Default models go through **Critique Inference** after `critique-code login`. An OpenRouter key is optional BYOK for power models outside Inference.\n\nIf the optional kernel dependency failed to install, reinstall the package. Set `CRITIQUE_CODE_PI_DRIVER=off` only when you want to disable the kernel on purpose.\n\n## License\n\nMIT\n\n## Links\n\n- npm: https://www.npmjs.com/package/@critiquedotsh/harness\n- Docs: https://critique.sh/docs/platform/critique-code\n- Inference API: https://critique.sh/inference-api\n- Issues: https://github.com/repath500/critique/issues\n- Sidecar CLI: https://www.npmjs.com/package/@critiquedotsh/cli\n","readmeFilename":"README.md"}