{"_id":"@boldblackai/harness","_rev":"19-630780b292c001d6ecb8e501ed3fa591","name":"@boldblackai/harness","dist-tags":{"latest":"1.10.3"},"versions":{"1.8.5":{"name":"@boldblackai/harness","version":"1.8.5","license":"MIT","_id":"@boldblackai/harness@1.8.5","maintainers":[{"name":"boldblack","email":"npm@boldblack.ai"},{"name":"capotej","email":"jcapote@gmail.com"}],"homepage":"https://github.com/boldblackai/harness#readme","bugs":{"url":"https://github.com/boldblackai/harness/issues"},"bin":{"harness":"bin/harness.js"},"dist":{"shasum":"cbcd92ed85e01889d6bf466c7b22ed740856d9fd","tarball":"https://registry.npmjs.org/@boldblackai/harness/-/harness-1.8.5.tgz","fileCount":6,"integrity":"sha512-UL+rfLa/Wp07OOXdA6Z9tSJwE1GnTxuvyyQG6hRTeBUFsEbcPl08XJB1K1OpyioAEqfUbn1RQZrkSkizw44S+g==","signatures":[{"sig":"MEUCIQCJZqIYikkJTKbeP4CXIGmwU/LP3aDBqiHp4O7ZKnOoHgIgI7E4QXsKTpJIX+NhwwkOHnbjQ7ALv1oJtfud7nIBeYw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37254},"gitHead":"1655da387220b0e9d427493cc0352d9926053d9a","scripts":{"lint":"pnpm lint:ts && pnpm lint:md && pnpm lint:sh && pnpm lint:docker && pnpm lint:actions","build":"tsc && cp -r src/seccomp-profiles bin/seccomp-profiles","format":"biome format --write .","lint:md":"markdownlint-cli2 \"**/*.md\" \"#node_modules\"","lint:sh":"shellcheck entrypoint.sh entrypoint-opencode.sh entrypoint-hermes.sh","lint:ts":"biome check .","prepare":"tsc","test:e2e":"node --test tests/e2e/cli.test.mjs","lint:docker":"hadolint Dockerfile Dockerfile.opencode Dockerfile.hermes","lint:actions":"actionlint","test:e2e:cli":"node --test tests/e2e/cli.test.mjs","test:coverage":"node --experimental-test-coverage --test-coverage-include=\"src/**\" --test-coverage-lines=80 --test-coverage-functions=80 --test-coverage-branches=80 tests/e2e/cli.test.mjs"},"_npmUser":{"name":"capotej","email":"jcapote@gmail.com"},"repository":{"url":"git+https://github.com/boldblackai/harness.git","type":"git"},"_npmVersion":"11.12.1","description":"Portable environment for running coding agents in a container","directories":{},"_nodeVersion":"26.0.0","dependencies":{"minimist":"^1.2.8"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.2","devDependencies":{"typescript":"^6.0.2","@types/node":"^25.6.0","@biomejs/biome":"1.9.4","@types/minimist":"^1.2.5","markdownlint-cli2":"0.17.2"},"_npmOperationalInternal":{"tmp":"tmp/harness_1.8.5_1781881063506_0.5973350653115306","host":"s3://npm-registry-packages-npm-production"}},"1.8.6":{"name":"@boldblackai/harness","version":"1.8.6","license":"MIT","_id":"@boldblackai/harness@1.8.6","maintainers":[{"name":"boldblack","email":"npm@boldblack.ai"},{"name":"ecanals","email":"enriquecanals@gmail.com"},{"name":"capotej","email":"jcapote@gmail.com"}],"homepage":"https://github.com/boldblackai/harness#readme","bugs":{"url":"https://github.com/boldblackai/harness/issues"},"bin":{"harness":"bin/harness.js"},"dist":{"shasum":"33bbe4d60fee7b3a011c9e3fc9fffc5b48e66524","tarball":"https://registry.npmjs.org/@boldblackai/harness/-/harness-1.8.6.tgz","fileCount":7,"integrity":"sha512-t1sIHaTvdopfJJD+uJUlUSICbNQXAIcVWBtS73O24XH3K2QUwXdxeERIak1tYco6R1wek6gQuLXzEZtvBl1tig==","signatures":[{"sig":"MEQCIGttvC8MA9RI/1PLs1YGoPXZWcE0OAWz8m9nmSje78G2AiBZSNfsGuU1TjP5NbwZ4AoX5o5XCWam177lIvjiRmH7PA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37466},"gitHead":"134c411ce36d345da3882f2d006df226ccb07f98","scripts":{"lint":"pnpm lint:ts && pnpm lint:md && pnpm lint:sh && pnpm lint:docker && pnpm lint:actions","build":"tsc && cp -r src/seccomp-profiles bin/seccomp-profiles","format":"biome format --write .","lint:md":"markdownlint-cli2 \"**/*.md\" \"#node_modules\"","lint:sh":"shellcheck setup-env.sh entrypoint.sh entrypoint-opencode.sh entrypoint-hermes.sh","lint:ts":"biome check .","prepare":"tsc","test:e2e":"node --test tests/e2e/cli.test.mjs","lint:docker":"hadolint Dockerfile Dockerfile.opencode Dockerfile.hermes","lint:actions":"actionlint","test:e2e:cli":"node --test tests/e2e/cli.test.mjs","test:coverage":"node --experimental-test-coverage --test-coverage-include=\"src/**\" --test-coverage-lines=80 --test-coverage-functions=80 --test-coverage-branches=80 tests/e2e/cli.test.mjs"},"_npmUser":{"name":"capotej","email":"jcapote@gmail.com"},"repository":{"url":"git+https://github.com/boldblackai/harness.git","type":"git"},"_npmVersion":"11.12.1","description":"Portable environment for running coding agents in a container","directories":{},"_nodeVersion":"26.0.0","dependencies":{"minimist":"^1.2.8"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.2","devDependencies":{"typescript":"^6.0.2","@types/node":"^25.6.0","@biomejs/biome":"1.9.4","@types/minimist":"^1.2.5","markdownlint-cli2":"0.17.2"},"_npmOperationalInternal":{"tmp":"tmp/harness_1.8.6_1781968049312_0.34416684776213224","host":"s3://npm-registry-packages-npm-production"}},"1.9.0":{"name":"@boldblackai/harness","version":"1.9.0","license":"MIT","_id":"@boldblackai/harness@1.9.0","maintainers":[{"name":"boldblack","email":"npm@boldblack.ai"},{"name":"ecanals","email":"enriquecanals@gmail.com"},{"name":"capotej","email":"jcapote@gmail.com"}],"homepage":"https://github.com/boldblackai/harness#readme","bugs":{"url":"https://github.com/boldblackai/harness/issues"},"bin":{"harness":"bin/harness.js"},"dist":{"shasum":"eb7273f2410158269151f7c2d1aaee47ea5230b2","tarball":"https://registry.npmjs.org/@boldblackai/harness/-/harness-1.9.0.tgz","fileCount":7,"integrity":"sha512-CnNEMe32YSHSyE1fBJ5qvbkivq5kpcVim+ncbHyz1UnG543+3JKcqTIT8iHVbCaGa99nx53X1y3BsYJQSCGRhA==","signatures":[{"sig":"MEQCIAaWYM2zmnwVbfKxMZm8i4vrNLokiMAEzfSv56y9+QuSAiBHG4LXnhqXUravxn/fwG3HuWnMvrVcRuKQUHceJG/8MQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44595},"gitHead":"a1cd650d86bdb1878e075c291502f1c21d1fb9df","scripts":{"lint":"pnpm lint:ts && pnpm lint:md && pnpm lint:sh && pnpm lint:docker && pnpm lint:actions","build":"tsc && cp -r src/seccomp-profiles bin/seccomp-profiles","format":"biome format --write .","lint:md":"markdownlint-cli2 \"**/*.md\" \"#node_modules\"","lint:sh":"shellcheck setup-env.sh entrypoint.sh entrypoint-opencode.sh entrypoint-hermes.sh","lint:ts":"biome check .","prepare":"tsc","test:e2e":"node --test tests/e2e/cli.test.mjs","lint:docker":"hadolint Dockerfile Dockerfile.opencode Dockerfile.hermes","lint:actions":"actionlint","test:e2e:cli":"node --test tests/e2e/cli.test.mjs","test:coverage":"node --experimental-test-coverage --test-coverage-include=\"src/**\" --test-coverage-lines=80 --test-coverage-functions=80 --test-coverage-branches=80 tests/e2e/cli.test.mjs"},"_npmUser":{"name":"capotej","email":"jcapote@gmail.com"},"repository":{"url":"git+https://github.com/boldblackai/harness.git","type":"git"},"_npmVersion":"11.12.1","description":"Portable environment for running coding agents in a container","directories":{},"_nodeVersion":"26.0.0","dependencies":{"minimist":"^1.2.8"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.2","devDependencies":{"typescript":"^6.0.2","@types/node":"^25.6.0","@biomejs/biome":"1.9.4","@types/minimist":"^1.2.5","markdownlint-cli2":"0.17.2"},"_npmOperationalInternal":{"tmp":"tmp/harness_1.9.0_1781985967642_0.15393284029406695","host":"s3://npm-registry-packages-npm-production"}},"1.9.1":{"name":"@boldblackai/harness","version":"1.9.1","license":"MIT","_id":"@boldblackai/harness@1.9.1","maintainers":[{"name":"boldblack","email":"npm@boldblack.ai"},{"name":"ecanals","email":"enriquecanals@gmail.com"},{"name":"capotej","email":"jcapote@gmail.com"}],"homepage":"https://github.com/boldblackai/harness#readme","bugs":{"url":"https://github.com/boldblackai/harness/issues"},"bin":{"harness":"bin/harness.js"},"dist":{"shasum":"784361843ee508bb6c5d026ddc1b8a3fee3bec56","tarball":"https://registry.npmjs.org/@boldblackai/harness/-/harness-1.9.1.tgz","fileCount":7,"integrity":"sha512-wa2Of58y0Ta++je3TSccJiuqBsymdBp4xn/22Mz1vZHQ69Cpttha9/lcCLQ+t2xhVwjtA22nqqgh+dDmHMlKHQ==","signatures":[{"sig":"MEUCIH9BYOIjCIO6gqIZRNwVnINysF+nuSA3CpTcfQXeuqEGAiEA2eP0DcjxrHy/UX8ChtpVsymtfkYmDeUhXUqmEFkqru8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45857},"gitHead":"29d41af946c9e605bf3088304c63b244fec3960d","scripts":{"lint":"pnpm lint:ts && pnpm lint:md && pnpm lint:sh && pnpm lint:docker && pnpm lint:actions","build":"tsc && cp -r src/seccomp-profiles bin/seccomp-profiles","format":"biome format --write .","lint:md":"markdownlint-cli2 \"**/*.md\" \"#node_modules\"","lint:sh":"shellcheck setup-env.sh entrypoint.sh entrypoint-opencode.sh entrypoint-hermes.sh","lint:ts":"biome check .","prepare":"tsc","test:e2e":"node --test tests/e2e/*.test.mjs","lint:docker":"hadolint Dockerfile Dockerfile.opencode Dockerfile.hermes","lint:actions":"actionlint","test:e2e:cli":"node --test tests/e2e/*.test.mjs","test:coverage":"node --experimental-test-coverage --test-coverage-include=\"src/**\" --test-coverage-lines=80 --test-coverage-functions=80 --test-coverage-branches=80 tests/e2e/*.test.mjs"},"_npmUser":{"name":"capotej","email":"jcapote@gmail.com"},"repository":{"url":"git+https://github.com/boldblackai/harness.git","type":"git"},"_npmVersion":"11.12.1","description":"Portable environment for running coding agents in a container","directories":{},"_nodeVersion":"26.0.0","dependencies":{"minimist":"^1.2.8"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.2","devDependencies":{"typescript":"^6.0.2","@types/node":"^25.6.0","@biomejs/biome":"1.9.4","@types/minimist":"^1.2.5","markdownlint-cli2":"0.17.2"},"_npmOperationalInternal":{"tmp":"tmp/harness_1.9.1_1782570567155_0.6478120179110654","host":"s3://npm-registry-packages-npm-production"}},"1.9.2":{"name":"@boldblackai/harness","version":"1.9.2","license":"MIT","_id":"@boldblackai/harness@1.9.2","maintainers":[{"name":"boldblack","email":"npm@boldblack.ai"},{"name":"ecanals","email":"enriquecanals@gmail.com"},{"name":"capotej","email":"jcapote@gmail.com"}],"homepage":"https://github.com/boldblackai/harness#readme","bugs":{"url":"https://github.com/boldblackai/harness/issues"},"bin":{"harness":"bin/harness.js"},"dist":{"shasum":"eb346bce3ae1883ea806f14b39d7026fdcbcd227","tarball":"https://registry.npmjs.org/@boldblackai/harness/-/harness-1.9.2.tgz","fileCount":7,"integrity":"sha512-6376xHPe7F++xZrfpw4xBJTpooAX8/xCqNeXMdXIBK3Ink9LHcOQQSuIC2uNcrD1rFswTu7HF8OI3lt1Nt94cg==","signatures":[{"sig":"MEUCIEbvPM4HhOxV1rvdAb+y4BlwR1B0yoxqM4ya7phJ16jtAiEA+eXPDAxvWH/jOGgTCWYIyvmDu1dR+KYzBTZoMMkI2ZM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47540},"gitHead":"0aebb5695da840e54d230d1c4aa79c0a8ea9e862","scripts":{"lint":"pnpm lint:ts && pnpm lint:md && pnpm lint:sh && pnpm lint:docker && pnpm lint:actions","build":"tsc && cp -r src/seccomp-profiles bin/seccomp-profiles","format":"biome format --write .","lint:md":"markdownlint-cli2 \"**/*.md\" \"#node_modules\"","lint:sh":"shellcheck setup-env.sh entrypoint.sh entrypoint-opencode.sh entrypoint-hermes.sh","lint:ts":"biome check .","prepare":"tsc","test:e2e":"node --test tests/e2e/*.test.mjs","lint:docker":"hadolint Dockerfile Dockerfile.opencode Dockerfile.hermes","lint:actions":"actionlint","test:e2e:cli":"node --test tests/e2e/*.test.mjs","test:coverage":"node --experimental-test-coverage --test-coverage-include=\"src/**\" --test-coverage-lines=80 --test-coverage-functions=80 --test-coverage-branches=80 tests/e2e/*.test.mjs"},"_npmUser":{"name":"capotej","email":"jcapote@gmail.com"},"repository":{"url":"git+https://github.com/boldblackai/harness.git","type":"git"},"_npmVersion":"11.12.1","description":"Portable environment for running coding agents in a container","directories":{},"_nodeVersion":"26.0.0","dependencies":{"minimist":"^1.2.8"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.2","devDependencies":{"typescript":"^6.0.2","@types/node":"^25.6.0","@biomejs/biome":"1.9.4","@types/minimist":"^1.2.5","markdownlint-cli2":"0.17.2"},"_npmOperationalInternal":{"tmp":"tmp/harness_1.9.2_1784402209614_0.4502089588703322","host":"s3://npm-registry-packages-npm-production"}},"1.9.3":{"name":"@boldblackai/harness","version":"1.9.3","license":"MIT","_id":"@boldblackai/harness@1.9.3","maintainers":[{"name":"boldblack","email":"npm@boldblack.ai"},{"name":"ecanals","email":"enriquecanals@gmail.com"},{"name":"capotej","email":"jcapote@gmail.com"}],"homepage":"https://github.com/boldblackai/harness#readme","bugs":{"url":"https://github.com/boldblackai/harness/issues"},"bin":{"harness":"bin/harness.js"},"dist":{"shasum":"5eb065d03f08c1a701852d11b9fc9862b818095a","tarball":"https://registry.npmjs.org/@boldblackai/harness/-/harness-1.9.3.tgz","fileCount":7,"integrity":"sha512-dbdy2pXemZaC8nUd34Yn30lvxuLsVLcSrMJFBAICLEhZwuSvAK6SsAh0ygzkm7+iR//bQWWDVwCEKNEeJilHbg==","signatures":[{"sig":"MEUCIQDvt3TBfFHTMBlMWD08AcQxKFEGCBPkLFDCt/1GpDGBIwIgR5sJu8qG/tcISbVzTKNO635Dhw779kDbfZWSEZpUr4Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47540},"gitHead":"748e5eb622655c23611c0eecb32fa8b7c7011984","scripts":{"lint":"pnpm lint:ts && pnpm lint:md && pnpm lint:sh && pnpm lint:docker && pnpm lint:actions","build":"tsc && cp -r src/seccomp-profiles bin/seccomp-profiles","format":"biome format --write .","lint:md":"markdownlint-cli2 \"**/*.md\" \"#node_modules\"","lint:sh":"shellcheck setup-env.sh entrypoint.sh entrypoint-opencode.sh entrypoint-hermes.sh","lint:ts":"biome check .","prepare":"tsc","test:e2e":"node --test tests/e2e/*.test.mjs","lint:docker":"hadolint Dockerfile Dockerfile.opencode Dockerfile.hermes","lint:actions":"actionlint","test:e2e:cli":"node --test tests/e2e/*.test.mjs","test:coverage":"node --experimental-test-coverage --test-coverage-include=\"src/**\" --test-coverage-lines=80 --test-coverage-functions=80 --test-coverage-branches=80 tests/e2e/*.test.mjs"},"_npmUser":{"name":"capotej","email":"jcapote@gmail.com"},"repository":{"url":"git+https://github.com/boldblackai/harness.git","type":"git"},"_npmVersion":"11.12.1","description":"Portable environment for running coding agents in a container","directories":{},"_nodeVersion":"26.0.0","dependencies":{"minimist":"^1.2.8"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.33.2","devDependencies":{"typescript":"^6.0.2","@types/node":"^25.6.0","@biomejs/biome":"1.9.4","@types/minimist":"^1.2.5","markdownlint-cli2":"0.17.2"},"_npmOperationalInternal":{"tmp":"tmp/harness_1.9.3_1785260287574_0.2911394983730271","host":"s3://npm-registry-packages-npm-production"}},"1.9.4":{"name":"@boldblackai/harness","version":"1.9.4","license":"MIT","_id":"@boldblackai/harness@1.9.4","maintainers":[{"name":"boldblack","email":"npm@boldblack.ai"},{"name":"ecanals","email":"enriquecanals@gmail.com"},{"name":"capotej","email":"jcapote@gmail.com"}],"homepage":"https://github.com/boldblackai/harness#readme","bugs":{"url":"https://github.com/boldblackai/harness/issues"},"bin":{"harness":"bin/harness.js"},"dist":{"shasum":"d8b08b0416f25d8ba8a876f4abf5a34d323d78e9","tarball":"https://registry.npmjs.org/@boldblackai/harness/-/harness-1.9.4.tgz","fileCount":7,"integrity":"sha512-4IYSNTuY0k/Ui1JX7QZjprD4QEdMlro4O7wlTKLGGQyKHoLLmkY7jRn2LLSOdlou+5iU0uO1pYKCA1aQQi+t2g==","signatures":[{"sig":"MEUCIEovaI38x9NyRVUGGdV6qgWdByUiIgsITL+1QWh/U1/YAiEAhKZKy2G75PcQW5DQ96tdkQaYUemnQH8WJhByz8FDSto=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47540},"gitHead":"e1f2d3d48f087ec7bb14770590e11b2ba6f11d10","scripts":{"lint":"pnpm lint:ts && pnpm lint:md && pnpm lint:sh && pnpm lint:docker && pnpm lint:actions","build":"tsc && cp -r src/seccomp-profiles bin/seccomp-profiles","format":"biome format --write .","lint:md":"markdownlint-cli2 \"**/*.md\" \"#node_modules\"","lint:sh":"shellcheck setup-env.sh entrypoint.sh entrypoint-opencode.sh entrypoint-hermes.sh","lint:ts":"biome check .","prepare":"tsc","test:e2e":"node --test tests/e2e/*.test.mjs","lint:docker":"hadolint Dockerfile Dockerfile.opencode Dockerfile.hermes","lint:actions":"actionlint","test:e2e:cli":"node --test tests/e2e/*.test.mjs","test:coverage":"node --experimental-test-coverage --test-coverage-include=\"src/**\" --test-coverage-lines=80 --test-coverage-functions=80 --test-coverage-branches=80 tests/e2e/*.test.mjs"},"_npmUser":{"name":"capotej","email":"jcapote@gmail.com"},"repository":{"url":"git+https://github.com/boldblackai/harness.git","type":"git"},"_npmVersion":"11.12.1","description":"Portable environment for running coding agents in a container","directories":{},"_nodeVersion":"26.0.0","dependencies":{"minimist":"^1.2.8"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.34.5","devDependencies":{"typescript":"^6.0.2","@types/node":"^25.6.0","@biomejs/biome":"1.9.4","@types/minimist":"^1.2.5","markdownlint-cli2":"0.17.2"},"_npmOperationalInternal":{"tmp":"tmp/harness_1.9.4_1785514233085_0.5180361636941984","host":"s3://npm-registry-packages-npm-production"}},"1.9.7":{"name":"@boldblackai/harness","version":"1.9.7","license":"MIT","_id":"@boldblackai/harness@1.9.7","maintainers":[{"name":"boldblack","email":"npm@boldblack.ai"},{"name":"ecanals","email":"enriquecanals@gmail.com"},{"name":"capotej","email":"jcapote@gmail.com"}],"homepage":"https://github.com/boldblackai/harness#readme","bugs":{"url":"https://github.com/boldblackai/harness/issues"},"bin":{"harness":"bin/harness.js"},"dist":{"shasum":"7d639d8713c3061509315ac0af93c17d8729c809","tarball":"https://registry.npmjs.org/@boldblackai/harness/-/harness-1.9.7.tgz","fileCount":6,"integrity":"sha512-jajx6yMUyQjfI1QFbuuf2ncr5ajsGGvqefrJuUmvY2+nKLiv8pJdJ063cfacthEjkJI4PAvKRKGS5naXGyrK5g==","signatures":[{"sig":"MEYCIQDsWBfLUzgBxnhez3B685BW+x5gvFUInYo024C336XlMgIhALN7ZAqeH4MK3NXh9nyoUCRgFrivyNEhZxe3PM/IHsPQ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@boldblackai%2fharness@1.9.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":47145},"gitHead":"e7d498800902c140e675fc8c10fbbcf1ff9f1b6b","scripts":{"lint":"pnpm lint:ts && pnpm lint:md && pnpm lint:sh && pnpm lint:docker && pnpm lint:actions","build":"tsc && cp -r src/seccomp-profiles bin/seccomp-profiles","format":"biome format --write .","lint:md":"markdownlint-cli2 \"**/*.md\" \"#node_modules\"","lint:sh":"shellcheck setup-env.sh entrypoint.sh entrypoint-opencode.sh entrypoint-hermes.sh","lint:ts":"biome check .","prepare":"tsc","test:e2e":"node --test tests/e2e/*.test.mjs","lint:docker":"hadolint Dockerfile Dockerfile.opencode Dockerfile.hermes","lint:actions":"actionlint","test:e2e:cli":"node --test tests/e2e/*.test.mjs","test:coverage":"node --experimental-test-coverage --test-coverage-include=\"src/**\" --test-coverage-lines=80 --test-coverage-functions=80 --test-coverage-branches=80 tests/e2e/*.test.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b2b5d2b6-b5ed-403c-b1dc-e91401ac2e18"}},"repository":{"url":"git+https://github.com/boldblackai/harness.git","type":"git"},"_npmVersion":"12.0.2","description":"Portable environment for running coding agents in a container","directories":{},"_nodeVersion":"24.18.0","dependencies":{"minimist":"^1.2.8"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.34.5","devDependencies":{"typescript":"^6.0.2","@types/node":"^25.6.0","@biomejs/biome":"1.9.4","@types/minimist":"^1.2.5","markdownlint-cli2":"0.17.2"},"_npmOperationalInternal":{"tmp":"tmp/harness_1.9.7_1785610725624_0.680326758571905","host":"s3://npm-registry-packages-npm-production"}},"1.9.8":{"name":"@boldblackai/harness","version":"1.9.8","license":"MIT","_id":"@boldblackai/harness@1.9.8","maintainers":[{"name":"boldblack","email":"npm@boldblack.ai"},{"name":"ecanals","email":"enriquecanals@gmail.com"},{"name":"capotej","email":"jcapote@gmail.com"}],"homepage":"https://github.com/boldblackai/harness#readme","bugs":{"url":"https://github.com/boldblackai/harness/issues"},"bin":{"harness":"bin/harness.js"},"dist":{"shasum":"f68980b529104395290472e197d56e306cebf6f9","tarball":"https://registry.npmjs.org/@boldblackai/harness/-/harness-1.9.8.tgz","fileCount":6,"integrity":"sha512-KJ0VaSX09CeM2+Xy5fCoJT/JK3KLhAOGTwYJXE4C25GOG6esAUlBcYmji9kPzFEaey0viiIth4VXbA38EatNhA==","signatures":[{"sig":"MEQCIDGH99EjJZfcjd4rvLCc/Dff9VYlB5wAOyaCAQZwiMwXAiBrQBQV/xI6Ry/whCIvMjR4kRTTOrymuUUle2ZZB3Ntww==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@boldblackai%2fharness@1.9.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":47145},"gitHead":"355a9db10489a378ed028eb7b047c69f5a640eac","scripts":{"lint":"pnpm lint:ts && pnpm lint:md && pnpm lint:sh && pnpm lint:docker && pnpm lint:actions","build":"tsc && cp -r src/seccomp-profiles bin/seccomp-profiles","format":"biome format --write .","lint:md":"markdownlint-cli2 \"**/*.md\" \"#node_modules\"","lint:sh":"shellcheck setup-env.sh entrypoint.sh entrypoint-opencode.sh entrypoint-hermes.sh","lint:ts":"biome check .","prepare":"tsc","test:e2e":"node --test tests/e2e/*.test.mjs","lint:docker":"hadolint Dockerfile Dockerfile.opencode Dockerfile.hermes","lint:actions":"actionlint","test:e2e:cli":"node --test tests/e2e/*.test.mjs","test:coverage":"node --experimental-test-coverage --test-coverage-include=\"src/**\" --test-coverage-lines=80 --test-coverage-functions=80 --test-coverage-branches=80 tests/e2e/*.test.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b2b5d2b6-b5ed-403c-b1dc-e91401ac2e18"}},"repository":{"url":"git+https://github.com/boldblackai/harness.git","type":"git"},"_npmVersion":"12.0.2","description":"Portable environment for running coding agents in a container","directories":{},"_nodeVersion":"24.18.0","dependencies":{"minimist":"^1.2.8"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.34.5","devDependencies":{"typescript":"^6.0.2","@types/node":"^25.6.0","@biomejs/biome":"1.9.4","@types/minimist":"^1.2.5","markdownlint-cli2":"0.17.2"},"_npmOperationalInternal":{"tmp":"tmp/harness_1.9.8_1785622959182_0.9686402108668524","host":"s3://npm-registry-packages-npm-production"}},"1.9.9":{"name":"@boldblackai/harness","version":"1.9.9","license":"MIT","_id":"@boldblackai/harness@1.9.9","maintainers":[{"name":"boldblack","email":"npm@boldblack.ai"},{"name":"ecanals","email":"enriquecanals@gmail.com"},{"name":"capotej","email":"jcapote@gmail.com"}],"homepage":"https://github.com/boldblackai/harness#readme","bugs":{"url":"https://github.com/boldblackai/harness/issues"},"bin":{"harness":"bin/harness.js"},"dist":{"shasum":"28dd1d4f206d47230932e07f5bb45e63ebafe1fe","tarball":"https://registry.npmjs.org/@boldblackai/harness/-/harness-1.9.9.tgz","fileCount":6,"integrity":"sha512-1FC6HNi7GkScDRTi+MyS0kwlr1s3xy5dp2OxTImbSa69qRGofaq4AUJkl0fxyMxuVHxMAt/NV+gdPxtLxEux8A==","signatures":[{"sig":"MEUCIHrUzRVQ+zMgGy8FjsctkbqRqJAHlbH/oAVQJoqxN6yIAiEA3DnqnXf01yFjIK/LkJDKTufVtCm2TRL0O8oQoSZdDEg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@boldblackai%2fharness@1.9.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":47150},"gitHead":"83116419b58c842557744299886c3c3ddc06c2bb","scripts":{"lint":"pnpm lint:ts && pnpm lint:md && pnpm lint:sh && pnpm lint:docker && pnpm lint:actions","build":"tsc && cp -r src/seccomp-profiles bin/seccomp-profiles","format":"biome format --write .","lint:md":"markdownlint-cli2 \"**/*.md\" \"#node_modules\"","lint:sh":"shellcheck setup-env.sh entrypoint.sh entrypoint-opencode.sh entrypoint-hermes.sh","lint:ts":"biome check .","prepare":"tsc","test:e2e":"node --test tests/e2e/*.test.mjs","lint:docker":"hadolint Dockerfile Dockerfile.opencode Dockerfile.hermes","lint:actions":"actionlint","test:e2e:cli":"node --test tests/e2e/*.test.mjs","test:coverage":"node --experimental-test-coverage --test-coverage-include=\"src/**\" --test-coverage-lines=80 --test-coverage-functions=80 --test-coverage-branches=80 tests/e2e/*.test.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b2b5d2b6-b5ed-403c-b1dc-e91401ac2e18"}},"repository":{"url":"git+https://github.com/boldblackai/harness.git","type":"git"},"_npmVersion":"12.0.2","description":"Portable environment for running coding agents in a container","directories":{},"_nodeVersion":"24.18.0","dependencies":{"minimist":"^1.2.8"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.34.5","devDependencies":{"typescript":"^6.0.2","@types/node":"^25.6.0","@biomejs/biome":"1.9.4","@types/minimist":"^1.2.5","markdownlint-cli2":"0.17.2"},"_npmOperationalInternal":{"tmp":"tmp/harness_1.9.9_1785624683238_0.7689788376652307","host":"s3://npm-registry-packages-npm-production"}},"1.9.10":{"name":"@boldblackai/harness","version":"1.9.10","license":"MIT","_id":"@boldblackai/harness@1.9.10","maintainers":[{"name":"boldblack","email":"npm@boldblack.ai"},{"name":"ecanals","email":"enriquecanals@gmail.com"},{"name":"capotej","email":"jcapote@gmail.com"}],"homepage":"https://github.com/boldblackai/harness#readme","bugs":{"url":"https://github.com/boldblackai/harness/issues"},"bin":{"harness":"bin/harness.js"},"dist":{"shasum":"ed054462322cad407f5fd7b97359e43be845bc3b","tarball":"https://registry.npmjs.org/@boldblackai/harness/-/harness-1.9.10.tgz","fileCount":6,"integrity":"sha512-5KPBh2uXQmqnxfiNfnR/PR9+vP2gwjn0F3WsmJCGlHvSO8lWxoNkzIHnUUZgBPmRRnGS5a6Kfr7HJcKzkDgS1g==","signatures":[{"sig":"MEUCIEWnFHL7xKB4p0p1749wZxyWjY+y9MpIS56A0kn+S3YhAiEAqSZ9Njxq/hKes8RhzsKOWx+dqgvnOvnc4jCd0xsmFNk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@boldblackai%2fharness@1.9.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":47374},"gitHead":"44f288ee72835bf6d110d73931ccaad9f3b81b90","scripts":{"lint":"pnpm lint:ts && pnpm lint:md && pnpm lint:sh && pnpm lint:docker && pnpm lint:actions","build":"tsc && cp -r src/seccomp-profiles bin/seccomp-profiles","format":"biome format --write .","lint:md":"markdownlint-cli2 \"**/*.md\" \"#node_modules\"","lint:sh":"shellcheck setup-env.sh entrypoint.sh entrypoint-opencode.sh entrypoint-hermes.sh","lint:ts":"biome check .","prepare":"tsc","test:e2e":"node --test tests/e2e/*.test.mjs","lint:docker":"hadolint Dockerfile Dockerfile.opencode Dockerfile.hermes","lint:actions":"actionlint","test:e2e:cli":"node --test tests/e2e/*.test.mjs","test:coverage":"node --experimental-test-coverage --test-coverage-include=\"src/**\" --test-coverage-lines=80 --test-coverage-functions=80 --test-coverage-branches=80 tests/e2e/*.test.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b2b5d2b6-b5ed-403c-b1dc-e91401ac2e18"}},"repository":{"url":"git+https://github.com/boldblackai/harness.git","type":"git"},"_npmVersion":"12.0.2","description":"Portable environment for running coding agents in a container","directories":{},"_nodeVersion":"24.18.0","dependencies":{"minimist":"^1.2.8"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.34.5","devDependencies":{"typescript":"^6.0.2","@types/node":"^25.6.0","@biomejs/biome":"1.9.4","@types/minimist":"^1.2.5","markdownlint-cli2":"0.17.2"},"_npmOperationalInternal":{"tmp":"tmp/harness_1.9.10_1786362180033_0.6797311655975709","host":"s3://npm-registry-packages-npm-production"}},"1.9.11":{"name":"@boldblackai/harness","version":"1.9.11","license":"MIT","_id":"@boldblackai/harness@1.9.11","maintainers":[{"name":"boldblack","email":"npm@boldblack.ai"},{"name":"ecanals","email":"enriquecanals@gmail.com"},{"name":"capotej","email":"jcapote@gmail.com"}],"homepage":"https://github.com/boldblackai/harness#readme","bugs":{"url":"https://github.com/boldblackai/harness/issues"},"bin":{"harness":"bin/harness.js"},"dist":{"shasum":"168e0b3fc71167d6b547fe9fcd64165e452f77a2","tarball":"https://registry.npmjs.org/@boldblackai/harness/-/harness-1.9.11.tgz","fileCount":6,"integrity":"sha512-16ap8jPdIu7VEK1y0tEDAGUQ72Nv0twocGaT6qho8XQsxhBbLKK2Zmrc06ZG59eFARzEK/aRLeXFKendnOi9ZQ==","signatures":[{"sig":"MEYCIQC6vy7snh/rf5sVVhThUyznEkcGV9qy9/CGZcozeguPWwIhAOD7w3FS7Ld6+p08fjofZXqZx1D/mb+f6TiaIFl5D8wx","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@boldblackai%2fharness@1.9.11","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":47917},"gitHead":"b3c1c6b9ec626c16cdd36419a1a62ba8c096a347","scripts":{"lint":"pnpm lint:ts && pnpm lint:md && pnpm lint:sh && pnpm lint:docker && pnpm lint:actions","build":"tsc && cp -r src/seccomp-profiles bin/seccomp-profiles","format":"biome format --write .","lint:md":"markdownlint-cli2 \"**/*.md\" \"#node_modules\"","lint:sh":"shellcheck setup-env.sh entrypoint.sh entrypoint-opencode.sh entrypoint-hermes.sh","lint:ts":"biome check .","prepare":"tsc","test:e2e":"node --test tests/e2e/*.test.mjs","lint:docker":"hadolint Dockerfile Dockerfile.opencode Dockerfile.hermes","lint:actions":"actionlint","test:e2e:cli":"node --test tests/e2e/*.test.mjs","test:coverage":"node --experimental-test-coverage --test-coverage-include=\"src/**\" --test-coverage-lines=80 --test-coverage-functions=80 --test-coverage-branches=80 tests/e2e/*.test.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b2b5d2b6-b5ed-403c-b1dc-e91401ac2e18"}},"repository":{"url":"git+https://github.com/boldblackai/harness.git","type":"git"},"_npmVersion":"12.0.2","description":"Portable environment for running coding agents in a container","directories":{},"_nodeVersion":"24.19.0","dependencies":{"minimist":"^1.2.8"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.34.5","devDependencies":{"typescript":"^6.0.2","@types/node":"^25.6.0","@biomejs/biome":"1.9.4","@types/minimist":"^1.2.5","markdownlint-cli2":"0.17.2"},"_npmOperationalInternal":{"tmp":"tmp/harness_1.9.11_1786935641637_0.6242627669825853","host":"s3://npm-registry-packages-npm-production"}},"1.9.12":{"name":"@boldblackai/harness","version":"1.9.12","license":"MIT","_id":"@boldblackai/harness@1.9.12","maintainers":[{"name":"boldblack","email":"npm@boldblack.ai"},{"name":"ecanals","email":"enriquecanals@gmail.com"},{"name":"capotej","email":"jcapote@gmail.com"}],"homepage":"https://github.com/boldblackai/harness#readme","bugs":{"url":"https://github.com/boldblackai/harness/issues"},"bin":{"harness":"bin/harness.js"},"dist":{"shasum":"d9e7bd5de63c5e1abd0ee2a0f41dd93d7607e4fb","tarball":"https://registry.npmjs.org/@boldblackai/harness/-/harness-1.9.12.tgz","fileCount":6,"integrity":"sha512-18RFAmn+oRP64JId3qFksvXE1iCLXJVbD/fpxgpFmtnbc3/qV2dDYkA+7YNPdC06NOrtTzlfUEXPl1Wsr+oZNQ==","signatures":[{"sig":"MEYCIQDx3wwsbgQdFdrJMY9TSw1ER4wfOrhHYJnwZvDuagqcDQIhAIQpyswbno5VkWvxQDJKX7Dh9B4P7X0ws1OI1oHDwzY+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@boldblackai%2fharness@1.9.12","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":47917},"gitHead":"3a185e17a51004b39686fb45c518f5d8a5c1e698","scripts":{"lint":"pnpm lint:ts && pnpm lint:md && pnpm lint:sh && pnpm lint:docker && pnpm lint:actions","build":"tsc && cp -r src/seccomp-profiles bin/seccomp-profiles","format":"biome format --write .","lint:md":"markdownlint-cli2 \"**/*.md\" \"#node_modules\"","lint:sh":"shellcheck setup-env.sh entrypoint.sh entrypoint-opencode.sh entrypoint-hermes.sh","lint:ts":"biome check .","prepare":"tsc","test:e2e":"node --test tests/e2e/*.test.mjs","lint:docker":"hadolint Dockerfile Dockerfile.opencode Dockerfile.hermes","lint:actions":"actionlint","test:e2e:cli":"node --test tests/e2e/*.test.mjs","test:coverage":"node --experimental-test-coverage --test-coverage-include=\"src/**\" --test-coverage-lines=80 --test-coverage-functions=80 --test-coverage-branches=80 tests/e2e/*.test.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b2b5d2b6-b5ed-403c-b1dc-e91401ac2e18"}},"repository":{"url":"git+https://github.com/boldblackai/harness.git","type":"git"},"_npmVersion":"12.0.2","description":"Portable environment for running coding agents in a container","directories":{},"_nodeVersion":"24.19.0","dependencies":{"minimist":"^1.2.8"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.34.5","devDependencies":{"typescript":"^6.0.2","@types/node":"^25.6.0","@biomejs/biome":"1.9.4","@types/minimist":"^1.2.5","markdownlint-cli2":"0.17.2"},"_npmOperationalInternal":{"tmp":"tmp/harness_1.9.12_1787056805286_0.22744630919992503","host":"s3://npm-registry-packages-npm-production"}},"1.9.13":{"name":"@boldblackai/harness","version":"1.9.13","license":"MIT","_id":"@boldblackai/harness@1.9.13","maintainers":[{"name":"boldblack","email":"npm@boldblack.ai"},{"name":"ecanals","email":"enriquecanals@gmail.com"},{"name":"capotej","email":"jcapote@gmail.com"}],"homepage":"https://github.com/boldblackai/harness#readme","bugs":{"url":"https://github.com/boldblackai/harness/issues"},"bin":{"harness":"bin/harness.js"},"dist":{"shasum":"3e16cbe1a8ff1515d4dd294f6ab80ba5c8a6e4ff","tarball":"https://registry.npmjs.org/@boldblackai/harness/-/harness-1.9.13.tgz","fileCount":6,"integrity":"sha512-h+3iCIW9uHUSIDF8+q3pqFhnGx3zIg3xMdYg1Bda+4hxw3CRFAznB8tN7YOuUBogaH0As0axjr0eoann02Gruw==","signatures":[{"sig":"MEUCIDgPLjbQGRoDHRFeicmzU+4JQhy8qOH1L+7AwmSAzTEHAiEAs28weyz0INzZ7g8kdRTRGXn5jaa2zUs9lQ3TQhcmmNs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@boldblackai%2fharness@1.9.13","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":47917},"gitHead":"c11dcd1e6fa878fc2018ae81eb45d49b6d20b36a","scripts":{"lint":"pnpm lint:ts && pnpm lint:md && pnpm lint:sh && pnpm lint:docker && pnpm lint:actions","build":"tsc && cp -r src/seccomp-profiles bin/seccomp-profiles","format":"biome format --write .","lint:md":"markdownlint-cli2 \"**/*.md\" \"#node_modules\"","lint:sh":"shellcheck setup-env.sh entrypoint.sh entrypoint-opencode.sh entrypoint-hermes.sh","lint:ts":"biome check .","prepare":"tsc","test:e2e":"node --test tests/e2e/*.test.mjs","lint:docker":"hadolint Dockerfile Dockerfile.opencode Dockerfile.hermes","lint:actions":"actionlint","test:e2e:cli":"node --test tests/e2e/*.test.mjs","test:coverage":"node --experimental-test-coverage --test-coverage-include=\"src/**\" --test-coverage-lines=80 --test-coverage-functions=80 --test-coverage-branches=80 tests/e2e/*.test.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b2b5d2b6-b5ed-403c-b1dc-e91401ac2e18"}},"repository":{"url":"git+https://github.com/boldblackai/harness.git","type":"git"},"_npmVersion":"12.0.2","description":"Portable environment for running coding agents in a container","directories":{},"_nodeVersion":"24.19.0","dependencies":{"minimist":"^1.2.8"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.34.5","devDependencies":{"typescript":"^6.0.2","@types/node":"^25.6.0","@biomejs/biome":"1.9.4","@types/minimist":"^1.2.5","markdownlint-cli2":"0.17.2"},"_npmOperationalInternal":{"tmp":"tmp/harness_1.9.13_1788112977827_0.35605520975113003","host":"s3://npm-registry-packages-npm-production"}},"1.10.0":{"name":"@boldblackai/harness","version":"1.10.0","license":"MIT","_id":"@boldblackai/harness@1.10.0","maintainers":[{"name":"boldblack","email":"npm@boldblack.ai"},{"name":"ecanals","email":"enriquecanals@gmail.com"},{"name":"capotej","email":"jcapote@gmail.com"}],"homepage":"https://github.com/boldblackai/harness#readme","bugs":{"url":"https://github.com/boldblackai/harness/issues"},"bin":{"harness":"bin/harness.js"},"dist":{"shasum":"1807fcd3a31c296e06c052474713b14bc0c8a169","tarball":"https://registry.npmjs.org/@boldblackai/harness/-/harness-1.10.0.tgz","fileCount":6,"integrity":"sha512-ZR4T1Tjp8zkfDSNmxiUwxNigqM+q7Lu9+YaQYLbKey7jVqsLzB88K4CdeZF5D5RAi/nGUFShi7gnoHUIQHsPjg==","signatures":[{"sig":"MEYCIQCrQYdu7X28NK3TFicu+jmUVVFH09ej076OxspCdCAa0AIhAKdQJvm5SChJYf6wv7RYyWa8cpxJSvKcvm+e8dZfGHV9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@boldblackai%2fharness@1.10.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":53963},"gitHead":"17d6b197d02cb801cf57193bc0543ed99f6f1ea2","scripts":{"lint":"pnpm lint:ts && pnpm lint:md && pnpm lint:sh && pnpm lint:docker && pnpm lint:actions","build":"tsc && cp -r src/seccomp-profiles bin/seccomp-profiles","format":"biome format --write .","lint:md":"markdownlint-cli2 \"**/*.md\" \"#node_modules\"","lint:sh":"shellcheck setup-env.sh entrypoint.sh entrypoint-opencode.sh entrypoint-hermes.sh","lint:ts":"biome check .","prepare":"tsc","test:e2e":"node --test tests/e2e/*.test.mjs","lint:docker":"hadolint Dockerfile Dockerfile.opencode Dockerfile.hermes","lint:actions":"actionlint","test:e2e:cli":"node --test tests/e2e/*.test.mjs","test:coverage":"node --experimental-test-coverage --test-coverage-include=\"src/**\" --test-coverage-lines=80 --test-coverage-functions=80 --test-coverage-branches=80 tests/e2e/*.test.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b2b5d2b6-b5ed-403c-b1dc-e91401ac2e18"}},"repository":{"url":"git+https://github.com/boldblackai/harness.git","type":"git"},"_npmVersion":"12.0.2","description":"Portable environment for running coding agents in a container","directories":{},"_nodeVersion":"24.19.0","dependencies":{"minimist":"^1.2.8"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.34.5","devDependencies":{"typescript":"^6.0.2","@types/node":"^25.6.0","@biomejs/biome":"1.9.4","@types/minimist":"^1.2.5","markdownlint-cli2":"0.17.2"},"_npmOperationalInternal":{"tmp":"tmp/harness_1.10.0_1788352834353_0.951358803803098","host":"s3://npm-registry-packages-npm-production"}},"1.10.1":{"name":"@boldblackai/harness","version":"1.10.1","license":"MIT","_id":"@boldblackai/harness@1.10.1","maintainers":[{"name":"boldblack","email":"npm@boldblack.ai"},{"name":"ecanals","email":"enriquecanals@gmail.com"},{"name":"capotej","email":"jcapote@gmail.com"}],"homepage":"https://github.com/boldblackai/harness#readme","bugs":{"url":"https://github.com/boldblackai/harness/issues"},"bin":{"harness":"bin/harness.js"},"dist":{"shasum":"6c4aacc04fdf90b5aefeada3f9e8f9c1109aaee8","tarball":"https://registry.npmjs.org/@boldblackai/harness/-/harness-1.10.1.tgz","fileCount":6,"integrity":"sha512-NVrSNOmpJC3QaqKXtytSZTeODN/dkI8GtbVfl8UWbiWnpEqiDU4ehTaxhu0TNFVqJpRP5YZUfXcYTaVgSVV8Zg==","signatures":[{"sig":"MEUCIQCYNSXMGLBf0ASlEfg9ohg8vWpngF/hq28p0rw5TK/pVQIgT+gq4MaeCdRM/FIy1XPdwDe1zCeGoovTeUGAXqU2e6c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIHtghVBfBV82iClpWy9C2MW+KOIgm7jhOweHhyJ0u+S2AiEAjjG7RehdmFBmGIKJlZjBVEU8Rd65rUrLvA2yEbs8nuY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@boldblackai%2fharness@1.10.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":53969},"gitHead":"48acdc2d441acec8e68e9b4b2b6219d0030515ab","scripts":{"lint":"pnpm lint:ts && pnpm lint:md && pnpm lint:sh && pnpm lint:docker && pnpm lint:actions","build":"tsc && cp -r src/seccomp-profiles bin/seccomp-profiles","format":"biome format --write .","lint:md":"markdownlint-cli2 \"**/*.md\" \"#node_modules\"","lint:sh":"shellcheck setup-env.sh entrypoint.sh entrypoint-opencode.sh entrypoint-hermes.sh","lint:ts":"biome check .","prepare":"tsc","test:e2e":"node --test tests/e2e/*.test.mjs","lint:docker":"hadolint Dockerfile Dockerfile.opencode Dockerfile.hermes","lint:actions":"actionlint","test:e2e:cli":"node --test tests/e2e/*.test.mjs","test:coverage":"node --experimental-test-coverage --test-coverage-include=\"src/**\" --test-coverage-lines=80 --test-coverage-functions=80 --test-coverage-branches=80 tests/e2e/*.test.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b2b5d2b6-b5ed-403c-b1dc-e91401ac2e18"}},"repository":{"url":"git+https://github.com/boldblackai/harness.git","type":"git"},"_npmVersion":"12.0.2","description":"Portable environment for running coding agents in a container","directories":{},"_nodeVersion":"24.20.0","dependencies":{"minimist":"^1.2.8"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@12.3.4","devDependencies":{"typescript":"^6.0.2","@types/node":"^25.6.0","@biomejs/biome":"1.9.4","@types/minimist":"^1.2.5","markdownlint-cli2":"0.17.2"},"_npmOperationalInternal":{"tmp":"tmp/harness_1.10.1_1789309641624_0.5777837146473832","host":"s3://npm-registry-packages-npm-production"}},"1.10.2":{"name":"@boldblackai/harness","version":"1.10.2","license":"MIT","_id":"@boldblackai/harness@1.10.2","maintainers":[{"name":"boldblack","email":"npm@boldblack.ai"},{"name":"ecanals","email":"enriquecanals@gmail.com"},{"name":"capotej","email":"jcapote@gmail.com"}],"homepage":"https://github.com/boldblackai/harness#readme","bugs":{"url":"https://github.com/boldblackai/harness/issues"},"bin":{"harness":"bin/harness.js"},"dist":{"shasum":"a6465b9f3b88cbf14f6c5e3801c7443f477d1980","tarball":"https://registry.npmjs.org/@boldblackai/harness/-/harness-1.10.2.tgz","fileCount":6,"integrity":"sha512-s5Og1DdWroiYp/MVeUw4y/KZt21aNw0c1r72tTTr3dgYOItprFoReSwCYfUc4IrrOnJd/qjXmM+EGa2f7ayO6w==","signatures":[{"sig":"MEQCIADC1lnyIC90jxw+fNWd558wKieuyIl/1GCLSd19WHXxAiA66/57lMpiQsim/4bZYzrzttDaD2ssJDyiOKGzpide0A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIFRt5RsTNslTzF7oCKRZXXpNb30pOkFEw7bOa5EXj2XfAiBODyjYT5ewsEJrTfzmkJlpPBQXwEWuAfn88AorUf+l9w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@boldblackai%2fharness@1.10.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":53960},"gitHead":"4cd61fe4deb656d02fdffb626f85e07c6e3708f3","scripts":{"lint":"pnpm lint:ts && pnpm lint:md && pnpm lint:sh && pnpm lint:docker && pnpm lint:actions","build":"tsc && cp -r src/seccomp-profiles bin/seccomp-profiles","format":"biome format --write .","lint:md":"markdownlint-cli2 \"**/*.md\" \"#node_modules\"","lint:sh":"shellcheck setup-env.sh entrypoint.sh entrypoint-opencode.sh entrypoint-hermes.sh","lint:ts":"biome check .","prepare":"tsc","test:e2e":"node --test tests/e2e/*.test.mjs","lint:docker":"hadolint Dockerfile Dockerfile.opencode Dockerfile.hermes","lint:actions":"actionlint","test:e2e:cli":"node --test tests/e2e/*.test.mjs","test:coverage":"node --experimental-test-coverage --test-coverage-include=\"src/**\" --test-coverage-lines=80 --test-coverage-functions=80 --test-coverage-branches=80 tests/e2e/*.test.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b2b5d2b6-b5ed-403c-b1dc-e91401ac2e18"}},"repository":{"url":"git+https://github.com/boldblackai/harness.git","type":"git"},"_npmVersion":"12.0.2","description":"Portable environment for running coding agents in a container","directories":{},"_nodeVersion":"24.20.0","dependencies":{"minimist":"^1.2.8"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@12.4.1","devDependencies":{"typescript":"^6.0.2","@types/node":"^25.6.0","@biomejs/biome":"1.9.4","@types/minimist":"^1.2.5","markdownlint-cli2":"0.17.2"},"_npmOperationalInternal":{"tmp":"tmp/harness_1.10.2_1790040026239_0.01822790735026114","host":"s3://npm-registry-packages-npm-production"}},"1.10.3":{"_id":"@boldblackai/harness@1.10.3","bin":{"harness":"bin/harness.js"},"bugs":{"url":"https://github.com/boldblackai/harness/issues"},"dist":{"shasum":"c77202f67bd5cff14c8dabd7e5cb6874f8f0ea3d","tarball":"https://registry.npmjs.org/@boldblackai/harness/-/harness-1.10.3.tgz","fileCount":6,"integrity":"sha512-VVhsVkXiys1FMcDJOQNRepAZTT6J0S6lDMuTNlDT79dRhnw/vzEUWXC1MW7rCzGV62SaARkLdkDwXBGDNHxhfw==","signatures":[{"sig":"MEUCIEsoZzEB0+zqrAw4Ed3y6P/i2YpC/KNi+TzonmWONh9WAiEAy7WhCKeXoRIopwjbax5ajsZWaYzpXu2Kxpq8fKlNqt0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIAIlChcet3s2A57Qlaq+jmZwfS6AJ4HiQUUVkR2rXQzJAiAX3GO9s+U8RXtc5x9qoeRFvl5Sd48w3H+el60de9d4Ug=="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@boldblackai%2fharness@1.10.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":53960},"name":"@boldblackai/harness","gitHead":"67adf1fad848448672e0f74b71463b8653b4ef5a","license":"MIT","scripts":{"lint":"pnpm lint:ts && pnpm lint:md && pnpm lint:sh && pnpm lint:docker && pnpm lint:actions","build":"tsc && cp -r src/seccomp-profiles bin/seccomp-profiles","format":"biome format --write .","lint:md":"markdownlint-cli2 \"**/*.md\" \"#node_modules\"","lint:sh":"shellcheck setup-env.sh entrypoint.sh entrypoint-opencode.sh entrypoint-hermes.sh","lint:ts":"biome check .","prepare":"tsc","test:e2e":"node --test tests/e2e/*.test.mjs","lint:docker":"hadolint Dockerfile Dockerfile.opencode Dockerfile.hermes","lint:actions":"actionlint","test:e2e:cli":"node --test tests/e2e/*.test.mjs","test:coverage":"node --experimental-test-coverage --test-coverage-include=\"src/**\" --test-coverage-lines=80 --test-coverage-functions=80 --test-coverage-branches=80 tests/e2e/*.test.mjs"},"version":"1.10.3","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b2b5d2b6-b5ed-403c-b1dc-e91401ac2e18"}},"homepage":"https://github.com/boldblackai/harness#readme","repository":{"url":"git+https://github.com/boldblackai/harness.git","type":"git"},"_npmVersion":"12.1.0","description":"Portable environment for running coding agents in a container","directories":{},"maintainers":[{"name":"boldblack","email":"npm@boldblack.ai"},{"name":"ecanals","email":"enriquecanals@gmail.com"},{"name":"capotej","email":"jcapote@gmail.com"}],"_nodeVersion":"24.21.0","dependencies":{"minimist":"^1.2.8"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@12.5.1","devDependencies":{"typescript":"^6.0.2","@types/node":"^25.6.0","@biomejs/biome":"1.9.4","@types/minimist":"^1.2.5","markdownlint-cli2":"0.17.2"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/harness_1.10.3_1790519212997_0.18350691106964323"}}},"time":{"created":"2026-06-19T14:57:43.317Z","modified":"2026-09-27T14:26:53.565Z","1.8.5":"2026-06-19T14:57:43.655Z","1.8.6":"2026-06-20T15:07:29.440Z","1.9.0":"2026-06-20T20:06:07.834Z","1.9.1":"2026-06-27T14:29:27.295Z","1.9.2":"2026-07-18T19:16:49.753Z","1.9.3":"2026-07-28T17:38:07.772Z","1.9.4":"2026-07-31T16:10:33.247Z","1.9.7":"2026-08-01T18:58:45.765Z","1.9.8":"2026-08-01T22:22:39.323Z","1.9.9":"2026-08-01T22:51:23.384Z","1.9.10":"2026-08-10T11:43:00.185Z","1.9.11":"2026-08-17T03:00:41.783Z","1.9.12":"2026-08-18T12:40:05.441Z","1.9.13":"2026-08-30T18:02:57.961Z","1.10.0":"2026-09-02T12:40:34.481Z","1.10.1":"2026-09-13T14:27:21.709Z","1.10.2":"2026-09-22T01:20:26.335Z","1.10.3":"2026-09-27T14:26:53.090Z"},"bugs":{"url":"https://github.com/boldblackai/harness/issues"},"license":"MIT","homepage":"https://github.com/boldblackai/harness#readme","repository":{"url":"git+https://github.com/boldblackai/harness.git","type":"git"},"description":"Portable environment for running coding agents in a container","maintainers":[{"name":"boldblack","email":"npm@boldblack.ai"},{"name":"ecanals","email":"enriquecanals@gmail.com"},{"name":"capotej","email":"jcapote@gmail.com"}],"readme":"<p align=\"center\">\n  <strong>Run agents in a sandboxed container — ready to drop into any project.</strong>\n</p>\n\nHarness conveniently wraps Docker around three open-source coding agents — [`pi`](https://pi.dev/), [`opencode`](https://opencode.ai),\nand [`hermes`](https://github.com/NousResearch/hermes-agent) — so you can point one at a directory (or file) without giving it access to your entire machine.\n\n> **Documentation:** [harness.boldblack.ai/docs](https://harness.boldblack.ai/docs/)\n\n## Features\n\n- **Sandboxed by default** — capability-dropped container with `no-new-privileges`; the agent only sees the directory (or file) you mount.\n- **Three agents, one CLI** — switch between `pi`, `opencode`, and `hermes` with `-a`. Same flags, same flow.\n- **Supply-chain hardened** — the image is signed and verified with cosign and SLSA provenance on every run; dependencies installed inside the container are always pinned and verified where possible and a 7-day \"cooldown\" is used to mitigate supply-chain attacks.\n- **Local-first** — defaults to LM Studio with `gemma-4-e4b`. Drop in an `--env-file` to use Anthropic, OpenRouter, OpenAI, Gemini, and others.\n- **Stateful or one-shot** — interactive runs persist agent state under `$XDG_DATA_HOME/harness/<project>/<agent>/` (defaults to `~/.local/share/harness/`); one-shot prompts (`-p` or piped stdin) stay ephemeral.\n- **User skills** — automatically mounts `~/.agents/skills` and `~/.claude/skills` into the container so agents can discover and use custom skills. Disable with `--no-skills`.\n- **Context files** — automatically mounts `~/.agents/AGENTS.md` and `~/.claude/CLAUDE.md` into the agent's context directory so cross-agent rules apply inside the container. Disable with `--no-context-files` (`-nc`).\n- **Zero install** — `npx @boldblackai/harness` just works.\n\n## Quickstart\n\nA container runtime is required. By default harness uses [Docker](https://www.docker.com); on macOS 26 / Apple Silicon, Apple's native [`container`](https://github.com/apple/container) CLI is preferred automatically if installed — see [Container runtime](#container-runtime). With the default runtime and LM Studio locally:\n\n```bash\nlms daemon up\nlms get google/gemma-4-e4b\n```\n\nThe container is preconfigured to use `gemma-4-e4b` via LM Studio's local API.\n\nYou can also specify a different local model with `-m`. HuggingFace-style names with slashes (e.g. `qwen/qwen3.5-9b`) work correctly in local mode:\n\n```bash\nnpx @boldblackai/harness -m \"qwen/qwen3.5-9b\" -p \"write a fizzbuzz in Go\"\n```\n\n### Using a cloud provider instead\n\n#### pi (default agent)\n\nIf you pass an API key for a supported provider via `--env-file`, [`pi`](https://pi.dev/) will use that provider instead of the local LM Studio setup. Supported keys:\n\n| Provider | Environment Variable |\n|----------|----------------------|\n| Anthropic | `ANTHROPIC_API_KEY` |\n| OpenRouter | `OPENROUTER_API_KEY` |\n| OpenAI | `OPENAI_API_KEY` |\n| Google Gemini | `GEMINI_API_KEY` |\n| Mistral | `MISTRAL_API_KEY` |\n| Groq | `GROQ_API_KEY` |\n| Cerebras | `CEREBRAS_API_KEY` |\n| xAI | `XAI_API_KEY` |\n| Hugging Face | `HF_TOKEN` |\n\nSee the [full list of supported providers](https://github.com/badlogic/pi-mono/blob/c779c14e91bc2ea65143e59b0dc1baf3646ba8c9/packages/coding-agent/docs/providers.md#api-keys) for more options. When using LM Studio locally, 16k context is sufficient.\n\n#### opencode agent\n\n[`opencode`](https://opencode.ai) uses LM Studio by default. Pass `--env-file` to switch to cloud mode — the agent auto-detects the provider from whichever API key is in the file:\n\n```bash\necho 'OPENROUTER_API_KEY=sk-...' > .env\nnpx @boldblackai/harness -e .env -p \"write me a fizzbuzz in Go\"\n```\n\nThat's it. Your current directory is mounted at `/workspace` inside the container and the agent works against it.\n\n## Contents\n\n- [Examples](#examples)\n- [Agents](#agents)\n  - [pi (default)](#pi-default)\n  - [opencode](#opencode)\n  - [hermes](#hermes)\n- [Security model](#security-model)\n  - [Sandbox](#sandbox)\n  - [Image verification](#image-verification)\n  - [Dependency cooldown](#dependency-cooldown)\n- [Persistence](#persistence)\n- [Reference](#reference)\n  - [CLI flags](#cli-flags)\n  - [Environment variables](#environment-variables)\n  - [Agent-specific behavior](#agent-specific-behavior)\n- [Deploying hermes as a claw](#deploying-hermes-as-a-claw)\n- [Developing](#developing)\n\n## Examples\n\n```bash\n# One-shot prompt\nnpx @boldblackai/harness -p \"write me a fizzbuzz in Go\"\n\n# Pipe via stdin\necho \"write me a fizzbuzz in Go\" | npx @boldblackai/harness\n\n# Interactive session (no -p, no piped stdin) — state persists under XDG data dir\nnpx @boldblackai/harness\n\n# Use a cloud provider via env file\nnpx @boldblackai/harness -e .env -p \"add a login endpoint\"\n\n# Override the model\nnpx @boldblackai/harness -m anthropic/claude-sonnet-4-5 -p \"refactor the auth module\"\n\n# Mount a single file instead of the whole directory\nnpx @boldblackai/harness -f ./script.py -p \"add type hints\"\n\n# Switch agents\nnpx @boldblackai/harness -a opencode -p \"write me a fizzbuzz in Go\"\nnpx @boldblackai/harness -a hermes -e .env -p \"add tests\"\n```\n\n`npx`, `bunx`, and `pnpm dlx` are interchangeable. Or install globally:\n\n```bash\nnpm install -g @boldblackai/harness\n# or\npnpm add -g @boldblackai/harness\n# or\nbun add -g @boldblackai/harness\n```\n\n## Agents\n\nPick an agent with `-a`. Default is `pi`.\n\n### pi (default)\n\n[`pi`](https://pi.dev/) defaults to LM Studio with `google/gemma-4-e4b` (16k context is enough). Pass an `--env-file` containing any of the keys below and `pi` switches to that provider:\n\n| Provider      | Environment Variable |\n|---------------|----------------------|\n| Anthropic     | `ANTHROPIC_API_KEY`  |\n| OpenRouter    | `OPENROUTER_API_KEY` |\n| OpenAI        | `OPENAI_API_KEY`     |\n| Google Gemini | `GEMINI_API_KEY`     |\n| Mistral       | `MISTRAL_API_KEY`    |\n| Groq          | `GROQ_API_KEY`       |\n| Cerebras      | `CEREBRAS_API_KEY`   |\n| xAI           | `XAI_API_KEY`        |\n| Hugging Face  | `HF_TOKEN`           |\n\nSee the [full provider list](https://github.com/badlogic/pi-mono/blob/c779c14e91bc2ea65143e59b0dc1baf3646ba8c9/packages/coding-agent/docs/providers.md#api-keys). The `-m` flag is forwarded directly.\n\n### opencode\n\n[`opencode`](https://opencode.ai) defaults to LM Studio in local mode. Pass `--env-file` to enter cloud mode — the agent auto-detects the provider from whichever API key is in the file (`ZAI_API_KEY`, `OPENROUTER_API_KEY`, `ANTHROPIC_API_KEY`, etc.). The `-m` flag takes a bare model name; the provider prefix is added for you.\n\n```bash\nnpx @boldblackai/harness -a opencode -e .env -p \"refactor the auth module\"\nnpx @boldblackai/harness -a opencode -e .env -m anthropic/claude-sonnet-4-5 -p \"add tests\"\n```\n\nTo pass env vars but stay in local mode, use `--local`:\n\n```bash\nnpx @boldblackai/harness -a opencode -e .env --local -p \"refactor the auth module\"\n```\n\nWhen using LM Studio locally, set the model's context length to at least 32k tokens.\n\n### hermes\n\n[`hermes`](https://github.com/NousResearch/hermes-agent) by NousResearch supports many providers. Pass `--env-file` to enter cloud mode — the agent auto-detects the provider from whichever API key is in the file. Use a `provider/model` for `-m`:\n\n```bash\nnpx @boldblackai/harness -a hermes -e .env -m anthropic/claude-sonnet-4-5 -p \"add tests\"\nnpx @boldblackai/harness -a hermes -e .env -m openrouter/auto -p \"add tests\"\n```\n\nCommon keys: `ANTHROPIC_API_KEY`, `OPENROUTER_API_KEY`, `OPENAI_API_KEY`, `GOOGLE_API_KEY`, `GLM_API_KEY` (Z.AI), [and others](https://github.com/NousResearch/hermes-agent/blob/main/.env.example). LM Studio context length should be at least 64k tokens.\n\n**Multiple API keys in one env file.** With `--env-file`, each agent auto-detects a provider from the keys present. If the file contains keys for more than one provider (e.g. `OPENROUTER_API_KEY` and `GLM_API_KEY`), the agent may not pick the one you expect — `pi` and `opencode` follow their own detection order. For one-shot runs, use a single-provider env file, or select the agent and model explicitly (e.g. `harness -a hermes -e .env -m zai/glm-4.7 -p \"...\"`).\n\n## Security model\n\nHarness layers protections at runtime, image, and dependency level.\n\n### Sandbox\n\nEach run starts the container with:\n\n- `--cap-drop=ALL --cap-add=NET_RAW` — minimal capability set\n- `--security-opt no-new-privileges:true` — block privilege escalation\n- `--security-opt seccomp=...` — inline seccomp profile blocks `socket(AF_ALG)` to prevent kernel crypto API access (a known container escape vector)\n- Only your mounted directory (or single file with `-f`) is visible to the agent\n\nRunning harness from your home directory is blocked by default, since that would mount all of `$HOME` into the container — exposing dotfiles, credentials, and SSH keys to the agent and giving it a noisy, unfocused workspace. If the resolved working directory equals your home, harness exits with an error. Pass `--mount-entire-home` to opt in for the rare case where mounting all of `$HOME` is genuinely intended. `--file` mode is unaffected (it mounts a single file, not the working directory).\n\nThese hardening flags are docker-specific. When running under Apple's `container` CLI (auto-detected on macOS 26 / Apple Silicon), `--security-opt` is not applied (apple/container workloads are microVMs with their own guest kernel, so the seccomp profile's host-kernel role is subsumed by the VM boundary); capability restrictions remain. See [Container runtime](#container-runtime).\n\n### Image verification\n\nBy default, harness verifies that the container image was signed by the official CI workflow and carries a valid SLSA provenance attestation. This requires [cosign](https://github.com/sigstore/cosign):\n\n```bash\nbrew install cosign\n```\n\nVerified digests are cached at `~/.cache/harness/cosign-verified.json` so verification only runs once per image. Skip with `--no-verify` (or by setting `HARNESS_IMAGE_TAG`, which implies skip):\n\n```bash\nnpx @boldblackai/harness --no-verify -p \"write me a fizzbuzz in Go\"\n```\n\n### Dependency cooldown\n\nThe image build enforces a 7-day cooldown on dependency resolution — a guard against supply-chain compromises that are typically discovered and yanked within hours.\n\n- **pnpm**: `PNPM_CONFIG_MINIMUM_RELEASE_AGE=10080` (minutes) via environment variable\n- **uv**: `--exclude-newer` set to 7 days ago at image build time\n\nThe cooldown applies to transitive dependencies too. Older packages install normally.\n\n## Persistence\n\nInteractive runs (no `-p` and no piped stdin) store persistence data at `$XDG_DATA_HOME/harness/<project>/<agent>/` (defaults to `~/.local/share/harness/`). The `<project>` segment is the working directory path with `/` replaced by `_` and the home prefix stripped. This lets agents resume sessions, skip database migrations on repeat runs, and retain memories across invocations. The container's `~/.config` is persisted at `<persist-root>/../xdg_config` (one level above the per-agent root, i.e. `$XDG_DATA_HOME/harness/<project>/xdg_config`), so tool configs (e.g. jj) survive across runs and are shared by every agent working in the same project. For the opencode adapter the existing per-agent `.config/opencode` mount nests inside this project-level one. Per-agent `mise` tool data and trust settings are persisted at `<persist-root>/mise/` and `<persist-root>/mise-state/` respectively. For the pi adapter, extensions/skills installed via `npm install -g` are persisted at `<persist-root>/npm/`, avoiding re-downloads on every boot.\n\nOne-shot runs (`-p` or piped stdin) are implicitly ephemeral — no persistence data is created. Use `--ephemeral` to force-disable persistence on interactive runs.\n\nIf an old `.harness/` directory exists in your working directory, harness will emit a deprecation warning with migration instructions.\n\n## Reference\n\n### CLI flags\n\n| Flag          | Alias | Description |\n|---------------|-------|-------------|\n| `--prompt`    | `-p`  | Pass a prompt directly to the agent |\n| `--env-file`  | `-e`  | Load environment variables into the container; may be repeated |\n| `--file`      | `-f`  | Mount a single file instead of the current directory |\n| `--model`     | `-m`  | Override the model used by the agent |\n| `--agent`     | `-a`  | Select agent: `pi`, `opencode`, `hermes` (default: `pi`) |\n| `--volumes`   | `-v`  | Additional volume mount (`host:container[:opts]`); may be repeated |\n| `--port`      |       | Publish a container port to the host (`[host-ip:]host-port:container-port[/protocol]`); may be repeated |\n| `--no-verify` |       | Skip cosign signature and provenance verification |\n| `--no-skills` |       | Disable mounting user skills directories (`~/.agents/skills`, `~/.claude/skills`) |\n| `--no-context-files` | `-nc` | Disable mounting global context files (`~/.agents/AGENTS.md`, `~/.claude/CLAUDE.md`) |\n| `--ephemeral` |       | Disable session persistence (implied by `-p` and piped stdin) |\n| `--local`     |       | Force local mode even with `-e` (use LM Studio / local defaults) |\n| `--mount-entire-home` | | Allow running from your home directory (mounts all of `$HOME` as the workspace) |\n| `--help`      | `-h`  | Show help |\n\n### Environment variables\n\n| Variable                    | Description |\n|-----------------------------|-------------|\n| `HARNESS_IMAGE_TAG`         | Override the Docker image tag (defaults to the package version). Setting this implies `--no-verify`. |\n| `HARNESS_CONTAINER_RUNTIME` | Container runtime: `auto` (default — on macOS, prefers Apple's `container` CLI if on PATH; docker everywhere else), `docker` (force docker), or `apple` (deprecated explicit alias; warns). |\n| `XDG_DATA_HOME`             | Override the base directory for persistence data (defaults to `~/.local/share`). |\n| `XDG_CACHE_HOME`            | Override the base directory for the cosign cache (defaults to `~/.cache`). |\n\n#### Container runtime\n\nBy default harness auto-detects the container runtime: on macOS, if Apple's native [`container`](https://github.com/apple/container) CLI (v1.0.0+) is on PATH, it is preferred; on every other platform docker is used. Auto-detection is gated to macOS because apple/container ships for macOS only — a binary named `container` on a Linux PATH is an unrelated tool and is ignored. No configuration is needed.\n\n```bash\nbrew install container     # install Apple's container CLI (v1.0.0+)\ncontainer system start     # one-time: start the container system service\ncontainer system kernel set --recommended --arch arm64   # one-time on Apple Silicon (required before first run)\nharness -p \"write me a fizzbuzz in Go\"\n```\n\nOn arm64 Macs, `container system kernel set --recommended` is required — without it the first `harness` run fails with `default kernel not configured for architecture arm64`. See [apple/container](https://github.com/apple/container) for details.\n\nTo force docker even when `container` is available, set:\n\n```bash\nexport HARNESS_CONTAINER_RUNTIME=docker\n```\n\n`HARNESS_CONTAINER_RUNTIME=apple` (the pre-auto-detect opt-in) still works but is deprecated: it selects the apple runtime explicitly, prints a deprecation warning, and will be removed in a future release.\n\nImage verification (cosign + SLSA provenance) works identically under both runtimes; the verified-digest cache is keyed by digest, so a digest verified under one runtime is a cache hit under the other.\n\n**Security note.** When running under Apple's `container` CLI, harness does not apply the `--security-opt no-new-privileges` and `--security-opt seccomp=...` flags it uses under docker, because `apple/container` has no `--security-opt` option. This is not a security regression: each apple/container workload is a microVM with its own ephemeral guest kernel (Apple Virtualization framework), so the `block-af-alg.json` profile's host-kernel role — blocking `socket(AF_ALG)` — is subsumed by the VM boundary itself (hardware-assisted isolation, strictly stronger than a syscall filter). Capability restrictions (`--cap-drop=ALL --cap-add=NET_RAW`) **are** supported and stay on. Only `ro`/`readonly` is honored for volume options under the apple path (SELinux relabel flags like `:Z` are meaningless under macOS virtiofs).\n\n**Optional tuning — resource limits.** Apple's container CLI reads defaults from `~/.config/container/config.toml`. Create this file to control CPU and memory allocation for all containers (see [container-system-config.md](https://github.com/apple/container/blob/main/docs/container-system-config.md) for the full schema):\n\n```toml\n# example values; adjust to your machine\n[container]\ncpus = 8\nmemory = \"4g\"\n```\n\n**Container → host (`host.docker.internal`).** Docker Desktop provides `host.docker.internal` automatically; Apple's `container` CLI does not. Local-mode agents (pi, opencode, hermes without `-e`) reach LM Studio and other host services via that hostname. One-time setup on Apple Silicon (requires administrator):\n\n```bash\nsudo container system dns create host.docker.internal --localhost 203.0.113.113\n```\n\nHarness prints a reminder on `HARNESS_CONTAINER_RUNTIME=apple` runs if this mapping is missing. See [apple/container — access a host service](https://github.com/apple/container/blob/main/docs/how-to.md#access-a-host-service-from-a-container).\n\n### Agent-specific behavior\n\n- **pi** — `-m` is passed straight to the binary as `--model`.\n- **opencode** — `-m` is passed via the `OPENCODE_MODEL` env var. Without `-e`, uses LM Studio locally. With `-e`, enters cloud mode and auto-detects the provider from whichever API key is in the env file. Use `--local` to force local mode even with `-e`.\n- **hermes** — `-m` is passed as `--model` in `provider/model` form. Without `-e`, uses local config. With `-e`, enters cloud mode and auto-detects from env vars. Use `--local` to force local mode even with `-e`.\n\n## Deploying hermes as a claw\n\nYou can run `hermes` as a long-running \"claw\" — a persistent agent process reachable over a messaging gateway (e.g. Telegram). Three deployment targets are documented:\n\n- [fly.io](docs/deploying/fly.md)\n- [Kubernetes](docs/deploying/k8s.md)\n- [AWS (ECS Fargate or EC2 + SSM)](docs/deploying/aws.md)\n\n## Developing\n\nLink your local checkout globally:\n\n```bash\npnpm link --global\n# unlink with:\npnpm unlink --global @boldblackai/harness\n```\n\n### Building the image\n\n```bash\nmake image\n```\n\nBuilds `ghcr.io/boldblackai/harness` with Debian stable-slim, Node.js v24, `git`, [`@earendil-works/pi-coding-agent`](https://pi.dev/), [`opencode-ai`](https://opencode.ai), [`hermes-agent`](https://github.com/NousResearch/hermes-agent), `fd`, `ripgrep`, `jq`, and `curl`. The hermes variant also includes the [MCP Python SDK](https://github.com/modelcontextprotocol/python-sdk) for connecting to MCP servers, [`faster-whisper`](https://github.com/SYSTRAN/faster-whisper) for local speech-to-text, and [`kokoro-onnx`](https://github.com/thewh1teagle/kokoro-onnx) for local text-to-speech.\n\nThe base image is pinned by manifest-list digest (the OCI image index, not a per-platform manifest) for reproducible multi-arch builds. To bump it:\n\n```bash\ndocker buildx imagetools inspect debian:stable-slim --format '{{.Manifest.Digest}}'\n```\n\n### Linting\n\n```bash\npnpm lint           # all\npnpm lint:ts        # Biome\npnpm lint:md        # markdownlint\npnpm lint:sh        # shellcheck\npnpm lint:docker    # hadolint\npnpm lint:actions   # actionlint\npnpm format         # auto-format with Biome\n```\n\n`shellcheck`, `hadolint`, and `actionlint` are system binaries. Install with [mise](https://mise.jdx.dev/) (recommended):\n\n```bash\nmise install\n```\n\nOr install manually:\n\n```bash\nbrew install shellcheck hadolint actionlint\n```\n","readmeFilename":"README.md"}