{"_id":"@aiconnect/nexus-forge","_rev":"14-51eff4bb065ad39ef43c9054bec43fb7","name":"@aiconnect/nexus-forge","dist-tags":{"latest":"0.7.1"},"versions":{"0.1.0":{"name":"@aiconnect/nexus-forge","version":"0.1.0","keywords":["nexus","forge","cli","agent-native","skills","instructions"],"license":"UNLICENSED","_id":"@aiconnect/nexus-forge@0.1.0","maintainers":[{"name":"ericsantos","email":"ericsantos.net@gmail.com"}],"bin":{"forge":"dist/index.js"},"dist":{"shasum":"92a902f23bf48ecba1984570e558ad37b163cc38","tarball":"https://registry.npmjs.org/@aiconnect/nexus-forge/-/nexus-forge-0.1.0.tgz","fileCount":70,"integrity":"sha512-bg9tOxI14WXkDQW+KBM+d8sdWrmD/O85xRxPfE+YmJ8bahXmlC0SKaQtvLjn80axfmtvx++DJDAufMgSz55wyg==","signatures":[{"sig":"MEUCIAV87DvdS7GcMoSDoLAzgNfFnyjSJgI7JkQIQi80JmLVAiEA3Wm4KS5gikuTMBWln6FotYurhv9xyLprNJh0kXWq2V0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":234457},"type":"module","engines":{"node":">=22.0.0"},"gitHead":"6fc707a18064a3b3d7402fda7a265d4c86b85fc3","scripts":{"dev":"tsx src/index.ts","lint":"eslint src/","test":"vitest run","build":"tsc && chmod +x dist/index.js","build:watch":"tsc --watch","prepublishOnly":"npm run build"},"_npmUser":{"name":"ericsantos","email":"ericsantos.net@gmail.com"},"_npmVersion":"11.9.0","description":"Agent-native CLI for managing Skills and Instructions lifecycle for Nexus AI agents","directories":{},"_nodeVersion":"25.6.1","dependencies":{"commander":"^13.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.25.0","vitest":"^3.1.0","typescript":"^5.8.0","@types/node":"^22.15.0","@typescript-eslint/parser":"^8.59.2","@typescript-eslint/eslint-plugin":"^8.59.2"},"_npmOperationalInternal":{"tmp":"tmp/nexus-forge_0.1.0_1778434388848_0.96730838262379","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@aiconnect/nexus-forge","version":"0.2.0","keywords":["nexus","forge","cli","agent-native","skills","instructions"],"license":"UNLICENSED","_id":"@aiconnect/nexus-forge@0.2.0","maintainers":[{"name":"ericsantos","email":"ericsantos.net@gmail.com"}],"bin":{"forge":"dist/index.js"},"dist":{"shasum":"ae0e61f09d91d0720f045067cfe3250489371c1c","tarball":"https://registry.npmjs.org/@aiconnect/nexus-forge/-/nexus-forge-0.2.0.tgz","fileCount":78,"integrity":"sha512-5C7ARpgEPlfM9k3n+QRvw+lYBdy5cmhUgltBOilw9JoC03kbNC1n2IVDmzbu2b9NAryHG0EyUIbL9a2RwhfRGA==","signatures":[{"sig":"MEUCIATSps8ZIZdjEMmg4+fdaJtBjTAr0BSxwGz+uflFiJSKAiEA8DSz4Wf8+wMuePoyWO+yjrsHSE1db8xoGMYgBzWXWJ4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":292777},"type":"module","engines":{"node":">=22.0.0"},"gitHead":"79d9c85603357810fbec501ed373087d8bc31d0b","scripts":{"dev":"tsx src/index.ts","lint":"eslint src/","test":"vitest run","build":"tsc && chmod +x dist/index.js","build:watch":"tsc --watch","prepublishOnly":"npm run build"},"_npmUser":{"name":"ericsantos","email":"ericsantos.net@gmail.com"},"_npmVersion":"11.9.0","description":"Agent-native CLI for managing Skills and Instructions lifecycle for Nexus AI agents","directories":{},"_nodeVersion":"25.6.1","dependencies":{"yaml":"^2.8.4","commander":"^13.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.25.0","vitest":"^3.1.0","typescript":"^5.8.0","@types/node":"^22.15.0","@typescript-eslint/parser":"^8.59.2","@typescript-eslint/eslint-plugin":"^8.59.2"},"_npmOperationalInternal":{"tmp":"tmp/nexus-forge_0.2.0_1778448899692_0.6447404821666229","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@aiconnect/nexus-forge","version":"0.2.1","keywords":["nexus","forge","cli","agent-native","skills","instructions"],"license":"UNLICENSED","_id":"@aiconnect/nexus-forge@0.2.1","maintainers":[{"name":"ericsantos","email":"ericsantos.net@gmail.com"}],"bin":{"forge":"dist/index.js"},"dist":{"shasum":"53185bbc9105b4f13153ca8e399881c813cda755","tarball":"https://registry.npmjs.org/@aiconnect/nexus-forge/-/nexus-forge-0.2.1.tgz","fileCount":78,"integrity":"sha512-JXQ3c0RaCtOJZ61N9CXXsZy1/4rvEN8PvRgwvji/fjf9xWncQhsAkpM/EU/uPZV7KwikuAKJiF9eH45T7puPJg==","signatures":[{"sig":"MEQCIDuPIDpll9HPGCoA3+iQP2yBpiAofOMCxgcOLw1LI3cmAiA/mmZz4Q8B697/mrYBgyyVHpy2RiYYf4DsgGsQR7nL9w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":308650},"type":"module","engines":{"node":">=22.0.0"},"gitHead":"2bd9531882a4e24682a942fb26dc80c6d7e415e6","scripts":{"dev":"tsx src/index.ts","lint":"eslint src/","test":"vitest run","build":"tsc && chmod +x dist/index.js","build:watch":"tsc --watch","prepublishOnly":"npm run build"},"_npmUser":{"name":"ericsantos","email":"ericsantos.net@gmail.com"},"_npmVersion":"11.9.0","description":"Agent-native CLI for managing Skills and Instructions lifecycle for Nexus AI agents","directories":{},"_nodeVersion":"25.6.1","dependencies":{"yaml":"^2.8.4","commander":"^13.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.25.0","vitest":"^3.1.0","typescript":"^5.8.0","@types/node":"^22.15.0","@typescript-eslint/parser":"^8.59.2","@typescript-eslint/eslint-plugin":"^8.59.2"},"_npmOperationalInternal":{"tmp":"tmp/nexus-forge_0.2.1_1778537774076_0.9981059834181314","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@aiconnect/nexus-forge","version":"0.2.2","keywords":["nexus","forge","cli","agent-native","skills","instructions"],"license":"UNLICENSED","_id":"@aiconnect/nexus-forge@0.2.2","maintainers":[{"name":"ericsantos","email":"ericsantos.net@gmail.com"}],"bin":{"forge":"dist/index.js"},"dist":{"shasum":"6214d3ed9330024834c4eabc87caa57ebcae32ee","tarball":"https://registry.npmjs.org/@aiconnect/nexus-forge/-/nexus-forge-0.2.2.tgz","fileCount":78,"integrity":"sha512-PxJAIoA/l3rILsIJHPmg7I3YPcgUgc8n+o6q7yRJnoPyFPTngjg3jIQDD3ftjlkOpjRlOPLfUuZDn2WK1BXAUQ==","signatures":[{"sig":"MEUCIAQg15mzZODj9QB9DxWJI1esG6idjpkCcUdg3eHfTVroAiEAnQxph1szO3JHL1775fWCk7W1CjB2BfPHJigQCKkBCbg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":320925},"type":"module","engines":{"node":">=22.0.0"},"gitHead":"b54f073572513c7964ed3d9274a86da36a9441d4","scripts":{"dev":"tsx src/index.ts","lint":"eslint src/","test":"vitest run","build":"tsc && chmod +x dist/index.js","build:watch":"tsc --watch","prepublishOnly":"npm run build"},"_npmUser":{"name":"ericsantos","email":"ericsantos.net@gmail.com"},"_npmVersion":"11.9.0","description":"Agent-native CLI for managing Skills and Instructions lifecycle for Nexus AI agents","directories":{},"_nodeVersion":"25.6.1","dependencies":{"yaml":"^2.8.4","commander":"^13.1.0","cli-table3":"^0.6.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.25.0","vitest":"^3.1.0","typescript":"^5.8.0","@types/node":"^22.15.0","@typescript-eslint/parser":"^8.59.2","@typescript-eslint/eslint-plugin":"^8.59.2"},"_npmOperationalInternal":{"tmp":"tmp/nexus-forge_0.2.2_1778691570809_0.7004343357402727","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@aiconnect/nexus-forge","version":"0.2.3","keywords":["nexus","forge","cli","agent-native","skills","instructions"],"license":"UNLICENSED","_id":"@aiconnect/nexus-forge@0.2.3","maintainers":[{"name":"ericsantos","email":"ericsantos.net@gmail.com"}],"bin":{"forge":"dist/index.js"},"dist":{"shasum":"b011ca31c73822f89fb1f82116d859264e168f30","tarball":"https://registry.npmjs.org/@aiconnect/nexus-forge/-/nexus-forge-0.2.3.tgz","fileCount":78,"integrity":"sha512-c8EEfqR+mlWznOuo+hUSTBL/4uqr/wg3ZGU5+wnj878HSaMuU/omSjnIudTtxUW5PfUqF2c9TJm7iUz2dJ47SA==","signatures":[{"sig":"MEUCIQDX0o2sGmCWsPalzYmg2/IXxFEDrI7i5TN6HOJMvk8/TwIgINM0xJSUTQDoKFXPm9lVbumVoDwTgaErqR9SwXyOXUs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":322731},"type":"module","engines":{"node":">=22.0.0"},"gitHead":"6847c5a50e3e967c95bd7d0b0307b25d65f84e6e","scripts":{"dev":"tsx src/index.ts","lint":"eslint src/","test":"vitest run","build":"tsc && chmod +x dist/index.js","build:watch":"tsc --watch","prepublishOnly":"npm run build"},"_npmUser":{"name":"ericsantos","email":"ericsantos.net@gmail.com"},"_npmVersion":"11.9.0","description":"Agent-native CLI for managing Skills and Instructions lifecycle for Nexus AI agents","directories":{},"_nodeVersion":"25.6.1","dependencies":{"yaml":"^2.8.4","commander":"^13.1.0","cli-table3":"^0.6.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.25.0","vitest":"^3.1.0","typescript":"^5.8.0","@types/node":"^22.15.0","@typescript-eslint/parser":"^8.59.2","@typescript-eslint/eslint-plugin":"^8.59.2"},"_npmOperationalInternal":{"tmp":"tmp/nexus-forge_0.2.3_1778696650086_0.7242834231564572","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"@aiconnect/nexus-forge","version":"0.2.4","keywords":["nexus","forge","cli","agent-native","skills","instructions"],"license":"UNLICENSED","_id":"@aiconnect/nexus-forge@0.2.4","maintainers":[{"name":"ericsantos","email":"ericsantos.net@gmail.com"}],"bin":{"forge":"dist/index.js"},"dist":{"shasum":"5c805e56b15990a540d94864ccadb49aeeaee215","tarball":"https://registry.npmjs.org/@aiconnect/nexus-forge/-/nexus-forge-0.2.4.tgz","fileCount":82,"integrity":"sha512-JJgIjrK0ZFtak01xY72verKWBne7YYsVvSq6Zc2GupDzSDe3NzzhVlMW7WhKw092qwC7VYPeK3Ok7nTnpiS82Q==","signatures":[{"sig":"MEUCIAdCYV42wSdB1ktJTbD13jtucU7Ik1atGe4MNWrydPNGAiEA2CTJ70CPbioT7HhQNTYi58KDn0nQo3m+uKrz8uZNufc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":334221},"type":"module","engines":{"node":">=22.0.0"},"gitHead":"76bbca89191e14d0f99b0d1f2247d191ebb95ec6","scripts":{"dev":"tsx src/index.ts","lint":"eslint src/","test":"vitest run","build":"tsc && chmod +x dist/index.js","build:watch":"tsc --watch","prepublishOnly":"npm run build"},"_npmUser":{"name":"ericsantos","email":"ericsantos.net@gmail.com"},"_npmVersion":"11.9.0","description":"Agent-native CLI for managing Skills and Instructions lifecycle for Nexus AI agents","directories":{},"_nodeVersion":"25.6.1","dependencies":{"yaml":"^2.8.4","commander":"^13.1.0","cli-table3":"^0.6.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.25.0","vitest":"^3.1.0","typescript":"^5.8.0","@types/node":"^22.15.0","@typescript-eslint/parser":"^8.59.2","@typescript-eslint/eslint-plugin":"^8.59.2"},"_npmOperationalInternal":{"tmp":"tmp/nexus-forge_0.2.4_1779402941889_0.10048904924492152","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"@aiconnect/nexus-forge","version":"0.2.5","keywords":["nexus","forge","cli","agent-native","skills","instructions"],"license":"UNLICENSED","_id":"@aiconnect/nexus-forge@0.2.5","maintainers":[{"name":"ericsantos","email":"ericsantos.net@gmail.com"}],"bin":{"forge":"dist/index.js"},"dist":{"shasum":"c57b4e0f9840370ae62acda09df66d00fc6c92a5","tarball":"https://registry.npmjs.org/@aiconnect/nexus-forge/-/nexus-forge-0.2.5.tgz","fileCount":82,"integrity":"sha512-2F3GJBX5bd8gUhCFOTQ1ngbeC3Svu8igh3Uts24iooyboqZu3QT3vfpJerjbCCyT34COq7nK6x6HgSYARHNMzA==","signatures":[{"sig":"MEUCIQCPNLoa1dMjziImDoVSkcFWNIuQalMPpJzcdeJruBwCTAIgaoCOMzlN2RV/PgguIZPIl+E0gXuVgegIaBgwS3KYjx0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":337675},"type":"module","engines":{"node":">=22.0.0"},"gitHead":"30354202bde094a81735ee68d2daaf54dfed40b3","scripts":{"dev":"tsx src/index.ts","lint":"eslint src/","test":"vitest run","build":"tsc && chmod +x dist/index.js","build:watch":"tsc --watch","prepublishOnly":"npm run build"},"_npmUser":{"name":"ericsantos","email":"ericsantos.net@gmail.com"},"_npmVersion":"11.9.0","description":"Agent-native CLI for managing Skills and Instructions lifecycle for Nexus AI agents","directories":{},"_nodeVersion":"25.6.1","dependencies":{"yaml":"^2.8.4","commander":"^13.1.0","cli-table3":"^0.6.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.25.0","vitest":"^3.1.0","typescript":"^5.8.0","@types/node":"^22.15.0","@typescript-eslint/parser":"^8.59.2","@typescript-eslint/eslint-plugin":"^8.59.2"},"_npmOperationalInternal":{"tmp":"tmp/nexus-forge_0.2.5_1779552112722_0.20260463949717833","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"@aiconnect/nexus-forge","version":"0.2.6","keywords":["nexus","forge","cli","agent-native","skills","instructions"],"license":"UNLICENSED","_id":"@aiconnect/nexus-forge@0.2.6","maintainers":[{"name":"ericsantos","email":"ericsantos.net@gmail.com"}],"bin":{"forge":"dist/index.js"},"dist":{"shasum":"431f28e0b7a1e553b65949a012c3c18837afbee4","tarball":"https://registry.npmjs.org/@aiconnect/nexus-forge/-/nexus-forge-0.2.6.tgz","fileCount":82,"integrity":"sha512-CZozWicohzL82Wb1g5+bzsb9e/rejkZxd++8Eq0yqgrqFwpoBMfa6UjW05XO4dfaQh6m0qBo6d00XQEbySdw3w==","signatures":[{"sig":"MEYCIQCseES3lTH0BmFkBUl6a+SPMQ1+ck1GGEowa952TZ8qIAIhALCpAt+kbG4/ZU8Uxk3xOAHrO0L/im/DVeGgClRUnyp1","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":338189},"type":"module","engines":{"node":">=22.0.0"},"gitHead":"1817b86a8eeed75892d9c9559160633c3b433646","scripts":{"dev":"tsx src/index.ts","lint":"eslint src/","test":"vitest run","build":"tsc && chmod +x dist/index.js","build:watch":"tsc --watch","prepublishOnly":"npm run build"},"_npmUser":{"name":"ericsantos","email":"ericsantos.net@gmail.com"},"_npmVersion":"11.9.0","description":"Agent-native CLI for managing Skills and Instructions lifecycle for Nexus AI agents","directories":{},"_nodeVersion":"25.6.1","dependencies":{"yaml":"^2.8.4","commander":"^13.1.0","cli-table3":"^0.6.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.25.0","vitest":"^3.1.0","typescript":"^5.8.0","@types/node":"^22.15.0","@typescript-eslint/parser":"^8.59.2","@typescript-eslint/eslint-plugin":"^8.59.2"},"_npmOperationalInternal":{"tmp":"tmp/nexus-forge_0.2.6_1779909102889_0.4740652521291915","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@aiconnect/nexus-forge","version":"0.3.0","keywords":["nexus","forge","cli","agent-native","skills","instructions"],"license":"UNLICENSED","_id":"@aiconnect/nexus-forge@0.3.0","maintainers":[{"name":"ericsantos","email":"ericsantos.net@gmail.com"}],"bin":{"forge":"dist/index.js"},"dist":{"shasum":"2646a1f906dfb0d9e1422c7189bb1cda78774f0b","tarball":"https://registry.npmjs.org/@aiconnect/nexus-forge/-/nexus-forge-0.3.0.tgz","fileCount":98,"integrity":"sha512-FJii75kh3MB3b6m8RFznpRBk4celCDb1OKAdF65cytCyTO0p3JkRYjZGmxuTgwZozL93RZ1SJKUBxmK1U+BlDw==","signatures":[{"sig":"MEUCIQDGt6bXy0bnF8MlipRl7VYjfFcFe5o37bUIU68YUmmosAIgK92k9swdefDJk3LewMkhgviR1HKk++tYIyEsUqrfqSA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":415875},"type":"module","engines":{"node":">=22.0.0"},"gitHead":"839ca1c1b4a34769ede56723d85eecb4e1325d01","scripts":{"dev":"tsx src/index.ts","lint":"eslint src/","test":"vitest run","build":"tsc && chmod +x dist/index.js","build:watch":"tsc --watch","prepublishOnly":"npm run build"},"_npmUser":{"name":"ericsantos","email":"ericsantos.net@gmail.com"},"_npmVersion":"11.9.0","description":"Agent-native CLI for managing Skills and Instructions lifecycle for Nexus AI agents","directories":{},"_nodeVersion":"25.6.1","dependencies":{"yaml":"^2.8.4","commander":"^13.1.0","cli-table3":"^0.6.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.25.0","vitest":"^3.1.0","typescript":"^5.8.0","@types/node":"^22.15.0","@typescript-eslint/parser":"^8.59.2","@typescript-eslint/eslint-plugin":"^8.59.2"},"_npmOperationalInternal":{"tmp":"tmp/nexus-forge_0.3.0_1783102943748_0.46526245918288955","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@aiconnect/nexus-forge","version":"0.4.0","keywords":["nexus","forge","cli","agent-native","skills","instructions"],"license":"UNLICENSED","_id":"@aiconnect/nexus-forge@0.4.0","maintainers":[{"name":"ericsantos","email":"ericsantos.net@gmail.com"}],"bin":{"forge":"dist/index.js"},"dist":{"shasum":"11ffcf554ca6c753e58886fc90633c2a80f52ab4","tarball":"https://registry.npmjs.org/@aiconnect/nexus-forge/-/nexus-forge-0.4.0.tgz","fileCount":100,"integrity":"sha512-7plYb8DptDDv+OO8qCFYSg0U6G6kG4tzoP9p153h+wyzIoiUiSB06tOSEy9Bz9nwmEExELmRVTsJhsPx4Gvx1w==","signatures":[{"sig":"MEUCIDJPHQxQIq3dc23Br43Xe9bWX0XVSMAc1JW53JF6JquQAiEA9UgQcvBzxVrcO3ZWpNAF3ekhIrj/i7fGJQxyiZZ6O8I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":427634},"type":"module","engines":{"node":">=22.0.0"},"gitHead":"78ba3df23d24a0b3103f6283284337819eb76b7f","scripts":{"dev":"tsx src/index.ts","lint":"eslint src/","test":"vitest run","build":"tsc && chmod +x dist/index.js","build:watch":"tsc --watch","prepublishOnly":"npm run build"},"_npmUser":{"name":"ericsantos","email":"ericsantos.net@gmail.com"},"_npmVersion":"11.9.0","description":"Agent-native CLI for managing Skills and Instructions lifecycle for Nexus AI agents","directories":{},"_nodeVersion":"25.6.1","dependencies":{"yaml":"^2.8.4","commander":"^13.1.0","cli-table3":"^0.6.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.25.0","vitest":"^3.1.0","typescript":"^5.8.0","@types/node":"^22.15.0","@typescript-eslint/parser":"^8.59.2","@typescript-eslint/eslint-plugin":"^8.59.2"},"_npmOperationalInternal":{"tmp":"tmp/nexus-forge_0.4.0_1783214051007_0.4287890126731144","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@aiconnect/nexus-forge","version":"0.5.0","keywords":["nexus","forge","cli","agent-native","skills","instructions"],"license":"UNLICENSED","_id":"@aiconnect/nexus-forge@0.5.0","maintainers":[{"name":"ericsantos","email":"ericsantos.net@gmail.com"}],"bin":{"forge":"dist/index.js"},"dist":{"shasum":"a93a17ae89a987ca6bd26388ed76f9bf10105233","tarball":"https://registry.npmjs.org/@aiconnect/nexus-forge/-/nexus-forge-0.5.0.tgz","fileCount":104,"integrity":"sha512-BL149BIYK3UPDmYIfag+a94vLZutcL9hLUN6iO0HAWlD0KijKncHw1lgIxRqnK5HMdws948/+hAdxtKGdhvDGw==","signatures":[{"sig":"MEUCIQCsBWNWFWyrcxBg4E6ef348aufeMIli4NJ5EkvNWl2yHAIgQ2kzm7BXrwVnM1UsJ/5lWBkoiZVNDpncC5ttKqr2Ftg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":451778},"type":"module","engines":{"node":">=22.0.0"},"gitHead":"7e36a4d4ca65f105656106df723c2522ece92a69","scripts":{"dev":"tsx src/index.ts","lint":"eslint src/","test":"vitest run","build":"tsc && chmod +x dist/index.js","build:watch":"tsc --watch","prepublishOnly":"npm run build"},"_npmUser":{"name":"ericsantos","email":"ericsantos.net@gmail.com"},"_npmVersion":"11.9.0","description":"Agent-native CLI for managing Skills and Instructions lifecycle for Nexus AI agents","directories":{},"_nodeVersion":"25.6.1","dependencies":{"yaml":"^2.8.4","commander":"^13.1.0","cli-table3":"^0.6.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.25.0","vitest":"^3.1.0","typescript":"^5.8.0","@types/node":"^22.15.0","@typescript-eslint/parser":"^8.59.2","@typescript-eslint/eslint-plugin":"^8.59.2"},"_npmOperationalInternal":{"tmp":"tmp/nexus-forge_0.5.0_1784157807314_0.5352478806119807","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@aiconnect/nexus-forge","version":"0.6.0","keywords":["nexus","forge","cli","agent-native","skills","instructions"],"license":"UNLICENSED","_id":"@aiconnect/nexus-forge@0.6.0","maintainers":[{"name":"ericsantos","email":"ericsantos.net@gmail.com"}],"bin":{"forge":"dist/index.js"},"dist":{"shasum":"c6760a900c8c8adf7c8dae133f8d5104ee2290fc","tarball":"https://registry.npmjs.org/@aiconnect/nexus-forge/-/nexus-forge-0.6.0.tgz","fileCount":106,"integrity":"sha512-6rfR8DS1n6NQ/upYCo6YM17cJcwZoMOie2xtPNxXfDfrgFaWcgSFzTVAM4VEs38x+nV30WSy3H8z7fKl8L0SZg==","signatures":[{"sig":"MEQCIC6J49eMTbyFAkHcciZHjPXUXtZyDtrZckHjHc0dSI0aAiBi+r6rqzBcJ0Ntu9oVWtCoE+egP8FUcH6wJC4YqFSZlw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":463451},"type":"module","engines":{"node":">=22.0.0"},"gitHead":"00b831f88decec4894c4a4a42f8ff00906665cab","scripts":{"dev":"tsx src/index.ts","lint":"eslint src/","test":"vitest run","build":"tsc && chmod +x dist/index.js","build:watch":"tsc --watch","prepublishOnly":"npm run build"},"_npmUser":{"name":"ericsantos","email":"ericsantos.net@gmail.com"},"_npmVersion":"11.19.0","description":"Agent-native CLI for managing Skills and Instructions lifecycle for Nexus AI agents","directories":{},"_nodeVersion":"26.7.0","dependencies":{"yaml":"^2.8.4","dotenv":"^16.4.5","commander":"^13.1.0","cli-table3":"^0.6.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.25.0","vitest":"^3.1.0","typescript":"^5.8.0","@types/node":"^22.15.0","@typescript-eslint/parser":"^8.59.2","@typescript-eslint/eslint-plugin":"^8.59.2"},"_npmOperationalInternal":{"tmp":"tmp/nexus-forge_0.6.0_1787783090525_0.07267178140171571","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@aiconnect/nexus-forge","version":"0.7.0","keywords":["nexus","forge","cli","agent-native","skills","instructions"],"license":"UNLICENSED","_id":"@aiconnect/nexus-forge@0.7.0","maintainers":[{"name":"ericsantos","email":"ericsantos.net@gmail.com"}],"bin":{"forge":"dist/index.js"},"dist":{"shasum":"22dfb3890174ceebfeba1a6ce2a832aaf8a3cab5","tarball":"https://registry.npmjs.org/@aiconnect/nexus-forge/-/nexus-forge-0.7.0.tgz","fileCount":106,"integrity":"sha512-O162PbzZasaCBMCUbP2VFNDLa9+hTEkuL4cswhAdBGz6RISLGzvvtiG9AOf8cjew3QERwGgNZlp8mQKJtZUHew==","signatures":[{"sig":"MEYCIQCj+7WnARYnm5R6TbUs7EcGh0O6SINaJw50trXqeTjO2QIhANoAF4ggSjIscVJd4BDRLfBXyPc7x3PS50SxJFUeu+CU","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":464253},"type":"module","engines":{"node":">=22.0.0"},"gitHead":"fe7334a38f6f11694d3ec2b038199e31e9f61d56","scripts":{"dev":"tsx src/index.ts","lint":"eslint src/","test":"vitest run","build":"tsc && chmod +x dist/index.js","build:watch":"tsc --watch","prepublishOnly":"npm run build"},"_npmUser":{"name":"ericsantos","email":"ericsantos.net@gmail.com"},"_npmVersion":"12.0.2","description":"Agent-native CLI for managing Skills and Instructions lifecycle for Nexus AI agents","directories":{},"_nodeVersion":"22.23.1","dependencies":{"yaml":"^2.8.4","dotenv":"^16.4.5","commander":"^13.1.0","cli-table3":"^0.6.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.25.0","vitest":"^3.1.0","typescript":"^5.8.0","@types/node":"^22.15.0","@typescript-eslint/parser":"^8.59.2","@typescript-eslint/eslint-plugin":"^8.59.2"},"_npmOperationalInternal":{"tmp":"tmp/nexus-forge_0.7.0_1788083909725_0.02652077253772389","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"@aiconnect/nexus-forge","version":"0.7.1","description":"Agent-native CLI for managing Skills and Instructions lifecycle for Nexus AI agents","type":"module","bin":{"forge":"dist/index.js"},"scripts":{"build":"tsc && chmod +x dist/index.js","dev":"tsx src/index.ts","build:watch":"tsc --watch","test":"vitest run","lint":"eslint src/","prepublishOnly":"npm run build"},"publishConfig":{"access":"public"},"keywords":["nexus","forge","cli","agent-native","skills","instructions"],"license":"UNLICENSED","engines":{"node":">=22.0.0"},"dependencies":{"cli-table3":"^0.6.5","commander":"^13.1.0","dotenv":"^16.4.5","yaml":"^2.8.4"},"devDependencies":{"@types/node":"^22.15.0","@typescript-eslint/eslint-plugin":"^8.59.2","@typescript-eslint/parser":"^8.59.2","eslint":"^9.25.0","tsx":"^4.21.0","typescript":"^5.8.0","vitest":"^3.1.0"},"gitHead":"61c579247cc4a6333dbfbd4f23653cf5920b8218","_id":"@aiconnect/nexus-forge@0.7.1","_nodeVersion":"22.23.1","_npmVersion":"12.0.2","dist":{"integrity":"sha512-47zeu5vWJZLgvLMYC33WBzt40AZpWs0XAXxsy0kIwoevwnPqDWT9iuRczy7gq1NbfDxKjr3PBoOsAFs6uMJ1Vw==","shasum":"d6f0839c4a65aa0237a7aa3616fb6d19c07d9ce0","tarball":"https://registry.npmjs.org/@aiconnect/nexus-forge/-/nexus-forge-0.7.1.tgz","fileCount":106,"unpackedSize":467410,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIFO7X/T6S3odHM1itmdQ5/7xQQUt90L0dprvwIs41bWbAiEAy429ysGbz6WbMCbFJzJp86aNixL1DnWc9lDyrXW0MXs="}]},"_npmUser":{"name":"ericsantos","email":"ericsantos.net@gmail.com"},"directories":{},"maintainers":[{"name":"ericsantos","email":"ericsantos.net@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/nexus-forge_0.7.1_1788091827987_0.41131306406828005"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-10T17:33:08.799Z","modified":"2026-08-30T12:10:28.445Z","0.1.0":"2026-05-10T17:33:09.013Z","0.2.0":"2026-05-10T21:34:59.839Z","0.2.1":"2026-05-11T22:16:14.271Z","0.2.2":"2026-05-13T16:59:30.949Z","0.2.3":"2026-05-13T18:24:10.230Z","0.2.4":"2026-05-21T22:35:42.095Z","0.2.5":"2026-05-23T16:01:52.886Z","0.2.6":"2026-05-27T19:11:43.040Z","0.3.0":"2026-07-03T18:22:23.894Z","0.4.0":"2026-07-05T01:14:11.174Z","0.5.0":"2026-07-15T23:23:27.469Z","0.6.0":"2026-08-26T22:24:50.716Z","0.7.0":"2026-08-30T09:58:29.879Z","0.7.1":"2026-08-30T12:10:28.288Z"},"license":"UNLICENSED","keywords":["nexus","forge","cli","agent-native","skills","instructions"],"description":"Agent-native CLI for managing Skills and Instructions lifecycle for Nexus AI agents","maintainers":[{"name":"ericsantos","email":"ericsantos.net@gmail.com"}],"readme":"# Nexus Forge\n\nAgent-native CLI for managing the lifecycle of **Skills** and **Instructions** for Nexus AI agents. All S3 operations are delegated to `s3cli` via `--profile forge-data`.\n\nEvery command outputs structured JSON with `_apiVersion`, `ok`, `errorCode`, and `remediation` fields, designed for LLM/agent consumption rather than human readability.\n\n## What's new in v0.3\n\nIf you're upgrading from v0.2, read this section first — it covers the web distribution pipeline shipped across four cycles.\n\n### Web distribution 🚀\n\nThe **Forge Web Distribution** layer lets you share instructions publicly and generate ephemeral download links — all served through a read-only, hardened web app.\n\n- **`forge instruction share <name> --vanity <slug>`** — publish an instruction to a public URL at `/<domain>/i/<slug>`. Use `unshare` to take it down.\n- **`forge instruction share skill|instruction <name>`** — generate a time-limited download link with a cryptographically strong token (`--expires-in` default 24h). Token hash stored in S3, never the raw token. Use `revoke` for immediate invalidation.\n- **`forge share list`** — enumerate all active ephemeral links and perennial publications in one command.\n- **`GET /i/:vanity`** — public, unauthenticated web endpoint serving rendered markdown (HTML with inline styling) or raw text (`?raw=1`).\n- **`GET /d/:slug?t=<token>`** — ephemeral download: skills streamed as `.skill` zip bundles, instructions as plain text.\n- **`GET /healthz`** — S3-backed readiness probe (real `headObject`), not a stub. Returns 503 `NOT_READY` if S3 is unreachable.\n- **Size guard (NFR-7)** — 50 MB served-content ceiling (configurable via `FORGE_WEB_MAX_BYTES`). Over-cap → HTTP 413 `PAYLOAD_TOO_LARGE`.\n- **Token-safe request logging (NFR-9)** — structured JSON lines per request with method, route, result, status, bytes — never logs tokens, URLs, or auth headers.\n- **Dockerfile** — multi-stage `node:22-alpine`, non-root user, `HEALTHCHECK` polling `/healthz`, ready for production.\n- **Operational docs** — read-only IAM policy (`docs/web-read-only-iam-policy.json`), DNS/TLS guidance, credential rotation procedure (`docs/web-deployment.md`).\n\n## What's new in v0.2\n\nIf you're upgrading from v0.1, read this section.\n\n- **Dual-format bundles** — publish skills in either Forge-native (`manifest.yaml` + `SKILL.md`) or **ClawHub-native** (`SKILL.md` with YAML frontmatter) format. Existing ClawHub skills publish via forge with zero conversion.\n- **`forge skill init` / `instruction init`** — scaffold a new bundle from the CLI. Default format is ClawHub.\n- **`forge bucket init` + `bucket show` + `bucket validate`** — provision a new S3 bucket as a forge-data store from the CLI. Replaces hand-crafting `_forge/manifest.json` via console.\n- **`forge config init`** — bootstrap your local config and (optionally) the s3cli profile template.\n- **`forge schema show <type>`** — inspect the contract for any document type from the CLI.\n- **Examples in every `--help`** — first-run path is discoverable without reading source or PRD.\n- **Reason-aware bucket remediation** — `BUCKET_MANIFEST_INVALID` now returns a different remediation per failure reason (actionable for empty buckets, hybrid for populated buckets needing adoption, protective for genuinely-wrong buckets). v0.1 returned the same generic \"do not mutate\" string for all reasons.\n- **`bundleFormat` echoed across the lifecycle** — every bundle-touching response (`publish`, `download`, `verify`, `list`, `rollback`) carries `bundleFormat: \"forge\" | \"clawhub\"`.\n- **Line ending normalization** — bundles are normalized to LF on store; `bundleChecksum` is computed over the normalized bytes. Cross-platform identity preserved.\n- **Breaking: `update` → `publish`.** `forge skill update` and `forge instruction update` are removed. Invoking them returns a structured `COMMAND_RENAMED` JSON error envelope pointing to `publish` (so LLM-driven callers can self-correct on first try).\n\nSee `openspec/archive/v02-onboarding-ux/` for the full design rationale.\n\n## What's new in v0.2.1\n\nv0.2.1 is a stability release addressing crashes, contract drifts, and rough edges found during agent-native integration testing.\n\n### Crashes fixed (3)\n\n- **`forge skill list` returns 0 items** — S3 delimiter issue caused empty results on aiconnect.direct API. Fixed by removing `--delimiter /` from listing calls and adding object-key fallback extraction. Also affects `instruction list`, `namespace list`, and `bucket show`.\n- **`forge skill update` / `instruction update` stubs crash** — Stub handlers used 2-arg `(_opts, command)` signature but Commander 13 calls with 3 args `(name, opts, command)`. Fixed to match the already-corrected `publish` handler pattern.\n- **`forge schema show` crash** — Same Commander 13 handler signature issue.\n\n### Contract drifts fixed (6)\n\n- **`namespace` defaults to `general`** — Reversal of MISSING_NAMESPACE error; aligns with the agent-native principle that namespace should be a convenience, not a gate.\n- **`rollback` response shape** — Added `bundleFormat` and `bundleMetadata` to rollback responses, matching the rest of the lifecycle.\n- **`publish` action unified to `published`** — Was sometimes `published`, sometimes `updated`. Now always `published`.\n- **Frontmatter errors use `INVALID_FRONTMATTER`** — Instead of `INVALID_SKILL_BUNDLE` for YAML parse failures.\n- **`frontmatterMismatch` moved to `details.frontmatterMismatch`** — Previously leaked into top-level response.\n- **Line endings warning moved to `details.lineEndingsNormalized`** — Always present when normalization occurred, never in the top-level `warnings` array.\n\n### Polish (4)\n\n- **`config show` resolution chain** — Added `resolutionChain` block showing how each setting was resolved (cli-flag → env-var → config-file → default).\n- **Duplicate warning suppression** — Same warning category no longer repeats across the response.\n- **`verify` flag parity** — `--from` replaces `--local` on `skill verify` and `instruction verify` (matching `publish`). `--local` kept as hidden alias.\n- **`bucket init` org-id is an option, not a required argument** — Better error envelope with remediation.\n\n### Tests\n\n477 tests (29 suites), TypeScript compiles clean.\n\n## Get started in 60 seconds\n\n```bash\n# Admin step — skip if your org admin already provisioned the bucket:\nforge bucket init --org-id my-org                          # one-time, per org\n\n# User flow:\nforge config init                                           # one-time setup\nforge skill init my-first-skill                             # scaffold a bundle (ClawHub format)\nforge skill publish my-first-skill \\\n  --from ./my-first-skill \\\n  --namespace my-team \\\n  --dry-run                                                 # validate without publishing\nforge skill publish my-first-skill \\\n  --from ./my-first-skill \\\n  --namespace my-team                                       # publish for real\n```\n\nTip: `forge schema show clawhub-frontmatter` to see the bundle contract.\n\n## Quick start\n\n```bash\n# Run without installing — requires Node.js 22+ and a configured s3cli profile\nnpx @aiconnect/nexus-forge --help\nnpx @aiconnect/nexus-forge config show\nnpx @aiconnect/nexus-forge skill list --all-namespaces\n```\n\n## Prerequisites\n\n- **Node.js** 22+\n- **s3cli** v1.4.1+ installed and configured with `--profile forge-data`\n\n### s3cli configuration\n\nThe fastest path is `forge config init`, which writes a profile template at `~/.config/s3cli/forge-data.env` if one doesn't exist (does not populate credentials — leaves placeholders you fill in).\n\nTo configure manually:\n\n```bash\nmkdir -p ~/.config/s3cli\ncat > ~/.config/s3cli/forge-data.env << 'EOF'\nS3_ENDPOINT=<your-s3-endpoint>\nS3_ACCESS_KEY=<your-access-key>\nS3_SECRET_KEY=<your-secret-key>\nS3_BUCKET=<your-bucket>\nS3_REGION=auto\nS3_USE_SSL=true\nS3_PATH_STYLE=true  # set false if using AWS S3 native\nEOF\n```\n\nVerify:\n```bash\ns3cli --profile forge-data ls\n```\n\nForge resolves the s3cli profile from (in order):\n1. `FORGE_S3CLI_PROFILE` env var\n2. `.env` (or `<profile>.env`) → `FORGE_S3CLI_PROFILE`\n3. Default: `forge-data`\n\n> Note: the global `--profile` flag selects the **forge config profile** (which `.env` to read), not the s3cli profile. See `forge config show`.\n\n## Installation\n\n### Run on demand with `npx` (recommended)\n\nNo installation required. `npx` downloads the package on first use and caches it locally:\n\n```bash\nnpx @aiconnect/nexus-forge <command> [options]\n```\n\n### Install globally (optional)\n\nFor frequent use, install globally to expose the `forge` binary on your PATH:\n\n```bash\nnpm install -g @aiconnect/nexus-forge\nforge --help\n```\n\n### Pin a version (CI / scripts)\n\nFor reproducible automation, pin to an explicit version:\n\n```bash\nnpx @aiconnect/nexus-forge@0.2.1 skill list --namespace my-ns\n```\n\n## Bundle formats\n\nForge accepts two equivalent bundle formats. Forge stores what you publish — no normalization, no rewriting between formats.\n\n### Forge-native\n\n```\nmy-skill/\n├── manifest.yaml      (required — name, namespace, description, kind: skill)\n├── SKILL.md           (required — the skill content)\n└── <other files>      (optional — scripts/, fixtures, etc.)\n```\n\n`forge skill init my-skill --format forge` scaffolds this layout.\n\n### ClawHub-native\n\n```\nmy-skill/\n├── SKILL.md           (required — content with YAML frontmatter at top)\n└── <other files>      (optional)\n```\n\nThe frontmatter at the top of `SKILL.md`:\n\n```yaml\n---\nname: my-skill\ndescription: One-liner about what the skill does and when to use it.\nversion: 1.0.0\nmetadata:\n  openclaw:\n    requires:\n      bins:\n        - bash\n    envVars:\n      - name: MY_API_KEY\n        required: true\n---\n\n# My skill\n\n...content...\n```\n\nForge extracts only `name` and `description` from the frontmatter for its own metadata indexing. Everything else — `version`, the entire `metadata.openclaw` block, any custom keys — is preserved bit-perfect in S3 for the OpenClaw runtime to consume on load. Forge does not validate or interpret the OpenClaw runtime metadata; that's OpenClaw's job.\n\n`forge skill init my-skill` (default format) scaffolds this layout.\n\nSee `forge schema show clawhub-frontmatter` for the full contract Forge requires from the frontmatter.\n\n### Detection precedence\n\nWhen forge resolves a bundle at `--from <path>`:\n\n1. If `<path>/manifest.yaml` exists → forge-native format.\n2. Else if `<path>/SKILL.md` has YAML frontmatter with at least `name` and `description` → ClawHub format.\n3. Else → `INVALID_SKILL_BUNDLE`.\n\nIf both `manifest.yaml` and frontmatter are present, `manifest.yaml` wins. Disagreement between the two surfaces as a `details.frontmatterMismatch` warning in the publish response, but does not fail the publish.\n\n## Usage\n\n```\nforge [global-options] <command> [subcommand] [options]\n```\n\n`forge` in the examples below stands for any of the three invocation forms above (`npx @aiconnect/nexus-forge`, the globally installed `forge` binary, or `./dist/index.js` when running from a local build).\n\n### Global Options\n\n| Option | Description |\n|---|---|\n| `--format <json\\|human>` | Output format (default: TTY-aware — `json` if stdout is not a TTY, `human` otherwise) |\n| `--quiet` | Suppress stdout output |\n\n`--skip-bucket-validation` exists as a hidden power-user flag for debugging; it does not appear in `--help`. The `BUCKET_MANIFEST_INVALID` remediation will reference it explicitly when relevant.\n\n### bucket\n\nBucket activation and inspection. Required once per org before any publish can happen.\n\n```bash\nforge bucket init --org-id <id> [--bucket-name <name>] [--adopt-existing] [--dry-run] [--force]\nforge bucket show\nforge bucket validate\n```\n\nNotes:\n- `--bucket-name` is auto-inferred from the s3cli profile's `S3_BUCKET` if omitted.\n- `--adopt-existing` is required when initializing a bucket that already contains skills/instructions but lacks `_forge/manifest.json` (e.g., migrating from v0.1, or claiming a bucket that pre-dates the manifest schema).\n- `--force` re-initializes a bucket that already has a manifest (rare; only for org-id migrations).\n\n### config\n\nConfiguration management.\n\n```bash\nforge config init [--namespace <ns>] [--no-s3cli-template] [--force] [--interactive]\nforge config show [--org <org>] [--namespace <ns>]\n# Both subcommands honor the global --profile <name> flag (selects <profile>.env).\n```\n\n`config init` resolves the namespace from `--namespace` flag → `FORGE_NAMESPACE` env var → omit. There is **no silent default to `general`** — namespace is identity, not a credential, and config init never picks one for you. The `--interactive` flag enables a minimal readline prompt for first-run setup; without it, the command is fully flag-driven (agent-friendly).\n\n### namespace\n\nNamespace listing.\n\n```bash\nforge namespace list [--with-counts]\n```\n\n### skill\n\nSkill bundle management — scaffold, publish, download, list, verify, rollback.\n\n```bash\nforge skill init <name> [--format <forge|clawhub>] [--namespace <ns>] [--dest <path>] [--force]\nforge skill publish <name> --from <path> [--namespace <ns>] [--dry-run] [--allow-secrets]\nforge skill download <name> [--namespace <ns>] [--dest <dir>] [--target-version <N|current|previous>] [--force] [--no-fallback]\nforge skill list [--namespace <ns>] [--all-namespaces] [--filter <substr>] [--limit <N>]\nforge skill verify <name> [--namespace <ns>] [--local <path>]\nforge skill rollback <name> [--namespace <ns>] [--dry-run]\n```\n\n`skill init` defaults to `--format clawhub` (the recommended interop path). Use `--format forge` for the native two-file layout if you have a specific reason.\n\n### instruction\n\nInstruction bundle management — same shape as skill, minus the format choice (instructions are forge-native only in v0.2).\n\n```bash\nforge instruction init <name> [--namespace <ns>] [--dest <path>] [--force]\nforge instruction publish <name> --from <path> [--namespace <ns>] [--dry-run] [--allow-secrets]\nforge instruction download <name> [--namespace <ns>] [--dest <dir>] [--version <N|current|previous>] [--force] [--no-fallback]\nforge instruction list [--namespace <ns>] [--all-namespaces] [--filter <substr>] [--limit <N>]\nforge instruction verify <name> [--namespace <ns>] [--local <path>]\nforge instruction rollback <name> [--namespace <ns>] [--dry-run]\n```\n\n### secret-scanning\n\nBefore publishing, forge scans all bundle files for potential secrets. Detection has two severity tiers:\n\n| Severity | Patterns | Behavior |\n|----------|----------|----------|\n| **block** | AWS keys, GitHub PATs, OpenAI/Anthropic API keys | ❌ Rejects publish (exit 60 `SECRET_DETECTED`) |\n| **warn** | JWT tokens, high-entropy strings ≥ 4.0 Shannon entropy near `password`/`secret`/`token`/`key` labels | ⚠️ Emits warning, proceeds with publish |\n\nIf **any** block-severity match is found, the publish is rejected. If only warn-severity matches exist, the publish proceeds with a structured warning listing each match.\n\n#### Suppression (`forge-allow-secret`)\n\nAdd a comment on the line **immediately above** the flagged line to suppress detection. Forge recognizes four comment prefixes:\n\n```\n# forge-allow-secret: reason    (shell, YAML, .env)\n// forge-allow-secret: reason   (JS, TS, MJS)\n/* forge-allow-secret: reason   (JS/TS block comment)\n<!-- forge-allow-secret: reason (HTML)\n```\n\n#### Override (`--allow-secrets`)\n\nPass `--allow-secrets` to `publish` to proceed despite **any** detected secret (block or warn). All matches are listed as warnings; the publish succeeds normally.\n\n```bash\nforge skill publish my-skill --from ./skills/my-skill --allow-secrets\n```\n\n### schema\n\nSchema introspection — see the contract for any document type without leaving the CLI.\n\n```bash\nforge schema show <type>     # supported types: skill-manifest, clawhub-frontmatter, instruction-meta, meta-json, bucket-manifest\nforge schema show            # list available types\n```\n\nOutput is a JSON Schema (Draft 2020-12) you can pipe to `jq`, feed to a validator, or read directly.\n\n### logs\n\nEvent log management.\n\n```bash\nforge logs export --since <YYYY-MM-DD> [--until <YYYY-MM-DD>] [--event <type>] [--format <json|csv>]\n```\n\n### web\n\nWeb distribution configuration.\n\n```bash\nforge web config set --domain <url>     # set the public domain for share URLs\nforge web config show                   # show current web config\n```\n\nThe domain set here is used by `forge instruction share` and `forge share list` to produce correct public URLs (`<domain>/i/<slug>`).\n\n### share\n\nShared artifact inspection.\n\n```bash\nforge share list      # list active ephemeral links and perennial publications\n```\n\nOutput includes two arrays: `links[]` (ephemeral download links with slug, kind, name, namespace, createdAt, expiresAt, expired) and `publications[]` (perennial published instructions with vanity, name, namespace, createdAt, url). Token-derived fields are never surfaced.\n\n## Web App\n\nThe Forge web distribution server (`web/`) is a read-only ExpressJS app that serves public content directly from S3 via the AWS SDK. It is a **separate deployable** from the CLI.\n\n### Quick start\n\n```bash\ncd web\nnpm ci\nnpm run build\n\n# Required env vars:\nexport S3_BUCKET=<forge-data-bucket>\nexport S3_REGION=<region>              # or AWS_REGION\nexport S3_ENDPOINT=<optional-endpoint> # for non-AWS S3 (MinIO, R2, etc.)\n\nnode start.mjs\n```\n\n### Routes\n\n| Route | Method | Auth | Purpose |\n|-------|--------|------|---------|\n| `/healthz` | GET | None | Readiness probe — real S3 `headObject` on `_forge/web/config.json` |\n| `/i/:vanity` | GET | None | Public instruction view — markdown rendered as styled HTML |\n| `/d/:slug?t=<token>` | GET | Token | Ephemeral download — skill (`.skill` zip) or instruction (text) |\n\n### Environment variables\n\n| Variable | Required | Default | Purpose |\n|---|---|---|---|\n| `S3_BUCKET` | **yes** | — | Forge data bucket name |\n| `S3_REGION` / `AWS_REGION` | **yes** | — | AWS region of the bucket |\n| `S3_ENDPOINT` | no | AWS default | Custom endpoint (MinIO, R2, LocalStack) |\n| `S3_PATH_STYLE` | no | `false` | Set `\"true\"` for path-style addressing |\n| `PORT` | no | `3000` | HTTP listen port |\n| `FORGE_WEB_MAX_BYTES` | no | `52428800` (50 MB) | Served-content size ceiling (NFR-7) |\n\n### Docker\n\n`web/package.json` ships build shortcuts (run from `web/`):\n\n```bash\ncd web\n\n# Local dev image (host arch), loaded into docker:\nnpm run docker:build\ndocker run --rm -p 3000:3000 \\\n  -e S3_BUCKET=<bucket> \\\n  -e AWS_REGION=<region> \\\n  -e AWS_ACCESS_KEY_ID=<key> \\\n  -e AWS_SECRET_ACCESS_KEY=<secret> \\\n  aiconnectcloud/nexus-forge-web:dev\n\n# Universal multi-arch image (linux/amd64 + linux/arm64) pushed to a registry:\ndocker login\nnpm run docker:build:universal        # -> aiconnectcloud/nexus-forge-web:latest\n```\n\nA multi-arch image can't be `--load`ed locally, so `docker:build:universal`\npushes. Override the ref/tag with `FORGE_WEB_IMAGE` / `FORGE_WEB_TAG`. For a\none-command local run, `cp .env.example .env` and `docker compose up --build`\n(see `web/docker-compose.yml`).\n\nSee `docs/web-deployment.md` for IAM policy, DNS/TLS guidance, and credential rotation.\n\n## Output format\n\nEvery forge command returns a structured JSON envelope. Parse it before doing anything else.\n\n### Success\n\n```json\n{\n  \"_apiVersion\": \"1.0\",\n  \"ok\": true,\n  \"<command-specific fields>\": \"...\"\n}\n```\n\nFor commands that touch a bundle (`publish`, `download`, `verify`, `list`, `rollback`), the response includes `bundleFormat: \"forge\" | \"clawhub\"`. ClawHub bundles also get a `bundleMetadata` block with at minimum `frontmatterVersion` (the author's semver, if present), `openclawMetadataPresent`, and `frontmatterKeys`.\n\n### Error\n\n```json\n{\n  \"_apiVersion\": \"1.0\",\n  \"ok\": false,\n  \"errorCode\": \"STRING_ENUM\",\n  \"message\": \"human-readable description\",\n  \"remediation\": \"what to do next\",\n  \"details\": { \"...\": \"...\" }\n}\n```\n\nThe `errorCode` is your primary signal — match against it. The `remediation` is a literal next step for the agent or human. Many remediation strings reference other forge commands (e.g., `INVALID_FRONTMATTER` points to `forge schema show clawhub-frontmatter`; the `manifest_missing` reason of `BUCKET_MANIFEST_INVALID` points to `forge bucket init`).\n\n## Versioning\n\nForge uses a monotonic counter (revision 1, 2, 3, ...) for publication versioning. This is independent of any author-assigned semver in a ClawHub frontmatter `version` field. Both numbers appear side-by-side in publish/rollback responses:\n\n- `version` (top-level) — the forge revision (lifecycle, controlled by S3 state).\n- `bundleMetadata.frontmatterVersion` (when present) — the author's semver (intent, controlled by the bundle's frontmatter).\n\n`forge skill rollback` reverts the **forge revision** (lifecycle), not the semver. Both numbers appear in the rollback response so audit logs and human messaging can use the appropriate identifier.\n\n## Concurrency and idempotency\n\n- **Advisory lock** — concurrent `publish` / `rollback` operations on the same skill serialize via a `_locked` field in the remote `meta.json` with a 60-second TTL. If another agent holds the lock, you get `CONCURRENT_UPDATE`; wait at least 60s before retrying.\n- **Checksum-based idempotency** — re-publishing a bundle with identical content (same SHA256 of normalized files) is a `noop`: no version bump, no S3 write. This makes `publish` safe to retry.\n- **Line ending normalization** — files in the bundle are normalized to LF before checksum and storage. A bundle published from Windows (CRLF) and macOS (LF) yields the same `bundleChecksum`. Binary files (detected by null bytes in the first 8KB) are passed through unmodified.\n\n## Repository Structure\n\n```\nforge/\n├── src/\n│   ├── index.ts            CLI entry point (Commander.js program)\n│   ├── commands/            Command handlers (bucket, config, namespace, skill, instruction, schema, logs, web, share)\n│   ├── lib/                 Core logic — S3 delegation, bundle loader, frontmatter parser, line ending normalization, share list\n│   ├── types/               TypeScript type definitions and Zod schemas\n│   └── integration/         Integration tests\n├── skills/                  Agent skills for operating forge (forge-ops)\n├── web/                     Web distribution server (separate deployable)\n│   ├── src/                 ExpressJS server, S3 wrapper, descriptor parser\n│   ├── test/                supertest-based integration tests\n│   ├── Dockerfile           Multi-stage production image\n│   └── start.mjs            Entry point\n├── dist/                    Compiled output published to npm (generated; not committed)\n├── docs/\n│   ├── prd.md               Full Product Requirements Document\n│   ├── prd-web-distribution.md  Web Distribution PRD (587 lines)\n│   ├── web-deployment.md    Deployment guide (IAM, DNS/TLS, credential rotation)\n│   └── web-read-only-iam-policy.json  Read-only S3 IAM policy\n├── openspec/\n│   ├── config.yaml          OpenSpec project configuration\n│   ├── changes/             Active changes (spec-driven workflow)\n│   └── archive/             Archived/completed changes\n├── AGENTS.md                Agent-facing documentation and coding guidelines\n└── README.md                This file\n```\n\n## Development\n\nFor contributors working on Forge itself:\n\n```bash\ngit clone <repo-url> forge && cd forge\nnpm install\nnpm run dev -- --help        # run from sources via tsx (no build needed)\nnpm run build                 # compile TypeScript to dist/\nnpm run build:watch           # recompile on change\nnpm test                      # run tests via Vitest\nnpm run lint                  # lint with ESLint\n```\n\n`npm run dev` invokes `src/index.ts` directly through [`tsx`](https://github.com/privatenumber/tsx), so edits take effect on the next invocation — no rebuild required. Arguments after `--` are forwarded to the CLI:\n\n```bash\nnpm run dev -- skill list --namespace my-ns\nnpm run dev -- config show\n```\n\nFor the full product specification, see [`docs/prd.md`](docs/prd.md).","readmeFilename":"README.md"}