{"_id":"@agntn/harnesses","_rev":"6-fd3b188facef6acaafe5ccd4445c80a1","name":"@agntn/harnesses","dist-tags":{"latest":"0.3.0"},"versions":{"0.0.1":{"name":"@agntn/harnesses","version":"0.0.1","author":"oritwoen (https://github.com/oritwoen)","license":"MIT","_id":"@agntn/harnesses@0.0.1","maintainers":[{"name":"oritwoen","email":"dominik.opyd+1@gmail.com"}],"homepage":"https://github.com/agntn/harnesses#readme","bugs":"https://github.com/agntn/harnesses/issues","pi":{"extensions":["./packages/pi/extensions/harnesses.ts"]},"bin":{"harnesses":"./dist/cli.mjs"},"omp":{"extensions":["./packages/omp/extensions/harnesses.ts"]},"dist":{"shasum":"011328dab5473cb4386a4e58e47537ed4b7f54c9","tarball":"https://registry.npmjs.org/@agntn/harnesses/-/harnesses-0.0.1.tgz","fileCount":47,"integrity":"sha512-Uu5X4093h9cBRvxIFDiCCnuKaLnz0VJnVm7Uf6ItkR8yX+AK2ACztHoBDaI77VKnYubIQPSN/A2SactLjn5INw==","signatures":[{"sig":"MEQCIGPLWEhouaZES1JLM5+Nbo3imglxjzw2jB4OD2SGDgbcAiA3+BcWytoaHvjMhoASkAEkkK80SK3Yp1vhvJBUO9E4Lw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1577548},"main":"./dist/index.mjs","type":"module","types":"./dist/index.d.mts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs"},"./mcp":{"types":"./dist/mcp.d.mts","import":"./dist/mcp.mjs"}},"scripts":{"dev":"obuild --stub","lint":"pnpm build && oxlint . && oxfmt --check .","test":"vitest","build":"obuild","release":"pnpm test:run && pnpm build && changelogen --release --push","lint:fix":"pnpm build && oxlint . --fix && oxfmt . && pnpm build","test:run":"vitest --run","typecheck":"tsgo --noEmit --skipLibCheck && pnpm build && tsgo --noEmit --skipLibCheck -p tsconfig.extensions.json"},"_npmUser":{"name":"oritwoen","email":"dominik.opyd+1@gmail.com"},"repository":{"url":"git+https://github.com/agntn/harnesses.git","type":"git"},"description":"Metadata registry for AI coding harnesses: binaries, configs, sessions, and capabilities.","directories":{},"sideEffects":false,"_nodeVersion":"26.8.1","dependencies":{"citty":"^0.2.2","consola":"^3.4.2","typebox":"^1.3.19","smol-toml":"^1.8.0","@toon-format/toon":"^4.1.1","@modelcontextprotocol/sdk":"1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"oxfmt":"^0.65.0","obuild":"^0.4.38","oxlint":"^1.80.0","vitest":"^4.1.11","@agntn/ox":"^0.1.0","@types/node":"latest","changelogen":"^0.6.2","@oh-my-pi/pi-ai":"18.0.4","oxlint-tsgolint":"^7.0.2001","@oh-my-pi/omptype":"18.0.4","@earendil-works/pi-tui":"0.84.3","@oh-my-pi/pi-coding-agent":"18.0.4","@typescript/native-preview":"latest","@earendil-works/pi-coding-agent":"0.84.3"},"peerDependencies":{"@earendil-works/pi-tui":">=0.84.2 <1","@oh-my-pi/pi-coding-agent":">=18.0.0 <19","@earendil-works/pi-coding-agent":">=0.84.2 <1"},"peerDependenciesMeta":{"@earendil-works/pi-tui":{"optional":true},"@oh-my-pi/pi-coding-agent":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/harnesses_0.0.1_1788199767800_0.08180620354715296","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@agntn/harnesses","version":"0.1.0","author":{"url":"https://github.com/oritwoen","name":"oritwoen"},"license":"MIT","_id":"@agntn/harnesses@0.1.0","maintainers":[{"name":"oritwoen","email":"dominik.opyd+1@gmail.com"}],"homepage":"https://github.com/agntn/harnesses#readme","bugs":{"url":"https://github.com/agntn/harnesses/issues"},"pi":{"extensions":["./packages/pi/extensions/harnesses.ts"]},"bin":{"harnesses":"dist/cli.mjs"},"omp":{"extensions":["./packages/omp/extensions/harnesses.ts"]},"dist":{"shasum":"76fc282a5a8c3585b2a20ffb76249c874fb52b60","tarball":"https://registry.npmjs.org/@agntn/harnesses/-/harnesses-0.1.0.tgz","fileCount":47,"integrity":"sha512-YODbSst5UA1cN40m4Fx5ctZ0mCaHKLW4/TF9gkga3z4iUdY60L7+doiVVaNQYTkYrTVe6CSTI88r2S7yqQAU6A==","signatures":[{"sig":"MEUCIQC09nj1bTdKNvlFe8PKADWySDBHcZMRwACjOMpBHVyuTAIgBmBFKN9Qf28Duaz01DlcBwULEjbF3thYzYTmRkQQNMg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1600484},"main":"./dist/index.mjs","type":"module","types":"./dist/index.d.mts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs"},"./mcp":{"types":"./dist/mcp.d.mts","import":"./dist/mcp.mjs"}},"gitHead":"15f24e84289d5c09a2da8b7e633e897720d7eb03","scripts":{"dev":"obuild --stub","docs":"pnpm --dir docs dev","lint":"pnpm build && oxlint . && oxfmt --check .","test":"vitest","build":"obuild","prepack":"pnpm run build","release":"pnpm test:run && pnpm build && changelogen --release --push","lint:fix":"pnpm build && oxlint . --fix && oxfmt . && pnpm build","test:run":"vitest --run","typecheck":"tsgo --noEmit --skipLibCheck && pnpm build && tsgo --noEmit --skipLibCheck -p tsconfig.extensions.json"},"_npmUser":{"name":"oritwoen","email":"dominik.opyd+1@gmail.com"},"repository":{"url":"git+https://github.com/agntn/harnesses.git","type":"git"},"_npmVersion":"12.0.2","description":"Metadata registry for AI coding harnesses: binaries, configs, sessions, and capabilities.","directories":{},"sideEffects":false,"_nodeVersion":"26.8.2","dependencies":{"citty":"^0.2.2","consola":"^3.4.2","typebox":"^1.3.19","smol-toml":"^1.8.0","@toon-format/toon":"^4.1.1","@modelcontextprotocol/sdk":"1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.24.0","devDependencies":{"oxfmt":"^0.65.0","obuild":"^0.4.38","oxlint":"^1.80.0","vitest":"^4.1.11","@agntn/ox":"^0.1.0","@types/node":"latest","changelogen":"^0.6.2","@oh-my-pi/pi-ai":"18.0.4","oxlint-tsgolint":"^7.0.2001","@oh-my-pi/omptype":"18.0.4","@earendil-works/pi-tui":"0.84.3","@oh-my-pi/pi-coding-agent":"18.0.4","@typescript/native-preview":"latest","@earendil-works/pi-coding-agent":"0.84.3"},"peerDependencies":{"@earendil-works/pi-tui":">=0.84.2 <1","@oh-my-pi/pi-coding-agent":">=18.0.0 <19","@earendil-works/pi-coding-agent":">=0.84.2 <1"},"peerDependenciesMeta":{"@earendil-works/pi-tui":{"optional":true},"@oh-my-pi/pi-coding-agent":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/harnesses_0.1.0_1789384413970_0.4388738934232339","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@agntn/harnesses","version":"0.1.1","author":"oritwoen (https://github.com/oritwoen)","license":"MIT","_id":"@agntn/harnesses@0.1.1","maintainers":[{"name":"oritwoen","email":"dominik.opyd+1@gmail.com"}],"homepage":"https://github.com/agntn/harnesses#readme","bugs":"https://github.com/agntn/harnesses/issues","pi":{"extensions":["./packages/pi/extensions/harnesses.ts"]},"bin":{"harnesses":"./dist/cli.mjs"},"omp":{"extensions":["./packages/omp/extensions/harnesses.ts"]},"dist":{"shasum":"2ce862222b37c584879fa2b939a627e0e5858a49","tarball":"https://registry.npmjs.org/@agntn/harnesses/-/harnesses-0.1.1.tgz","fileCount":47,"integrity":"sha512-9DrtleGnZVQW0HX2ymEaWvX4VZypw6jqG68k6lhsc9kS9kqfwRcJ5O5Bc7F1gdL08kCpxqd6UHdJKnBSAkXneA==","signatures":[{"sig":"MEUCIDds2TGV/wHpoHsEfpuhAtUYENKSg+qJ1rqJybo0iRjKAiEAtotsdpkodSOcds472yIgtAQI4tuk7/ehoPRQ8iOSAdc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1625847},"main":"./dist/index.mjs","type":"module","types":"./dist/index.d.mts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs"},"./mcp":{"types":"./dist/mcp.d.mts","import":"./dist/mcp.mjs"}},"scripts":{"dev":"obuild --stub","docs":"pnpm --dir docs dev","lint":"pnpm build && oxlint . && oxfmt --check .","test":"vitest","build":"obuild","release":"pnpm test:run && pnpm build && changelogen --release --push","lint:fix":"pnpm build && oxlint . --fix && oxfmt . && pnpm build","test:run":"vitest --run","typecheck":"tsgo --noEmit --skipLibCheck && pnpm build && tsgo --noEmit --skipLibCheck -p tsconfig.extensions.json"},"_npmUser":{"name":"oritwoen","email":"dominik.opyd+1@gmail.com"},"repository":{"url":"git+https://github.com/agntn/harnesses.git","type":"git"},"description":"Metadata registry for AI coding harnesses: binaries, configs, sessions, and capabilities.","directories":{},"sideEffects":false,"_nodeVersion":"26.8.2","dependencies":{"citty":"^0.2.2","consola":"^3.4.2","typebox":"^1.3.19","smol-toml":"^1.8.0","@toon-format/toon":"^4.1.1","@modelcontextprotocol/sdk":"1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"oxfmt":"^0.65.0","obuild":"^0.4.38","oxlint":"^1.80.0","vitest":"^4.1.11","@agntn/ox":"^0.1.0","@types/node":"latest","changelogen":"^0.6.2","@oh-my-pi/pi-ai":"18.0.4","oxlint-tsgolint":"^7.0.2001","@oh-my-pi/omptype":"18.0.4","@earendil-works/pi-tui":"0.84.3","@oh-my-pi/pi-coding-agent":"18.0.4","@typescript/native-preview":"latest","@earendil-works/pi-coding-agent":"0.84.3"},"peerDependencies":{"@earendil-works/pi-tui":">=0.84.2 <1","@oh-my-pi/pi-coding-agent":">=18.0.0 <19","@earendil-works/pi-coding-agent":">=0.84.2 <1"},"peerDependenciesMeta":{"@earendil-works/pi-tui":{"optional":true},"@oh-my-pi/pi-coding-agent":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/harnesses_0.1.1_1789561098706_0.7106272735506332","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@agntn/harnesses","version":"0.2.0","author":"oritwoen (https://github.com/oritwoen)","license":"MIT","_id":"@agntn/harnesses@0.2.0","maintainers":[{"name":"oritwoen","email":"dominik.opyd+1@gmail.com"}],"homepage":"https://harnesses.agntn.dev","bugs":"https://github.com/agntn/harnesses/issues","pi":{"extensions":["./packages/pi/extensions/harnesses.ts"]},"bin":{"harnesses":"./dist/cli.mjs"},"omp":{"extensions":["./packages/omp/extensions/harnesses.ts"]},"dist":{"shasum":"95bac3d59f1a6be34dae1f1d03c393d8604be8e0","tarball":"https://registry.npmjs.org/@agntn/harnesses/-/harnesses-0.2.0.tgz","fileCount":47,"integrity":"sha512-RqSL7zvwDbb81nN7hN6j0YeFBHWZXirZusB3GhcWf9SbAxLR05ha7XD9ivvfZTlaFaL8JdNlL45JC5xcWu75og==","signatures":[{"sig":"MEYCIQDjn0tX4tRmLGRQLD2b5/ukSF1gk+i9nYj23ZtS3Khq/AIhAKgKLgYnS5MDS0hWy3ecjcH/cTReeC9BgiwXWs6Mn+Tq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDTWVbYblIZiyYBN8GcqhmJTlFiENE7auN1XReZd6BEEAIhAL9LSbYiIOpi0lZ75rd7+npUh0zKJ1mFFsoFmfzYMdc8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agntn%2fharnesses@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1639299},"main":"./dist/index.mjs","type":"module","types":"./dist/index.d.mts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs"},"./mcp":{"types":"./dist/mcp.d.mts","import":"./dist/mcp.mjs"}},"scripts":{"dev":"obuild --stub","docs":"pnpm --dir docs dev","lint":"pnpm build && oxlint . && oxfmt --check .","test":"vitest","build":"obuild","release":"pnpm test:run && pnpm build && changelogen --release --push","lint:fix":"pnpm build && oxlint . --fix && oxfmt . && pnpm build","test:run":"vitest --run","typecheck":"tsgo --noEmit --skipLibCheck && pnpm build && tsgo --noEmit --skipLibCheck -p tsconfig.extensions.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ccfae4b8-620d-4323-85ba-58e288bb1c0b"}},"repository":{"url":"git+https://github.com/agntn/harnesses.git","type":"git"},"description":"Metadata registry for AI coding harnesses: binaries, configs, sessions, and capabilities.","directories":{},"sideEffects":false,"dependencies":{"citty":"^0.2.2","consola":"^3.4.2","typebox":"^1.3.33","smol-toml":"^1.8.0","@toon-format/toon":"^4.1.1","@modelcontextprotocol/sdk":"1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"oxfmt":"^0.68.0","obuild":"^0.4.40","oxlint":"^1.83.0","vitest":"^5.0.1","@agntn/ox":"^0.1.0","typescript":"6.0.3","@types/node":"latest","changelogen":"^0.6.2","@oh-my-pi/pi-ai":"18.2.5","oxlint-tsgolint":"^7.0.2002","@oh-my-pi/omptype":"18.2.5","@earendil-works/pi-tui":"0.85.1","@oh-my-pi/pi-coding-agent":"18.2.5","@typescript/native-preview":"latest","@earendil-works/pi-coding-agent":"0.85.1"},"peerDependencies":{"@earendil-works/pi-tui":">=0.84.2 <1","@oh-my-pi/pi-coding-agent":">=18.0.0 <19","@earendil-works/pi-coding-agent":">=0.84.2 <1"},"peerDependenciesMeta":{"@earendil-works/pi-tui":{"optional":true},"@oh-my-pi/pi-coding-agent":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/harnesses_0.2.0_1789730257302_0.8375055280963983","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@agntn/harnesses","version":"0.2.1","author":"oritwoen (https://github.com/oritwoen)","license":"MIT","_id":"@agntn/harnesses@0.2.1","maintainers":[{"name":"oritwoen","email":"dominik.opyd+1@gmail.com"}],"homepage":"https://harnesses.agntn.dev","bugs":"https://github.com/agntn/harnesses/issues","pi":{"image":"https://harnesses.agntn.dev/image.png","extensions":["./packages/pi/extensions/harnesses.ts"]},"bin":{"harnesses":"./dist/cli.mjs"},"omp":{"extensions":["./packages/omp/extensions/harnesses.ts"]},"dist":{"shasum":"d316fca4fc47f4eea15233d0491422dcffedd967","tarball":"https://registry.npmjs.org/@agntn/harnesses/-/harnesses-0.2.1.tgz","fileCount":50,"integrity":"sha512-n9csuqMHyBu+jk1MQjdEAWYfqrv8ixHK2HEwp/jE8GVaeB2JF75PW1nKvQjK53bj6c3MXOG0VDpp+UXXHfnfeA==","signatures":[{"sig":"MEUCIQC3FzyazdGA6xPjYvPg6GAshpcnVqq9mbfD5fbDNXkJmQIgfrGOZ0Edq7C7SKq8DDhRUnImTsTOCcYwx4heJ9xAfLM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDz02tQ8+Nf5ojqsEC9VGpdwC4V1t/Xy0zuHBXsH1vTXgIhAI1qWB1Xp2O/ayRac5oXRZCdXCqLHtik/v+nd/pDjZH4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agntn%2fharnesses@0.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1705851},"main":"./dist/index.mjs","type":"module","types":"./dist/index.d.mts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs"},"./mcp":{"types":"./dist/mcp.d.mts","import":"./dist/mcp.mjs"}},"scripts":{"dev":"obuild --stub","docs":"pnpm --dir docs dev","lint":"pnpm build && oxlint . && oxfmt --check .","test":"vitest","build":"obuild","release":"pnpm test:run && pnpm build && changelogen --release --push","lint:fix":"pnpm build && oxlint . --fix && oxfmt . && pnpm build","test:run":"vitest --run","typecheck":"tsgo --noEmit --skipLibCheck && pnpm build && tsgo --noEmit --skipLibCheck -p tsconfig.extensions.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ccfae4b8-620d-4323-85ba-58e288bb1c0b"}},"repository":{"url":"git+https://github.com/agntn/harnesses.git","type":"git"},"description":"Metadata registry for AI coding harnesses: binaries, configs, sessions, and capabilities.","directories":{},"sideEffects":false,"dependencies":{"yaml":"2.9.1","citty":"0.2.2","consola":"3.4.2","typebox":"1.3.34","smol-toml":"1.8.0","@toon-format/toon":"4.1.1","@modelcontextprotocol/sdk":"1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"oxfmt":"0.68.0","obuild":"0.4.40","oxlint":"1.83.0","vitest":"5.0.1","@agntn/ox":"0.1.0","typescript":"6.0.3","@types/node":"latest","changelogen":"0.6.2","@oh-my-pi/pi-ai":"18.2.5","oxlint-tsgolint":"7.0.2002","@oh-my-pi/omptype":"18.2.5","@earendil-works/pi-tui":"0.85.1","@oh-my-pi/pi-coding-agent":"18.2.5","@typescript/native-preview":"latest","@earendil-works/pi-coding-agent":"0.85.1"},"peerDependencies":{"@earendil-works/pi-tui":">=0.84.2 <1","@oh-my-pi/pi-coding-agent":">=18.0.0 <19","@earendil-works/pi-coding-agent":">=0.84.2 <1"},"peerDependenciesMeta":{"@earendil-works/pi-tui":{"optional":true},"@oh-my-pi/pi-coding-agent":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/harnesses_0.2.1_1790107392054_0.5765058932886304","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"pi":{"image":"https://harnesses.agntn.dev/image.png","extensions":["./packages/pi/extensions/harnesses.ts"]},"_id":"@agntn/harnesses@0.3.0","bin":{"harnesses":"./dist/cli.mjs"},"omp":{"extensions":["./packages/omp/extensions/harnesses.ts"]},"bugs":"https://github.com/agntn/harnesses/issues","dist":{"shasum":"abcbdc2f88d21c7156f0284e471b1a4279cc4693","tarball":"https://registry.npmjs.org/@agntn/harnesses/-/harnesses-0.3.0.tgz","fileCount":50,"integrity":"sha512-OWXpZgN1Mi8AtXgm8m0jbZdnYfy1ONLM0ohvWKB69DYdnOaqS4K+jkAICqwQcKYZIeFd9LklkGFmvjTzvYu7Ww==","signatures":[{"sig":"MEQCIDMYh6zjQaXPHy3dITdsRfneBEBrdd80P1+3Fa6GiotxAiB9JpK8mWULxQVy2PLcRrqfi32nTVurboga846fHpm4wQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIGmDOuw0mE7r9hXoBOpVQ5qKhN5rzXihbhqaUDqMnWzWAiEAwB4rtmnISDX+4hSN2UFGblqjzWG+/lV+CuMqhu9p2KY="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@agntn%2fharnesses@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1749958},"main":"./dist/index.mjs","name":"@agntn/harnesses","type":"module","types":"./dist/index.d.mts","author":"oritwoen (https://github.com/oritwoen)","engines":{"node":">=24"},"exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs"},"./mcp":{"types":"./dist/mcp.d.mts","import":"./dist/mcp.mjs"}},"license":"MIT","scripts":{"dev":"obuild --stub","docs":"pnpm --dir docs dev","lint":"pnpm build && oxlint . && oxfmt --check .","test":"vitest","build":"obuild","release":"pnpm test:run && pnpm build && changelogen --release --push","lint:fix":"pnpm build && oxlint . --fix && oxfmt . && pnpm build","test:run":"vitest --run","typecheck":"tsgo --noEmit --skipLibCheck && pnpm build && tsgo --noEmit --skipLibCheck -p tsconfig.extensions.json"},"version":"0.3.0","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ccfae4b8-620d-4323-85ba-58e288bb1c0b"}},"homepage":"https://harnesses.agntn.dev","repository":{"url":"git+https://github.com/agntn/harnesses.git","type":"git"},"description":"Metadata registry for AI coding harnesses: binaries, configs, sessions, and capabilities.","directories":{},"maintainers":[{"name":"oritwoen","email":"dominik.opyd+1@gmail.com"}],"sideEffects":false,"dependencies":{"yaml":"2.9.1","citty":"0.2.2","consola":"3.4.2","typebox":"1.3.34","smol-toml":"1.8.0","@toon-format/toon":"4.1.1","@modelcontextprotocol/sdk":"1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"oxfmt":"0.68.0","obuild":"0.4.40","oxlint":"1.83.0","vitest":"5.0.1","@agntn/ox":"0.1.0","typescript":"6.0.3","@types/node":"latest","changelogen":"0.6.2","@oh-my-pi/pi-ai":"18.2.5","oxlint-tsgolint":"7.0.2002","@oh-my-pi/omptype":"18.2.5","@earendil-works/pi-tui":"0.85.1","@oh-my-pi/pi-coding-agent":"18.2.5","@typescript/native-preview":"latest","@earendil-works/pi-coding-agent":"0.85.1"},"peerDependencies":{"@earendil-works/pi-tui":">=0.84.2 <1","@oh-my-pi/pi-coding-agent":">=18.0.0 <19","@earendil-works/pi-coding-agent":">=0.84.2 <1"},"peerDependenciesMeta":{"@earendil-works/pi-tui":{"optional":true},"@oh-my-pi/pi-coding-agent":{"optional":true},"@earendil-works/pi-coding-agent":{"optional":true}},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/harnesses_0.3.0_1790196020542_0.998146491684625"}}},"time":{"created":"2026-08-31T18:09:27.530Z","modified":"2026-09-23T20:40:21.002Z","0.0.1":"2026-08-31T18:09:27.999Z","0.1.0":"2026-09-14T11:13:34.111Z","0.1.1":"2026-09-16T12:18:18.841Z","0.2.0":"2026-09-18T11:17:37.437Z","0.2.1":"2026-09-22T20:03:12.141Z","0.3.0":"2026-09-23T20:40:20.626Z"},"bugs":"https://github.com/agntn/harnesses/issues","author":"oritwoen (https://github.com/oritwoen)","license":"MIT","homepage":"https://harnesses.agntn.dev","repository":{"url":"git+https://github.com/agntn/harnesses.git","type":"git"},"description":"Metadata registry for AI coding harnesses: binaries, configs, sessions, and capabilities.","maintainers":[{"name":"oritwoen","email":"dominik.opyd+1@gmail.com"}],"readme":"# @agntn/harnesses\n\n[![npm version](https://npmx.dev/api/registry/badge/version/@agntn/harnesses)](https://npmx.dev/package/@agntn/harnesses)\n[![npm downloads](https://npmx.dev/api/registry/badge/downloads/@agntn/harnesses)](https://npmx.dev/package/@agntn/harnesses)\n[![license](https://npmx.dev/api/registry/badge/license/@agntn/harnesses)](https://npmx.dev/package/@agntn/harnesses)\n[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/agntn/harnesses)\n\n🧭 Thirteen coding CLIs, one map. You ask where Claude keeps skills, you get the path.\n\n> [!WARNING]\n> **@agntn/harnesses is pre-1.0.** Paths follow upstream CLIs that still move. Building on it now means pinning the version.\n\n## Why?\n\nClaude stores transcripts under a mangled copy of your cwd. Codex keeps TOML with comments you wanted to keep. Ask a model where Codex lives and it invents `.claude/`. So this is one registry: thirteen harnesses, same object, paths for your machine.\n\nThe rest of it sits on [harnesses.agntn.dev](https://harnesses.agntn.dev).\n\n## ✨ Features\n\n- 🧩 **Thirteen harnesses, one class.** Same fields on Claude, Codex, Pi and the rest.\n- 📂 **Every path has a receipt.** Scope, evidence level, and a platform tag when the OS actually differs.\n- 🔎 **Detects which CLI you're inside.** Environment variables first. Two project markers in one directory is `null`, not a guess.\n- ▶️ **Headless runs with real modes.** Advisor without tools, full agent, or a native read-only sandbox. A mode the CLI cannot enforce is rejected.\n- 🔌 **MCP across the dialects.** One master list at `~/.config/agntn/mcp.jsonc`. TOML edits keep the comments.\n- 🔗 **One AGENTS.md behind the global files.** Symlinks, so an edit through Claude or Gemini is the same bytes.\n- 🗂️ **One prompt folder, supported harnesses.** Markdown lives under XDG data; Gemini TOML is generated from it.\n- 📜 **Session types when the format is stable.** JSONL, SQLite, JSON. Unstable shapes stay `unknown`.\n- 🤖 **Ten tools, three doors.** MCP, Pi and OMP call the same executors.\n\n## 📦 Install\n\n```bash\npnpm add @agntn/harnesses\n```\n\nNode.js 24 or newer.\n\n## 🚀 First call\n\n```bash\nnpx @agntn/harnesses detect\n```\n\n```\n  System Scan\n\n    ● antigravity     Google Antigravity CLI  v1.2.5\n    ● claude          Anthropic Claude Code  v2.1.276\n    ● codex           OpenAI Codex CLI  v0.154.0\n    ○ cursor          Cursor\n    ● freebuff        Freebuff\n    ○ gemini          Google Gemini CLI\n    ○ github-copilot  GitHub Copilot\n    ● grok            xAI Grok CLI  v1.0.34\n    ● mastracode      Mastra Code\n    ● omp             OMP (oh-my-pi)  v18.2.4\n    ● opencode        OpenCode CLI  v2.0.5\n    ● prime-agent     Prime Agent  v0.9.5\n    ● pi              Pi Coding Agent  v0.85.1\n```\n\nNo key, no config. No network either. `detect` looks at `PATH`. Filled dot is installed, hollow is not. After `pnpm add`, the same command is `pnpm exec harnesses`, or install it once with `pnpm add -g @agntn/harnesses`.\n\nSame binary, more commands:\n\n```bash\nharnesses list\nharnesses info claude\nharnesses paths pi\nharnesses models pi gpt-5.4 --json\nharnesses run claude \"review this design\"\nharnesses run codex --read-only \"review this\"\nharnesses mcp-servers list\nharnesses agents sync --check\nharnesses prompts sync --check\n```\n\n`run` without `--tools` is the advisor. `--tools` is the full agent. `--read-only` asks the CLI for a sandbox and implies tools, so pairing it with `--no-tools` is an error. Timeouts, `--cwd` and `--model` sit in the [CLI guide](https://harnesses.agntn.dev/guide/cli).\n\n### Commands\n\n| Command        | What it does                                           | Example                                     |\n| -------------- | ------------------------------------------------------ | ------------------------------------------- |\n| `list`         | Every known harness, id and name                       | `harnesses list`                            |\n| `detect`       | Which ones are installed, with versions                | `harnesses detect`                          |\n| `info`         | Registry entry: modes, capabilities, path templates    | `harnesses info claude`                     |\n| `paths`        | Those templates expanded for this machine              | `harnesses paths pi`                        |\n| `models`       | Models the harness can use, through its native listing | `harnesses models pi`                       |\n| `run`          | One prompt through headless mode                       | `harnesses run claude \"review this design\"` |\n| `mcp-servers`  | MCP servers across the config dialects                 | `harnesses mcp-servers list`                |\n| `agents sync`  | Link global instructions files to one master           | `harnesses agents sync --check`             |\n| `prompts sync` | Sync one Markdown prompt directory across harnesses    | `harnesses prompts sync --check`            |\n| `mcp`          | The MCP server on stdio                                | `harnesses mcp`                             |\n\n`list`, `detect`, `info`, `paths` and `models` take `--json` or `--toon`. `run --json` is different: that one is the harness's own structured output.\n\n## 🧠 Library\n\n```ts\nimport { getHarness, detectHarness } from \"@agntn/harnesses\";\n\nconst claude = getHarness(\"claude\");\nconst paths = claude.resolve({ platform: \"linux\", homeDir: \"/home/dev\" });\nconsole.log(paths.skills);\nconsole.log(paths.temp, claude.envOverrides);\n\nconst active = detectHarness();\nif (active) console.log(active.id);\n\nawait getHarness(\"codex\").invoke(\"Review this patch\", { readOnly: true });\n\nconst agy = getHarness(\"antigravity\");\nconst [model] = (await agy.listModels({ search: \"gemini\" })).models;\nif (model) await agy.invoke(\"Review this patch\", { tools: true, model: agy.modelSelector(model) });\n```\n\n`temp` is where a harness drops its own temp files, and `envOverrides` names the variables that move its directories. `claude.resolve().temp` follows `CLAUDE_CODE_TMPDIR` when it's set, which is handy when `/tmp` is tmpfs and Claude's scratchpads are quietly eating RAM.\n\nThat's most of it, really. `getHarness` wants an exact id. `detectHarness` uses env vars first, then a single project marker. `invoke()` talks to the CLI. `listModels()` asks it what it can run, and `modelSelector()` turns one of those into what `model` takes, since Pi wants `provider/id` and Antigravity the bare id. A mode the CLI cannot run comes back as an error, not a quieter one. The rest: [Registry](https://harnesses.agntn.dev/guide/registry), [Invoke](https://harnesses.agntn.dev/guide/invoke), [MCP servers](https://harnesses.agntn.dev/guide/mcp-servers), [Instructions files](https://harnesses.agntn.dev/guide/agents-sync).\n\n### Prompt templates\n\nPut canonical Markdown templates in `$XDG_DATA_HOME/agntn/prompts/`, or\n`~/.local/share/agntn/prompts/` when `XDG_DATA_HOME` is unset. Then sync every\nsupported harness:\n\n```bash\nharnesses prompts sync --check\nharnesses prompts sync\n```\n\nFor a Markdown harness, the whole prompt directory becomes one symlink to that\ndirectory, so a template added through any harness shows up in all of them.\nGemini gets generated TOML commands, with `$ARGUMENTS` translated to `{{args}}`,\nand its commands directory keeps nothing else. Whatever was there before is\nbacked up under the same XDG data tree first.\n\n`getHarness(\"pi\").promptTemplates` still lists every verified reusable prompt\nlocation. `promptTemplateSyncTarget` is the single stable user destination the\nsync owns for that harness. Formats, frontmatter and CLI limits are in the\n[registry guide](https://harnesses.agntn.dev/guide/registry#prompt-templates).\n\n## 🗺️ Harnesses\n\n| ID               | Name                   | Project skills         |\n| ---------------- | ---------------------- | ---------------------- |\n| `antigravity`    | Google Antigravity CLI | `.agents/skills/`      |\n| `claude`         | Anthropic Claude Code  | `.claude/skills/`      |\n| `codex`          | OpenAI Codex CLI       | `.codex/skills/`       |\n| `cursor`         | Cursor                 | `.cursor/skills/`      |\n| `freebuff`       | Freebuff               | `.agents/skills/`      |\n| `gemini`         | Google Gemini CLI      | `.gemini/skills/`      |\n| `github-copilot` | GitHub Copilot         | `.github/skills/`      |\n| `grok`           | xAI Grok CLI           | `.grok/skills/`        |\n| `mastracode`     | Mastra Code            | `.mastracode/skills/`  |\n| `omp`            | OMP (oh-my-pi)         | `.omp/skills/`         |\n| `opencode`       | OpenCode CLI           | `.opencode/skills/`    |\n| `prime-agent`    | Prime Agent            | `.prime/agent/skills/` |\n| `pi`             | Pi Coding Agent        | `.pi/skills/`          |\n\nThat's the project directory. Most of them also keep a copy under your home directory, and a few read someone else's skills folder on purpose. Sessions, hooks, audio, video, the whole sheet: [Harnesses](https://harnesses.agntn.dev/harnesses).\n\n## 🤖 Agents\n\n```bash\nharnesses mcp\npi install npm:@agntn/harnesses\nomp install @agntn/harnesses\n```\n\n```json\n{\n  \"mcpServers\": {\n    \"harnesses\": { \"command\": \"npx\", \"args\": [\"-y\", \"@agntn/harnesses\", \"mcp\"] }\n  }\n}\n```\n\nTen tools, the same ten on MCP, Pi and OMP. `harnesses_detect`, `harnesses_info` and `harnesses_mcp_list` only read. `harnesses_run` is the one that can spend tokens. `tools` is required, so the model has to pick advisor or agent. What each call returns is on the [Agents page](https://harnesses.agntn.dev/guide/agents).\n\n## 🚫 What this does not do\n\nIt does not install skills, drive a browser, or run a sandbox of its own. `invoke()` is the harness CLI plus process cleanup. The wide, thin agent list is [unagent](https://github.com/onmax/unagent).\n\n## 🧩 Adding a harness\n\nWant a fourteenth? One class extending `Harness`, then `registerHarness`. `getHarness`, the CLI and the tools pick it up. How to write that class: [Custom harnesses](https://harnesses.agntn.dev/guide/custom).\n\n## 🛠️ Development\n\n```bash\npnpm install\npnpm lint        # builds first, then oxlint and oxfmt --check\npnpm lint:fix\npnpm typecheck\npnpm test:run\npnpm build       # obuild\npnpm docs        # the Docus site, bundles src/ itself\n```\n\n## 💛 Thanks\n\nAnthropic and OpenAI both run programs this package was built with. [Claude for Open Source](https://claude.com/contact-sales/claude-for-oss) and [Codex for Open Source](https://developers.openai.com/community/codex-for-oss). Thank you <3\n\n## 📄 License\n\n[MIT](./LICENSE)\n","readmeFilename":""}