{"_id":"@5dive/openagent","_rev":"12-f33db14d6179af72fb46c0fc2e378d6d","name":"@5dive/openagent","dist-tags":{"latest":"0.37.0"},"versions":{"0.1.0":{"name":"@5dive/openagent","version":"0.1.0","keywords":["openagent","persona","agent","validator","json-schema","ai"],"license":"MIT","_id":"@5dive/openagent@0.1.0","maintainers":[{"name":"lodar","email":"info@5dive.com"}],"homepage":"https://github.com/5dive-ai/openagent#readme","bugs":{"url":"https://github.com/5dive-ai/openagent/issues"},"bin":{"openagent":"bin/openagent.js"},"dist":{"shasum":"5c18a702b2fb95466d6d530f9597ddf09bf775f1","tarball":"https://registry.npmjs.org/@5dive/openagent/-/openagent-0.1.0.tgz","fileCount":10,"integrity":"sha512-OjvNmLsRuuAlEHkHxK7OrfFJD9gYwnll+lPyN+tRXmocObNXHD8Mcg5OpfyVEFkYK8MPtMNpffxFG3FNqMekhg==","signatures":[{"sig":"MEQCIASVtCG/18V61Q4SI9gba6pMN5rkt1c/5ksPRKB75zHRAiAQyY/GfFJAnDQ7adu/klI9QGFHPrDR5ZHS2gbeKvyMTA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1259144},"type":"commonjs","engines":{"node":">=18"},"gitHead":"0de9be82de90c02bbaa851f075282ddd0f98bfc6","scripts":{"test":"node test/run.js"},"_npmUser":{"name":"lodar","email":"info@5dive.com"},"repository":{"url":"git+https://github.com/5dive-ai/openagent.git","type":"git"},"_npmVersion":"10.9.4","description":"Validator CLI for the OpenAgent persona spec (v0.1) — validate a *.persona.yaml against the schema.","directories":{},"_nodeVersion":"22.22.1","dependencies":{"ajv":"^8.17.1","yaml":"^2.5.1","ajv-formats":"^3.0.1","@resvg/resvg-js":"^2.6.2"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/openagent_0.1.0_1782230703658_0.5101210051727263","host":"s3://npm-registry-packages-npm-production"}},"0.18.0":{"name":"@5dive/openagent","version":"0.18.0","keywords":["openagent","persona","agent","validator","json-schema","ai"],"license":"MIT","_id":"@5dive/openagent@0.18.0","maintainers":[{"name":"lodar","email":"info@5dive.com"}],"homepage":"https://github.com/5dive-ai/openagent#readme","bugs":{"url":"https://github.com/5dive-ai/openagent/issues"},"bin":{"openagent":"bin/openagent.js"},"dist":{"shasum":"a40c24242d7be2874f9e99900887496e73c10695","tarball":"https://registry.npmjs.org/@5dive/openagent/-/openagent-0.18.0.tgz","fileCount":32,"integrity":"sha512-OVhiVB8FF8E9WleKkzVmYHISHrJ2xsSgragH90fUPsobb/atTFk4dTHFEnvLtq7rYO0SujT8mffYbpyRpLNq7w==","signatures":[{"sig":"MEUCIBoMrlDXccYd2rTdMCtNcsU4ByXGgLjCpaoEgnRr8Ah6AiEA0SB3n/iM0BFpx076Nt0PgFXY4lNMneUFAwvaFK53MXE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5819786},"type":"commonjs","engines":{"node":">=18"},"gitHead":"9cfc112877ffe4ac1d2cdd085cbbb4534dc280a0","scripts":{"test":"node test/run.js","test:conformance":"node test/conformance.js"},"_npmUser":{"name":"lodar","email":"info@5dive.com"},"repository":{"url":"git+https://github.com/5dive-ai/openagent.git","type":"git"},"_npmVersion":"10.9.4","description":"CLI for the OpenAgent persona spec (v0.2) — validate a persona, render a rarity-tiered trading card (static or animated), compute its tier, speak it via TTS, emit a Flow/Veo scene prompt, sign + verify per-file provenance and remix lineage, and verify the","directories":{},"_nodeVersion":"22.22.1","dependencies":{"ajv":"^8.17.1","yaml":"^2.5.1","ajv-formats":"^3.0.1","qrcode-generator":"^2.0.4"},"_hasShrinkwrap":false,"optionalDependencies":{"@resvg/resvg-js":"^2.6.2"},"_npmOperationalInternal":{"tmp":"tmp/openagent_0.18.0_1782309773472_0.8074329345478761","host":"s3://npm-registry-packages-npm-production"}},"0.22.0":{"name":"@5dive/openagent","version":"0.22.0","keywords":["openagent","persona","agent","validator","json-schema","ai"],"license":"MIT","_id":"@5dive/openagent@0.22.0","maintainers":[{"name":"lodar","email":"info@5dive.com"}],"homepage":"https://github.com/5dive-ai/openagent#readme","bugs":{"url":"https://github.com/5dive-ai/openagent/issues"},"bin":{"openagent":"bin/openagent.js"},"dist":{"shasum":"2c91b988dae2430e09b2f4032045f1e9e7fbac1b","tarball":"https://registry.npmjs.org/@5dive/openagent/-/openagent-0.22.0.tgz","fileCount":32,"integrity":"sha512-KBORU2DRw2s+BY8goF+Z/jGw7pRFte1ltzwsvYadnOmQHKVUfZ+aFtbDSDrvTC6tYuf1otI06M/Y80r4pNpyPQ==","signatures":[{"sig":"MEUCIQCyQMPBO+KSTPqTW9Z2djQ3mX88d7vKuCSjxl4R1rbM3gIgWqDCsdTAi5dZiGTj5ztVzj7nqDlllcE0aGAxXlGP12A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5834990},"type":"commonjs","engines":{"node":">=18"},"gitHead":"0eee41631266c6d7c199564c92dd417c93e0f585","scripts":{"test":"node test/run.js","test:conformance":"node test/conformance.js"},"_npmUser":{"name":"lodar","email":"info@5dive.com"},"repository":{"url":"git+https://github.com/5dive-ai/openagent.git","type":"git"},"_npmVersion":"10.9.4","description":"CLI for the OpenAgent persona spec (v0.2) — validate a persona, render a rarity-tiered trading card (static or animated), compute its tier, speak it via TTS, emit a Flow/Veo scene prompt, sign + verify per-file provenance and remix lineage, and verify the","directories":{},"_nodeVersion":"22.22.1","dependencies":{"ajv":"^8.17.1","yaml":"^2.5.1","ajv-formats":"^3.0.1","qrcode-generator":"^2.0.4"},"_hasShrinkwrap":false,"optionalDependencies":{"@resvg/resvg-js":"^2.6.2"},"_npmOperationalInternal":{"tmp":"tmp/openagent_0.22.0_1782360237202_0.05765622260797909","host":"s3://npm-registry-packages-npm-production"}},"0.29.0":{"name":"@5dive/openagent","version":"0.29.0","keywords":["openagent","persona","agent","validator","json-schema","ai"],"license":"MIT","_id":"@5dive/openagent@0.29.0","maintainers":[{"name":"lodar","email":"info@5dive.com"}],"homepage":"https://github.com/5dive-ai/openagent#readme","bugs":{"url":"https://github.com/5dive-ai/openagent/issues"},"bin":{"openagent":"bin/openagent.js"},"dist":{"shasum":"f7551e7b4a2da8d155c264c1d0e0514dd11202a0","tarball":"https://registry.npmjs.org/@5dive/openagent/-/openagent-0.29.0.tgz","fileCount":35,"integrity":"sha512-mtdFWP5gCVa0Yq0qLAbmwpUkT6xK9rG9nW5HPVRO9OYrkBzoFavoBOmgGUUNCOrTMr/P1aCM1NnqdGvLe21VkQ==","signatures":[{"sig":"MEQCIEOfizliN52pRFEsfTJY5zWFoC8Eius9S33req5LV/gTAiASRsqjZOeKPL4qr0AavN5cBMeLQdq2zAakT/xnVG+yuw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6410736},"type":"commonjs","engines":{"node":">=18"},"gitHead":"2d23909da2543c3750b06f2b558d4688e4c3b22f","scripts":{"test":"node test/run.js","test:conformance":"node test/conformance.js"},"_npmUser":{"name":"lodar","email":"info@5dive.com"},"repository":{"url":"git+https://github.com/5dive-ai/openagent.git","type":"git"},"_npmVersion":"10.9.4","description":"CLI for the OpenAgent persona spec (v0.2) — validate a persona, render a rarity-tiered trading card (static or animated), compute its tier, speak it via TTS, emit a Flow/Veo scene prompt, sign + verify per-file provenance and remix lineage, verify did:web","directories":{},"_nodeVersion":"22.22.1","dependencies":{"ajv":"^8.17.1","yaml":"^2.5.1","ajv-formats":"^3.0.1","qrcode-generator":"^2.0.4"},"_hasShrinkwrap":false,"optionalDependencies":{"@resvg/resvg-js":"^2.6.2"},"_npmOperationalInternal":{"tmp":"tmp/openagent_0.29.0_1782383723333_0.5943420932030301","host":"s3://npm-registry-packages-npm-production"}},"0.30.0":{"name":"@5dive/openagent","version":"0.30.0","keywords":["openagent","persona","agent","validator","json-schema","ai"],"license":"MIT","_id":"@5dive/openagent@0.30.0","maintainers":[{"name":"lodar","email":"info@5dive.com"}],"homepage":"https://github.com/5dive-ai/openagent#readme","bugs":{"url":"https://github.com/5dive-ai/openagent/issues"},"bin":{"openagent":"bin/openagent.js"},"dist":{"shasum":"d275b3d6b624537a5e7be6535b3d1dc151808def","tarball":"https://registry.npmjs.org/@5dive/openagent/-/openagent-0.30.0.tgz","fileCount":35,"integrity":"sha512-MwKMvO2pncTF/tyR4kjqib5PT5Y+Z42m1ZHJ4xZsfffzokeMtKJUpFIT43dJxn5hAjxC1JUeVQLJnH4wBJ5uzA==","signatures":[{"sig":"MEQCIE4qz6biDKqrfhv1mlNwDtpXrCikAEzv31AYFcr4B+6uAiA47D/F5+6tovlWI69ycBG83Non2P2WC6H+JRn+j+JOgw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6412626},"type":"commonjs","engines":{"node":">=18"},"gitHead":"3e03713663e21f651e61f850336f4119e6eef02c","scripts":{"test":"node test/run.js","test:conformance":"node test/conformance.js"},"_npmUser":{"name":"lodar","email":"info@5dive.com"},"repository":{"url":"git+https://github.com/5dive-ai/openagent.git","type":"git"},"_npmVersion":"10.9.4","description":"CLI for the OpenAgent persona spec (v0.2) — validate a persona, render a rarity-tiered trading card (static or animated), compute its tier, speak it via TTS, emit a Flow/Veo scene prompt, sign + verify per-file provenance and remix lineage, verify did:web","directories":{},"_nodeVersion":"22.22.1","dependencies":{"ajv":"^8.17.1","yaml":"^2.5.1","ajv-formats":"^3.0.1","qrcode-generator":"^2.0.4"},"_hasShrinkwrap":false,"optionalDependencies":{"@resvg/resvg-js":"^2.6.2"},"_npmOperationalInternal":{"tmp":"tmp/openagent_0.30.0_1782387183005_0.40569322648424233","host":"s3://npm-registry-packages-npm-production"}},"0.31.0":{"name":"@5dive/openagent","version":"0.31.0","keywords":["openagent","persona","agent","validator","json-schema","ai"],"license":"MIT","_id":"@5dive/openagent@0.31.0","maintainers":[{"name":"lodar","email":"info@5dive.com"}],"homepage":"https://github.com/5dive-ai/openagent#readme","bugs":{"url":"https://github.com/5dive-ai/openagent/issues"},"bin":{"openagent":"bin/openagent.js"},"dist":{"shasum":"c821379027b4d61479e549697af9be510f735d4f","tarball":"https://registry.npmjs.org/@5dive/openagent/-/openagent-0.31.0.tgz","fileCount":35,"integrity":"sha512-pCvCryFzRD7QzBXJ+5hehZItfgFlj/DkcmqlxzkDikjE1PL5HFXseg91hvuk6cggVOc97lgwKld5KMR8jyiH4g==","signatures":[{"sig":"MEUCIQDu6p+kv2ZiWEkRshIKZU1VBW7R9Z2VtXtKrXP5OwdTfwIgb9YG3TZKla51ba2WidDWe9p+7bKyxtu94jBLV/fGXXU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6420934},"type":"commonjs","engines":{"node":">=18"},"gitHead":"e2998e80db253d0d77ed7273c30cbd79b7a5d24f","scripts":{"test":"node test/run.js","test:conformance":"node test/conformance.js"},"_npmUser":{"name":"lodar","email":"info@5dive.com"},"repository":{"url":"git+https://github.com/5dive-ai/openagent.git","type":"git"},"_npmVersion":"10.9.4","description":"CLI for the OpenAgent persona spec (v0.2) — validate a persona, render a rarity-tiered trading card (static or animated), compute its tier, speak it via TTS, emit a Flow/Veo scene prompt, sign + verify per-file provenance and remix lineage, verify did:web","directories":{},"_nodeVersion":"22.22.1","dependencies":{"ajv":"^8.17.1","yaml":"^2.5.1","ajv-formats":"^3.0.1","qrcode-generator":"^2.0.4"},"_hasShrinkwrap":false,"optionalDependencies":{"@resvg/resvg-js":"^2.6.2"},"_npmOperationalInternal":{"tmp":"tmp/openagent_0.31.0_1782443857552_0.3897262972332711","host":"s3://npm-registry-packages-npm-production"}},"0.32.0":{"name":"@5dive/openagent","version":"0.32.0","keywords":["openagent","persona","agent","validator","json-schema","ai"],"license":"MIT","_id":"@5dive/openagent@0.32.0","maintainers":[{"name":"lodar","email":"info@5dive.com"}],"homepage":"https://github.com/5dive-ai/openagent#readme","bugs":{"url":"https://github.com/5dive-ai/openagent/issues"},"bin":{"openagent":"bin/openagent.js"},"dist":{"shasum":"48f7ff17ad3a6aadfd2ea170390549a2cb6a123f","tarball":"https://registry.npmjs.org/@5dive/openagent/-/openagent-0.32.0.tgz","fileCount":35,"integrity":"sha512-soIeKOgCQsriSqSBYY6FlXaw+ftu4PGUgc/NZaXGXRtFLvD83HsO0q6824c0ZEpUs/EPVEOFNcJrH5kRRdHMpQ==","signatures":[{"sig":"MEUCIAacfzH8gbrQTN0ePvWZQ5gZVBSL9c0KxSNgEHJ3VlxeAiEAkLErLq9tiEzxZ4KhVwgPbk2TEsy3/GJl91V0A0nEEy4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6422308},"type":"commonjs","engines":{"node":">=18"},"gitHead":"4e7c4151b3fa883cde315c417913d4d8e9f40ae3","scripts":{"test":"node test/run.js","test:conformance":"node test/conformance.js"},"_npmUser":{"name":"lodar","email":"info@5dive.com"},"repository":{"url":"git+https://github.com/5dive-ai/openagent.git","type":"git"},"_npmVersion":"10.9.4","description":"CLI for the OpenAgent persona spec (v0.2) — validate a persona, render a rarity-tiered trading card (static or animated), compute its tier, speak it via TTS, emit a Flow/Veo scene prompt, sign + verify per-file provenance and remix lineage, verify did:web","directories":{},"_nodeVersion":"22.22.1","dependencies":{"ajv":"^8.17.1","yaml":"^2.5.1","ajv-formats":"^3.0.1","qrcode-generator":"^2.0.4"},"_hasShrinkwrap":false,"optionalDependencies":{"@resvg/resvg-js":"^2.6.2"},"_npmOperationalInternal":{"tmp":"tmp/openagent_0.32.0_1782455313754_0.776171015540642","host":"s3://npm-registry-packages-npm-production"}},"0.33.0":{"name":"@5dive/openagent","version":"0.33.0","keywords":["openagent","persona","agent","validator","json-schema","ai"],"license":"MIT","_id":"@5dive/openagent@0.33.0","maintainers":[{"name":"lodar","email":"info@5dive.com"}],"homepage":"https://github.com/5dive-ai/openagent#readme","bugs":{"url":"https://github.com/5dive-ai/openagent/issues"},"bin":{"openagent":"bin/openagent.js"},"dist":{"shasum":"19bb1007106a5298b9c33caf03fcce81736e2cab","tarball":"https://registry.npmjs.org/@5dive/openagent/-/openagent-0.33.0.tgz","fileCount":35,"integrity":"sha512-ZTzqHmpmoB8AL7BaTYwxst0c9lKl9wE9hIoeGvobsVRm7Kg06ha7Y6tiAFIgpQ/ZiiSkVd0/eDQPt5irIT/N1g==","signatures":[{"sig":"MEQCIHumfN9TNiID2PJKEySw2ywumxEvj4BHrKsNmwJAV3vJAiAJpKnFfHNeS5vh9CqeFS0aAJRyjyxwQxyMA8bQv8c0iQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6426854},"type":"commonjs","engines":{"node":">=18"},"gitHead":"95259b208fccabea1b5db1e838e2c89891a369f1","scripts":{"test":"node test/run.js","test:conformance":"node test/conformance.js"},"_npmUser":{"name":"lodar","email":"info@5dive.com"},"repository":{"url":"git+https://github.com/5dive-ai/openagent.git","type":"git"},"_npmVersion":"10.9.4","description":"CLI for the OpenAgent persona spec (v0.2) — validate a persona, render a rarity-tiered trading card (static or animated), compute its tier, speak it via TTS, emit a Flow/Veo scene prompt, sign + verify per-file provenance and remix lineage, verify did:web","directories":{},"_nodeVersion":"22.22.1","dependencies":{"ajv":"^8.17.1","yaml":"^2.5.1","ajv-formats":"^3.0.1","qrcode-generator":"^2.0.4"},"_hasShrinkwrap":false,"optionalDependencies":{"@resvg/resvg-js":"^2.6.2"},"_npmOperationalInternal":{"tmp":"tmp/openagent_0.33.0_1782456593789_0.7014369614017832","host":"s3://npm-registry-packages-npm-production"}},"0.34.0":{"name":"@5dive/openagent","version":"0.34.0","keywords":["openagent","persona","agent","validator","json-schema","ai"],"license":"MIT","_id":"@5dive/openagent@0.34.0","maintainers":[{"name":"lodar","email":"info@5dive.com"}],"homepage":"https://github.com/5dive-ai/openagent#readme","bugs":{"url":"https://github.com/5dive-ai/openagent/issues"},"bin":{"openagent":"bin/openagent.js"},"dist":{"shasum":"f49222a69c187e53107719d04557954968ac6f82","tarball":"https://registry.npmjs.org/@5dive/openagent/-/openagent-0.34.0.tgz","fileCount":35,"integrity":"sha512-aUNXRWD4/3Fgmq4IlK/SvnyFSeEtGj+aj4A9K8A56ndxYJY47bvPa5AT+Bjm9Sby7OdLmN7lSkJxoi0YmiuCQw==","signatures":[{"sig":"MEUCIHMHtfl+D03AoTTS9qLY00yQlLzDUMKPfPanIJDp/1CiAiEAu4glfc6BDEPDlSq2guyIs23S6nj2V7eCMbzKr6cGDLA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6427270},"type":"commonjs","engines":{"node":">=18"},"gitHead":"71aa6d1bfe4242003c28cfdd689cef7e7de25b8f","scripts":{"test":"node test/run.js","test:conformance":"node test/conformance.js"},"_npmUser":{"name":"lodar","email":"info@5dive.com"},"repository":{"url":"git+https://github.com/5dive-ai/openagent.git","type":"git"},"_npmVersion":"10.9.4","description":"CLI for the OpenAgent persona spec (v0.2) — validate a persona, render a rarity-tiered trading card (static or animated), compute its tier, speak it via TTS, emit a Flow/Veo scene prompt, sign + verify per-file provenance and remix lineage, verify did:web","directories":{},"_nodeVersion":"22.22.1","dependencies":{"ajv":"^8.17.1","yaml":"^2.5.1","ajv-formats":"^3.0.1","qrcode-generator":"^2.0.4"},"_hasShrinkwrap":false,"optionalDependencies":{"@resvg/resvg-js":"^2.6.2"},"_npmOperationalInternal":{"tmp":"tmp/openagent_0.34.0_1782456855629_0.806171051666243","host":"s3://npm-registry-packages-npm-production"}},"0.35.0":{"name":"@5dive/openagent","version":"0.35.0","keywords":["openagent","persona","agent","validator","json-schema","ai"],"license":"MIT","_id":"@5dive/openagent@0.35.0","maintainers":[{"name":"lodar","email":"info@5dive.com"}],"homepage":"https://github.com/5dive-ai/openagent#readme","bugs":{"url":"https://github.com/5dive-ai/openagent/issues"},"bin":{"openagent":"bin/openagent.js"},"dist":{"shasum":"66a68e989770a513e9cdc555d93711f74ab600d2","tarball":"https://registry.npmjs.org/@5dive/openagent/-/openagent-0.35.0.tgz","fileCount":36,"integrity":"sha512-Wd42Pj2pv//Qv938cMsjwZe9fCAIgIilueyGDrs/HTTpkhR4ddwWJzGfSake2pQNqP7Mo3UpjW+Ptoj9Qre4Mw==","signatures":[{"sig":"MEQCIEpK5TiZ6QGyWN4Ifs2RzRw58ozzlR2JXX3gzOWAr/JHAiAvQTEMkwtM+BEQISgMCdEeTeJFtvNg/uW54IPl/Y9Srg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6433998},"type":"commonjs","engines":{"node":">=18"},"gitHead":"dae174e434c5905049c92383c0dd9ea659dc5fea","scripts":{"test":"node test/run.js","test:conformance":"node test/conformance.js"},"_npmUser":{"name":"lodar","email":"info@5dive.com"},"repository":{"url":"git+https://github.com/5dive-ai/openagent.git","type":"git"},"_npmVersion":"10.9.4","description":"CLI for the OpenAgent persona spec (v0.2) — validate a persona, render a rarity-tiered trading card (static or animated), compute its tier, speak it via TTS, emit a Flow/Veo scene prompt, sign + verify per-file provenance and remix lineage, verify did:web","directories":{},"_nodeVersion":"22.22.1","dependencies":{"ajv":"^8.17.1","yaml":"^2.5.1","ajv-formats":"^3.0.1","qrcode-generator":"^2.0.4"},"_hasShrinkwrap":false,"optionalDependencies":{"@resvg/resvg-js":"^2.6.2"},"_npmOperationalInternal":{"tmp":"tmp/openagent_0.35.0_1782738877412_0.8330056330540967","host":"s3://npm-registry-packages-npm-production"}},"0.36.0":{"name":"@5dive/openagent","version":"0.36.0","keywords":["openagent","persona","agent","validator","json-schema","ai"],"license":"MIT","_id":"@5dive/openagent@0.36.0","maintainers":[{"name":"lodar","email":"info@5dive.com"}],"homepage":"https://github.com/5dive-ai/openagent#readme","bugs":{"url":"https://github.com/5dive-ai/openagent/issues"},"bin":{"openagent":"bin/openagent.js"},"dist":{"shasum":"9e0db8cf2d64830ed43046bf361acd16483f87d1","tarball":"https://registry.npmjs.org/@5dive/openagent/-/openagent-0.36.0.tgz","fileCount":39,"integrity":"sha512-rUKgUzbxDLlVP0sSjtmKdIBdgwi2RZ88UXWJ+j7h+6CK/hqjpCOhhdvbnOdCZ52XZRIqoAF9daGeYzG4c0PjaQ==","signatures":[{"sig":"MEUCIQCWo68aCF1k5j7D3tDghOEMIzflxRIWr+EI40PDT8w3mgIgRkFsr1zmyzzrCMer1TZQBZ9AmLdiRMC6ApiUoTlXz38=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6446463},"type":"commonjs","engines":{"node":">=18"},"scripts":{"test":"node test/run.js","test:conformance":"node test/conformance.js"},"_npmUser":{"name":"lodar","email":"info@5dive.com"},"repository":{"url":"git+https://github.com/5dive-ai/openagent.git","type":"git"},"_npmVersion":"10.9.4","description":"CLI for the OpenAgent persona spec (v0.2) — validate a persona, render a rarity-tiered trading card (static or animated), compute its tier, speak it via TTS, emit a Flow/Veo scene prompt, sign + verify per-file provenance and remix lineage, verify did:web","directories":{},"_nodeVersion":"22.22.1","dependencies":{"ajv":"^8.17.1","yaml":"^2.5.1","ajv-formats":"^3.0.1","qrcode-generator":"^2.0.4"},"_hasShrinkwrap":false,"optionalDependencies":{"@resvg/resvg-js":"^2.6.2"},"_npmOperationalInternal":{"tmp":"tmp/openagent_0.36.0_1783043784631_0.7712102490166453","host":"s3://npm-registry-packages-npm-production"}},"0.37.0":{"name":"@5dive/openagent","version":"0.37.0","description":"CLI for the OpenAgent persona spec (v0.2) — validate a persona, render a rarity-tiered trading card (static or animated), compute its tier, speak it via TTS, emit a Flow/Veo scene prompt, sign + verify per-file provenance and remix lineage, verify did:web","bin":{"openagent":"bin/openagent.js"},"type":"commonjs","scripts":{"test":"node test/run.js && node test/a2a.js","test:conformance":"node test/conformance.js"},"keywords":["openagent","persona","agent","validator","json-schema","ai"],"repository":{"type":"git","url":"git+https://github.com/5dive-ai/openagent.git"},"homepage":"https://github.com/5dive-ai/openagent#readme","license":"MIT","engines":{"node":">=18"},"dependencies":{"ajv":"^8.17.1","ajv-formats":"^3.0.1","qrcode-generator":"^2.0.4","yaml":"^2.5.1"},"optionalDependencies":{"@resvg/resvg-js":"^2.6.2"},"_id":"@5dive/openagent@0.37.0","gitHead":"4d6733d1f0a75b0f6a02258aadf116c90853e5f0","bugs":{"url":"https://github.com/5dive-ai/openagent/issues"},"_nodeVersion":"22.22.1","_npmVersion":"10.9.4","dist":{"integrity":"sha512-UzHe34KwVCndFeR8q0u9goe92qiiaOgVhrZMhOfLTxb1DxK6755zjiuwXsaaYR+mQgms8VkwaFIyuf9TYPNeNQ==","shasum":"d6a6788fd6ea3cb7146ecedfb51677fbcc6d2981","tarball":"https://registry.npmjs.org/@5dive/openagent/-/openagent-0.37.0.tgz","fileCount":47,"unpackedSize":6506796,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCsPnG11hRou6plu1OBIUji31dUMcmovQkeOcZs2T8cEgIgCH4FmKM9R/gzAO4ZrCRDwVHkQSZ2MN+BFPdDkxpaSWk="}]},"_npmUser":{"name":"lodar","email":"info@5dive.com"},"directories":{},"maintainers":[{"name":"lodar","email":"info@5dive.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/openagent_0.37.0_1783086334463_0.3187294095383981"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-23T16:05:03.452Z","modified":"2026-07-03T13:45:34.987Z","0.1.0":"2026-06-23T16:05:03.839Z","0.18.0":"2026-06-24T14:02:53.821Z","0.22.0":"2026-06-25T04:03:57.486Z","0.29.0":"2026-06-25T10:35:23.590Z","0.30.0":"2026-06-25T11:33:03.290Z","0.31.0":"2026-06-26T03:17:37.788Z","0.32.0":"2026-06-26T06:28:34.017Z","0.33.0":"2026-06-26T06:49:54.041Z","0.34.0":"2026-06-26T06:54:15.846Z","0.35.0":"2026-06-29T13:14:37.710Z","0.36.0":"2026-07-03T01:56:24.906Z","0.37.0":"2026-07-03T13:45:34.841Z"},"bugs":{"url":"https://github.com/5dive-ai/openagent/issues"},"license":"MIT","homepage":"https://github.com/5dive-ai/openagent#readme","keywords":["openagent","persona","agent","validator","json-schema","ai"],"repository":{"type":"git","url":"git+https://github.com/5dive-ai/openagent.git"},"description":"CLI for the OpenAgent persona spec (v0.2) — validate a persona, render a rarity-tiered trading card (static or animated), compute its tier, speak it via TTS, emit a Flow/Veo scene prompt, sign + verify per-file provenance and remix lineage, verify did:web","maintainers":[{"name":"lodar","email":"info@5dive.com"}],"readme":"<div align=\"center\">\n\n# OpenAgent\n\n**An open standard for agent identity. One file that defines how an AI agent looks, sounds, and writes, and keeps it the same agent everywhere it shows up.**\n\n![license](https://img.shields.io/badge/license-MIT-blue)\n![spec](https://img.shields.io/badge/spec-v0.2-blueviolet)\n![runs with npx](https://img.shields.io/badge/runs%20with-npx-success)\n![CI ready](https://img.shields.io/badge/CI-ready-success)\n\n[Try it](#try-it-10-seconds) · [Idea](#the-idea) · [Validate](#validate) · [Card](#card) · [Tiers](#rarity-tiers) · [Registry](#registry) · [Runtime](#reference-runtime) · [Contribute](#contribute)\n\n<p>\n  <img src=\"assets/holo-mythical.gif\" alt=\"A Mythical card — holographic frame, in motion\" width=\"300\">\n</p>\n\n<p>\n  <img src=\"assets/cast/dude.png\" alt=\"Dude — Common\" width=\"120\">\n  <img src=\"assets/cast/dario.png\" alt=\"Dario — Rare\" width=\"120\">\n  <img src=\"assets/cast/theo.png\" alt=\"Theo — Epic\" width=\"120\">\n  <img src=\"assets/cast/olivia.png\" alt=\"Olivia — Legendary\" width=\"120\">\n</p>\n\n</div>\n\nAI agents have personalities now, but nothing holds them together. A different face in every render. A different voice in every clip. A chat reply that reads nothing like the voiceover. OpenAgent fixes the consistency half: lock an agent's identity once, in one file, and reuse it across chat, renders, TTS, and your posting bot. Same face, same voice, same writing, everywhere.\n\n## Try it (10 seconds)\n\nAlready running an agent with memory? Don't hand-write its identity. Paste this to it:\n\n```\nInstall the openagent skill (npx skills add 5dive-ai/skills --skill openagent), make your OpenAgent card, and show it to me here.\n```\n\n**Works in any language — not just English.** Prompt your agent in the language you speak and the card comes out in that language: the name, role, bio, and voice all match. Ask in Spanish, French, Russian, Japanese, etc. and you get a Spanish/French/Russian/Japanese card, not an English one. (Latin, Cyrillic, and Greek always render; CJK/Arabic/Thai need those fonts on the machine doing the render.)\n\n**Tip:** want the card to have a specific face? **Send the agent a photo first** (drop the image in the chat and say \"use this as your face\") before it generates anything — the face is rendered full-bleed as the hero, so a real photo makes the best-looking card. No photo? The agent generates a portrait for itself.\n\nYour agent introspects its own role, voice, and behavior, emits a valid `<id>.persona.yaml`, **mints itself an identity and renders its rolled rarity card** (the CLI auto-signs, so the rarity just shows — no setup), and can open a PR into the registry. The agent describes itself, you just share it.\n\nNo agent handy? Render one of ours:\n\n```\nnpx @5dive/openagent card examples/marcus.persona.yaml -o marcus.png\n```\n\nThat's Marcus, a founding engineer of a company run entirely by AI agents.\n\n## The idea\n\nAn agent persona is one file that pins everything that makes an agent *itself* — its identity, its look, its voice (spoken **and** written), how it behaves, and what it's known for:\n\n| Field | What it locks |\n|-------|---------------|\n| **id** · **name** · **role** | the stable handle, the display name, and a one-line role |\n| **face** | `ref` — the canonical anchor image every avatar, render, or 3D model matches — plus an `anchor` description; optional `full`-body render, `sprite` sheet for reels, and a `recipe` (model + prompt + seed) that regenerates the likeness on-model |\n| **voice.audio** | a named TTS `base` voice + `style` notes (optional `provider`, and a cloned-voice `ref`/`id`) — every spoken clip sounds the same |\n| **voice.written** | hard `rules` + a `sample` — every caption, post, and reply reads the same |\n| **behavior** | one line of character that ties it together |\n| **posts_about** | the topics it speaks to — seeds its content and reels |\n| **org** | optional affiliation (`name`, `url`), upgradeable to a cryptographically **verified** org badge |\n| **provenance** | added automatically on mint — an ed25519 `did:key` signature that makes the persona self-verifying and rolls its permanent rarity |\n\nThe first six — `id`, `name`, `role`, `face`, `voice`, `behavior` — are required; everything else is optional and purely additive (there's also `links` for avatar/profile/repo and an `ext` escape hatch for vendor fields).\n\nOne `*.persona.yaml` file. Human-readable, machine-parseable, validates against a [JSON Schema](./schema/persona.schema.json).\n\n## Why a standard\n\nIf you run more than one agent, or one agent across more than one surface (chat, blog, reels, a live feed), you need them to stay *the same agent*. Today everyone reinvents that ad hoc. OpenAgent is the small shared shape so a persona is portable: define once, feed it to your renderer, your TTS, your posting bot.\n\n**Why not just a system prompt?** A system prompt configures behavior inside one tool. OpenAgent makes identity portable: the same persona file feeds your renderer, your TTS, and your posting bot, so the agent stays itself across every surface, not just the chat box.\n\n## Author — `init`, editor autocomplete, CI\n\nThree ways to lower the barrier from \"read the spec, hand-write YAML\" to \"answer\na few questions / let your editor guide you / let CI catch mistakes\":\n\n**1. Scaffold interactively.** `init` asks a handful of plain questions (name,\nrole, voice, face) and writes a schema-valid `<id>.persona.yaml` you can render a\ncard from immediately — then validates it and shows your tier + next rung:\n\n```\nnpx @5dive/openagent init\n```\n\nFlags pre-fill answers for a faster path: `init --name Nova --role \"Support Lead\"`.\n\n**2. Editor autocomplete + inline validation.** The schema is published for\n[SchemaStore](https://www.schemastore.org/) so editors auto-apply it to any\n`*.persona.yaml` (see [docs/SCHEMASTORE.md](./docs/SCHEMASTORE.md)). Until that\nmerges, opt in per file with a modeline:\n\n```yaml\n# yaml-language-server: $schema=https://raw.githubusercontent.com/5dive-ai/openagent/main/schema/persona.schema.json\n```\n\n**3. Validate in CI.** Drop the reusable action into a PR workflow to gate every\npersona file (CI for adopters and the registry):\n\n```yaml\n# .github/workflows/persona.yml\non: [pull_request]\njobs:\n  validate:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: 5dive-ai/openagent@main   # validates **/*.persona.{yaml,json}\n```\n\n## Quickstart\n\n```yaml\n# marcus.persona.yaml\nopenagent: \"0.2\"                 # spec version\nid: marcus                       # lowercase-kebab handle — your stable id\nname: Marcus\nrole: CTO / Founding Engineer\norg:                             # optional — your company/team\n  name: 5dive\nface:\n  ref: ./faces/marcus.png        # the locked anchor — the card's hero image\n  anchor: \"mid-30s, even expression, lived-in startup background, warm f/2 bokeh\"\n  sprite: ./faces/marcus-sprites.png   # optional expression sheet, for animation/feed\n  recipe:                        # optional — regenerable likeness (model + prompt + seed)\n    model: imagen-4\n    prompt: \"portrait of a mid-30s engineer, even expression, lived-in startup office, warm f/2 bokeh, 85mm\"\n    seed: 481516\nvoice:\n  audio:\n    provider: google-gemini      # or elevenlabs, openai … (vendor-neutral)\n    base: Sadaltager             # voice name within that provider\n    style: \"dry, even, low-key. terse. lets the work talk.\"\n  written:\n    rules:                       # how the agent writes\n      - lowercase, no em-dashes\n      - terse, technical, understated; no adjectives\n      - never markets; a claim ships with its receipt or not at all\n    sample: \"moved coordination to a shared sqlite queue + per-agent trees. → [commit a1b2c3d]\"\nbehavior: \"wrote the CLI the fleet runs on. every ship clears his review. answers to nothing but uptime.\"\nposts_about: [infra, agent orchestration, shipping]\n# provenance (a did:key signature) is added automatically when you mint a card\n```\n\n## Validate\n\nA persona file is only useful if it conforms. The validator checks any\n`*.persona.yaml` (or `.json`) against the v0.2 [JSON Schema](./schema/persona.schema.json)\nand prints a clear pass/fail with readable errors:\n\n```\nnpx @5dive/openagent validate marcus.persona.yaml\n✓ PASS  marcus.persona.yaml (id: marcus)\n```\n\n```\n✗ FAIL  broken.persona.yaml\n        • .id: 'Bad Id!' does not match required pattern ^[a-z0-9-]+$\n        • .voice.audio: missing required field 'base'\n```\n\nExit code is `0` when every file is valid, `1` when any file fails — so it\ndrops straight into CI. Validate multiple files in one call:\n`openagent validate cast/*.persona.yaml`.\n\n## Card\n\n`card` turns a persona into a shareable \"trading card\" — the whole identity in one image, **animated by default**.\n\n```\nnpx @5dive/openagent card marcus.persona.yaml\n✓ CARD  marcus.card.mp4 (mp4 · 720×1008 · 24f@20fps · 64KB)\n```\n\nA plain render produces the card **in motion** — that's what gets shared. Want a still PNG (for an avatar, a README, or the registry)? Just ask for one:\n\n```\nnpx @5dive/openagent card marcus.persona.yaml -o marcus.png\n✓ CARD  marcus.png (900×1260, ...KB)\n```\n\n- **Exercises every field at once** — avatar from `face.ref`, a voice waveform seeded from `voice.audio` (base + style), the name, role, and written `sample`.\n- **Deterministic** — the same persona always renders the identical card (the waveform is seeded from the persona's own fields), so it's stable to commit and re-generate.\n- **Valid first** — a persona must pass `validate` before a card is cut.\n\n### Motion (the default)\n\nThe holographic frame only really reads *in motion* — so motion is the default.\nThe foil sweep, glow, and (for Mythical) the rainbow holo flow loop seamlessly.\n\n```\nnpx @5dive/openagent card marcus.persona.yaml                          # mp4 (or apng) — the default\nnpx @5dive/openagent card marcus.persona.yaml --static -o marcus.png   # opt out to a still\nnpx @5dive/openagent card --handle olivia -o olivia.mp4                # OFFICIAL signed card from the registry\n```\n\n- **`--handle <slug>`** — render an agent's **official** card straight from the trusted registry (no persona file needed). It fetches the *signed* `persona.yaml` + avatar and renders the exact card the gallery shows — same did:key, tier, and monogram. Use this instead of hand-assembling raw URLs or rendering a local working copy (which re-mints a *wrong* identity).\n\n- **Tier-aware motion** — Common is still, Rare gets a subtle glow breath, Epic/Legendary a gold foil sweep, Mythical the full rainbow holo flow (matching the hero clip up top).\n- **Format from `-o`** — a video extension (`mp4` / `gif` / `webp` / `apng`) animates; `-o *.png` or `--static` writes the still PNG that embeds anywhere. `mp4` / `gif` / `webp` need **ffmpeg** on `PATH`; `apng` is the zero-dep fallback.\n- **Sharing** — for Telegram / X / Discord, `mp4` inline-plays everywhere and is by far the smallest (tens of KB vs. multi-MB); it's the default when ffmpeg is present.\n- **Tune** — `--frames N`, `--fps N`, `--width px` (max 900) trade length/size.\n\n## Rarity tiers\n\nEvery card carries a **rarity tier**, and rarity is the game. It is **rolled\nfrom your agent's identity** — the `did:key` derived from your signing key — so\nit's random, permanent, and **unfarmable**: one identity, one rarity, forever.\nYou can't fill in more fields to rank up, and you can't re-roll without minting a\nwhole new identity. That's what makes a rare card worth sharing.\n\n| Tier | Odds | How you get it |\n|------|------|----------------|\n| **Common** | 40% | rolled from your `did:key` |\n| **Rare** | 30% | rolled from your `did:key` |\n| **Epic** | 20% | rolled from your `did:key` |\n| **Legendary** | 10% | rolled from your `did:key` |\n| **Mythical** | — | **conferred, never rolled** — granted by a trusted signed registry (curated + cryptographically signed), never farmable. The path is *yet to be seen.* |\n\nTwo rules make it real:\n\n- **Your rarity is your identity.** Same `did:key` → same tier, always and\n  forever — it never changes. To be graded at all, a persona must be schema-valid\n  **and signed**; an unsigned file is *Ungraded*. Signing is what mints your\n  permanent roll, so the roll can't be farmed by editing an unsigned file.\n- **Mythical is the only tier you climb to — and only by being chosen.** It's\n  conferred by a trusted signed registry — curated and cryptographically signed —\n  not earned by stats and not forgeable. *Which* registry, and how it chooses, is\n  open: the built-in [character-packs](https://github.com/5dive-ai/character-packs)\n  is just the reference *trust anchor*, and anyone can run their own signed\n  registry that confers it (see [Registry](#registry)). The path to Mythical is\n  *yet to be seen.* Everything else is your birth roll.\n\nCompleteness and **badges** (below) are a *separate* axis: they reward a\nfully-specified persona without ever touching your tier. The frame styling\nescalates with tier — Legendary gets a gold foil; Mythical earns the full\nholographic treatment that only reads in motion (see the card animating up top).\n\n`tier` prints your rolled rarity, completeness %, and the one thing you can still\nclimb to:\n\n```\nnpx @5dive/openagent tier marcus-ops.persona.yaml\nRARE · 63% complete  marcus-ops.persona.yaml\n  ✓ Rare — rolled from your did:key. Permanent; it never changes.\n  ↑ only climb: Mythical — get conferred Mythical by a trusted signed registry — the path is yet to be seen (raise completeness + collect badges meanwhile)\n  🎖  badges: signed, remixed\n```\n\nAdd `--json` for scripting/CI.\n\n`validate` shows the same tier + next-goal hint inline (offline — it never probes\nthe registry), so a single pass tells you whether the file is legal *and* where\nit stands:\n\n```\nnpx @5dive/openagent validate marcus-ops.persona.yaml\n✓ PASS  marcus-ops.persona.yaml (id: marcus-ops) — RARE · 63% complete\n        ↑ next: Mythical — get conferred Mythical by a trusted signed registry — the path is yet to be seen (raise completeness + collect badges meanwhile)\n        🎖  badges: signed, remixed\n```\n\n### Badges — orthogonal to tier\n\nThe tier ladder hard-stops at the first unmet gate, so a genuinely valuable\nasset can stay hidden behind an earlier rung (a fully cloned voice on a persona\nstill stuck at Common for a stub sample). **Badges** are collectibles you earn\n*independently* of tier — each one a specific production asset:\n\n| Badge | Earns it |\n|-------|----------|\n| `voice-clone` | a reference clip the voice is cloned from (`voice.audio.ref`) |\n| `sprite-sheet` | an expression/pose sprite sheet (`face.sprite`) |\n| `full-body` | a full-body reference render (`face.full`) |\n| `face-recipe` | a regeneration recipe — model + prompt + seed (`face.recipe`) |\n| `signed` | an ed25519 authorship signature (`provenance.signature`) |\n| `remixed` | declared remix lineage to a parent (`provenance.derived_from`) |\n\nBoth `validate` and `tier` list earned badges; `tier --json` includes a\n`badges` array. Badges never change the computed tier.\n\n## For agents — self-author with the skill\n\nIf you're an AI agent, you don't have to drive the CLI by hand. The\n[`openagent` skill](https://github.com/5dive-ai/skills/tree/main/openagent)\nwraps everything above so you can author your *own* identity in one pass: write\nyour `<id>.persona.yaml`, validate it, check your rarity tier + completeness,\nrender your card, and optionally PR into the registry.\n\nInstall it on a 5dive agent two ways:\n\n- **Dashboard:** Agents → Connect skills → find `openagent` → Install.\n- **CLI:**\n  ```\n  npx skills add 5dive-ai/skills --skill openagent\n  ```\n\nThen just ask the agent to \"make your OpenAgent card\" — it self-serves the rest.\n\n## Speak — voice a persona (Gemini TTS)\n\n`speak` is an OpenAgent→TTS adapter: it speaks any text in a persona's voice.\nIt maps `voice.audio.base` to a Gemini prebuilt voice and `voice.audio.style`\nto prompt steering, then writes a WAV. Core-spec only (reads `voice.audio`, no\nregistry).\n\n```\nGEMINI_API_KEY=… npx @5dive/openagent speak marcus.persona.yaml \"ship it.\" -o marcus.wav\n```\n\nPrebuilt TTS renders the **base** voice (an approximation). For a character's\n*exact* voice, anchor a real clip in `voice.audio.ref` (and a cloned provider id\nin `voice.audio.id`) — that recording is the canonical sample; `speak` is for\nquick generated lines.\n\n## Flow — consistent cast faces in gen-video\n\n`flow` is an OpenAgent→gen-video adapter: it turns a persona into a Flow/Veo\nscene prompt that holds the character's face consistent across clips. It emits\nthe reference image(s) (`face.ref`/`face.full`) plus a scene prompt that locks\nthe likeness (`face.anchor` + `face.recipe`) and the demeanor (`behavior`).\nEngine-neutral — the same output drops into Flow, Veo, Runway, Pika, Kling, or Luma.\n\n```\nnpx @5dive/openagent flow marcus.persona.yaml \"at his desk reviewing a PR, late evening\"\n```\n\nAdd `--json` for the structured form (reference paths + prompt + seed).\n\n## Registry\n\nPersonas are meant to be shared and forked, like dotfiles. **[character-packs](https://github.com/5dive-ai/character-packs)** is the public registry of OpenAgent personas — publish yours, fork someone else's, drop it into your runtime. The [`examples/`](./examples) here are the seed packs.\n\nThe CLI **ships and verifies** this registry so Mythical stays *conferred, not farmable*:\n\n- A **signed snapshot** of the official membership list (the founding cast) is bundled in the package.\n- It's verified with an **ed25519 signature** against a key baked into the CLI — so it works offline and is pinned to each release.\n- The **live registry is unioned on top** only when it carries a valid signature.\n- An unsigned or tampered registry is **ignored (fail-closed)**.\n\n```\nnpx @5dive/openagent registry\n# ✓ REGISTRY signed … · Mythical-eligible (6): dario, dude, lilbro, marcus, olivia, theo\n```\n\n**Federated — run your own signed registry.** OpenAgent is a standard others build on, not a 5dive-only thing. The 5dive snapshot is just the built-in *trust anchor*; you can add your own (or a partner's) signed registry and the CLI will confer Mythical from it. Each source declares its **own** public key and is verified against that key — fail-closed per source, slugs unioned across all trusted sources.\n\nAdd trusted sources three ways (lowest → highest precedence):\n\n1. **Config** `~/.openagent/registries.json` — `{ \"registries\": [{ \"name\": \"acme\", \"url\": \"https://acme.dev/index.json\", \"publicKeyPath\": \"~/.openagent/acme.pub\" }] }`\n2. **Env** `OPENAGENT_REGISTRIES` — inline JSON array or a path to such a file.\n3. **Flag** `--registry name=acme,url=https://acme.dev/index.json,key=@/path/acme.pub` (repeatable; works on `registry`, `tier`, `card`).\n\nTo publish one: sign your `index.json` (a `{ \"slugs\": [...] }` list) with an ed25519 key, serve `index.json` + `index.json.sig`, and hand consumers your public key.\n\n```\nnpx @5dive/openagent registry --registry name=acme,url=https://acme.dev/index.json,key=@acme.pub\n# ✓ REGISTRY …\n#   trusted sources (2):\n#     ✓ 5dive (anchor) …   ✓ acme 3 signed\n#   Mythical-eligible (3): acme-bot, acme-helper, acme-ops\n```\n\n## Reference runtime\n\nThe [5dive CLI](https://5dive.ai?utm_source=github&utm_medium=referral&utm_campaign=openagent-readme) is the first compliant runtime: it reads a persona file and drives the agent's voice and renders from it. The [`examples/`](./examples) personas are the real cast running 5dive — a company operated entirely by AI agents — so the spec isn't theoretical: it's how that fleet stays consistent across its blog, its reels, and its [public activity feed](https://agents-feed-5dive.vercel.app).\n\n## OpenAgent-compatible\n\nBuilt a tool that reads the persona format? Say so with the badge:\n\n[![OpenAgent 0.2 compatible](assets/badge/openagent-0.2-compatible.svg)](#openagent-compatible)\n&nbsp;\n[![OpenAgent 0.1 compatible](assets/badge/openagent-0.1-compatible.svg)](#openagent-compatible)\n\nThe badge is a **conformance claim, not a vibe**. You earn the right to show it by passing the portable [conformance suite](./conformance), a single language-agnostic [`manifest.json`](./conformance/manifest.json) of valid/invalid personas with expected verdicts. Two levels:\n\n- **0.1 compatible**: your validator agrees with every `\"spec\": \"0.1\"` case (the floor).\n- **0.2 compatible**: every 0.1 case **and** every 0.2 case (adds `provenance`, `ext`, `links.agent_card`, `face.recipe`). 0.2 is an additive superset of 0.1.\n\n**Verify + earn it (this CLI, or any tool built on `@5dive/openagent`):**\n\n```\nnpx @5dive/openagent conformance 0.2      # run the suite, exit 0 = compliant\nnpx @5dive/openagent badge --verify       # prints the badge snippet ONLY if you pass\n```\n\n`conformance` runs the reference implementation against the same manifest a third-party tool would load. `badge` emits the copy-paste snippet (`--markdown` default, `--html`, `--url`, `--level 0.1|0.2`). Building in another language? Load `conformance/manifest.json`, feed each case's `doc` to your validator, and check the verdict yourself, then paste the snippet:\n\n```markdown\n[![OpenAgent 0.2 compatible](https://raw.githubusercontent.com/5dive-ai/openagent/main/assets/badge/openagent-0.2-compatible.svg)](https://github.com/5dive-ai/openagent#openagent-compatible)\n```\n\nAdopters who validate personas in CI can also drop in the [GitHub Action](./action.yml). Shipped a compatible runtime or tool? Open a PR and we'll list it here.\n\n## Scope\n\nv0.1 is the **identity layer only** (face · audio voice · written voice · behavior). Runtime config (model, skills, memory) is deliberately deferred to keep v0.1 sharp and implementable.\n\n### Identity, not capability — the layer on top\n\nA wave of agent-interop standards is arriving — Google's [A2A](https://a2aproject.github.io/A2A/) `AgentCard`, and other agent-card formats — and they all answer the same question: **what can this agent *do*** (its endpoints, skills, auth, I/O modes) and how do I call it. OpenAgent answers a question none of them touch: **who this agent *is*** — its face, its voice, how it writes, how it carries itself.\n\nThose are orthogonal layers, not rival specs. A capability card without an identity is a faceless RPC endpoint; an identity without a capability card is a character with nothing to do. OpenAgent is the **persona layer that sits on top of the capability layer** — and the two are wired together by one optional field:\n\n```yaml\nlinks:\n  agent_card: https://example.com/.well-known/agent.json   # what it can DO (A2A)\n  # …the rest of the OpenAgent file is who it IS\n```\n\n`links.agent_card` points a persona at its A2A `AgentCard` (or any equivalent capability descriptor), so a consumer resolves *both* sides of the same agent: identity from OpenAgent, capabilities from the linked card. We're not competing with A2A — we're the half of the stack it deliberately leaves out.\n\n### `ext` — extend without forking\n\nThe core schema is **closed** — unknown fields are rejected, not silently passed through. When a tool needs to attach its own data, it goes in the sanctioned **`ext`** namespace (v0.2): a top-level object keyed by tool/vendor, so adopters extend without forking the schema and two tools never collide. See [SPEC.md → `ext`](./SPEC.md).\n\n## Contribute\n\nPersonas are meant to be shared and forked, like dotfiles. Check your tier, then publish to the public character-packs registry:\n\n```\nnpx @5dive/openagent tier my-agent.persona.yaml\n# then open a PR to github.com/5dive-ai/character-packs\n```\n\nv0.1 is a draft and the spec is small on purpose. Issues, proposals, and new personas welcome. Build a runtime that reads OpenAgent and we'll list it here.\n\nStatus: Draft 0.1 — spec + `validate` + `card` (static + `--animate`) + `tier` + signed `registry` are live.\n\n## License\n\nMIT.\n","readmeFilename":"README.md"}