{"_id":"@daily-nerd/vitni","_rev":"7-5ebf78b866f5456406c060004d55540f","name":"@daily-nerd/vitni","dist-tags":{"latest":"0.5.3"},"versions":{"0.2.2":{"name":"@daily-nerd/vitni","version":"0.2.2","keywords":["ai-agents","mcp","a2a","agent-receipts","attestation","provenance","tamper-evident","jws","ed25519","jcs","verifiable","audit"],"author":{"name":"Daily-Nerd"},"license":"Apache-2.0","_id":"@daily-nerd/vitni@0.2.2","maintainers":[{"name":"kibukx","email":"alangil505@gmail.com"}],"homepage":"https://github.com/Daily-Nerd/vitni#readme","bugs":{"url":"https://github.com/Daily-Nerd/vitni/issues"},"bin":{"vitni-verify":"dist/cli.js"},"dist":{"shasum":"2ce5b52266ee7313e11a6fc29dc7a21f4a21c1bb","tarball":"https://registry.npmjs.org/@daily-nerd/vitni/-/vitni-0.2.2.tgz","fileCount":52,"integrity":"sha512-fF0DgJq9bqjA11nAUfPD3Z3OTDkdGrTXSgLd0KjcxKgALTlskV2BUcyiTpOdOjgYRjsNPequW+0XMxnN/On4ug==","signatures":[{"sig":"MEQCIEtYF9g9nHXJaASvtEppAVjoHRKT0kgSRv2SOifBSPdqAiAyGNQSTC9UlRQTc3sHt6PlyEnRW7lCHy3AtyAdYCx8MQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":110416},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./cli":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"}},"gitHead":"7b22f9f8395f209ceb89bed0d45a7b4b7f4c4137","scripts":{"test":"node --test test/*.test.mjs","build":"tsc","pretest":"npm run build"},"_npmUser":{"name":"kibukx","email":"alangil505@gmail.com"},"repository":{"url":"git+https://github.com/Daily-Nerd/vitni.git","type":"git","directory":"ts"},"_npmVersion":"11.17.0","description":"The witness to agent actions (formerly veritrail) — signed, tamper-evident execution receipts for AI agents (MCP & A2A): JWS signing/verification, JCS canonicalization, lineage chains, and co-signing middleware.","directories":{},"_nodeVersion":"22.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.5","@a2a-js/sdk":"^0.3.13","@types/node":"^25.9.1","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/vitni_0.2.2_1783573965090_0.10292495200686158","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@daily-nerd/vitni","version":"0.3.0","keywords":["ai-agents","mcp","a2a","agent-receipts","attestation","provenance","tamper-evident","jws","ed25519","jcs","verifiable","audit"],"author":{"name":"Daily-Nerd"},"license":"Apache-2.0","_id":"@daily-nerd/vitni@0.3.0","maintainers":[{"name":"kibukx","email":"alangil505@gmail.com"}],"homepage":"https://github.com/Daily-Nerd/vitni#readme","bugs":{"url":"https://github.com/Daily-Nerd/vitni/issues"},"bin":{"vitni-verify":"dist/cli.js"},"dist":{"shasum":"f49601484f1599e39c0f439a7128033f0696db64","tarball":"https://registry.npmjs.org/@daily-nerd/vitni/-/vitni-0.3.0.tgz","fileCount":46,"integrity":"sha512-G+msITOa7XQcfBbmbMNX96AfwiPEv1wMyowhQg7+L5icbyePvC+PICLxwZiy1hrahzeIYw7jaMsjuD2SRFcx/w==","signatures":[{"sig":"MEQCIEBlB1j7zylEkfxpc+o9Utkda01rsKrxVeImkiQqp2oqAiAv1lae6zaah+8Doi9eUNjjb1SAKLHHDptO6JUs6xUGvw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@daily-nerd%2fvitni@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":92185},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./cli":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"}},"gitHead":"fe7a3e5ac7692effc204d33dfc41fde5d935e612","scripts":{"test":"node --test test/*.test.mjs","build":"tsc","pretest":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7b8c8760-0751-403d-bd1f-3cdd477cbbc3"}},"repository":{"url":"git+https://github.com/Daily-Nerd/vitni.git","type":"git","directory":"ts"},"_npmVersion":"11.18.0","description":"The witness to agent actions (formerly veritrail) — signed, tamper-evident execution receipts for AI agents (MCP & A2A): JWS signing/verification, JCS canonicalization, lineage chains, and co-signing middleware.","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.5","@a2a-js/sdk":"^0.3.13","@types/node":"^25.9.1","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/vitni_0.3.0_1783574431239_0.8379250822387381","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@daily-nerd/vitni","version":"0.4.0","keywords":["ai-agents","mcp","a2a","agent-receipts","attestation","provenance","tamper-evident","jws","ed25519","jcs","verifiable","audit"],"author":{"name":"Daily-Nerd"},"license":"Apache-2.0","_id":"@daily-nerd/vitni@0.4.0","maintainers":[{"name":"kibukx","email":"alangil505@gmail.com"}],"homepage":"https://github.com/Daily-Nerd/vitni#readme","bugs":{"url":"https://github.com/Daily-Nerd/vitni/issues"},"bin":{"vitni-verify":"dist/cli.js"},"dist":{"shasum":"4bcb98b2d31e824fbcc8cae13ed2dfefb3ae1c01","tarball":"https://registry.npmjs.org/@daily-nerd/vitni/-/vitni-0.4.0.tgz","fileCount":53,"integrity":"sha512-yJfG/SfAA999CPikSAPXbVFKQHpGXMkl3mhVjUieVcJe9b7kD8NhNYTfzhipb+ewe0KQOnUrmdsxdk4ySnKxtQ==","signatures":[{"sig":"MEUCIQCZ8/K/6O503qc6YU/dsZrvuGT58VjG407Rlo/x5Tlr2AIgcoBi1ZU99wtrfdY7e1lSJPpyvibQ3TojQIim3GLCV8I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@daily-nerd%2fvitni@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":113663},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./cli":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"}},"gitHead":"36be190a559f329f21ae57a7c29e0fe78b6e13e3","scripts":{"test":"node --test test/*.test.mjs","build":"tsc","pretest":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7b8c8760-0751-403d-bd1f-3cdd477cbbc3"}},"repository":{"url":"git+https://github.com/Daily-Nerd/vitni.git","type":"git","directory":"ts"},"_npmVersion":"11.18.0","description":"The witness to agent actions (formerly veritrail) — signed, tamper-evident execution receipts for AI agents (MCP & A2A): JWS signing/verification, JCS canonicalization, lineage chains, and co-signing middleware.","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.5","@a2a-js/sdk":"^0.3.13","@types/node":"^25.9.1","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/vitni_0.4.0_1783620544798_0.7699826356747526","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@daily-nerd/vitni","version":"0.5.0","keywords":["ai-agents","mcp","a2a","agent-receipts","attestation","provenance","tamper-evident","jws","ed25519","jcs","verifiable","audit"],"author":{"name":"Daily-Nerd"},"license":"Apache-2.0","_id":"@daily-nerd/vitni@0.5.0","maintainers":[{"name":"kibukx","email":"alangil505@gmail.com"}],"homepage":"https://github.com/Daily-Nerd/vitni#readme","bugs":{"url":"https://github.com/Daily-Nerd/vitni/issues"},"bin":{"vitni-verify":"dist/cli.js"},"dist":{"shasum":"8cca2d21e1ec276741c68c1a7839a894dbcdf335","tarball":"https://registry.npmjs.org/@daily-nerd/vitni/-/vitni-0.5.0.tgz","fileCount":56,"integrity":"sha512-IswXy56cFuaTAQ64Uwm5wJ8FdfVdKde5T1F1GsxvoOT/3hLCB1xtI2iuWpb5DfaaL6FAz0NbbokDX1jjo9MWhQ==","signatures":[{"sig":"MEQCIArCHjtkhO7IhI8BWLrhC/eFqavLECWlzD8aCOpJa++2AiAFO1U2VPiIhBxyDdImn9x4OB8EqB5V8pfEBZ1ch9Ue1A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@daily-nerd%2fvitni@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":120446},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./cli":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"}},"gitHead":"cdae5eefa85737ded71399e86ad403a5b70edf08","scripts":{"test":"node --test test/*.test.mjs","build":"tsc","pretest":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7b8c8760-0751-403d-bd1f-3cdd477cbbc3"}},"repository":{"url":"git+https://github.com/Daily-Nerd/vitni.git","type":"git","directory":"ts"},"_npmVersion":"11.18.0","description":"The witness to agent actions (formerly veritrail) — signed, tamper-evident execution receipts for AI agents (MCP & A2A): JWS signing/verification, JCS canonicalization, lineage chains, and co-signing middleware.","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.5","@a2a-js/sdk":"^0.3.13","@types/node":"^25.9.1","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/vitni_0.5.0_1783652683090_0.8532308932022852","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@daily-nerd/vitni","version":"0.5.1","keywords":["ai-agents","mcp","a2a","agent-receipts","attestation","provenance","tamper-evident","jws","ed25519","jcs","verifiable","audit"],"author":{"name":"Daily-Nerd"},"license":"Apache-2.0","_id":"@daily-nerd/vitni@0.5.1","maintainers":[{"name":"kibukx","email":"alangil505@gmail.com"}],"homepage":"https://github.com/Daily-Nerd/vitni#readme","bugs":{"url":"https://github.com/Daily-Nerd/vitni/issues"},"bin":{"vitni-verify":"dist/cli.js"},"dist":{"shasum":"82d6beed8c50c05ab6c2dbc7737d4eb04857cc3d","tarball":"https://registry.npmjs.org/@daily-nerd/vitni/-/vitni-0.5.1.tgz","fileCount":56,"integrity":"sha512-8TY/16guAO5sbc4va/uh4m/B3HXg1uiDWXf7VP6GDMa3Ci6QyZ3pMt9QpJAOlv8y0CRr2WJ5e0SSFdURWzxwDA==","signatures":[{"sig":"MEQCIDutQrOuiv+6bteiGxqU0OiDSZru8xfF28tICI7eKbqXAiBbr0Op+lSD4bO7SLWnVEPCvzDdevjnNegl9oX4oFlkEw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@daily-nerd%2fvitni@0.5.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":120773},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./cli":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"}},"gitHead":"f0fab9cb8d0f7b94fc0defd3318a902ad18dae9a","scripts":{"test":"node --test test/*.test.mjs","build":"tsc","pretest":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7b8c8760-0751-403d-bd1f-3cdd477cbbc3"}},"repository":{"url":"git+https://github.com/Daily-Nerd/vitni.git","type":"git","directory":"ts"},"_npmVersion":"11.18.0","description":"The witness to agent actions (formerly veritrail) — signed, tamper-evident execution receipts for AI agents (MCP & A2A): JWS signing/verification, JCS canonicalization, lineage chains, and co-signing middleware.","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.5","@a2a-js/sdk":"^0.3.13","@types/node":"^25.9.1","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/vitni_0.5.1_1783799052420_0.987425519217749","host":"s3://npm-registry-packages-npm-production"}},"0.5.2":{"name":"@daily-nerd/vitni","version":"0.5.2","keywords":["ai-agents","mcp","a2a","agent-receipts","attestation","provenance","tamper-evident","jws","ed25519","jcs","verifiable","audit"],"author":{"name":"Daily-Nerd"},"license":"Apache-2.0","_id":"@daily-nerd/vitni@0.5.2","maintainers":[{"name":"kibukx","email":"alangil505@gmail.com"}],"homepage":"https://github.com/Daily-Nerd/vitni#readme","bugs":{"url":"https://github.com/Daily-Nerd/vitni/issues"},"bin":{"vitni-verify":"dist/cli.js"},"dist":{"shasum":"86c6c09c2969223c784b26b7b7bc7a66423f62ad","tarball":"https://registry.npmjs.org/@daily-nerd/vitni/-/vitni-0.5.2.tgz","fileCount":56,"integrity":"sha512-ogTPHuaanucNR3rqMeJUfREe7efg3o1FdJTyfkJmrYJ+azKZQZ2+SqWZnekpZo9gYfC47d2F7AI4yBdT+JNpvg==","signatures":[{"sig":"MEYCIQDVoL2YUf0skkCd2yjPytb8q8sPy1oHR+llC/qipC5b0AIhAOUn4XRfdmyRVWonArC0Jm7nT1XHE2zeBhQkp2SYMC5u","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@daily-nerd%2fvitni@0.5.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":120357},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./cli":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"}},"gitHead":"16f22fc80384326c97aa486756dd7c359d79d0b9","scripts":{"test":"node --test test/*.test.mjs","build":"tsc","pretest":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7b8c8760-0751-403d-bd1f-3cdd477cbbc3"}},"repository":{"url":"git+https://github.com/Daily-Nerd/vitni.git","type":"git","directory":"ts"},"_npmVersion":"11.19.0","description":"The witness to agent actions — signed, tamper-evident execution receipts for AI agents (MCP & A2A): JWS signing/verification, JCS canonicalization, lineage chains, and co-signing middleware.","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.5","@a2a-js/sdk":"^0.3.13","@types/node":"^25.9.1","@modelcontextprotocol/sdk":"^1.29.0"},"_npmOperationalInternal":{"tmp":"tmp/vitni_0.5.2_1785383626580_0.21785555860483452","host":"s3://npm-registry-packages-npm-production"}},"0.5.3":{"name":"@daily-nerd/vitni","version":"0.5.3","description":"The witness to agent actions — signed, tamper-evident execution receipts for AI agents (MCP & A2A): JWS signing/verification, JCS canonicalization, lineage chains, and co-signing middleware.","type":"module","main":"dist/index.js","types":"dist/index.d.ts","bin":{"vitni-verify":"dist/cli.js"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./cli":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"}},"scripts":{"build":"tsc","test":"node --test test/*.test.mjs","pretest":"npm run build"},"engines":{"node":">=18"},"license":"Apache-2.0","author":{"name":"Daily-Nerd"},"repository":{"type":"git","url":"git+https://github.com/Daily-Nerd/vitni.git","directory":"ts"},"homepage":"https://github.com/Daily-Nerd/vitni#readme","bugs":{"url":"https://github.com/Daily-Nerd/vitni/issues"},"keywords":["ai-agents","mcp","a2a","agent-receipts","attestation","provenance","tamper-evident","jws","ed25519","jcs","verifiable","audit"],"publishConfig":{"access":"public"},"devDependencies":{"@a2a-js/sdk":"^0.3.13","@modelcontextprotocol/sdk":"^1.29.0","@types/node":"^25.9.1","typescript":"^5.4.5"},"gitHead":"10fb305724baf3e7f7c5e24b3ac7a60d645dd0cd","_id":"@daily-nerd/vitni@0.5.3","_nodeVersion":"20.20.2","_npmVersion":"11.19.1","dist":{"integrity":"sha512-+JqmnwQ/qoFxYLvUzVFTsNojMzRv+1YAIpWobrKzxAX2iu1u7i4PH+lbdM7Kbipe/uPm4bt89TgI9LpCbqnGBg==","shasum":"ea0d39ee9d7d73c51e82784207bc7f867e6a5667","tarball":"https://registry.npmjs.org/@daily-nerd/vitni/-/vitni-0.5.3.tgz","fileCount":59,"unpackedSize":124050,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@daily-nerd%2fvitni@0.5.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIHorAR/K4VXjhCUKwtUwS51bMF9PCDQ4+cPIFHYfJLezAiAC51eK/9s48DZcnvy1ss6nL869rA2cqiMfvPJ7/9b1Rw=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7b8c8760-0751-403d-bd1f-3cdd477cbbc3"}},"directories":{},"maintainers":[{"name":"kibukx","email":"alangil505@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/vitni_0.5.3_1787903165200_0.07266391201076594"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-09T05:12:44.948Z","modified":"2026-08-28T07:46:05.701Z","0.2.2":"2026-07-09T05:12:45.221Z","0.3.0":"2026-07-09T05:20:31.376Z","0.4.0":"2026-07-09T18:09:04.957Z","0.5.0":"2026-07-10T03:04:43.272Z","0.5.1":"2026-07-11T19:44:12.561Z","0.5.2":"2026-07-30T03:53:46.737Z","0.5.3":"2026-08-28T07:46:05.331Z"},"bugs":{"url":"https://github.com/Daily-Nerd/vitni/issues"},"author":{"name":"Daily-Nerd"},"license":"Apache-2.0","homepage":"https://github.com/Daily-Nerd/vitni#readme","keywords":["ai-agents","mcp","a2a","agent-receipts","attestation","provenance","tamper-evident","jws","ed25519","jcs","verifiable","audit"],"repository":{"type":"git","url":"git+https://github.com/Daily-Nerd/vitni.git","directory":"ts"},"description":"The witness to agent actions — signed, tamper-evident execution receipts for AI agents (MCP & A2A): JWS signing/verification, JCS canonicalization, lineage chains, and co-signing middleware.","maintainers":[{"name":"kibukx","email":"alangil505@gmail.com"}],"readme":"# @daily-nerd/vitni\n\n**vitni** (Old Norse: *witness*) — signed, tamper-evident execution receipts for AI agents, under MCP and beside A2A.\n\nWhen an agent performs an action, the performer emits a small, signed, content-addressed **receipt** of what it did, what it returned, and what it cost. Anyone can verify that receipt independently — offline — walk a multi-hop chain of them, and replay the attested timeline.\n\nZero runtime dependencies (`node:crypto` only). Byte-identical with the independent [Go implementation](https://github.com/Daily-Nerd/vitni/tree/main/go) on a public conformance suite.\n\n## Install\n\n```sh\nnpm i @daily-nerd/vitni\n```\n\n## Use\n\n```ts\nimport { signCommand, verify, hashOf } from \"@daily-nerd/vitni\";\n\n// the performer signs what it did (signCommand: seed-in-hand signing;\n// MCP servers use the vitniToolResult middleware instead — see quickstart)\nconst { signed_receipt } = signCommand({\n  receipt: {\n    binding: \"mcp\",\n    method: \"mcp:add\",\n    performer_id: \"srv-demo\",\n    inputs_hash: hashOf(params),\n    outputs_hash: hashOf(result),\n    cost: { tokens: \"0\", usd_micros: \"0\", wall_ms: \"3\", rail_ref: null },\n    // ...see the spec for the full receipt object\n  },\n  kid: \"key-1\",\n  private_key_b64: myEd25519SeedB64,   // 32-byte Ed25519 seed, base64\n});\n\n// anyone verifies it independently — offline\nconst verdict = verify({ signed_receipt, keys });  // -> { valid: true, reason: \"ok\" }\n```\n\nMCP servers: attach receipts to tool results via the co-signing middleware (one `_meta` field, no transport changes). A2A: artifact-metadata binding. See the [quickstart](https://github.com/Daily-Nerd/vitni/blob/main/docs/QUICKSTART.md).\n\n## CLI\n\nThe package ships `vitni-verify` — a standalone CLI (JSON on stdin, one JCS-canonical line on stdout) covering keygen, signing, verification, and the conformance commands:\n\n```sh\necho '{}' | vitni-verify keygen        # Ed25519 keypair + ready-to-paste verify JWK\nvitni-verify verify < verify-input.json\n```\n\n## What it proves — and what it does NOT\n\n**Proves:** performer non-repudiation, response-byte integrity, verifiable cost, tamper-evident multi-hop lineage.\n\n**Does NOT prove:** that the action was correct or non-hallucinated, that a world side-effect happened, or intent integrity. It is *check-me, not trust-me*.\n\n## Links\n\n- **Spec:** [DESIGN.md](https://github.com/Daily-Nerd/vitni/blob/main/docs/DESIGN.md) — receipt object, canonicalization (RFC 8785 JCS), verification algorithm, chain semantics, bindings\n- **Conformance suite:** language-agnostic vectors; any implementation that passes is interoperable\n- **Repository:** https://github.com/Daily-Nerd/vitni\n\nApache-2.0.\n","readmeFilename":"README.md"}