nerftools 2.1.0__tar.gz → 2.2.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (537) hide show
  1. nerftools-2.2.0/.release-please-manifest.json +3 -0
  2. {nerftools-2.1.0 → nerftools-2.2.0}/CHANGELOG.md +16 -0
  3. {nerftools-2.1.0 → nerftools-2.2.0}/PKG-INFO +1 -1
  4. {nerftools-2.1.0 → nerftools-2.2.0}/README.md +26 -22
  5. {nerftools-2.1.0 → nerftools-2.2.0}/docs/nerf-manifest.md +7 -0
  6. {nerftools-2.1.0 → nerftools-2.2.0}/nerf.yaml +1 -1
  7. {nerftools-2.1.0 → nerftools-2.2.0}/nerftools/formats.py +28 -0
  8. {nerftools-2.1.0/out/codex-plugin/.codex-plugin → nerftools-2.2.0/out/claude-plugin/.claude-plugin}/plugin.json +1 -1
  9. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/hooks/nerf-bash-hint +12 -0
  10. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-report/scripts/nerf-report +1 -1
  11. {nerftools-2.1.0/out/claude-plugin/.claude-plugin → nerftools-2.2.0/out/codex-plugin/.codex-plugin}/plugin.json +1 -1
  12. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-report/scripts/nerf-report +1 -1
  13. {nerftools-2.1.0 → nerftools-2.2.0}/pyproject.toml +1 -1
  14. {nerftools-2.1.0 → nerftools-2.2.0}/tests/test_formats.py +89 -1
  15. {nerftools-2.1.0 → nerftools-2.2.0}/uv.lock +1 -1
  16. nerftools-2.1.0/.release-please-manifest.json +0 -3
  17. {nerftools-2.1.0 → nerftools-2.2.0}/.agents/plugins/marketplace.json +0 -0
  18. {nerftools-2.1.0 → nerftools-2.2.0}/.claude/agents/nerftool-manifest-reviewer.md +0 -0
  19. {nerftools-2.1.0 → nerftools-2.2.0}/.claude-plugin/marketplace.json +0 -0
  20. {nerftools-2.1.0 → nerftools-2.2.0}/.cspell-version +0 -0
  21. {nerftools-2.1.0 → nerftools-2.2.0}/.cspell.json +0 -0
  22. {nerftools-2.1.0 → nerftools-2.2.0}/.editorconfig +0 -0
  23. {nerftools-2.1.0 → nerftools-2.2.0}/.github/agents/nerftool-manifest-reviewer.md +0 -0
  24. {nerftools-2.1.0 → nerftools-2.2.0}/.github/dependabot.yml +0 -0
  25. {nerftools-2.1.0 → nerftools-2.2.0}/.github/workflows/ci.yml +0 -0
  26. {nerftools-2.1.0 → nerftools-2.2.0}/.github/workflows/release-please.yml +0 -0
  27. {nerftools-2.1.0 → nerftools-2.2.0}/.github/workflows/release.yml +0 -0
  28. {nerftools-2.1.0 → nerftools-2.2.0}/.gitignore +0 -0
  29. {nerftools-2.1.0 → nerftools-2.2.0}/.markdownlint-cli2-version +0 -0
  30. {nerftools-2.1.0 → nerftools-2.2.0}/.markdownlint-cli2.jsonc +0 -0
  31. {nerftools-2.1.0 → nerftools-2.2.0}/.node-version +0 -0
  32. {nerftools-2.1.0 → nerftools-2.2.0}/.prettier-version +0 -0
  33. {nerftools-2.1.0 → nerftools-2.2.0}/.prettierignore +0 -0
  34. {nerftools-2.1.0 → nerftools-2.2.0}/.prettierrc +0 -0
  35. {nerftools-2.1.0 → nerftools-2.2.0}/.python-version +0 -0
  36. {nerftools-2.1.0 → nerftools-2.2.0}/.rulesync/subagents/nerftool-manifest-reviewer.md +0 -0
  37. {nerftools-2.1.0 → nerftools-2.2.0}/.rulesync-version +0 -0
  38. {nerftools-2.1.0 → nerftools-2.2.0}/CONTRIBUTING.md +0 -0
  39. {nerftools-2.1.0 → nerftools-2.2.0}/LICENSE +0 -0
  40. {nerftools-2.1.0 → nerftools-2.2.0}/docs/sdd/2026-04-04-nerf-refactor/frd.md +0 -0
  41. {nerftools-2.1.0 → nerftools-2.2.0}/docs/sdd/2026-04-04-nerf-refactor/hla.md +0 -0
  42. {nerftools-2.1.0 → nerftools-2.2.0}/docs/sdd/2026-04-04-nerf-refactor/locked.md +0 -0
  43. {nerftools-2.1.0 → nerftools-2.2.0}/docs/sdd/2026-04-04-nerf-refactor/manifest-spec.md +0 -0
  44. {nerftools-2.1.0 → nerftools-2.2.0}/docs/sdd/2026-04-04-nerf-refactor/plan.md +0 -0
  45. {nerftools-2.1.0 → nerftools-2.2.0}/nerftools/__init__.py +0 -0
  46. {nerftools-2.1.0 → nerftools-2.2.0}/nerftools/builder.py +0 -0
  47. {nerftools-2.1.0 → nerftools-2.2.0}/nerftools/cli.py +0 -0
  48. {nerftools-2.1.0 → nerftools-2.2.0}/nerftools/config.py +0 -0
  49. {nerftools-2.1.0 → nerftools-2.2.0}/nerftools/default_manifests/README.md +0 -0
  50. {nerftools-2.1.0 → nerftools-2.2.0}/nerftools/default_manifests/__init__.py +0 -0
  51. {nerftools-2.1.0 → nerftools-2.2.0}/nerftools/default_manifests/az-account.yaml +0 -0
  52. {nerftools-2.1.0 → nerftools-2.2.0}/nerftools/default_manifests/az-aks.yaml +0 -0
  53. {nerftools-2.1.0 → nerftools-2.2.0}/nerftools/default_manifests/az-boards.yaml +0 -0
  54. {nerftools-2.1.0 → nerftools-2.2.0}/nerftools/default_manifests/az-cosmosdb.yaml +0 -0
  55. {nerftools-2.1.0 → nerftools-2.2.0}/nerftools/default_manifests/az-devops.yaml +0 -0
  56. {nerftools-2.1.0 → nerftools-2.2.0}/nerftools/default_manifests/az-keyvault.yaml +0 -0
  57. {nerftools-2.1.0 → nerftools-2.2.0}/nerftools/default_manifests/az-monitor.yaml +0 -0
  58. {nerftools-2.1.0 → nerftools-2.2.0}/nerftools/default_manifests/az-network.yaml +0 -0
  59. {nerftools-2.1.0 → nerftools-2.2.0}/nerftools/default_manifests/az-pipelines.yaml +0 -0
  60. {nerftools-2.1.0 → nerftools-2.2.0}/nerftools/default_manifests/az-postgres.yaml +0 -0
  61. {nerftools-2.1.0 → nerftools-2.2.0}/nerftools/default_manifests/az-repos.yaml +0 -0
  62. {nerftools-2.1.0 → nerftools-2.2.0}/nerftools/default_manifests/az-resource.yaml +0 -0
  63. {nerftools-2.1.0 → nerftools-2.2.0}/nerftools/default_manifests/az-role.yaml +0 -0
  64. {nerftools-2.1.0 → nerftools-2.2.0}/nerftools/default_manifests/az-storage.yaml +0 -0
  65. {nerftools-2.1.0 → nerftools-2.2.0}/nerftools/default_manifests/gh.yaml +0 -0
  66. {nerftools-2.1.0 → nerftools-2.2.0}/nerftools/default_manifests/git.yaml +0 -0
  67. {nerftools-2.1.0 → nerftools-2.2.0}/nerftools/default_manifests/kubectl.yaml +0 -0
  68. {nerftools-2.1.0 → nerftools-2.2.0}/nerftools/default_manifests/nx.yaml +0 -0
  69. {nerftools-2.1.0 → nerftools-2.2.0}/nerftools/default_manifests/pkgrun.yaml +0 -0
  70. {nerftools-2.1.0 → nerftools-2.2.0}/nerftools/default_manifests/stdutils.yaml +0 -0
  71. {nerftools-2.1.0 → nerftools-2.2.0}/nerftools/default_manifests/tf.yaml +0 -0
  72. {nerftools-2.1.0 → nerftools-2.2.0}/nerftools/default_manifests/tg.yaml +0 -0
  73. {nerftools-2.1.0 → nerftools-2.2.0}/nerftools/default_manifests/uv.yaml +0 -0
  74. {nerftools-2.1.0 → nerftools-2.2.0}/nerftools/manifest.py +0 -0
  75. {nerftools-2.1.0 → nerftools-2.2.0}/nerftools/nerf_report/__init__.py +0 -0
  76. {nerftools-2.1.0 → nerftools-2.2.0}/nerftools/nerf_report/script.sh +0 -0
  77. {nerftools-2.1.0 → nerftools-2.2.0}/nerftools/nerfctl/__init__.py +0 -0
  78. {nerftools-2.1.0 → nerftools-2.2.0}/nerftools/nerfctl/claude/grant-allow.sh +0 -0
  79. {nerftools-2.1.0 → nerftools-2.2.0}/nerftools/nerfctl/claude/grant-by-threat.sh +0 -0
  80. {nerftools-2.1.0 → nerftools-2.2.0}/nerftools/nerfctl/claude/grant-deny.sh +0 -0
  81. {nerftools-2.1.0 → nerftools-2.2.0}/nerftools/nerfctl/claude/grant-list.sh +0 -0
  82. {nerftools-2.1.0 → nerftools-2.2.0}/nerftools/nerfctl/claude/grant-reset.sh +0 -0
  83. {nerftools-2.1.0 → nerftools-2.2.0}/nerftools/outdir.py +0 -0
  84. {nerftools-2.1.0 → nerftools-2.2.0}/nerftools/rendering.py +0 -0
  85. {nerftools-2.1.0 → nerftools-2.2.0}/nerftools/skill.py +0 -0
  86. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/.nerf-build-manifest +0 -0
  87. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/hooks/hooks.json +0 -0
  88. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/hooks/nerf-session-start +0 -0
  89. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/scripts/nerfctl-grant-allow +0 -0
  90. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/scripts/nerfctl-grant-by-threat +0 -0
  91. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/scripts/nerfctl-grant-deny +0 -0
  92. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/scripts/nerfctl-grant-list +0 -0
  93. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/scripts/nerfctl-grant-reset +0 -0
  94. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-account/SKILL.md +0 -0
  95. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-account/scripts/nerf-az-account-list +0 -0
  96. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-account/scripts/nerf-az-account-set +0 -0
  97. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-account/scripts/nerf-az-account-show +0 -0
  98. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-aks/SKILL.md +0 -0
  99. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-aks/scripts/nerf-az-aks-command-invoke +0 -0
  100. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-aks/scripts/nerf-az-aks-get-credentials +0 -0
  101. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-aks/scripts/nerf-az-aks-get-credentials-admin +0 -0
  102. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-aks/scripts/nerf-az-aks-get-versions +0 -0
  103. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-aks/scripts/nerf-az-aks-list +0 -0
  104. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-aks/scripts/nerf-az-aks-nodepool-list +0 -0
  105. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-aks/scripts/nerf-az-aks-nodepool-show +0 -0
  106. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-aks/scripts/nerf-az-aks-show +0 -0
  107. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-boards/SKILL.md +0 -0
  108. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-boards/scripts/nerf-az-boards-area-list +0 -0
  109. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-boards/scripts/nerf-az-boards-mywi-comment +0 -0
  110. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-boards/scripts/nerf-az-boards-mywi-list +0 -0
  111. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-boards/scripts/nerf-az-boards-mywi-show +0 -0
  112. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-boards/scripts/nerf-az-boards-mywi-update +0 -0
  113. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-boards/scripts/nerf-az-boards-wi-add-parent +0 -0
  114. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-boards/scripts/nerf-az-boards-wi-comment +0 -0
  115. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-boards/scripts/nerf-az-boards-wi-create +0 -0
  116. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-boards/scripts/nerf-az-boards-wi-list +0 -0
  117. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-boards/scripts/nerf-az-boards-wi-show +0 -0
  118. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-boards/scripts/nerf-az-boards-wi-update +0 -0
  119. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-cosmosdb/SKILL.md +0 -0
  120. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-cosmosdb/scripts/nerf-az-cosmosdb-database-list +0 -0
  121. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-cosmosdb/scripts/nerf-az-cosmosdb-list +0 -0
  122. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-cosmosdb/scripts/nerf-az-cosmosdb-network-rule-list +0 -0
  123. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-cosmosdb/scripts/nerf-az-cosmosdb-show +0 -0
  124. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-devops/SKILL.md +0 -0
  125. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-devops/scripts/nerf-az-devops-set-default-project +0 -0
  126. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-keyvault/SKILL.md +0 -0
  127. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-keyvault/scripts/nerf-az-keyvault-list +0 -0
  128. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-keyvault/scripts/nerf-az-keyvault-network-rule-list +0 -0
  129. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-keyvault/scripts/nerf-az-keyvault-secret-list +0 -0
  130. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-keyvault/scripts/nerf-az-keyvault-secret-stats +0 -0
  131. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-keyvault/scripts/nerf-az-keyvault-show +0 -0
  132. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-monitor/SKILL.md +0 -0
  133. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-monitor/scripts/nerf-az-monitor-activity-log +0 -0
  134. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-monitor/scripts/nerf-az-monitor-diagnostic-settings-list +0 -0
  135. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-monitor/scripts/nerf-az-monitor-metrics-list +0 -0
  136. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-network/SKILL.md +0 -0
  137. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-network/scripts/nerf-az-network-nic-show +0 -0
  138. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-network/scripts/nerf-az-network-nsg-list +0 -0
  139. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-network/scripts/nerf-az-network-nsg-show +0 -0
  140. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-network/scripts/nerf-az-network-private-dns-link-list +0 -0
  141. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-network/scripts/nerf-az-network-private-dns-link-show +0 -0
  142. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-network/scripts/nerf-az-network-private-dns-record-list +0 -0
  143. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-network/scripts/nerf-az-network-private-dns-zone-list +0 -0
  144. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-network/scripts/nerf-az-network-private-dns-zone-show +0 -0
  145. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-network/scripts/nerf-az-network-private-endpoint-list +0 -0
  146. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-network/scripts/nerf-az-network-private-endpoint-show +0 -0
  147. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-network/scripts/nerf-az-network-private-link-resource-list +0 -0
  148. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-network/scripts/nerf-az-network-public-ip-list +0 -0
  149. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-network/scripts/nerf-az-network-public-ip-show +0 -0
  150. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-network/scripts/nerf-az-network-route-table-show +0 -0
  151. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-network/scripts/nerf-az-network-subnet-show +0 -0
  152. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-network/scripts/nerf-az-network-vnet-list +0 -0
  153. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-network/scripts/nerf-az-network-vnet-peering-list +0 -0
  154. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-network/scripts/nerf-az-network-vnet-peering-show +0 -0
  155. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-network/scripts/nerf-az-network-vnet-show +0 -0
  156. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-pipelines/SKILL.md +0 -0
  157. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-pipelines/scripts/nerf-az-pipelines-check +0 -0
  158. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-pipelines/scripts/nerf-az-pipelines-list +0 -0
  159. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-pipelines/scripts/nerf-az-pipelines-run-log +0 -0
  160. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-pipelines/scripts/nerf-az-pipelines-run-show +0 -0
  161. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-pipelines/scripts/nerf-az-pipelines-run-timeline +0 -0
  162. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-pipelines/scripts/nerf-az-pipelines-runs +0 -0
  163. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-postgres/SKILL.md +0 -0
  164. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-postgres/scripts/nerf-az-postgres-flexible-server-firewall-rule-list +0 -0
  165. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-postgres/scripts/nerf-az-postgres-flexible-server-list +0 -0
  166. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-postgres/scripts/nerf-az-postgres-flexible-server-show +0 -0
  167. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-repos/SKILL.md +0 -0
  168. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-repos/scripts/nerf-az-repos-pr-comments +0 -0
  169. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-repos/scripts/nerf-az-repos-pr-create +0 -0
  170. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-repos/scripts/nerf-az-repos-pr-edit +0 -0
  171. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-repos/scripts/nerf-az-repos-pr-list +0 -0
  172. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-repos/scripts/nerf-az-repos-pr-set-status +0 -0
  173. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-repos/scripts/nerf-az-repos-pr-show +0 -0
  174. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-repos/scripts/nerf-az-repos-pr-vote +0 -0
  175. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-resource/SKILL.md +0 -0
  176. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-resource/scripts/nerf-az-group-list +0 -0
  177. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-resource/scripts/nerf-az-group-show +0 -0
  178. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-resource/scripts/nerf-az-resource-list +0 -0
  179. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-resource/scripts/nerf-az-resource-show +0 -0
  180. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-role/SKILL.md +0 -0
  181. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-role/scripts/nerf-az-role-assignment-by-id +0 -0
  182. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-role/scripts/nerf-az-role-assignment-list +0 -0
  183. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-role/scripts/nerf-az-role-definition-list +0 -0
  184. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-storage/SKILL.md +0 -0
  185. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-storage/scripts/nerf-az-storage-account-list +0 -0
  186. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-storage/scripts/nerf-az-storage-account-network-rule-list +0 -0
  187. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-az-storage/scripts/nerf-az-storage-account-show +0 -0
  188. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-gh/SKILL.md +0 -0
  189. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-gh/scripts/nerf-gh-issue-comment +0 -0
  190. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-gh/scripts/nerf-gh-issue-create +0 -0
  191. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-gh/scripts/nerf-gh-issue-list +0 -0
  192. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-gh/scripts/nerf-gh-issue-view +0 -0
  193. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-gh/scripts/nerf-gh-pr-copilot-review-status +0 -0
  194. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-gh/scripts/nerf-gh-pr-create +0 -0
  195. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-gh/scripts/nerf-gh-pr-diff +0 -0
  196. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-gh/scripts/nerf-gh-pr-inline-comments +0 -0
  197. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-gh/scripts/nerf-gh-pr-list +0 -0
  198. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-gh/scripts/nerf-gh-pr-ready +0 -0
  199. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-gh/scripts/nerf-gh-pr-request-copilot-review +0 -0
  200. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-gh/scripts/nerf-gh-pr-review-comments +0 -0
  201. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-gh/scripts/nerf-gh-pr-reviews +0 -0
  202. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-gh/scripts/nerf-gh-pr-thread-comment +0 -0
  203. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-gh/scripts/nerf-gh-pr-thread-comments +0 -0
  204. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-gh/scripts/nerf-gh-pr-view +0 -0
  205. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-gh/scripts/nerf-gh-run-list +0 -0
  206. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-gh/scripts/nerf-gh-run-view +0 -0
  207. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-git/SKILL.md +0 -0
  208. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-git/scripts/nerf-git-add +0 -0
  209. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-git/scripts/nerf-git-blame +0 -0
  210. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-git/scripts/nerf-git-branch-checkout-remote +0 -0
  211. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-git/scripts/nerf-git-branch-current +0 -0
  212. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-git/scripts/nerf-git-branch-delete-merged +0 -0
  213. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-git/scripts/nerf-git-branch-list-local +0 -0
  214. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-git/scripts/nerf-git-branch-list-remote +0 -0
  215. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-git/scripts/nerf-git-cherry-pick +0 -0
  216. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-git/scripts/nerf-git-commit +0 -0
  217. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-git/scripts/nerf-git-commit-amend +0 -0
  218. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-git/scripts/nerf-git-create-branch +0 -0
  219. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-git/scripts/nerf-git-diff +0 -0
  220. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-git/scripts/nerf-git-fetch +0 -0
  221. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-git/scripts/nerf-git-log +0 -0
  222. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-git/scripts/nerf-git-ls-remote +0 -0
  223. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-git/scripts/nerf-git-merge-no-ff +0 -0
  224. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-git/scripts/nerf-git-mv +0 -0
  225. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-git/scripts/nerf-git-pull +0 -0
  226. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-git/scripts/nerf-git-push-branch +0 -0
  227. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-git/scripts/nerf-git-push-main +0 -0
  228. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-git/scripts/nerf-git-rebase-abort +0 -0
  229. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-git/scripts/nerf-git-rebase-continue +0 -0
  230. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-git/scripts/nerf-git-rebase-unpushed +0 -0
  231. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-git/scripts/nerf-git-reflog +0 -0
  232. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-git/scripts/nerf-git-remote-list +0 -0
  233. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-git/scripts/nerf-git-reset-hard-last +0 -0
  234. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-git/scripts/nerf-git-reset-unpushed +0 -0
  235. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-git/scripts/nerf-git-restore-staged +0 -0
  236. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-git/scripts/nerf-git-restore-worktree +0 -0
  237. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-git/scripts/nerf-git-revert +0 -0
  238. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-git/scripts/nerf-git-rm +0 -0
  239. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-git/scripts/nerf-git-show +0 -0
  240. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-git/scripts/nerf-git-stash-drop +0 -0
  241. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-git/scripts/nerf-git-stash-list +0 -0
  242. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-git/scripts/nerf-git-stash-pop +0 -0
  243. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-git/scripts/nerf-git-stash-push +0 -0
  244. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-git/scripts/nerf-git-status +0 -0
  245. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-git/scripts/nerf-git-submodule-status +0 -0
  246. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-git/scripts/nerf-git-switch +0 -0
  247. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-git/scripts/nerf-git-tag +0 -0
  248. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-git/scripts/nerf-git-tag-push +0 -0
  249. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-kubectl/SKILL.md +0 -0
  250. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-kubectl/scripts/nerf-kubectl-api-resources +0 -0
  251. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-kubectl/scripts/nerf-kubectl-api-versions +0 -0
  252. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-kubectl/scripts/nerf-kubectl-cluster-info +0 -0
  253. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-kubectl/scripts/nerf-kubectl-config-current-context +0 -0
  254. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-kubectl/scripts/nerf-kubectl-config-get-contexts +0 -0
  255. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-kubectl/scripts/nerf-kubectl-config-use-context +0 -0
  256. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-kubectl/scripts/nerf-kubectl-describe +0 -0
  257. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-kubectl/scripts/nerf-kubectl-exec +0 -0
  258. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-kubectl/scripts/nerf-kubectl-explain +0 -0
  259. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-kubectl/scripts/nerf-kubectl-get +0 -0
  260. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-kubectl/scripts/nerf-kubectl-get-secrets +0 -0
  261. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-kubectl/scripts/nerf-kubectl-logs +0 -0
  262. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-kubectl/scripts/nerf-kubectl-port-forward +0 -0
  263. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-kubectl/scripts/nerf-kubectl-rollout-restart +0 -0
  264. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-kubectl/scripts/nerf-kubectl-top-nodes +0 -0
  265. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-kubectl/scripts/nerf-kubectl-top-pods +0 -0
  266. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-kubectl/scripts/nerf-kubectl-version +0 -0
  267. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-nx/SKILL.md +0 -0
  268. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-nx/scripts/nerf-nx-affected +0 -0
  269. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-nx/scripts/nerf-nx-graph +0 -0
  270. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-nx/scripts/nerf-nx-reset +0 -0
  271. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-nx/scripts/nerf-nx-run +0 -0
  272. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-nx/scripts/nerf-nx-show-project +0 -0
  273. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-nx/scripts/nerf-nx-show-projects +0 -0
  274. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-pkgrun/SKILL.md +0 -0
  275. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-pkgrun/scripts/nerf-pkgrun-cspell +0 -0
  276. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-pkgrun/scripts/nerf-pkgrun-markdownlint +0 -0
  277. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-pkgrun/scripts/nerf-pkgrun-prettier +0 -0
  278. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-report/SKILL.md +0 -0
  279. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-stdutils/SKILL.md +0 -0
  280. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-stdutils/scripts/nerf-find +0 -0
  281. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-stdutils/scripts/nerf-find-cwd +0 -0
  282. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-stdutils/scripts/nerf-grep +0 -0
  283. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-stdutils/scripts/nerf-grep-recursive-cwd +0 -0
  284. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-tf/SKILL.md +0 -0
  285. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-tf/scripts/nerf-tf-fmt +0 -0
  286. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-tf/scripts/nerf-tf-validate +0 -0
  287. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-tg/SKILL.md +0 -0
  288. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-tg/scripts/nerf-tg-fmt +0 -0
  289. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-tg/scripts/nerf-tg-fmt-all +0 -0
  290. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-tg/scripts/nerf-tg-hcl-validate +0 -0
  291. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-tg/scripts/nerf-tg-init +0 -0
  292. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-tg/scripts/nerf-tg-init-all +0 -0
  293. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-tg/scripts/nerf-tg-output +0 -0
  294. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-tg/scripts/nerf-tg-output-all +0 -0
  295. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-tg/scripts/nerf-tg-plan +0 -0
  296. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-tg/scripts/nerf-tg-plan-all +0 -0
  297. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-tg/scripts/nerf-tg-validate +0 -0
  298. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-tg/scripts/nerf-tg-validate-all +0 -0
  299. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-uv/SKILL.md +0 -0
  300. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-uv/scripts/nerf-uv-mypy +0 -0
  301. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-uv/scripts/nerf-uv-pytest +0 -0
  302. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-uv/scripts/nerf-uv-ruff-check +0 -0
  303. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerf-uv/scripts/nerf-uv-ruff-fix +0 -0
  304. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerfctl-grant-allow/SKILL.md +0 -0
  305. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerfctl-grant-by-threat/SKILL.md +0 -0
  306. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerfctl-grant-deny/SKILL.md +0 -0
  307. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerfctl-grant-list/SKILL.md +0 -0
  308. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerfctl-grant-reset/SKILL.md +0 -0
  309. {nerftools-2.1.0 → nerftools-2.2.0}/out/claude-plugin/skills/nerftools/SKILL.md +0 -0
  310. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/.nerf-build-manifest +0 -0
  311. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-account/SKILL.md +0 -0
  312. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-account/scripts/nerf-az-account-list +0 -0
  313. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-account/scripts/nerf-az-account-set +0 -0
  314. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-account/scripts/nerf-az-account-show +0 -0
  315. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-aks/SKILL.md +0 -0
  316. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-aks/scripts/nerf-az-aks-command-invoke +0 -0
  317. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-aks/scripts/nerf-az-aks-get-credentials +0 -0
  318. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-aks/scripts/nerf-az-aks-get-credentials-admin +0 -0
  319. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-aks/scripts/nerf-az-aks-get-versions +0 -0
  320. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-aks/scripts/nerf-az-aks-list +0 -0
  321. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-aks/scripts/nerf-az-aks-nodepool-list +0 -0
  322. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-aks/scripts/nerf-az-aks-nodepool-show +0 -0
  323. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-aks/scripts/nerf-az-aks-show +0 -0
  324. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-boards/SKILL.md +0 -0
  325. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-boards/scripts/nerf-az-boards-area-list +0 -0
  326. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-boards/scripts/nerf-az-boards-mywi-comment +0 -0
  327. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-boards/scripts/nerf-az-boards-mywi-list +0 -0
  328. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-boards/scripts/nerf-az-boards-mywi-show +0 -0
  329. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-boards/scripts/nerf-az-boards-mywi-update +0 -0
  330. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-boards/scripts/nerf-az-boards-wi-add-parent +0 -0
  331. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-boards/scripts/nerf-az-boards-wi-comment +0 -0
  332. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-boards/scripts/nerf-az-boards-wi-create +0 -0
  333. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-boards/scripts/nerf-az-boards-wi-list +0 -0
  334. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-boards/scripts/nerf-az-boards-wi-show +0 -0
  335. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-boards/scripts/nerf-az-boards-wi-update +0 -0
  336. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-cosmosdb/SKILL.md +0 -0
  337. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-cosmosdb/scripts/nerf-az-cosmosdb-database-list +0 -0
  338. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-cosmosdb/scripts/nerf-az-cosmosdb-list +0 -0
  339. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-cosmosdb/scripts/nerf-az-cosmosdb-network-rule-list +0 -0
  340. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-cosmosdb/scripts/nerf-az-cosmosdb-show +0 -0
  341. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-devops/SKILL.md +0 -0
  342. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-devops/scripts/nerf-az-devops-set-default-project +0 -0
  343. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-keyvault/SKILL.md +0 -0
  344. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-keyvault/scripts/nerf-az-keyvault-list +0 -0
  345. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-keyvault/scripts/nerf-az-keyvault-network-rule-list +0 -0
  346. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-keyvault/scripts/nerf-az-keyvault-secret-list +0 -0
  347. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-keyvault/scripts/nerf-az-keyvault-secret-stats +0 -0
  348. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-keyvault/scripts/nerf-az-keyvault-show +0 -0
  349. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-monitor/SKILL.md +0 -0
  350. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-monitor/scripts/nerf-az-monitor-activity-log +0 -0
  351. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-monitor/scripts/nerf-az-monitor-diagnostic-settings-list +0 -0
  352. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-monitor/scripts/nerf-az-monitor-metrics-list +0 -0
  353. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-network/SKILL.md +0 -0
  354. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-network/scripts/nerf-az-network-nic-show +0 -0
  355. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-network/scripts/nerf-az-network-nsg-list +0 -0
  356. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-network/scripts/nerf-az-network-nsg-show +0 -0
  357. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-network/scripts/nerf-az-network-private-dns-link-list +0 -0
  358. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-network/scripts/nerf-az-network-private-dns-link-show +0 -0
  359. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-network/scripts/nerf-az-network-private-dns-record-list +0 -0
  360. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-network/scripts/nerf-az-network-private-dns-zone-list +0 -0
  361. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-network/scripts/nerf-az-network-private-dns-zone-show +0 -0
  362. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-network/scripts/nerf-az-network-private-endpoint-list +0 -0
  363. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-network/scripts/nerf-az-network-private-endpoint-show +0 -0
  364. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-network/scripts/nerf-az-network-private-link-resource-list +0 -0
  365. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-network/scripts/nerf-az-network-public-ip-list +0 -0
  366. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-network/scripts/nerf-az-network-public-ip-show +0 -0
  367. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-network/scripts/nerf-az-network-route-table-show +0 -0
  368. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-network/scripts/nerf-az-network-subnet-show +0 -0
  369. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-network/scripts/nerf-az-network-vnet-list +0 -0
  370. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-network/scripts/nerf-az-network-vnet-peering-list +0 -0
  371. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-network/scripts/nerf-az-network-vnet-peering-show +0 -0
  372. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-network/scripts/nerf-az-network-vnet-show +0 -0
  373. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-pipelines/SKILL.md +0 -0
  374. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-pipelines/scripts/nerf-az-pipelines-check +0 -0
  375. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-pipelines/scripts/nerf-az-pipelines-list +0 -0
  376. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-pipelines/scripts/nerf-az-pipelines-run-log +0 -0
  377. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-pipelines/scripts/nerf-az-pipelines-run-show +0 -0
  378. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-pipelines/scripts/nerf-az-pipelines-run-timeline +0 -0
  379. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-pipelines/scripts/nerf-az-pipelines-runs +0 -0
  380. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-postgres/SKILL.md +0 -0
  381. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-postgres/scripts/nerf-az-postgres-flexible-server-firewall-rule-list +0 -0
  382. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-postgres/scripts/nerf-az-postgres-flexible-server-list +0 -0
  383. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-postgres/scripts/nerf-az-postgres-flexible-server-show +0 -0
  384. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-repos/SKILL.md +0 -0
  385. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-repos/scripts/nerf-az-repos-pr-comments +0 -0
  386. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-repos/scripts/nerf-az-repos-pr-create +0 -0
  387. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-repos/scripts/nerf-az-repos-pr-edit +0 -0
  388. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-repos/scripts/nerf-az-repos-pr-list +0 -0
  389. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-repos/scripts/nerf-az-repos-pr-set-status +0 -0
  390. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-repos/scripts/nerf-az-repos-pr-show +0 -0
  391. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-repos/scripts/nerf-az-repos-pr-vote +0 -0
  392. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-resource/SKILL.md +0 -0
  393. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-resource/scripts/nerf-az-group-list +0 -0
  394. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-resource/scripts/nerf-az-group-show +0 -0
  395. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-resource/scripts/nerf-az-resource-list +0 -0
  396. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-resource/scripts/nerf-az-resource-show +0 -0
  397. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-role/SKILL.md +0 -0
  398. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-role/scripts/nerf-az-role-assignment-by-id +0 -0
  399. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-role/scripts/nerf-az-role-assignment-list +0 -0
  400. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-role/scripts/nerf-az-role-definition-list +0 -0
  401. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-storage/SKILL.md +0 -0
  402. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-storage/scripts/nerf-az-storage-account-list +0 -0
  403. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-storage/scripts/nerf-az-storage-account-network-rule-list +0 -0
  404. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-az-storage/scripts/nerf-az-storage-account-show +0 -0
  405. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-gh/SKILL.md +0 -0
  406. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-gh/scripts/nerf-gh-issue-comment +0 -0
  407. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-gh/scripts/nerf-gh-issue-create +0 -0
  408. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-gh/scripts/nerf-gh-issue-list +0 -0
  409. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-gh/scripts/nerf-gh-issue-view +0 -0
  410. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-gh/scripts/nerf-gh-pr-copilot-review-status +0 -0
  411. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-gh/scripts/nerf-gh-pr-create +0 -0
  412. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-gh/scripts/nerf-gh-pr-diff +0 -0
  413. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-gh/scripts/nerf-gh-pr-inline-comments +0 -0
  414. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-gh/scripts/nerf-gh-pr-list +0 -0
  415. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-gh/scripts/nerf-gh-pr-ready +0 -0
  416. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-gh/scripts/nerf-gh-pr-request-copilot-review +0 -0
  417. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-gh/scripts/nerf-gh-pr-review-comments +0 -0
  418. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-gh/scripts/nerf-gh-pr-reviews +0 -0
  419. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-gh/scripts/nerf-gh-pr-thread-comment +0 -0
  420. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-gh/scripts/nerf-gh-pr-thread-comments +0 -0
  421. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-gh/scripts/nerf-gh-pr-view +0 -0
  422. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-gh/scripts/nerf-gh-run-list +0 -0
  423. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-gh/scripts/nerf-gh-run-view +0 -0
  424. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-git/SKILL.md +0 -0
  425. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-git/scripts/nerf-git-add +0 -0
  426. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-git/scripts/nerf-git-blame +0 -0
  427. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-git/scripts/nerf-git-branch-checkout-remote +0 -0
  428. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-git/scripts/nerf-git-branch-current +0 -0
  429. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-git/scripts/nerf-git-branch-delete-merged +0 -0
  430. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-git/scripts/nerf-git-branch-list-local +0 -0
  431. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-git/scripts/nerf-git-branch-list-remote +0 -0
  432. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-git/scripts/nerf-git-cherry-pick +0 -0
  433. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-git/scripts/nerf-git-commit +0 -0
  434. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-git/scripts/nerf-git-commit-amend +0 -0
  435. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-git/scripts/nerf-git-create-branch +0 -0
  436. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-git/scripts/nerf-git-diff +0 -0
  437. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-git/scripts/nerf-git-fetch +0 -0
  438. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-git/scripts/nerf-git-log +0 -0
  439. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-git/scripts/nerf-git-ls-remote +0 -0
  440. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-git/scripts/nerf-git-merge-no-ff +0 -0
  441. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-git/scripts/nerf-git-mv +0 -0
  442. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-git/scripts/nerf-git-pull +0 -0
  443. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-git/scripts/nerf-git-push-branch +0 -0
  444. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-git/scripts/nerf-git-push-main +0 -0
  445. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-git/scripts/nerf-git-rebase-abort +0 -0
  446. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-git/scripts/nerf-git-rebase-continue +0 -0
  447. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-git/scripts/nerf-git-rebase-unpushed +0 -0
  448. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-git/scripts/nerf-git-reflog +0 -0
  449. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-git/scripts/nerf-git-remote-list +0 -0
  450. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-git/scripts/nerf-git-reset-hard-last +0 -0
  451. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-git/scripts/nerf-git-reset-unpushed +0 -0
  452. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-git/scripts/nerf-git-restore-staged +0 -0
  453. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-git/scripts/nerf-git-restore-worktree +0 -0
  454. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-git/scripts/nerf-git-revert +0 -0
  455. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-git/scripts/nerf-git-rm +0 -0
  456. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-git/scripts/nerf-git-show +0 -0
  457. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-git/scripts/nerf-git-stash-drop +0 -0
  458. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-git/scripts/nerf-git-stash-list +0 -0
  459. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-git/scripts/nerf-git-stash-pop +0 -0
  460. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-git/scripts/nerf-git-stash-push +0 -0
  461. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-git/scripts/nerf-git-status +0 -0
  462. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-git/scripts/nerf-git-submodule-status +0 -0
  463. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-git/scripts/nerf-git-switch +0 -0
  464. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-git/scripts/nerf-git-tag +0 -0
  465. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-git/scripts/nerf-git-tag-push +0 -0
  466. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-kubectl/SKILL.md +0 -0
  467. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-kubectl/scripts/nerf-kubectl-api-resources +0 -0
  468. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-kubectl/scripts/nerf-kubectl-api-versions +0 -0
  469. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-kubectl/scripts/nerf-kubectl-cluster-info +0 -0
  470. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-kubectl/scripts/nerf-kubectl-config-current-context +0 -0
  471. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-kubectl/scripts/nerf-kubectl-config-get-contexts +0 -0
  472. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-kubectl/scripts/nerf-kubectl-config-use-context +0 -0
  473. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-kubectl/scripts/nerf-kubectl-describe +0 -0
  474. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-kubectl/scripts/nerf-kubectl-exec +0 -0
  475. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-kubectl/scripts/nerf-kubectl-explain +0 -0
  476. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-kubectl/scripts/nerf-kubectl-get +0 -0
  477. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-kubectl/scripts/nerf-kubectl-get-secrets +0 -0
  478. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-kubectl/scripts/nerf-kubectl-logs +0 -0
  479. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-kubectl/scripts/nerf-kubectl-port-forward +0 -0
  480. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-kubectl/scripts/nerf-kubectl-rollout-restart +0 -0
  481. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-kubectl/scripts/nerf-kubectl-top-nodes +0 -0
  482. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-kubectl/scripts/nerf-kubectl-top-pods +0 -0
  483. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-kubectl/scripts/nerf-kubectl-version +0 -0
  484. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-nx/SKILL.md +0 -0
  485. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-nx/scripts/nerf-nx-affected +0 -0
  486. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-nx/scripts/nerf-nx-graph +0 -0
  487. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-nx/scripts/nerf-nx-reset +0 -0
  488. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-nx/scripts/nerf-nx-run +0 -0
  489. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-nx/scripts/nerf-nx-show-project +0 -0
  490. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-nx/scripts/nerf-nx-show-projects +0 -0
  491. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-pkgrun/SKILL.md +0 -0
  492. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-pkgrun/scripts/nerf-pkgrun-cspell +0 -0
  493. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-pkgrun/scripts/nerf-pkgrun-markdownlint +0 -0
  494. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-pkgrun/scripts/nerf-pkgrun-prettier +0 -0
  495. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-report/SKILL.md +0 -0
  496. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-stdutils/SKILL.md +0 -0
  497. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-stdutils/scripts/nerf-find +0 -0
  498. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-stdutils/scripts/nerf-find-cwd +0 -0
  499. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-stdutils/scripts/nerf-grep +0 -0
  500. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-stdutils/scripts/nerf-grep-recursive-cwd +0 -0
  501. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-tf/SKILL.md +0 -0
  502. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-tf/scripts/nerf-tf-fmt +0 -0
  503. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-tf/scripts/nerf-tf-validate +0 -0
  504. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-tg/SKILL.md +0 -0
  505. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-tg/scripts/nerf-tg-fmt +0 -0
  506. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-tg/scripts/nerf-tg-fmt-all +0 -0
  507. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-tg/scripts/nerf-tg-hcl-validate +0 -0
  508. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-tg/scripts/nerf-tg-init +0 -0
  509. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-tg/scripts/nerf-tg-init-all +0 -0
  510. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-tg/scripts/nerf-tg-output +0 -0
  511. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-tg/scripts/nerf-tg-output-all +0 -0
  512. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-tg/scripts/nerf-tg-plan +0 -0
  513. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-tg/scripts/nerf-tg-plan-all +0 -0
  514. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-tg/scripts/nerf-tg-validate +0 -0
  515. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-tg/scripts/nerf-tg-validate-all +0 -0
  516. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-uv/SKILL.md +0 -0
  517. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-uv/scripts/nerf-uv-mypy +0 -0
  518. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-uv/scripts/nerf-uv-pytest +0 -0
  519. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-uv/scripts/nerf-uv-ruff-check +0 -0
  520. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerf-uv/scripts/nerf-uv-ruff-fix +0 -0
  521. {nerftools-2.1.0 → nerftools-2.2.0}/out/codex-plugin/skills/nerftools/SKILL.md +0 -0
  522. {nerftools-2.1.0 → nerftools-2.2.0}/pypi-dist/.gitignore +0 -0
  523. {nerftools-2.1.0 → nerftools-2.2.0}/release-please-config.json +0 -0
  524. {nerftools-2.1.0 → nerftools-2.2.0}/rulesync.jsonc +0 -0
  525. {nerftools-2.1.0 → nerftools-2.2.0}/rulesync.local.jsonc.example +0 -0
  526. {nerftools-2.1.0 → nerftools-2.2.0}/scripts/_common.sh +0 -0
  527. {nerftools-2.1.0 → nerftools-2.2.0}/scripts/generate-plugins.sh +0 -0
  528. {nerftools-2.1.0 → nerftools-2.2.0}/scripts/lint-files.sh +0 -0
  529. {nerftools-2.1.0 → nerftools-2.2.0}/scripts/rulesync-upgen.sh +0 -0
  530. {nerftools-2.1.0 → nerftools-2.2.0}/tests/__init__.py +0 -0
  531. {nerftools-2.1.0 → nerftools-2.2.0}/tests/test_builder.py +0 -0
  532. {nerftools-2.1.0 → nerftools-2.2.0}/tests/test_config.py +0 -0
  533. {nerftools-2.1.0 → nerftools-2.2.0}/tests/test_manifest.py +0 -0
  534. {nerftools-2.1.0 → nerftools-2.2.0}/tests/test_nerf_report.py +0 -0
  535. {nerftools-2.1.0 → nerftools-2.2.0}/tests/test_nerfctl.py +0 -0
  536. {nerftools-2.1.0 → nerftools-2.2.0}/tests/test_rendering.py +0 -0
  537. {nerftools-2.1.0 → nerftools-2.2.0}/tests/test_skill.py +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "2.2.0"
3
+ }
@@ -1,5 +1,21 @@
1
1
  # Changelog
2
2
 
3
+ ## [2.2.0](https://github.com/WayfarerLabs/nerftools/compare/v2.1.0...v2.2.0) (2026-06-05)
4
+
5
+
6
+ ### Features
7
+
8
+ * bash-hint hook opt-in via brand-namespaced env var ([aa2288e](https://github.com/WayfarerLabs/nerftools/commit/aa2288e5f15c37f3c439698f9457f923786301f5))
9
+ * gate bash-hint hook behind brand-namespaced opt-in env var ([ee2801d](https://github.com/WayfarerLabs/nerftools/commit/ee2801d6bb5b641becdb623785729d029aad4f77))
10
+
11
+
12
+ ### Documentation
13
+
14
+ * clarify claude code output ([d2094a9](https://github.com/WayfarerLabs/nerftools/commit/d2094a9b047dcfac56d90bf5cb77725abdf1fd32))
15
+ * further readme updates ([e147e84](https://github.com/WayfarerLabs/nerftools/commit/e147e842d6281e25ed05bd8c8b28ccb830db47dc))
16
+ * refresh README -- add Codex plugin, soften default-manifests section, update structure ([76cc678](https://github.com/WayfarerLabs/nerftools/commit/76cc6781269539463237c9aedacfbd3549aa2b54))
17
+ * refresh README for Codex plugin and softened default-manifests section ([63d2f5b](https://github.com/WayfarerLabs/nerftools/commit/63d2f5ba93806bbbb2fed4e521c17199e1dbced4))
18
+
3
19
  ## [2.1.0](https://github.com/WayfarerLabs/nerftools/compare/v2.0.0...v2.1.0) (2026-06-03)
4
20
 
5
21
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nerftools
3
- Version: 2.1.0
3
+ Version: 2.2.0
4
4
  Summary: Define and generate nerf tools: limited-scope wrappers for common CLI utilities that allow for fine-grained control over agent execution
5
5
  Project-URL: Homepage, https://github.com/WayfarerLabs/nerftools
6
6
  Project-URL: Repository, https://github.com/WayfarerLabs/nerftools
@@ -42,9 +42,11 @@ For more detail on the manifest format and tool types/capabilities, see the
42
42
  [manifest reference](docs/nerf-manifest.md).
43
43
 
44
44
  This repo includes a set of [default manifests](nerftools/default_manifests/) that define a baseline
45
- set of nerf tools for common CLI utilities. Users are free to build upon these with their own custom
45
+ set of nerf tools for common CLI utilities. Note that these are biased towards the author's stack
46
+ (Azure, AZDO, Github, Kubectl, etc.). Users are free to build upon these with their own custom
46
47
  manifests or exclude them entirely by passing the `--no-default` flag to the CLI when generating
47
- tools.
48
+ tools. Default manifest contributions that meet our exacting standards are very much encouraged,
49
+ too.
48
50
 
49
51
  ### Targets
50
52
 
@@ -62,9 +64,9 @@ within that package along with the package-level information.
62
64
 
63
65
  This repo offers several ways to use the nerf tools. Choose the best one for your specific needs:
64
66
 
65
- - The repo exposes a fully-generated Claude Code plugin with the default tools that can be installed
66
- into a Claude Code environment directly from this repository. This is super easy but does not
67
- allow for customization of the tools or other changes to the plugin.
67
+ - The repo exposes fully-generated plugins for Claude Code and Codex with the default tools, both
68
+ installable directly from this repository. This is super easy but does not allow for customization
69
+ of the tools or other changes to the plugins.
68
70
  - Alternatively, users can install the Python package and generate their own targets locally using
69
71
  the CLI.
70
72
  - Additionally, platforms like [Agentworks](https://github.com/WayfarerLabs/agentworks) integrate
@@ -103,6 +105,9 @@ uv run nerf generate --target skills --outdir ./skills
103
105
  # Generate a Claude Code plugin (uses built-in defaults if no config)
104
106
  uv run nerf generate --target claude-plugin --outdir ./claude-plugin
105
107
 
108
+ # Generate a Codex plugin
109
+ uv run nerf generate --target codex-plugin --outdir ./codex-plugin
110
+
106
111
  # Generate a Claude Code plugin with custom identity
107
112
  uv run nerf generate --target claude-plugin -c nerf.yaml --outdir ./claude-plugin
108
113
  ```
@@ -118,20 +123,16 @@ claude plugin marketplace add <plugin-dir>
118
123
  claude plugin install <plugin-name>@<marketplace-name>
119
124
  ```
120
125
 
121
- ## Default Manifests/Packages
122
-
123
- | Package | Tools | Description |
124
- | ------------ | ----- | ---------------------------------------------------------------- |
125
- | git | 11 | Git workflow with commit, push, fetch, tag, amend, revert, reset |
126
- | az-repos | 3 | Azure Repos PR management |
127
- | az-pipelines | 3 | Azure Pipelines monitoring |
128
- | az-boards | 7 | Azure Boards work items (query, view, create, update) |
129
- | nx | 6 | Nx monorepo workspace operations |
130
- | tg | 10 | Terragrunt infrastructure management |
131
- | pkgrun | 3 | npm package runners (cspell, markdownlint, prettier) |
132
- | stdutils | 4 | Unix utilities (find, grep) with safety guardrails |
133
- | gh | 10 | GitHub CLI (PRs, issues, workflow runs) |
134
- | uv | 4 | Python dev tools via uv run (pytest, ruff, mypy) |
126
+ ## Default Manifests
127
+
128
+ The repo ships a [default set of manifests](nerftools/default_manifests/) covering common CLI
129
+ utilities -- git, gh, much of the `az` surface (Repos, Pipelines, Boards, AKS, network, storage,
130
+ role assignments, and others), kubectl, terraform/terragrunt, nx, uv, and assorted utilities. Browse
131
+ the directory for the current set; each YAML's package description and tool definitions explain
132
+ what's covered and the threat profile of each tool.
133
+
134
+ Use the defaults as-is, layer your own manifests on top, or skip them entirely with `--no-default`
135
+ when generating.
135
136
 
136
137
  ## Nerf Control Tools
137
138
 
@@ -191,12 +192,15 @@ nerftools/ Python package
191
192
  builder.py Bash script generation (3 execution modes)
192
193
  rendering.py Shared display helpers (maps-to, usage tokens)
193
194
  skill.py Rulesync skill generation
194
- formats.py Claude Code plugin builder
195
+ formats.py Claude Code and Codex plugin builders
196
+ outdir.py Output directory safety guard (refuses to wipe unmanaged dirs)
195
197
  config.py Config loader, plugin metadata, defaults resolution
196
198
  cli.py CLI (validate + generate)
197
- nerfctl/claude/ Grant management shell scripts
199
+ nerfctl/claude/ Grant management shell scripts (Claude Code)
200
+ nerf_report/ Bundled agent-feedback tool template
198
201
  default_manifests/ Default tool package manifests (YAML)
199
202
  tests/ Test suite
200
203
  out/claude-plugin/ Pre-built Claude Code plugin (auto-generated)
201
- docs/ Manifest spec and other (future) docs
204
+ out/codex-plugin/ Pre-built Codex plugin (auto-generated)
205
+ docs/ Manifest spec and design docs
202
206
  ```
@@ -147,6 +147,13 @@ constructs (lookaheads, named groups, etc.) will pass load-time validation but w
147
147
  runtime. Stick to ERE. As a convenience, `\b` boundaries are translated to portable POSIX ERE at
148
148
  generation time so manifests can keep using them.
149
149
 
150
+ The hook is **opt-in at runtime**: even when generated and installed, it is a silent no-op unless
151
+ the brand-namespaced env var `<BRAND>_ENABLE_BASH_HINT_HOOK` (e.g. `NERF_ENABLE_BASH_HINT_HOOK` for
152
+ the default `nerf-` prefix, `MY_TOOL_ENABLE_BASH_HINT_HOOK` for `my-tool-`) is set to a truthy value
153
+ (`1`, `true`, `yes`, or `on` — case-insensitive). The redirect is aggressive enough that we make
154
+ this explicit rather than discover-by-surprise. Brand-namespacing the env var means two plugins with
155
+ different brands installed side-by-side have independent kill switches.
156
+
150
157
  The hook automatically skips when it detects an actual wrapper invocation: it splits the command on
151
158
  shell separators (`&&`, `||`, `;`, `|`, `&`), finds the first non-env-var token of each segment, and
152
159
  checks whether that token's basename starts with the wrapper prefix. Compound forms like
@@ -3,7 +3,7 @@
3
3
 
4
4
  package:
5
5
  name: nerftools
6
- version: 2.1.0 # x-release-please-version
6
+ version: 2.2.0 # x-release-please-version
7
7
  description: Scoped, safety-constrained CLI wrappers for AI agents
8
8
  author:
9
9
  name: WayfarerLabs
@@ -723,6 +723,12 @@ _HINT_HOOK_TEMPLATE = '''\
723
723
  # command allows the call through without matching. Empty reason still denies,
724
724
  # with an explanation.
725
725
  #
726
+ # Opt-in: this hook is a no-op unless __BRAND_ENV__ is set to a truthy
727
+ # value (1, true, yes, on -- case-insensitive). The redirect is aggressive
728
+ # enough that we make agents/users explicitly opt in rather than discover
729
+ # it by surprise. The env var is brand-namespaced so two plugins with
730
+ # different brands installed side-by-side don't share a kill switch.
731
+ #
726
732
  # Fail-open behavior: if bash < 4 or jq is missing, the hook exits 0 silently.
727
733
  # A SessionStart hook surfaces a warning so the user knows the redirect is
728
734
  # disabled.
@@ -732,6 +738,12 @@ if [[ "${BASH_VERSINFO[0]:-0}" -lt 4 ]]; then
732
738
  exit 0
733
739
  fi
734
740
 
741
+ # Opt-in gate: silent no-op unless explicitly enabled.
742
+ case "${__BRAND_ENV__:-}" in
743
+ 1 | [tT][rR][uU][eE] | [yY][eE][sS] | [oO][nN]) ;;
744
+ *) exit 0 ;;
745
+ esac
746
+
735
747
  set -uo pipefail
736
748
 
737
749
  _WRAPPER_PREFIX="__PREFIX__"
@@ -855,6 +867,21 @@ def _derive_brand(prefix: str) -> str:
855
867
  return prefix.rstrip("-_") or "nerf"
856
868
 
857
869
 
870
+ def _derive_brand_env_var(brand: str) -> str:
871
+ """Derive the brand-namespaced env var that opts the hook in.
872
+
873
+ Two plugins with different brands installed side-by-side need
874
+ independent kill switches; namespacing the env var by brand makes
875
+ them non-interfering. ``"nerf"`` -> ``"NERF_ENABLE_BASH_HINT_HOOK"``,
876
+ ``"my-tool"`` -> ``"MY_TOOL_ENABLE_BASH_HINT_HOOK"``.
877
+ """
878
+ sanitized = re_module.sub(r"[^A-Z0-9]", "_", brand.upper())
879
+ # Env var names can't start with a digit.
880
+ if sanitized and sanitized[0].isdigit():
881
+ sanitized = "_" + sanitized
882
+ return f"{sanitized}_ENABLE_BASH_HINT_HOOK"
883
+
884
+
858
885
  def _build_bash_hint_hook_script(manifests: list[NerfManifest], *, prefix: str) -> str:
859
886
  """Render the PreToolUse hint dispatcher with patterns baked in."""
860
887
  brand = _derive_brand(prefix)
@@ -871,6 +898,7 @@ def _build_bash_hint_hook_script(manifests: list[NerfManifest], *, prefix: str)
871
898
  .replace("__PREFIX__", _bash_double_quote_escape(prefix))
872
899
  .replace("__BRAND__", _bash_double_quote_escape(brand))
873
900
  .replace("__BRAND_RE__", _bash_double_quote_escape(_ere_escape(brand)))
901
+ .replace("__BRAND_ENV__", _derive_brand_env_var(brand))
874
902
  )
875
903
 
876
904
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nerftools",
3
- "version": "2.1.0",
3
+ "version": "2.2.0",
4
4
  "description": "Scoped, safety-constrained CLI wrappers for AI agents",
5
5
  "skills": "./skills/",
6
6
  "author": {
@@ -10,6 +10,12 @@
10
10
  # command allows the call through without matching. Empty reason still denies,
11
11
  # with an explanation.
12
12
  #
13
+ # Opt-in: this hook is a no-op unless NERF_ENABLE_BASH_HINT_HOOK is set to a truthy
14
+ # value (1, true, yes, on -- case-insensitive). The redirect is aggressive
15
+ # enough that we make agents/users explicitly opt in rather than discover
16
+ # it by surprise. The env var is brand-namespaced so two plugins with
17
+ # different brands installed side-by-side don't share a kill switch.
18
+ #
13
19
  # Fail-open behavior: if bash < 4 or jq is missing, the hook exits 0 silently.
14
20
  # A SessionStart hook surfaces a warning so the user knows the redirect is
15
21
  # disabled.
@@ -19,6 +25,12 @@ if [[ "${BASH_VERSINFO[0]:-0}" -lt 4 ]]; then
19
25
  exit 0
20
26
  fi
21
27
 
28
+ # Opt-in gate: silent no-op unless explicitly enabled.
29
+ case "${NERF_ENABLE_BASH_HINT_HOOK:-}" in
30
+ 1 | [tT][rR][uU][eE] | [yY][eE][sS] | [oO][nN]) ;;
31
+ *) exit 0 ;;
32
+ esac
33
+
22
34
  set -uo pipefail
23
35
 
24
36
  _WRAPPER_PREFIX="nerf-"
@@ -5,7 +5,7 @@
5
5
  set -euo pipefail
6
6
 
7
7
  # Stamped at plugin build time.
8
- NERFTOOLS_VERSION="2.1.0"
8
+ NERFTOOLS_VERSION="2.2.0"
9
9
 
10
10
  # Reports live under $HOME; fail fast with an actionable message if it's
11
11
  # unset rather than relying on `set -u` to crash later with "unbound variable".
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nerftools",
3
- "version": "2.1.0",
3
+ "version": "2.2.0",
4
4
  "description": "Scoped, safety-constrained CLI wrappers for AI agents",
5
5
  "skills": "./skills/",
6
6
  "author": {
@@ -5,7 +5,7 @@
5
5
  set -euo pipefail
6
6
 
7
7
  # Stamped at plugin build time.
8
- NERFTOOLS_VERSION="2.1.0"
8
+ NERFTOOLS_VERSION="2.2.0"
9
9
 
10
10
  # Reports live under $HOME; fail fast with an actionable message if it's
11
11
  # unset rather than relying on `set -u` to crash later with "unbound variable".
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "nerftools"
3
- version = "2.1.0"
3
+ version = "2.2.0"
4
4
  description = "Define and generate nerf tools: limited-scope wrappers for common CLI utilities that allow for fine-grained control over agent execution"
5
5
  requires-python = ">=3.12"
6
6
  license = "MIT"
@@ -278,14 +278,34 @@ def _manifest_with_hints(
278
278
  )
279
279
 
280
280
 
281
- def _run_hook(script: Path, payload: dict) -> tuple[str, int]:
281
+ def _run_hook(
282
+ script: Path,
283
+ payload: dict,
284
+ *,
285
+ env: dict[str, str] | None = None,
286
+ brand: str = "nerf",
287
+ ) -> tuple[str, int]:
288
+ import os
282
289
  import subprocess
283
290
 
291
+ from nerftools.formats import _derive_brand_env_var
292
+
293
+ # The hook is opt-in via <BRAND>_ENABLE_BASH_HINT_HOOK -- default the
294
+ # brand to "nerf" (matches all existing tests' prefix="nerf-") and
295
+ # default the gate to truthy so the tests exercise the hook's logic.
296
+ # Tests of the gate itself pass an explicit env that overrides.
297
+ # Use the production helper directly so test/hook env-var derivation
298
+ # can't drift (e.g., on digit-leading brands).
299
+ enable_var = _derive_brand_env_var(brand)
300
+ merged_env = {**os.environ, enable_var: "true"}
301
+ if env is not None:
302
+ merged_env.update(env)
284
303
  result = subprocess.run(
285
304
  [str(script)],
286
305
  input=json.dumps(payload),
287
306
  capture_output=True,
288
307
  text=True,
308
+ env=merged_env,
289
309
  check=False,
290
310
  )
291
311
  return result.stdout, result.returncode
@@ -448,6 +468,70 @@ def test_claude_plugin_hook_script_executable(tmp_path: Path) -> None:
448
468
  assert script.stat().st_mode & 0o111 # executable
449
469
 
450
470
 
471
+ @pytest.mark.parametrize("enable_value", ["true", "TRUE", "True", "1", "yes", "YES", "on", "ON"])
472
+ def test_hook_runs_when_enable_env_is_truthy(tmp_path: Path, enable_value: str) -> None:
473
+ _build([_manifest_with_hints()], tmp_path, prefix="nerf-")
474
+ script = tmp_path / "hooks" / "nerf-bash-hint"
475
+ stdout, rc = _run_hook(
476
+ script,
477
+ {"tool_name": "Bash", "tool_input": {"command": "git status"}},
478
+ env={"NERF_ENABLE_BASH_HINT_HOOK": enable_value},
479
+ )
480
+ assert rc == 0
481
+ assert json.loads(stdout)["hookSpecificOutput"]["permissionDecision"] == "deny"
482
+
483
+
484
+ @pytest.mark.parametrize(
485
+ "enable_value", ["", "false", "0", "no", "off", "FaLsE", "anything-else"]
486
+ )
487
+ def test_hook_silent_noop_when_enable_env_is_not_truthy(tmp_path: Path, enable_value: str) -> None:
488
+ _build([_manifest_with_hints()], tmp_path, prefix="nerf-")
489
+ script = tmp_path / "hooks" / "nerf-bash-hint"
490
+ stdout, rc = _run_hook(
491
+ script,
492
+ {"tool_name": "Bash", "tool_input": {"command": "git status"}},
493
+ env={"NERF_ENABLE_BASH_HINT_HOOK": enable_value},
494
+ )
495
+ assert rc == 0
496
+ assert stdout == "" # nothing printed -> Claude Code lets the command through
497
+
498
+
499
+ def test_hook_silent_noop_when_enable_env_is_unset(tmp_path: Path) -> None:
500
+ """Explicit guard against accidentally clobbering os.environ: pass an env
501
+ dict that omits NERF_ENABLE_BASH_HINT_HOOK to confirm the unset case."""
502
+ import os
503
+ import subprocess
504
+
505
+ _build([_manifest_with_hints()], tmp_path, prefix="nerf-")
506
+ script = tmp_path / "hooks" / "nerf-bash-hint"
507
+ env = {k: v for k, v in os.environ.items() if k != "NERF_ENABLE_BASH_HINT_HOOK"}
508
+ result = subprocess.run(
509
+ [str(script)],
510
+ input=json.dumps({"tool_name": "Bash", "tool_input": {"command": "git status"}}),
511
+ capture_output=True,
512
+ text=True,
513
+ env=env,
514
+ check=False,
515
+ )
516
+ assert result.returncode == 0
517
+ assert result.stdout == ""
518
+
519
+
520
+ def test_hook_env_var_is_brand_namespaced(tmp_path: Path) -> None:
521
+ """A non-default brand gets its own env var so multiple plugins coexist."""
522
+ _build([_manifest_with_hints()], tmp_path, prefix="acme-")
523
+ script = tmp_path / "hooks" / "nerf-bash-hint"
524
+ script_text = script.read_text()
525
+ assert "ACME_ENABLE_BASH_HINT_HOOK" in script_text
526
+ assert "NERF_ENABLE_BASH_HINT_HOOK" not in script_text
527
+
528
+
529
+ def test_hook_with_hyphenated_brand_uppercases_and_underscores(tmp_path: Path) -> None:
530
+ _build([_manifest_with_hints()], tmp_path, prefix="my-tool-")
531
+ script = tmp_path / "hooks" / "nerf-bash-hint"
532
+ assert "MY_TOOL_ENABLE_BASH_HINT_HOOK" in script.read_text()
533
+
534
+
451
535
  def test_hook_denies_matching_command(tmp_path: Path) -> None:
452
536
  _build([_manifest_with_hints()], tmp_path, prefix="nerf-")
453
537
  script = tmp_path / "hooks" / "nerf-bash-hint"
@@ -587,6 +671,7 @@ def test_hook_brand_regex_meta_safe(tmp_path: Path) -> None:
587
671
  stdout, _ = _run_hook(
588
672
  script,
589
673
  {"tool_name": "Bash", "tool_input": {"command": "git status # myXtool:bypass reason"}},
674
+ brand="my.tool",
590
675
  )
591
676
  reason = json.loads(stdout)["hookSpecificOutput"]["permissionDecisionReason"]
592
677
  assert "`my.tool-git`" in reason
@@ -594,6 +679,7 @@ def test_hook_brand_regex_meta_safe(tmp_path: Path) -> None:
594
679
  stdout, _ = _run_hook(
595
680
  script,
596
681
  {"tool_name": "Bash", "tool_input": {"command": "git status # my.tool:bypass reason"}},
682
+ brand="my.tool",
597
683
  )
598
684
  assert stdout == ""
599
685
 
@@ -660,12 +746,14 @@ def test_hook_brand_follows_prefix(tmp_path: Path) -> None:
660
746
  stdout, _ = _run_hook(
661
747
  script,
662
748
  {"tool_name": "Bash", "tool_input": {"command": "git status # mytool:bypass yes"}},
749
+ brand="mytool",
663
750
  )
664
751
  assert stdout == ""
665
752
  # Bypass with the old "nerf:" brand does NOT match -> still denies
666
753
  stdout, _ = _run_hook(
667
754
  script,
668
755
  {"tool_name": "Bash", "tool_input": {"command": "git status # nerf:bypass yes"}},
756
+ brand="mytool",
669
757
  )
670
758
  reason = json.loads(stdout)["hookSpecificOutput"]["permissionDecisionReason"]
671
759
  assert "`mytool-git`" in reason
@@ -176,7 +176,7 @@ wheels = [
176
176
 
177
177
  [[package]]
178
178
  name = "nerftools"
179
- version = "2.1.0"
179
+ version = "2.2.0"
180
180
  source = { editable = "." }
181
181
  dependencies = [
182
182
  { name = "pyyaml" },
@@ -1,3 +0,0 @@
1
- {
2
- ".": "2.1.0"
3
- }
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes