plugin-scanner 2.0.2__tar.gz → 2.0.3__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 (225) hide show
  1. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/.github/workflows/publish.yml +13 -3
  2. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/PKG-INFO +66 -60
  3. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/README.md +64 -58
  4. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/docs/guard/architecture.md +5 -5
  5. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/docs/guard/get-started.md +23 -23
  6. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/docs/guard/local-vs-cloud.md +3 -3
  7. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/docs/guard/testing-matrix.md +10 -10
  8. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/pyproject.toml +3 -2
  9. plugin_scanner-2.0.3/pyproject.toml.bak +85 -0
  10. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/cli.py +22 -6
  11. plugin_scanner-2.0.3/src/codex_plugin_scanner/guard/cli/__init__.py +5 -0
  12. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/guard/cli/commands.py +16 -3
  13. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/guard/cli/product.py +9 -8
  14. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/guard/cli/prompt.py +1 -1
  15. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/guard/cli/render.py +1 -2
  16. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/version.py +1 -1
  17. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/test_action_bundle.py +18 -19
  18. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/test_ecosystems.py +1 -3
  19. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/test_guard_cli.py +8 -1
  20. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/test_guard_product_flow.py +52 -2
  21. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/test_trust_scoring.py +3 -9
  22. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/uv.lock +42 -42
  23. plugin_scanner-2.0.2/src/codex_plugin_scanner/guard/cli/__init__.py +0 -5
  24. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/.clusterfuzzlite/Dockerfile +0 -0
  25. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/.clusterfuzzlite/build.sh +0 -0
  26. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/.clusterfuzzlite/project.yaml +0 -0
  27. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/.clusterfuzzlite/requirements-atheris.txt +0 -0
  28. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/.dockerignore +0 -0
  29. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/.github/CODEOWNERS +0 -0
  30. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/.github/dependabot.yml +0 -0
  31. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/.github/workflows/ci.yml +0 -0
  32. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/.github/workflows/codeql.yml +0 -0
  33. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/.github/workflows/e2e-test.yml +0 -0
  34. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/.github/workflows/fuzz.yml +0 -0
  35. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/.github/workflows/publish-action-repo.yml +0 -0
  36. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/.github/workflows/scorecard.yml +0 -0
  37. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/.gitignore +0 -0
  38. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/.pre-commit-hooks.yaml +0 -0
  39. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/CONTRIBUTING.md +0 -0
  40. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/Dockerfile +0 -0
  41. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/LICENSE +0 -0
  42. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/SECURITY.md +0 -0
  43. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/action/README.legacy.md +0 -0
  44. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/action/README.md +0 -0
  45. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/action/action.yml +0 -0
  46. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/action/cisco-version.txt +0 -0
  47. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/action/pypi-attestations-version.txt +0 -0
  48. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/action/scanner-version.txt +0 -0
  49. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/docker-requirements.txt +0 -0
  50. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/docs/guard/harness-support.md +0 -0
  51. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/docs/guard/repo-boundaries.md +0 -0
  52. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/docs/trust/mcp-trust-draft.md +0 -0
  53. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/docs/trust/plugin-trust-draft.md +0 -0
  54. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/docs/trust/skill-trust-local.md +0 -0
  55. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/fuzzers/manifest_fuzzer.py +0 -0
  56. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/schemas/plugin-quality.v1.json +0 -0
  57. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/schemas/scan-result.v1.json +0 -0
  58. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/schemas/verify-result.v1.json +0 -0
  59. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/__init__.py +0 -0
  60. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/action_runner.py +0 -0
  61. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/checks/__init__.py +0 -0
  62. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/checks/best_practices.py +0 -0
  63. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/checks/claude.py +0 -0
  64. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/checks/code_quality.py +0 -0
  65. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/checks/ecosystem_common.py +0 -0
  66. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/checks/gemini.py +0 -0
  67. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/checks/manifest.py +0 -0
  68. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/checks/manifest_support.py +0 -0
  69. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/checks/marketplace.py +0 -0
  70. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/checks/opencode.py +0 -0
  71. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/checks/operational_security.py +0 -0
  72. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/checks/security.py +0 -0
  73. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/checks/skill_security.py +0 -0
  74. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/config.py +0 -0
  75. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/ecosystems/__init__.py +0 -0
  76. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/ecosystems/base.py +0 -0
  77. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/ecosystems/claude.py +0 -0
  78. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/ecosystems/codex.py +0 -0
  79. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/ecosystems/detect.py +0 -0
  80. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/ecosystems/gemini.py +0 -0
  81. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/ecosystems/opencode.py +0 -0
  82. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/ecosystems/registry.py +0 -0
  83. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/ecosystems/types.py +0 -0
  84. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/guard/__init__.py +0 -0
  85. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/guard/adapters/__init__.py +0 -0
  86. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/guard/adapters/base.py +0 -0
  87. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/guard/adapters/claude_code.py +0 -0
  88. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/guard/adapters/codex.py +0 -0
  89. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/guard/adapters/cursor.py +0 -0
  90. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/guard/adapters/gemini.py +0 -0
  91. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/guard/adapters/opencode.py +0 -0
  92. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/guard/config.py +0 -0
  93. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/guard/consumer/__init__.py +0 -0
  94. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/guard/consumer/service.py +0 -0
  95. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/guard/daemon/__init__.py +0 -0
  96. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/guard/daemon/server.py +0 -0
  97. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/guard/models.py +0 -0
  98. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/guard/policy/__init__.py +0 -0
  99. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/guard/policy/engine.py +0 -0
  100. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/guard/proxy/__init__.py +0 -0
  101. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/guard/proxy/remote.py +0 -0
  102. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/guard/proxy/stdio.py +0 -0
  103. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/guard/receipts/__init__.py +0 -0
  104. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/guard/receipts/manager.py +0 -0
  105. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/guard/runtime/__init__.py +0 -0
  106. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/guard/runtime/runner.py +0 -0
  107. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/guard/schemas/__init__.py +0 -0
  108. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/guard/schemas/consumer_mode.py +0 -0
  109. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/guard/shims.py +0 -0
  110. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/guard/store.py +0 -0
  111. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/integrations/__init__.py +0 -0
  112. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/integrations/cisco_skill_scanner.py +0 -0
  113. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/lint_fixes.py +0 -0
  114. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/marketplace_support.py +0 -0
  115. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/models.py +0 -0
  116. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/path_support.py +0 -0
  117. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/policy.py +0 -0
  118. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/quality_artifact.py +0 -0
  119. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/repo_detect.py +0 -0
  120. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/reporting.py +0 -0
  121. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/rules/__init__.py +0 -0
  122. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/rules/registry.py +0 -0
  123. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/rules/specs.py +0 -0
  124. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/scanner.py +0 -0
  125. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/submission.py +0 -0
  126. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/suppressions.py +0 -0
  127. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/trust_domain_scoring.py +0 -0
  128. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/trust_helpers.py +0 -0
  129. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/trust_mcp_scoring.py +0 -0
  130. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/trust_models.py +0 -0
  131. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/trust_plugin_scoring.py +0 -0
  132. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/trust_scoring.py +0 -0
  133. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/trust_skill_scoring.py +0 -0
  134. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/trust_specs.py +0 -0
  135. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/src/codex_plugin_scanner/verification.py +0 -0
  136. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/__init__.py +0 -0
  137. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/__init__.py +0 -0
  138. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/bad-plugin/.codex-plugin/plugin.json +0 -0
  139. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/bad-plugin/.mcp.json +0 -0
  140. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/bad-plugin/secrets.js +0 -0
  141. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/claude-plugin-good/.claude-plugin/plugin.json +0 -0
  142. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/claude-plugin-good/LICENSE +0 -0
  143. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/claude-plugin-good/README.md +0 -0
  144. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/claude-plugin-good/SECURITY.md +0 -0
  145. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/claude-plugin-good/hooks/hooks.json +0 -0
  146. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/claude-plugin-good/skills/example/SKILL.md +0 -0
  147. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/code-quality-bad/evil.js +0 -0
  148. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/code-quality-bad/inject.js +0 -0
  149. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/gemini-extension-good/GEMINI.md +0 -0
  150. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/gemini-extension-good/LICENSE +0 -0
  151. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/gemini-extension-good/README.md +0 -0
  152. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/gemini-extension-good/SECURITY.md +0 -0
  153. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/gemini-extension-good/commands/hello.toml +0 -0
  154. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/gemini-extension-good/gemini-extension.json +0 -0
  155. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/good-plugin/.codex-plugin/plugin.json +0 -0
  156. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/good-plugin/.codexignore +0 -0
  157. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/good-plugin/LICENSE +0 -0
  158. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/good-plugin/README.md +0 -0
  159. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/good-plugin/SECURITY.md +0 -0
  160. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/good-plugin/assets/icon.svg +0 -0
  161. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/good-plugin/assets/logo.svg +0 -0
  162. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/good-plugin/assets/screenshot.svg +0 -0
  163. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/good-plugin/skills/example/SKILL.md +0 -0
  164. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/malformed-json/.codex-plugin/plugin.json +0 -0
  165. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/minimal-plugin/.codex-plugin/plugin.json +0 -0
  166. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/missing-fields/.codex-plugin/plugin.json +0 -0
  167. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/mit-license/LICENSE +0 -0
  168. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/multi-ecosystem-repo/codex-plugin/.codex-plugin/plugin.json +0 -0
  169. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/multi-ecosystem-repo/codex-plugin/LICENSE +0 -0
  170. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/multi-ecosystem-repo/codex-plugin/README.md +0 -0
  171. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/multi-ecosystem-repo/codex-plugin/SECURITY.md +0 -0
  172. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/multi-ecosystem-repo/gemini-ext/README.md +0 -0
  173. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/multi-ecosystem-repo/gemini-ext/gemini-extension.json +0 -0
  174. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/multi-plugin-repo/.agents/plugins/marketplace.json +0 -0
  175. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/multi-plugin-repo/plugins/alpha-plugin/.codex-plugin/plugin.json +0 -0
  176. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/multi-plugin-repo/plugins/alpha-plugin/.codexignore +0 -0
  177. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/multi-plugin-repo/plugins/alpha-plugin/LICENSE +0 -0
  178. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/multi-plugin-repo/plugins/alpha-plugin/README.md +0 -0
  179. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/multi-plugin-repo/plugins/alpha-plugin/SECURITY.md +0 -0
  180. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/multi-plugin-repo/plugins/alpha-plugin/skills/example/SKILL.md +0 -0
  181. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/multi-plugin-repo/plugins/beta-plugin/.codex-plugin/plugin.json +0 -0
  182. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/multi-plugin-repo/plugins/beta-plugin/skills/example/SKILL.md +0 -0
  183. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/no-version/.codex-plugin/plugin.json +0 -0
  184. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/opencode-good/.opencode/commands/hello.md +0 -0
  185. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/opencode-good/.opencode/plugins/example.ts +0 -0
  186. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/opencode-good/LICENSE +0 -0
  187. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/opencode-good/README.md +0 -0
  188. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/opencode-good/SECURITY.md +0 -0
  189. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/opencode-good/opencode.jsonc +0 -0
  190. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/skills-missing-dir/.codex-plugin/plugin.json +0 -0
  191. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/skills-no-frontmatter/.codex-plugin/plugin.json +0 -0
  192. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/skills-no-frontmatter/skills/bad-skill/SKILL.md +0 -0
  193. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/with-marketplace/.codex-plugin/plugin.json +0 -0
  194. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/with-marketplace/marketplace-broken.json +0 -0
  195. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/fixtures/with-marketplace/marketplace.json +0 -0
  196. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/test-trust-scoring.py +0 -0
  197. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/test-trust-specs.py +0 -0
  198. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/test_action_runner.py +0 -0
  199. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/test_best_practices.py +0 -0
  200. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/test_cli.py +0 -0
  201. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/test_code_quality.py +0 -0
  202. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/test_config.py +0 -0
  203. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/test_coverage_remaining.py +0 -0
  204. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/test_edge_cases.py +0 -0
  205. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/test_final_coverage.py +0 -0
  206. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/test_guard_launch_env.py +0 -0
  207. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/test_guard_runtime.py +0 -0
  208. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/test_integration.py +0 -0
  209. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/test_lint_fixes.py +0 -0
  210. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/test_live_cisco_smoke.py +0 -0
  211. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/test_manifest.py +0 -0
  212. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/test_marketplace.py +0 -0
  213. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/test_operational_security.py +0 -0
  214. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/test_policy.py +0 -0
  215. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/test_quality_artifact.py +0 -0
  216. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/test_rule_registry.py +0 -0
  217. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/test_scanner.py +0 -0
  218. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/test_schema_contracts.py +0 -0
  219. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/test_security.py +0 -0
  220. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/test_security_ops.py +0 -0
  221. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/test_skill_security.py +0 -0
  222. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/test_submission.py +0 -0
  223. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/test_trust_specs.py +0 -0
  224. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/test_verification.py +0 -0
  225. {plugin_scanner-2.0.2 → plugin_scanner-2.0.3}/tests/test_versioning.py +0 -0
@@ -20,7 +20,7 @@ permissions:
20
20
  id-token: write
21
21
 
22
22
  concurrency:
23
- group: plugin-scanner-publish-${{ github.ref }}
23
+ group: hol-guard-publish-${{ github.ref }}
24
24
  cancel-in-progress: false
25
25
 
26
26
  jobs:
@@ -70,9 +70,15 @@ jobs:
70
70
  run: |
71
71
  sed -i "1,/^version = /{s/^version = .*/version = \"$VERSION\"/}" pyproject.toml
72
72
  sed -i "1,/^__version__ = /{s/^__version__ = .*/__version__ = \"$VERSION\"/}" src/codex_plugin_scanner/version.py
73
- - name: Build primary package (plugin-scanner)
73
+ - name: Build primary package (hol-guard)
74
74
  run: uv run --no-sync python -m build
75
- - name: Build legacy compatibility package (codex-plugin-scanner)
75
+ - name: Build compatibility package (plugin-scanner)
76
+ run: |
77
+ cp pyproject.toml pyproject.toml.bak
78
+ sed -i "1,/^name = /{s/^name = .*/name = \"plugin-scanner\"/}" pyproject.toml
79
+ uv run --no-sync python -m build
80
+ mv pyproject.toml.bak pyproject.toml
81
+ - name: Build compatibility package (codex-plugin-scanner)
76
82
  run: |
77
83
  cp pyproject.toml pyproject.toml.bak
78
84
  sed -i "1,/^name = /{s/^name = .*/name = \"codex-plugin-scanner\"/}" pyproject.toml
@@ -171,6 +177,10 @@ jobs:
171
177
  ${LOG}
172
178
 
173
179
  ### Installation
180
+ \`\`\`bash
181
+ uv tool install hol-guard==${VERSION}
182
+ \`\`\`
183
+
174
184
  \`\`\`bash
175
185
  uv tool install plugin-scanner==${VERSION}
176
186
  \`\`\`
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: plugin-scanner
3
- Version: 2.0.2
4
- Summary: Local Guard runtime plus security and publishability scanning for Codex, Claude, Cursor, Gemini, and OpenCode.
3
+ Version: 2.0.3
4
+ Summary: Protect local AI harnesses with HOL Guard and run scanner checks for Codex, Claude, Cursor, Gemini, and OpenCode.
5
5
  Project-URL: Homepage, https://github.com/hashgraph-online/ai-plugin-scanner
6
6
  Project-URL: Repository, https://github.com/hashgraph-online/ai-plugin-scanner
7
7
  Project-URL: Issues, https://github.com/hashgraph-online/ai-plugin-scanner/issues
@@ -33,12 +33,12 @@ Requires-Dist: pytest>=7.0; extra == 'dev'
33
33
  Requires-Dist: ruff>=0.4.0; extra == 'dev'
34
34
  Description-Content-Type: text/markdown
35
35
 
36
- # HOL Plugin Ecosystem Scanner
36
+ # HOL Guard
37
37
 
38
- [![PyPI Version](https://img.shields.io/pypi/v/plugin-scanner.svg?logo=pypi&logoColor=white&cacheSeconds=300)](https://pypi.org/project/plugin-scanner/)
39
- [![Legacy Namespace](https://img.shields.io/badge/legacy-codex--plugin--scanner-6b7280?logo=pypi&logoColor=white)](https://pypi.org/project/codex-plugin-scanner/)
40
- [![Python Versions](https://img.shields.io/pypi/pyversions/plugin-scanner)](https://pypi.org/project/plugin-scanner/)
41
- [![PyPI Downloads](https://img.shields.io/pypi/dm/plugin-scanner)](https://pypistats.org/packages/plugin-scanner)
38
+ [![PyPI Version](https://img.shields.io/pypi/v/hol-guard.svg?logo=pypi&logoColor=white&cacheSeconds=300)](https://pypi.org/project/hol-guard/)
39
+ [![Legacy Namespace](https://img.shields.io/badge/legacy-plugin--scanner_and_codex--plugin--scanner-6b7280?logo=pypi&logoColor=white)](https://pypi.org/project/plugin-scanner/)
40
+ [![Python Versions](https://img.shields.io/pypi/pyversions/hol-guard)](https://pypi.org/project/hol-guard/)
41
+ [![PyPI Downloads](https://img.shields.io/pypi/dm/hol-guard)](https://pypistats.org/packages/hol-guard)
42
42
  [![CI](https://github.com/hashgraph-online/ai-plugin-scanner/actions/workflows/ci.yml/badge.svg)](https://github.com/hashgraph-online/ai-plugin-scanner/actions/workflows/ci.yml)
43
43
  [![Publish](https://github.com/hashgraph-online/ai-plugin-scanner/actions/workflows/publish.yml/badge.svg)](https://github.com/hashgraph-online/ai-plugin-scanner/actions/workflows/publish.yml)
44
44
  [![Container Image](https://img.shields.io/badge/ghcr-ai--plugin--scanner-2496ED?logo=docker&logoColor=white)](https://github.com/hashgraph-online/ai-plugin-scanner/pkgs/container/ai-plugin-scanner)
@@ -47,52 +47,56 @@ Description-Content-Type: text/markdown
47
47
  [![GitHub Stars](https://img.shields.io/github/stars/hashgraph-online/ai-plugin-scanner?style=social)](https://github.com/hashgraph-online/ai-plugin-scanner/stargazers)
48
48
  [![Lint: ruff](https://img.shields.io/badge/lint-ruff-D7FF64.svg)](https://github.com/astral-sh/ruff)
49
49
 
50
- | ![Hashgraph Online Logo](https://hol.org/brand/Logo_Whole_Dark.png) | **HOL Guard for local harness protection, plus the scanner CI gate for plugin ecosystems**. Protect Codex, Claude Code, Cursor, Gemini, and OpenCode before local tools run, then lint locally, verify in CI, and ship publish-ready bundles for manifests, skills, MCP, and marketplace metadata.<br><br>Use Guard when you want a local safety loop. Use the scanner when you want publishing and CI confidence.<br><br>[PyPI Package (`plugin-scanner`)](https://pypi.org/project/plugin-scanner/)<br>[Legacy Namespace (`codex-plugin-scanner`)](https://pypi.org/project/codex-plugin-scanner/)<br>[HOL Plugin Registry](https://hol.org/registry/plugins)<br>[HOL GitHub Organization](https://github.com/hashgraph-online)<br>[Report an Issue](https://github.com/hashgraph-online/ai-plugin-scanner/issues) |
50
+ | ![Hashgraph Online Logo](https://hol.org/brand/Logo_Whole_Dark.png) | **Protect Codex, Claude Code, Cursor, Gemini, and OpenCode before local tools run.** HOL Guard watches the tools wired into your harness, shows you what changed, and records what you approved or blocked. The scanner commands stay available for teams that also want linting and CI checks for plugin, skill, MCP, and marketplace packages.<br><br>Start with `hol-guard` if you want local protection. Add the scanner commands later if you also publish or review packages in CI.<br><br>[PyPI Package (`hol-guard`)](https://pypi.org/project/hol-guard/)<br>[Legacy Namespace (`plugin-scanner`)](https://pypi.org/project/plugin-scanner/)<br>[Legacy Namespace (`codex-plugin-scanner`)](https://pypi.org/project/codex-plugin-scanner/)<br>[HOL Plugin Registry](https://hol.org/registry/plugins)<br>[HOL GitHub Organization](https://github.com/hashgraph-online)<br>[Report an Issue](https://github.com/hashgraph-online/ai-plugin-scanner/issues) |
51
51
  | :--- | :--- |
52
52
 
53
- ## Guard Start In 60 Seconds
53
+ ## Protect A Harness In 60 Seconds
54
54
 
55
55
  ```bash
56
- # See what Guard can protect on this machine
57
- pipx run plugin-guard guard start
56
+ # See what Guard found on this machine
57
+ pipx run hol-guard start
58
58
 
59
59
  # Install Guard in front of Codex
60
- pipx run plugin-guard guard install codex
60
+ pipx run hol-guard install codex
61
61
 
62
- # Review the current tool state before launch
63
- pipx run plugin-guard guard run codex
62
+ # Record the current tool state once
63
+ pipx run hol-guard run codex --dry-run
64
64
 
65
- # Inspect local receipts later
66
- pipx run plugin-guard guard receipts
65
+ # Launch through Guard after that
66
+ pipx run hol-guard run codex
67
+
68
+ # Check what Guard approved or blocked
69
+ pipx run hol-guard receipts
67
70
  ```
68
71
 
69
- Guard is local-first:
72
+ How Guard works:
70
73
 
71
- 1. detect your harnesses
72
- 2. install a Guard launcher
73
- 3. run the harness through Guard
74
- 4. approve or block changes
75
- 5. inspect receipts locally
76
- 6. connect sync only if you want shared history later
74
+ 1. find the harnesses on your machine
75
+ 2. install a Guard launcher in front of the one you use
76
+ 3. record the current tool state once
77
+ 4. let Guard stop and review new or changed tools before launch
78
+ 5. check receipts locally
79
+ 6. connect sync later only if you want shared history
77
80
 
78
- Guard commands that matter most:
81
+ Start here if you are trying to stay safe inside a harness:
79
82
 
80
- - `plugin-scanner guard start` for the first-run path
81
- - `plugin-scanner guard status` for the current protection state
82
- - `plugin-scanner guard install <harness>` to create a local Guard launcher
83
- - `plugin-scanner guard run <harness> --dry-run` to record the current state before launch
84
- - `plugin-scanner guard run <harness>` to review and approve changed tools before launch
85
- - `plugin-scanner guard diff <harness>` when Guard says something changed
86
- - `plugin-scanner guard receipts` for local history
83
+ - `hol-guard start` shows the first steps
84
+ - `hol-guard status` shows what Guard is watching now
85
+ - `hol-guard install <harness>` creates the launcher
86
+ - `hol-guard run <harness> --dry-run` records the current state
87
+ - `hol-guard run <harness>` reviews changes before launch
88
+ - `hol-guard diff <harness>` shows what changed
89
+ - `hol-guard receipts` shows local history
87
90
 
88
91
  See [docs/guard/get-started.md](docs/guard/get-started.md) for the full local flow.
89
92
 
90
- ## Scanner Start In 30 Seconds
93
+ ## Use The Scanner In CI
91
94
 
92
95
  ```bash
93
- # Local preflight
94
- pipx run plugin-scanner lint .
95
- pipx run plugin-scanner verify .
96
+ # Install the package once, then use the scanner commands in your shell
97
+ pipx install hol-guard
98
+ plugin-scanner lint .
99
+ plugin-scanner verify .
96
100
  ```
97
101
 
98
102
  ```yaml
@@ -107,38 +111,30 @@ pipx run plugin-scanner verify .
107
111
 
108
112
  If your repository uses a Codex marketplace root like `.agents/plugins/marketplace.json`, keep `plugin_dir: "."`. The scanner will discover local `./plugins/...` entries automatically, scan each local plugin manifest, and skip remote marketplace entries instead of treating the repo root as a single plugin.
109
113
 
110
- ## Two Product Modes
111
-
112
- ### HOL Guard
113
-
114
- Use Guard when the problem is local runtime safety inside a harness:
114
+ ## Start With Guard, Add CI Later
115
115
 
116
- - a new MCP server showed up in local config
117
- - an existing tool changed after you trusted it
118
- - you want receipts for what was approved or blocked
119
- - you want to review changes before Codex, Claude Code, Cursor, Gemini, or OpenCode launches
116
+ If you use Codex, Claude Code, Cursor, Gemini, or OpenCode every day, start with Guard.
120
117
 
121
- ### Scanner CI Gate
118
+ - Guard is the part that protects your local harness before tools run.
119
+ - It helps when a new MCP server appears, when a tool changes after you trusted it, or when you want a receipt for what was approved or blocked.
122
120
 
123
- Use the scanner when the problem is authoring, CI, and publish readiness:
121
+ If you publish plugins, skills, or marketplace packages, add the scanner in CI too.
124
122
 
125
- - lint manifests and metadata
126
- - verify runtime and install surfaces
127
- - block PRs with policy gates
128
- - emit artifacts before submission or publishing
123
+ - The scanner checks manifests, metadata, runtime surfaces, and policy rules before a release or CI gate passes.
124
+ - It is the publishing and repo review side of this package, not the first thing a local Guard user needs to learn.
129
125
 
130
126
  ## Use Scanner After `$plugin-creator`
131
127
 
132
- `plugin-scanner` is designed as the quality gate between plugin creation and distribution:
128
+ If you are building and shipping packages, the scanner fits after `$plugin-creator`:
133
129
 
134
130
  1. Scaffold with `$plugin-creator`.
135
131
  2. Run `lint` locally to catch structure, metadata, and security issues early.
136
132
  3. Run `verify` in CI to block regressions and enforce quality policy.
137
133
  4. Ship or submit with confidence, backed by scanner artifacts and trust signals.
138
134
 
139
- The score remains available as a trust and triage signal, but the primary workflow is **preflight + CI gating + publish readiness**.
135
+ The score stays available as a trust and triage signal, but the day-to-day workflow is simple: check locally, verify in CI, then release.
140
136
 
141
- ## Trust Score Provenance
137
+ ## How Trust Scoring Works
142
138
 
143
139
  The scanner now emits explicit trust provenance alongside the quality grade:
144
140
 
@@ -168,21 +164,23 @@ pytest -q
168
164
  ## Install
169
165
 
170
166
  ```bash
171
- pip install plugin-scanner
167
+ pip install hol-guard
172
168
  ```
173
169
 
174
170
  Cisco-backed skill scanning is optional:
175
171
 
176
172
  ```bash
177
- pip install "plugin-scanner[cisco]"
173
+ pip install "hol-guard[cisco]"
178
174
  ```
179
175
 
180
176
  The `cisco` extra installs the published `cisco-ai-skill-scanner` package from PyPI so the scanner remains publishable on PyPI and the optional Cisco analysis path works with standard package metadata.
181
177
 
182
- You can also run the scanner without a local install:
178
+ You can also install once and use both Guard and scanner commands:
183
179
 
184
180
  ```bash
185
- pipx run plugin-scanner ./my-plugin
181
+ pipx install hol-guard
182
+ hol-guard start
183
+ plugin-scanner ./my-plugin
186
184
  ```
187
185
 
188
186
  Container-first environments can use the published image instead:
@@ -197,8 +195,16 @@ docker run --rm \
197
195
  Backward compatibility remains available for teams still pinned to the historical package namespace:
198
196
 
199
197
  ```bash
198
+ pip install plugin-scanner
200
199
  pip install codex-plugin-scanner
201
- pipx run codex-plugin-scanner verify .
200
+ ```
201
+
202
+ Compatibility command names also stay available:
203
+
204
+ ```bash
205
+ plugin-guard start
206
+ plugin-scanner verify .
207
+ codex-plugin-scanner verify .
202
208
  ```
203
209
 
204
210
  ## Ecosystem Support
@@ -212,11 +218,11 @@ pipx run codex-plugin-scanner verify .
212
218
 
213
219
  Use `--ecosystem auto` (default) to scan all detected packages in a repository, or select a single ecosystem explicitly.
214
220
 
215
- ## What The Scanner Covers
221
+ ## What The Scanner Checks
216
222
 
217
223
  `plugin-scanner` supports a full quality suite:
218
224
 
219
- - `scan` for full-surface security and publishability analysis
225
+ - `scan` for full-surface security and release analysis
220
226
  - `lint` for rule-oriented authoring feedback
221
227
  - `verify` for runtime and install-surface readiness checks
222
228
  - `submit` for artifact-backed submission gating
@@ -1,9 +1,9 @@
1
- # HOL Plugin Ecosystem Scanner
1
+ # HOL Guard
2
2
 
3
- [![PyPI Version](https://img.shields.io/pypi/v/plugin-scanner.svg?logo=pypi&logoColor=white&cacheSeconds=300)](https://pypi.org/project/plugin-scanner/)
4
- [![Legacy Namespace](https://img.shields.io/badge/legacy-codex--plugin--scanner-6b7280?logo=pypi&logoColor=white)](https://pypi.org/project/codex-plugin-scanner/)
5
- [![Python Versions](https://img.shields.io/pypi/pyversions/plugin-scanner)](https://pypi.org/project/plugin-scanner/)
6
- [![PyPI Downloads](https://img.shields.io/pypi/dm/plugin-scanner)](https://pypistats.org/packages/plugin-scanner)
3
+ [![PyPI Version](https://img.shields.io/pypi/v/hol-guard.svg?logo=pypi&logoColor=white&cacheSeconds=300)](https://pypi.org/project/hol-guard/)
4
+ [![Legacy Namespace](https://img.shields.io/badge/legacy-plugin--scanner_and_codex--plugin--scanner-6b7280?logo=pypi&logoColor=white)](https://pypi.org/project/plugin-scanner/)
5
+ [![Python Versions](https://img.shields.io/pypi/pyversions/hol-guard)](https://pypi.org/project/hol-guard/)
6
+ [![PyPI Downloads](https://img.shields.io/pypi/dm/hol-guard)](https://pypistats.org/packages/hol-guard)
7
7
  [![CI](https://github.com/hashgraph-online/ai-plugin-scanner/actions/workflows/ci.yml/badge.svg)](https://github.com/hashgraph-online/ai-plugin-scanner/actions/workflows/ci.yml)
8
8
  [![Publish](https://github.com/hashgraph-online/ai-plugin-scanner/actions/workflows/publish.yml/badge.svg)](https://github.com/hashgraph-online/ai-plugin-scanner/actions/workflows/publish.yml)
9
9
  [![Container Image](https://img.shields.io/badge/ghcr-ai--plugin--scanner-2496ED?logo=docker&logoColor=white)](https://github.com/hashgraph-online/ai-plugin-scanner/pkgs/container/ai-plugin-scanner)
@@ -12,52 +12,56 @@
12
12
  [![GitHub Stars](https://img.shields.io/github/stars/hashgraph-online/ai-plugin-scanner?style=social)](https://github.com/hashgraph-online/ai-plugin-scanner/stargazers)
13
13
  [![Lint: ruff](https://img.shields.io/badge/lint-ruff-D7FF64.svg)](https://github.com/astral-sh/ruff)
14
14
 
15
- | ![Hashgraph Online Logo](https://hol.org/brand/Logo_Whole_Dark.png) | **HOL Guard for local harness protection, plus the scanner CI gate for plugin ecosystems**. Protect Codex, Claude Code, Cursor, Gemini, and OpenCode before local tools run, then lint locally, verify in CI, and ship publish-ready bundles for manifests, skills, MCP, and marketplace metadata.<br><br>Use Guard when you want a local safety loop. Use the scanner when you want publishing and CI confidence.<br><br>[PyPI Package (`plugin-scanner`)](https://pypi.org/project/plugin-scanner/)<br>[Legacy Namespace (`codex-plugin-scanner`)](https://pypi.org/project/codex-plugin-scanner/)<br>[HOL Plugin Registry](https://hol.org/registry/plugins)<br>[HOL GitHub Organization](https://github.com/hashgraph-online)<br>[Report an Issue](https://github.com/hashgraph-online/ai-plugin-scanner/issues) |
15
+ | ![Hashgraph Online Logo](https://hol.org/brand/Logo_Whole_Dark.png) | **Protect Codex, Claude Code, Cursor, Gemini, and OpenCode before local tools run.** HOL Guard watches the tools wired into your harness, shows you what changed, and records what you approved or blocked. The scanner commands stay available for teams that also want linting and CI checks for plugin, skill, MCP, and marketplace packages.<br><br>Start with `hol-guard` if you want local protection. Add the scanner commands later if you also publish or review packages in CI.<br><br>[PyPI Package (`hol-guard`)](https://pypi.org/project/hol-guard/)<br>[Legacy Namespace (`plugin-scanner`)](https://pypi.org/project/plugin-scanner/)<br>[Legacy Namespace (`codex-plugin-scanner`)](https://pypi.org/project/codex-plugin-scanner/)<br>[HOL Plugin Registry](https://hol.org/registry/plugins)<br>[HOL GitHub Organization](https://github.com/hashgraph-online)<br>[Report an Issue](https://github.com/hashgraph-online/ai-plugin-scanner/issues) |
16
16
  | :--- | :--- |
17
17
 
18
- ## Guard Start In 60 Seconds
18
+ ## Protect A Harness In 60 Seconds
19
19
 
20
20
  ```bash
21
- # See what Guard can protect on this machine
22
- pipx run plugin-guard guard start
21
+ # See what Guard found on this machine
22
+ pipx run hol-guard start
23
23
 
24
24
  # Install Guard in front of Codex
25
- pipx run plugin-guard guard install codex
25
+ pipx run hol-guard install codex
26
26
 
27
- # Review the current tool state before launch
28
- pipx run plugin-guard guard run codex
27
+ # Record the current tool state once
28
+ pipx run hol-guard run codex --dry-run
29
29
 
30
- # Inspect local receipts later
31
- pipx run plugin-guard guard receipts
30
+ # Launch through Guard after that
31
+ pipx run hol-guard run codex
32
+
33
+ # Check what Guard approved or blocked
34
+ pipx run hol-guard receipts
32
35
  ```
33
36
 
34
- Guard is local-first:
37
+ How Guard works:
35
38
 
36
- 1. detect your harnesses
37
- 2. install a Guard launcher
38
- 3. run the harness through Guard
39
- 4. approve or block changes
40
- 5. inspect receipts locally
41
- 6. connect sync only if you want shared history later
39
+ 1. find the harnesses on your machine
40
+ 2. install a Guard launcher in front of the one you use
41
+ 3. record the current tool state once
42
+ 4. let Guard stop and review new or changed tools before launch
43
+ 5. check receipts locally
44
+ 6. connect sync later only if you want shared history
42
45
 
43
- Guard commands that matter most:
46
+ Start here if you are trying to stay safe inside a harness:
44
47
 
45
- - `plugin-scanner guard start` for the first-run path
46
- - `plugin-scanner guard status` for the current protection state
47
- - `plugin-scanner guard install <harness>` to create a local Guard launcher
48
- - `plugin-scanner guard run <harness> --dry-run` to record the current state before launch
49
- - `plugin-scanner guard run <harness>` to review and approve changed tools before launch
50
- - `plugin-scanner guard diff <harness>` when Guard says something changed
51
- - `plugin-scanner guard receipts` for local history
48
+ - `hol-guard start` shows the first steps
49
+ - `hol-guard status` shows what Guard is watching now
50
+ - `hol-guard install <harness>` creates the launcher
51
+ - `hol-guard run <harness> --dry-run` records the current state
52
+ - `hol-guard run <harness>` reviews changes before launch
53
+ - `hol-guard diff <harness>` shows what changed
54
+ - `hol-guard receipts` shows local history
52
55
 
53
56
  See [docs/guard/get-started.md](docs/guard/get-started.md) for the full local flow.
54
57
 
55
- ## Scanner Start In 30 Seconds
58
+ ## Use The Scanner In CI
56
59
 
57
60
  ```bash
58
- # Local preflight
59
- pipx run plugin-scanner lint .
60
- pipx run plugin-scanner verify .
61
+ # Install the package once, then use the scanner commands in your shell
62
+ pipx install hol-guard
63
+ plugin-scanner lint .
64
+ plugin-scanner verify .
61
65
  ```
62
66
 
63
67
  ```yaml
@@ -72,38 +76,30 @@ pipx run plugin-scanner verify .
72
76
 
73
77
  If your repository uses a Codex marketplace root like `.agents/plugins/marketplace.json`, keep `plugin_dir: "."`. The scanner will discover local `./plugins/...` entries automatically, scan each local plugin manifest, and skip remote marketplace entries instead of treating the repo root as a single plugin.
74
78
 
75
- ## Two Product Modes
76
-
77
- ### HOL Guard
78
-
79
- Use Guard when the problem is local runtime safety inside a harness:
79
+ ## Start With Guard, Add CI Later
80
80
 
81
- - a new MCP server showed up in local config
82
- - an existing tool changed after you trusted it
83
- - you want receipts for what was approved or blocked
84
- - you want to review changes before Codex, Claude Code, Cursor, Gemini, or OpenCode launches
81
+ If you use Codex, Claude Code, Cursor, Gemini, or OpenCode every day, start with Guard.
85
82
 
86
- ### Scanner CI Gate
83
+ - Guard is the part that protects your local harness before tools run.
84
+ - It helps when a new MCP server appears, when a tool changes after you trusted it, or when you want a receipt for what was approved or blocked.
87
85
 
88
- Use the scanner when the problem is authoring, CI, and publish readiness:
86
+ If you publish plugins, skills, or marketplace packages, add the scanner in CI too.
89
87
 
90
- - lint manifests and metadata
91
- - verify runtime and install surfaces
92
- - block PRs with policy gates
93
- - emit artifacts before submission or publishing
88
+ - The scanner checks manifests, metadata, runtime surfaces, and policy rules before a release or CI gate passes.
89
+ - It is the publishing and repo review side of this package, not the first thing a local Guard user needs to learn.
94
90
 
95
91
  ## Use Scanner After `$plugin-creator`
96
92
 
97
- `plugin-scanner` is designed as the quality gate between plugin creation and distribution:
93
+ If you are building and shipping packages, the scanner fits after `$plugin-creator`:
98
94
 
99
95
  1. Scaffold with `$plugin-creator`.
100
96
  2. Run `lint` locally to catch structure, metadata, and security issues early.
101
97
  3. Run `verify` in CI to block regressions and enforce quality policy.
102
98
  4. Ship or submit with confidence, backed by scanner artifacts and trust signals.
103
99
 
104
- The score remains available as a trust and triage signal, but the primary workflow is **preflight + CI gating + publish readiness**.
100
+ The score stays available as a trust and triage signal, but the day-to-day workflow is simple: check locally, verify in CI, then release.
105
101
 
106
- ## Trust Score Provenance
102
+ ## How Trust Scoring Works
107
103
 
108
104
  The scanner now emits explicit trust provenance alongside the quality grade:
109
105
 
@@ -133,21 +129,23 @@ pytest -q
133
129
  ## Install
134
130
 
135
131
  ```bash
136
- pip install plugin-scanner
132
+ pip install hol-guard
137
133
  ```
138
134
 
139
135
  Cisco-backed skill scanning is optional:
140
136
 
141
137
  ```bash
142
- pip install "plugin-scanner[cisco]"
138
+ pip install "hol-guard[cisco]"
143
139
  ```
144
140
 
145
141
  The `cisco` extra installs the published `cisco-ai-skill-scanner` package from PyPI so the scanner remains publishable on PyPI and the optional Cisco analysis path works with standard package metadata.
146
142
 
147
- You can also run the scanner without a local install:
143
+ You can also install once and use both Guard and scanner commands:
148
144
 
149
145
  ```bash
150
- pipx run plugin-scanner ./my-plugin
146
+ pipx install hol-guard
147
+ hol-guard start
148
+ plugin-scanner ./my-plugin
151
149
  ```
152
150
 
153
151
  Container-first environments can use the published image instead:
@@ -162,8 +160,16 @@ docker run --rm \
162
160
  Backward compatibility remains available for teams still pinned to the historical package namespace:
163
161
 
164
162
  ```bash
163
+ pip install plugin-scanner
165
164
  pip install codex-plugin-scanner
166
- pipx run codex-plugin-scanner verify .
165
+ ```
166
+
167
+ Compatibility command names also stay available:
168
+
169
+ ```bash
170
+ plugin-guard start
171
+ plugin-scanner verify .
172
+ codex-plugin-scanner verify .
167
173
  ```
168
174
 
169
175
  ## Ecosystem Support
@@ -177,11 +183,11 @@ pipx run codex-plugin-scanner verify .
177
183
 
178
184
  Use `--ecosystem auto` (default) to scan all detected packages in a repository, or select a single ecosystem explicitly.
179
185
 
180
- ## What The Scanner Covers
186
+ ## What The Scanner Checks
181
187
 
182
188
  `plugin-scanner` supports a full quality suite:
183
189
 
184
- - `scan` for full-surface security and publishability analysis
190
+ - `scan` for full-surface security and release analysis
185
191
  - `lint` for rule-oriented authoring feedback
186
192
  - `verify` for runtime and install-surface readiness checks
187
193
  - `submit` for artifact-backed submission gating
@@ -24,10 +24,10 @@ Guard evaluates local artifacts in this order:
24
24
 
25
25
  The local product loop is:
26
26
 
27
- 1. `guard start` detects supported harnesses and suggests the next step
28
- 2. `guard install <harness>` creates a local launcher shim
29
- 3. `guard run <harness>` evaluates changes before the harness launches
30
- 4. `guard receipts` and `guard status` let users inspect local decisions
31
- 5. `guard login` and `guard sync` stay optional
27
+ 1. `hol-guard start` detects supported harnesses and suggests the next step
28
+ 2. `hol-guard install <harness>` creates a local launcher shim
29
+ 3. `hol-guard run <harness>` evaluates changes before the harness launches
30
+ 4. `hol-guard receipts` and `hol-guard status` let users inspect local decisions
31
+ 5. `hol-guard login` and `hol-guard sync` stay optional
32
32
 
33
33
  Wrapper mode is still the core execution strategy in this phase. Config mutation is limited to the Claude Code hook helper, where Guard can add and remove its own hook entry in workspace-local settings.
@@ -1,56 +1,56 @@
1
1
  # Guard Get Started
2
2
 
3
- Guard is the local product inside `plugin-scanner`.
4
- If you want the shortest entrypoint, install and run the dedicated `plugin-guard` console script.
3
+ Guard ships as the `hol-guard` package and command.
4
+ The scanner commands stay available in the same install for CI and package checks.
5
5
 
6
6
  Use it when you want to protect a harness before local MCP servers, skills, hooks, or plugin surfaces run.
7
7
 
8
- ## The local loop
8
+ ## The everyday flow
9
9
 
10
- 1. Detect your harnesses:
10
+ 1. See what Guard found:
11
11
 
12
12
  ```bash
13
- plugin-guard guard start
13
+ hol-guard start
14
14
  ```
15
15
 
16
16
  2. Install Guard in front of the harness you use most:
17
17
 
18
18
  ```bash
19
- plugin-guard guard install codex
19
+ hol-guard install codex
20
20
  ```
21
21
 
22
22
  3. Run one dry pass so Guard records the current state:
23
23
 
24
24
  ```bash
25
- plugin-guard guard run codex --dry-run
25
+ hol-guard run codex --dry-run
26
26
  ```
27
27
 
28
- 4. Launch through Guard after that. Guard will prompt you if a tool is new or changed:
28
+ 4. Launch through Guard after that. Guard will stop and ask if a tool is new or changed:
29
29
 
30
30
  ```bash
31
- plugin-guard guard run codex
31
+ hol-guard run codex
32
32
  ```
33
33
 
34
34
  5. Review changes when Guard blocks or asks for another look:
35
35
 
36
36
  ```bash
37
- plugin-scanner guard diff codex
38
- plugin-scanner guard allow codex --scope artifact --artifact-id codex:project:workspace_skill
39
- plugin-scanner guard deny codex --scope artifact --artifact-id codex:project:workspace_skill
37
+ hol-guard diff codex
38
+ hol-guard allow codex --scope artifact --artifact-id codex:project:workspace_skill
39
+ hol-guard deny codex --scope artifact --artifact-id codex:project:workspace_skill
40
40
  ```
41
41
 
42
- 6. Inspect receipts:
42
+ 6. Check receipts and current status:
43
43
 
44
44
  ```bash
45
- plugin-guard guard receipts
46
- plugin-guard guard status
45
+ hol-guard receipts
46
+ hol-guard status
47
47
  ```
48
48
 
49
- 7. Connect sync only if you want shared history later:
49
+ 7. Sign in later only if you want shared history:
50
50
 
51
51
  ```bash
52
- plugin-scanner guard login --sync-url <url> --token <token>
53
- plugin-scanner guard sync
52
+ hol-guard login --sync-url <url> --token <token>
53
+ hol-guard sync
54
54
  ```
55
55
 
56
56
  ## What `install` does
@@ -72,11 +72,11 @@ Use these local repos to prove Guard against real first-party surfaces:
72
72
  Suggested local validation:
73
73
 
74
74
  ```bash
75
- plugin-scanner guard detect codex --json
76
- plugin-scanner guard install codex
77
- plugin-scanner guard status
78
- plugin-scanner guard run codex --dry-run
79
- plugin-scanner guard receipts
75
+ hol-guard detect codex --json
76
+ hol-guard install codex
77
+ hol-guard status
78
+ hol-guard run codex --dry-run
79
+ hol-guard receipts
80
80
  ```
81
81
 
82
82
  For a real Codex canary, point `~/.codex/config.toml` or `<workspace>/.codex/config.toml` at a local `hashnet-mcp` command, then repeat the Guard loop above.
@@ -1,6 +1,6 @@
1
- # Local vs Cloud
1
+ # Works Locally First
2
2
 
3
- Guard is local-first.
3
+ Guard works on your machine before you sign in anywhere.
4
4
 
5
5
  Local features available without sign-in:
6
6
 
@@ -19,4 +19,4 @@ Optional cloud features:
19
19
  - billing and entitlements
20
20
  - shared team policy
21
21
 
22
- The local runtime does not require any hosted service. `guard login` and `guard sync` exist to layer optional cloud features on top of the local product, not to unlock the core safety workflow.
22
+ The local runtime does not require any hosted service. `hol-guard login` and `hol-guard sync` add optional cloud features later. They do not unlock the core safety workflow.
@@ -3,22 +3,22 @@
3
3
  Automated coverage in this phase includes:
4
4
 
5
5
  - Guard CLI behavior tests for detect, scan, run, diff, receipts, install, uninstall, login, and sync
6
- - Guard product-flow tests for `guard start`, `guard status`, and launcher shim creation
6
+ - Guard product-flow tests for `hol-guard start`, `hol-guard status`, and launcher shim creation
7
7
  - SQLite persistence through real command execution in temporary homes and workspaces
8
8
  - consumer-mode JSON contract generation against scanner fixtures
9
9
  - local HTTP sync against a live in-process server instead of mocked transport
10
10
 
11
11
  Manual verification should include:
12
12
 
13
- - `guard start`
14
- - `guard status`
15
- - `guard detect codex --json`
16
- - `guard detect cursor --json`
17
- - `guard detect gemini --json`
18
- - `guard detect opencode --json`
19
- - `guard install codex`
20
- - `guard run codex --dry-run --default-action allow --json`
21
- - `guard receipts`
13
+ - `hol-guard start`
14
+ - `hol-guard status`
15
+ - `hol-guard detect codex --json`
16
+ - `hol-guard detect cursor --json`
17
+ - `hol-guard detect gemini --json`
18
+ - `hol-guard detect opencode --json`
19
+ - `hol-guard install codex`
20
+ - `hol-guard run codex --dry-run --default-action allow --json`
21
+ - `hol-guard receipts`
22
22
  - `codex mcp list`
23
23
  - `cursor-agent mcp list`
24
24
  - `gemini --help`