[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6C2FFMCYZN3XF0RY3YZED3A":3,"skill-same:01M6C2FFMCYZN3XF0RY3YZED3A":93},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":47,"linkOnly":48,"markdownContent":49,"markdownBody":50,"frontMatter":51,"refName":55,"commitSha":56,"skillDirectory":57,"forksCount":58,"repositoryHtmlUrl":59,"repositoryHomepageUrl":60,"ownerHtmlUrl":61,"ownerBlogUrl":62,"ownerDescription":63,"updatedAt":64,"install":65,"resources":78},"01M6C2FFMCYZN3XF0RY3YZED3A","npm-supply-chain-audit",null,"Audit npm projects for Shai-Hulud-class supply-chain exposure: lifecycle scripts, Git dependency prepare hooks, release-age gaps, publish-token exposure, trusted publishing, signed releases, and verifier docs.","jmagly\u002Faiwg","jmagly","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F1159087?v=4","01M6C10AK8N2WCSQN11FYGTJWN","Joseph Magly","01M6C10AQ8A2RMED1Y1BSVY7NF",229,"MIT","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fframeworks\u002Fsecurity-engineering\u002Fskills\u002Fnpm-supply-chain-audit\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46],"npm supply chain audit","supply chain audit","supply","chain","supply chain","audit","npm","prepare","for","release","scripts","git","verifier","age","token","releases","hooks","docs","dependency","projects","lifecycle","supply-chain","publish","2026-11-10 10:12:30",false,"---\nnamespace: aiwg\nname: npm-supply-chain-audit\nplatforms: [all]\ndescription: \"Audit npm projects for Shai-Hulud-class supply-chain exposure: lifecycle scripts, Git dependency prepare hooks, release-age gaps, publish-token exposure, trusted publishing, signed releases, and verifier docs.\"\n---\n\n# npm-supply-chain-audit\n\nUse this skill when reviewing a JavaScript or TypeScript repository for\ninstall-time malware exposure, compromised npm maintainer risk, or CI\npublish-path abuse.\n\n## Triggers\n\n- \"npm supply chain audit\"\n- \"Shai-Hulud\"\n- \"malicious npm package\"\n- \"trusted publishing review\"\n- \"publish token exposure\"\n- \"Git dependency prepare script\"\n- \"router_init.js\" \u002F \"tanstack_runner.js\"\n\n## Audit sequence\n\n### 1. Dependency source scan\n\nSearch manifests and lockfiles for exotic sources:\n\n```bash\nrg -n '\"(git\\\\+|git:\u002F\u002F|github:|file:|link:)|https?:\u002F\u002F[^\"]+\\\\.(tgz|tar\\\\.gz)' package.json package-lock.json\n```\n\nFindings to escalate:\n\n- `github:` or `git+` dependencies, especially in\n  `optionalDependencies`.\n- Direct tarballs from non-registry hosts.\n- `file:` or `link:` sources outside deliberate local workspace\n  development.\n\nRun the known-affected package feed scan as a separate hard gate:\n\n```bash\nnpm run lint:affected-packages\nAIWG_AFFECTED_PACKAGES_CSV=\u002Fmnt\u002Fops\u002Fusers\u002Froctinam\u002FDownloads\u002F22-packages.csv npm run lint:affected-packages\nAIWG_AFFECTED_PACKAGES_CSV=https:\u002F\u002Fgist.githubusercontent.com\u002F\u003Cuser>\u002F\u003Cgist-id>\u002Fraw\u002F22-packages.csv npm run lint:affected-packages\n```\n\nTreat exact package\u002Fversion hits as incident evidence. Preserve the\npackage name, version, published timestamp, detected timestamp range,\nand feed source URL\u002Fpath in the finding.\n\n### 2. Lifecycle-script review\n\nInspect root package scripts and nested package manifests:\n\n```bash\nrg -n '\"(preinstall|install|postinstall|prepare)\"' package.json package-lock.json .\n```\n\nTreat install-time scripts as code execution on every developer machine\nand CI runner. Remove them unless the package cannot function without\nthem. If one must remain, document the exact reason and what it can\naccess.\n\n### 3. Release-age gate\n\nCheck for `.npmrc`:\n\n```ini\nmin-release-age=7\n```\n\nConfirm contributors and lockfile-changing CI jobs use npm 11.5+. Use\n10 days or higher for release-prep dependency churn and security-\nsensitive branches.\n\n### 4. Publish-path hardening\n\nReview release workflows for:\n\n- npm trusted publishing or another OIDC publish path.\n- No long-lived npmjs.org publish token once trusted publishing is\n  active.\n- `permissions: id-token: write` scoped only to the job that publishes.\n- Signed tag verification before build, pack, publish, or asset upload.\n- SHA-pinned actions and digest-pinned containers in release jobs.\n- No publish step on fork pull requests or untrusted PR triggers.\n\n### 5. Evidence and user verification\n\nFor packages users install from a registry, require:\n\n- npm provenance attestation where supported,\n- signed git tag,\n- signed release tarball or equivalent artifact signature,\n- SBOM,\n- user-facing verification docs.\n\nThe verifier docs should avoid commands that run lifecycle scripts while\nchecking an artifact. Prefer `npm install --package-lock-only\n--ignore-scripts \u003Cpkg>@\u003Cversion>` followed by `npm audit signatures`.\n\n## Incident-response trigger\n\nIf a known malicious version was installed or a suspicious lifecycle\nscript ran, assume secrets reachable from that environment are exposed.\nRotate npm tokens, GitHub\u002FGitea tokens, cloud credentials, Kubernetes\nservice account tokens, Vault tokens, and deployment secrets. Then audit\nrecent publishes and workflow runs. If the affected-package feed hit a\nCI runner or workstation cache, quarantine that cache before reuse.\n\n## Output format\n\nLead with findings, ordered by severity:\n\n```markdown\n## Findings\n\n- CRITICAL: \u003Cfile:line> \u003Crisk> \u003Cfix>\n- HIGH: \u003Cfile:line> \u003Crisk> \u003Cfix>\n\n## Clean Checks\n\n- No Git dependency sources found.\n- No install lifecycle scripts found.\n\n## Follow-up Issues\n\n- \u003Ctitle>, \u003Cacceptance criteria>\n```\n\n## References\n\n- npm trusted publishing: \u003Chttps:\u002F\u002Fdocs.npmjs.com\u002Ftrusted-publishers>\n- npm audit signatures: \u003Chttps:\u002F\u002Fdocs.npmjs.com\u002Fcli\u002Fv11\u002Fcommands\u002Fnpm-audit#audit-signatures>\n- npm `min-release-age`: \u003Chttps:\u002F\u002Fdocs.npmjs.com\u002Fcli\u002Fv11\u002Fusing-npm\u002Fconfig#min-release-age>\n","# npm-supply-chain-audit\n\nUse this skill when reviewing a JavaScript or TypeScript repository for\ninstall-time malware exposure, compromised npm maintainer risk, or CI\npublish-path abuse.\n\n## Triggers\n\n- \"npm supply chain audit\"\n- \"Shai-Hulud\"\n- \"malicious npm package\"\n- \"trusted publishing review\"\n- \"publish token exposure\"\n- \"Git dependency prepare script\"\n- \"router_init.js\" \u002F \"tanstack_runner.js\"\n\n## Audit sequence\n\n### 1. Dependency source scan\n\nSearch manifests and lockfiles for exotic sources:\n\n```bash\nrg -n '\"(git\\\\+|git:\u002F\u002F|github:|file:|link:)|https?:\u002F\u002F[^\"]+\\\\.(tgz|tar\\\\.gz)' package.json package-lock.json\n```\n\nFindings to escalate:\n\n- `github:` or `git+` dependencies, especially in\n  `optionalDependencies`.\n- Direct tarballs from non-registry hosts.\n- `file:` or `link:` sources outside deliberate local workspace\n  development.\n\nRun the known-affected package feed scan as a separate hard gate:\n\n```bash\nnpm run lint:affected-packages\nAIWG_AFFECTED_PACKAGES_CSV=\u002Fmnt\u002Fops\u002Fusers\u002Froctinam\u002FDownloads\u002F22-packages.csv npm run lint:affected-packages\nAIWG_AFFECTED_PACKAGES_CSV=https:\u002F\u002Fgist.githubusercontent.com\u002F\u003Cuser>\u002F\u003Cgist-id>\u002Fraw\u002F22-packages.csv npm run lint:affected-packages\n```\n\nTreat exact package\u002Fversion hits as incident evidence. Preserve the\npackage name, version, published timestamp, detected timestamp range,\nand feed source URL\u002Fpath in the finding.\n\n### 2. Lifecycle-script review\n\nInspect root package scripts and nested package manifests:\n\n```bash\nrg -n '\"(preinstall|install|postinstall|prepare)\"' package.json package-lock.json .\n```\n\nTreat install-time scripts as code execution on every developer machine\nand CI runner. Remove them unless the package cannot function without\nthem. If one must remain, document the exact reason and what it can\naccess.\n\n### 3. Release-age gate\n\nCheck for `.npmrc`:\n\n```ini\nmin-release-age=7\n```\n\nConfirm contributors and lockfile-changing CI jobs use npm 11.5+. Use\n10 days or higher for release-prep dependency churn and security-\nsensitive branches.\n\n### 4. Publish-path hardening\n\nReview release workflows for:\n\n- npm trusted publishing or another OIDC publish path.\n- No long-lived npmjs.org publish token once trusted publishing is\n  active.\n- `permissions: id-token: write` scoped only to the job that publishes.\n- Signed tag verification before build, pack, publish, or asset upload.\n- SHA-pinned actions and digest-pinned containers in release jobs.\n- No publish step on fork pull requests or untrusted PR triggers.\n\n### 5. Evidence and user verification\n\nFor packages users install from a registry, require:\n\n- npm provenance attestation where supported,\n- signed git tag,\n- signed release tarball or equivalent artifact signature,\n- SBOM,\n- user-facing verification docs.\n\nThe verifier docs should avoid commands that run lifecycle scripts while\nchecking an artifact. Prefer `npm install --package-lock-only\n--ignore-scripts \u003Cpkg>@\u003Cversion>` followed by `npm audit signatures`.\n\n## Incident-response trigger\n\nIf a known malicious version was installed or a suspicious lifecycle\nscript ran, assume secrets reachable from that environment are exposed.\nRotate npm tokens, GitHub\u002FGitea tokens, cloud credentials, Kubernetes\nservice account tokens, Vault tokens, and deployment secrets. Then audit\nrecent publishes and workflow runs. If the affected-package feed hit a\nCI runner or workstation cache, quarantine that cache before reuse.\n\n## Output format\n\nLead with findings, ordered by severity:\n\n```markdown\n## Findings\n\n- CRITICAL: \u003Cfile:line> \u003Crisk> \u003Cfix>\n- HIGH: \u003Cfile:line> \u003Crisk> \u003Cfix>\n\n## Clean Checks\n\n- No Git dependency sources found.\n- No install lifecycle scripts found.\n\n## Follow-up Issues\n\n- \u003Ctitle>, \u003Cacceptance criteria>\n```\n\n## References\n\n- npm trusted publishing: \u003Chttps:\u002F\u002Fdocs.npmjs.com\u002Ftrusted-publishers>\n- npm audit signatures: \u003Chttps:\u002F\u002Fdocs.npmjs.com\u002Fcli\u002Fv11\u002Fcommands\u002Fnpm-audit#audit-signatures>\n- npm `min-release-age`: \u003Chttps:\u002F\u002Fdocs.npmjs.com\u002Fcli\u002Fv11\u002Fusing-npm\u002Fconfig#min-release-age>\n",{"name":5,"namespace":52,"platforms":53,"description":7},"aiwg",[54],"all","main","6754967c344ccb087a8de06972f55a41067b291b","agentic\u002Fcode\u002Fframeworks\u002Fsecurity-engineering\u002Fskills\u002Fnpm-supply-chain-audit",36,"https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg","https:\u002F\u002Faiwg.io","https:\u002F\u002Fgithub.com\u002Fjmagly","https:\u002F\u002Fintegrolabs.io","ml\u002Fai, industrial automation, safety\u002Fsecurity, ssi\r\n\r\nmagly.net\r\nintegrolabs.io\r\naiwg.io\r\nfortemi.com\r\npagenary.com\r\nbytecask.com","2026-11-14 10:46:34",{"source":8,"skillName":5,"commands":66,"prompt":76,"zipAvailable":77},[67,70,73],{"tool":68,"command":69},"npx","npx skills add jmagly\u002Faiwg --skill npm-supply-chain-audit",{"tool":71,"command":72},"bunx","bunx skills add jmagly\u002Faiwg --skill npm-supply-chain-audit",{"tool":74,"command":75},"pnpm","pnpm dlx skills add jmagly\u002Faiwg --skill npm-supply-chain-audit","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fframeworks\u002Fsecurity-engineering\u002Fskills\u002Fnpm-supply-chain-audit\u002FSKILL.md",true,[79,85,89],{"path":80,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":83,"sourceHtmlUrl":84},"references\u002Fdirect-connect.md","REFERENCE","参考文档",799,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-hybrid-cloud-networking\u002Freferences\u002Fdirect-connect.md",{"path":86,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":87,"sourceHtmlUrl":88},"UPSTREAM-LICENSE.txt",1068,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-hybrid-cloud-networking\u002FUPSTREAM-LICENSE.txt",{"path":90,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":91,"sourceHtmlUrl":92},"UPSTREAM-NOTICE.md",1075,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-hybrid-cloud-networking\u002FUPSTREAM-NOTICE.md",[94,121,145,151,158,172],{"skillNo":95,"name":96,"nameZh":6,"description":97,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":98,"categories":99,"keywords":101,"publishedAt":47},"01M70QA0BSYJ49EES9V4RE8QH1","host-hardening","Read-only system hardening baseline and plan-first host hardening recommendations for SSH, Docker bind addresses, firewall persistence, datastores, exporters and audit retention.","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fplugins\u002Fsecurity-engineering\u002Fskills\u002Fhost-hardening\u002FSKILL.md",[100],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[102,103,104,105,106,107,108,109,110,111,112,113,114,115,29,116,117,118,119,120],"host","host hardening","hardening","read","re","recommendations","remediation","plan","port","verification","Bash","access","only","retention","never","firewall","bind","secrets","request",{"skillNo":122,"name":123,"nameZh":6,"description":124,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":125,"categories":126,"keywords":131,"publishedAt":47},"01M70PNT2Z4HMZPRBTAF6073NN","exposure-analysis","Read-only firewall analysis and effective host exposure reconstruction for Docker published ports, UFW bypass, stale rules, CDN scope, IPv6 asymmetry and external probe allowlists.","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fplugins\u002Fforensics\u002Fskills\u002Fexposure-analysis\u002FSKILL.md",[127,130],{"categoryNo":128,"categoryName":129,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000011","运维与部署",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[132,133,134,105,135,110,136,137,112,138,102,139,114,140,141,116,117,142,143,144],"exposure analysis","analysis","unknown","credentials","collection","ufw","ports","internet","local","scope","reconstruction","operator","write",{"skillNo":146,"name":96,"nameZh":6,"description":97,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":147,"categories":148,"keywords":150,"publishedAt":47},"01M70P8QATMPKA78E4FT5D2TNA","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fframeworks\u002Fsecurity-engineering\u002Fskills\u002Fhost-hardening\u002FSKILL.md",[149],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[104,102,103,113,105,120,108,107,29,109,110,111,112,119,114,115,106,116,117,118],{"skillNo":152,"name":123,"nameZh":6,"description":124,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":153,"categories":154,"keywords":157,"publishedAt":47},"01M70NMPVJ5H0JH131P60FW4R8","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fframeworks\u002Fforensics-complete\u002Fskills\u002Fexposure-analysis\u002FSKILL.md",[155,156],{"categoryNo":128,"categoryName":129,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[133,132,116,135,110,136,112,134,102,139,114,140,141,105,117,138,137,142,143,144],{"skillNo":159,"name":160,"nameZh":6,"description":161,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":162,"categories":163,"keywords":165,"publishedAt":47},"01M6CB4DDR0B4NNCFK7ZK7449H","fixture-skill","Exercise rule delivery.","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Ftest\u002Ffixtures\u002Frule-delivery\u002Fskills\u002Ffixture-skill\u002FSKILL.md",[164],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[166,167,168,169,170,171],"fixture skill","fixture","rule","delivery","true","exercise",{"skillNo":173,"name":174,"nameZh":6,"description":175,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":176,"categories":177,"keywords":179,"publishedAt":47},"01M6CB4AVK1W76MFMPP0JP32CJ","pi-local","Pi-local duplicate-precedence fixture.","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Ftest\u002Ffixtures\u002Fproviders\u002Fpi\u002Fproject\u002F.pi\u002Fskills\u002Fpi-local\u002FSKILL.md",[178],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[180,181,140,182,167],"pi","pi local","duplicate"]