boost-skill-cli 1.2.36__tar.gz → 1.2.38__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 (799) hide show
  1. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/.vale/styles/config/vocabularies/boost/accept.txt +2 -0
  2. {boost_skill_cli-1.2.36/boost_skill_cli.egg-info → boost_skill_cli-1.2.38}/PKG-INFO +1 -1
  3. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/_version.py +2 -2
  4. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/cli.py +6 -1
  5. boost_skill_cli-1.2.38/boost_cli/cliparse.py +66 -0
  6. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/commands/bmad.py +110 -22
  7. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/commands/discovery.py +1 -1
  8. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/commands/info.py +21 -8
  9. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/commands/intelligence.py +6 -3
  10. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/commands/team.py +15 -7
  11. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/output.py +45 -7
  12. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38/boost_skill_cli.egg-info}/PKG-INFO +1 -1
  13. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_skill_cli.egg-info/SOURCES.txt +3 -0
  14. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/bmad.md +30 -3
  15. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/commands.html +8 -8
  16. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/design-roadmap.html +16 -2
  17. boost_skill_cli-1.2.38/docs/roadmap/items/BOOST-D27.md +22 -0
  18. boost_skill_cli-1.2.38/docs/roadmap/items/bmad-hooks-all-hosts.md +42 -0
  19. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap.html +41 -2
  20. boost_skill_cli-1.2.38/tests/functional/test_bmad_all_hosts.py +124 -0
  21. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/functional/test_cli_bmad.py +15 -0
  22. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/functional/test_cli_discovery.py +10 -0
  23. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/functional/test_cli_info.py +85 -0
  24. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/functional/test_cli_intelligence.py +21 -0
  25. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/functional/test_cli_team.py +41 -0
  26. boost_skill_cli-1.2.38/tests/unit/test_cliparse.py +92 -0
  27. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_errors_and_cli_table.py +21 -0
  28. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_output.py +113 -0
  29. boost_skill_cli-1.2.36/boost_cli/cliparse.py +0 -33
  30. boost_skill_cli-1.2.36/tests/unit/test_cliparse.py +0 -45
  31. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/.gitattributes +0 -0
  32. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/.gitignore +0 -0
  33. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/.gitleaks.toml +0 -0
  34. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/.htmlvalidate.json +0 -0
  35. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/.lighthouserc.json +0 -0
  36. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/.lycheeignore +0 -0
  37. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/.markdownlint-cli2.jsonc +0 -0
  38. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/.pre-commit-config.yaml +0 -0
  39. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/.stylelintrc.json +0 -0
  40. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/.vale/styles/boost/AIWriting.yml +0 -0
  41. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/.vale/styles/boost/Terminology.yml +0 -0
  42. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/.vale.ini +0 -0
  43. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/CLAUDE.md +0 -0
  44. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/CODE_OF_CONDUCT.md +0 -0
  45. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/CONTRIBUTING.md +0 -0
  46. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/DCO +0 -0
  47. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/GOVERNANCE.md +0 -0
  48. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/LICENSE +0 -0
  49. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/MAINTAINERS.md +0 -0
  50. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/MANIFEST.in +0 -0
  51. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/Makefile +0 -0
  52. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/README.md +0 -0
  53. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/SECURITY.md +0 -0
  54. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/SUPPORT.md +0 -0
  55. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost +0 -0
  56. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/__init__.py +0 -0
  57. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/__main__.py +0 -0
  58. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/commands/__init__.py +0 -0
  59. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/commands/_common.py +0 -0
  60. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/commands/configuration.py +0 -0
  61. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/commands/hooks.py +0 -0
  62. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/commands/pkg.py +0 -0
  63. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/commands/quality.py +0 -0
  64. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/commands/run.py +0 -0
  65. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/commands/safety.py +0 -0
  66. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/commands/taps.py +0 -0
  67. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/__init__.py +0 -0
  68. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/adapters.py +0 -0
  69. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/agents.py +0 -0
  70. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/ai.py +0 -0
  71. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/bmad.py +0 -0
  72. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/bootstrap.py +0 -0
  73. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/browse.py +0 -0
  74. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/builtin.py +0 -0
  75. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/capabilities.py +0 -0
  76. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/catalog.py +0 -0
  77. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/catalogbundle.py +0 -0
  78. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/chat.py +0 -0
  79. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/claude_settings.py +0 -0
  80. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/complete.py +0 -0
  81. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/config.py +0 -0
  82. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/dense.py +0 -0
  83. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/ed25519.py +0 -0
  84. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/embed.py +0 -0
  85. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/faithfulness.py +0 -0
  86. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/frontmatter.py +0 -0
  87. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/gitutil.py +0 -0
  88. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/hookhost.py +0 -0
  89. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/imperative.py +0 -0
  90. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/injectscan.py +0 -0
  91. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/installscan.py +0 -0
  92. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/integrity.py +0 -0
  93. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/journal.py +0 -0
  94. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/localembed.py +0 -0
  95. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/lockfile.py +0 -0
  96. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/logs.py +0 -0
  97. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/mcp.py +0 -0
  98. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/mcpdecl.py +0 -0
  99. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/mcphost.py +0 -0
  100. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/minisign.py +0 -0
  101. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/nethttp.py +0 -0
  102. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/paths.py +0 -0
  103. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/policy.py +0 -0
  104. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/projectlock.py +0 -0
  105. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/provenance.py +0 -0
  106. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/rag.py +0 -0
  107. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/registry.py +0 -0
  108. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/resolve.py +0 -0
  109. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/rules.py +0 -0
  110. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/scopes.py +0 -0
  111. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/secretscan.py +0 -0
  112. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/selfupdate.py +0 -0
  113. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/serve.py +0 -0
  114. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/stackprobe.py +0 -0
  115. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/staleness.py +0 -0
  116. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/store.py +0 -0
  117. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/trustaudit.py +0 -0
  118. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/typosquat.py +0 -0
  119. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/updatediff.py +0 -0
  120. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/util.py +0 -0
  121. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/core/workflows.py +0 -0
  122. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/data/registries.json +0 -0
  123. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/data/rules/boost-first.mdc +0 -0
  124. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/errors.py +0 -0
  125. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_cli/spin.py +0 -0
  126. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_langchain/__init__.py +0 -0
  127. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_langchain/_compat.py +0 -0
  128. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_langchain/graph.py +0 -0
  129. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_langchain/loader.py +0 -0
  130. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_langchain/py.typed +0 -0
  131. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_langchain/retriever.py +0 -0
  132. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  133. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  134. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_skill_cli.egg-info/requires.txt +0 -0
  135. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/boost_skill_cli.egg-info/top_level.txt +0 -0
  136. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/codecov.yml +0 -0
  137. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/.claude/settings.local.json +0 -0
  138. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/DEBUGGING.md +0 -0
  139. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/adapters.html +0 -0
  140. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/architecture/README.md +0 -0
  141. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/architecture/c4-components-core.md +0 -0
  142. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/architecture/c4-containers.md +0 -0
  143. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/architecture/c4-context.md +0 -0
  144. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/architecture/c4-dynamic-install.md +0 -0
  145. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/carousel/gifs/distill.gif +0 -0
  146. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/carousel/gifs/doctor.gif +0 -0
  147. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/carousel/gifs/explain.gif +0 -0
  148. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/carousel/gifs/hooks.gif +0 -0
  149. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/carousel/gifs/install.gif +0 -0
  150. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/carousel/gifs/pulse.gif +0 -0
  151. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/carousel/gifs/search.gif +0 -0
  152. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/carousel/gifs/tap.gif +0 -0
  153. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/carousel/tapes/distill.tape +0 -0
  154. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/carousel/tapes/doctor.tape +0 -0
  155. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/carousel/tapes/explain.tape +0 -0
  156. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/carousel/tapes/hooks.tape +0 -0
  157. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/carousel/tapes/install.tape +0 -0
  158. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/carousel/tapes/pulse.tape +0 -0
  159. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/carousel/tapes/search.tape +0 -0
  160. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/carousel/tapes/tap.tape +0 -0
  161. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/carousel.html +0 -0
  162. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/chat.html +0 -0
  163. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/code-review.md +0 -0
  164. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/commit-audit.md +0 -0
  165. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/demo-index.json +0 -0
  166. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/demo.gif +0 -0
  167. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/demo.html +0 -0
  168. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/demo.tape +0 -0
  169. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/dependencies.md +0 -0
  170. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/eval-latest.json +0 -0
  171. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/eval.html +0 -0
  172. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/index.html +0 -0
  173. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/langchain.html +0 -0
  174. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/mcp-hub.html +0 -0
  175. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/openssf-badge.md +0 -0
  176. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/openssf-playbook.md +0 -0
  177. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/rag-architecture.md +0 -0
  178. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D01.md +0 -0
  179. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D02.md +0 -0
  180. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D03.md +0 -0
  181. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D04.md +0 -0
  182. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D05.md +0 -0
  183. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D06.md +0 -0
  184. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D07.md +0 -0
  185. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D08.md +0 -0
  186. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D09.md +0 -0
  187. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D10.md +0 -0
  188. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D11.md +0 -0
  189. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D12.md +0 -0
  190. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D13.md +0 -0
  191. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D14.md +0 -0
  192. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D15.md +0 -0
  193. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D16.md +0 -0
  194. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D17.md +0 -0
  195. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D18.md +0 -0
  196. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D19.md +0 -0
  197. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D20.md +0 -0
  198. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D21.md +0 -0
  199. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D22.md +0 -0
  200. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D23.md +0 -0
  201. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D24.md +0 -0
  202. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D25.md +0 -0
  203. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D26.md +0 -0
  204. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
  205. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  206. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
  207. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
  208. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
  209. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
  210. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
  211. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  212. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  213. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  214. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/bm25-has-no-stemming.md +0 -0
  215. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
  216. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +0 -0
  217. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
  218. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/boost-first-rule.md +0 -0
  219. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
  220. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  221. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/branch-current-gate.md +0 -0
  222. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  223. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  224. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/browse-could-not-search-two-words.md +0 -0
  225. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
  226. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  227. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  228. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  229. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/catalogue-entries-carry-no-content-identity.md +0 -0
  230. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
  231. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
  232. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
  233. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
  234. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
  235. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  236. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/cli-command-audit.md +0 -0
  237. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/cli-output-ignored-the-terminal.md +0 -0
  238. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
  239. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
  240. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/cold-search-reads-the-whole-catalogue.md +0 -0
  241. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/command-carousel-page.md +0 -0
  242. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  243. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
  244. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/completions-install-could-eat-your-rc-file.md +0 -0
  245. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  246. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  247. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  248. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  249. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
  250. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  251. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/crash-reports-leak-api-keys.md +0 -0
  252. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
  253. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
  254. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
  255. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
  256. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/dense-search-rescans-every-vector.md +0 -0
  257. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
  258. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
  259. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
  260. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
  261. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  262. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
  263. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
  264. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  265. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  266. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
  267. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
  268. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  269. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
  270. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
  271. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
  272. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
  273. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
  274. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
  275. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
  276. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/eval-stats-could-never-publish.md +0 -0
  277. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
  278. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  279. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  280. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  281. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  282. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  283. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
  284. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  285. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  286. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  287. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
  288. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
  289. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/gemini-duplicate-skill-discovery.md +0 -0
  290. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/gemini-hooks-host-aware.md +0 -0
  291. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/gemini-mcp-parity.md +0 -0
  292. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/github-community-health-files.md +0 -0
  293. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  294. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
  295. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  296. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  297. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
  298. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  299. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
  300. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
  301. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
  302. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/install-path-disambiguation.md +0 -0
  303. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
  304. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  305. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
  306. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  307. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
  308. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  309. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
  310. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
  311. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
  312. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
  313. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
  314. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
  315. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
  316. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  317. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/license-compliance-scanning.md +0 -0
  318. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  319. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
  320. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
  321. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  322. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  323. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
  324. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  325. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  326. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/long-hints-overflow-narrow-panes.md +0 -0
  327. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  328. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
  329. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
  330. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
  331. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  332. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  333. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
  334. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/marketing-crm-domain-had-no-category.md +0 -0
  335. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
  336. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/mcp-aware-skills.md +0 -0
  337. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
  338. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  339. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
  340. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  341. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
  342. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  343. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
  344. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
  345. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
  346. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
  347. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  348. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
  349. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  350. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
  351. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
  352. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  353. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
  354. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  355. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  356. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  357. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
  358. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
  359. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
  360. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
  361. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
  362. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  363. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
  364. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
  365. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  366. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/openssf-best-practices-badge.md +0 -0
  367. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/openssf-gold-ceiling.md +0 -0
  368. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/openssf-playbook.md +0 -0
  369. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/openssf-silver.md +0 -0
  370. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/osps-baseline-levels.md +0 -0
  371. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  372. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  373. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
  374. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/pathlib-exists-is-not-total.md +0 -0
  375. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
  376. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  377. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
  378. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
  379. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  380. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  381. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
  382. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
  383. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
  384. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  385. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  386. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  387. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  388. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  389. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
  390. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
  391. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
  392. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
  393. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  394. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
  395. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
  396. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/readme-prune-and-search-guide.md +0 -0
  397. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  398. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  399. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
  400. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
  401. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/reproducible-release-artifacts.md +0 -0
  402. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
  403. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/required-checks-config-drift.md +0 -0
  404. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
  405. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  406. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  407. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
  408. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
  409. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
  410. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  411. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
  412. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  413. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
  414. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  415. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
  416. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  417. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
  418. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  419. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
  420. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  421. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
  422. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
  423. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
  424. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/search-and-browse-visual-refresh.md +0 -0
  425. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
  426. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  427. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  428. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  429. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  430. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
  431. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/self-update-claims-up-to-date-without-asking.md +0 -0
  432. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
  433. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
  434. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
  435. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/shards-pipeline-never-produced-a-shard.md +0 -0
  436. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/shareable-catalogue-bundle.md +0 -0
  437. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  438. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  439. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  440. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/smart-rerank-pays-per-novel-query.md +0 -0
  441. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  442. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  443. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  444. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
  445. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  446. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
  447. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/sweep-died-at-launch-not-at-a-page.md +0 -0
  448. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md +0 -0
  449. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
  450. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
  451. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md +0 -0
  452. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  453. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/taps-check-out-freight-they-never-index.md +0 -0
  454. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/the-catalogue-advertised-repos-that-no-longer-exist.md +0 -0
  455. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/the-scale-corpus-refreshed-the-wrong-rows.md +0 -0
  456. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/the-shard-job-that-could-not-finish.md +0 -0
  457. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  458. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/tool-call-eval-tier.md +0 -0
  459. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/two-ci-controls-that-could-not-act.md +0 -0
  460. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/two-crashes-that-should-have-been-messages.md +0 -0
  461. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  462. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  463. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  464. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
  465. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  466. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/unwatched-crons-hid-a-real-fuzz-crash.md +0 -0
  467. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
  468. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  469. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
  470. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  471. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
  472. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/vex-openvex-feed.md +0 -0
  473. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  474. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  475. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  476. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
  477. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  478. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  479. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  480. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/workspace-scope-install.md +0 -0
  481. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/zip-strict-audit.md +0 -0
  482. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md +0 -0
  483. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
  484. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/security-design.md +0 -0
  485. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/semantic-search.md +0 -0
  486. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/superpowers/specs/2026-08-16-catalogue-content-identity-design.md +0 -0
  487. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/verifying-releases.md +0 -0
  488. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/vex/meta.md +0 -0
  489. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/vex/openvex.json +0 -0
  490. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/vex/statements/gitleaks-secretscan-test-fixtures.md +0 -0
  491. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/vex/statements/quality-trust-fingerprint-not-sensitive.md +0 -0
  492. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/vex/statements/zizmor-adhoc-packages-lint-runners.md +0 -0
  493. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/docs/vex/statements/zizmor-dangerous-triggers-workflow-run.md +0 -0
  494. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/eslint.config.mjs +0 -0
  495. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/evals/README.md +0 -0
  496. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/evals/__init__.py +0 -0
  497. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/evals/baseline.json +0 -0
  498. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/evals/faithfulness.py +0 -0
  499. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/evals/golden_set.json +0 -0
  500. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/evals/make_corpus.py +0 -0
  501. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/evals/make_golden.py +0 -0
  502. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/evals/metrics.py +0 -0
  503. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/evals/publish_golden_dataset.py +0 -0
  504. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/evals/run_evals.py +0 -0
  505. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/examples/README.md +0 -0
  506. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/examples/adapt-demo.sh +0 -0
  507. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/examples/boost-run-prototype.sh +0 -0
  508. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/index.html +0 -0
  509. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/noxfile.py +0 -0
  510. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/pyproject.toml +0 -0
  511. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/requirements/coverage-tools.in +0 -0
  512. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/requirements/coverage-tools.txt +0 -0
  513. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/requirements/lint-tools.in +0 -0
  514. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/requirements/lint-tools.txt +0 -0
  515. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/requirements/mutation-tools.in +0 -0
  516. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/requirements/mutation-tools.txt +0 -0
  517. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/requirements/platform-pins.lock +0 -0
  518. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/requirements/release-tools.in +0 -0
  519. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/requirements/release-tools.txt +0 -0
  520. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/requirements/test-tools.in +0 -0
  521. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/requirements/test-tools.txt +0 -0
  522. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/scripts/a11y_check.py +0 -0
  523. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/scripts/add_spdx_headers.py +0 -0
  524. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/scripts/bench_cli.sh +0 -0
  525. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/scripts/build_command_reference.py +0 -0
  526. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/scripts/build_demo_index.py +0 -0
  527. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/scripts/build_registries.py +0 -0
  528. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/scripts/build_roadmap.py +0 -0
  529. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/scripts/build_scale_corpus.py +0 -0
  530. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/scripts/build_vex.py +0 -0
  531. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/scripts/check_anchors.py +0 -0
  532. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/scripts/check_branch_current.py +0 -0
  533. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/scripts/check_dco.py +0 -0
  534. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/scripts/check_licenses.py +0 -0
  535. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/scripts/check_reproducible.py +0 -0
  536. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/scripts/check_required_checks.py +0 -0
  537. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/scripts/ensure_eval_corpus.sh +0 -0
  538. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/scripts/eval_corpus.py +0 -0
  539. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/scripts/eval_explain.py +0 -0
  540. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/scripts/eval_gate.py +0 -0
  541. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/scripts/eval_recommend.py +0 -0
  542. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/scripts/eval_retrieval.py +0 -0
  543. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/scripts/eval_stats_summary.py +0 -0
  544. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/scripts/import_budget.py +0 -0
  545. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/scripts/lock_toolchain.py +0 -0
  546. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/scripts/measure_registry.py +0 -0
  547. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/scripts/mutation_gate.py +0 -0
  548. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/scripts/mutation_shards.py +0 -0
  549. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/scripts/mutation_weights.json +0 -0
  550. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/scripts/normalize_sdist.py +0 -0
  551. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/scripts/page_budget.py +0 -0
  552. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/scripts/perf_gate.py +0 -0
  553. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/scripts/post_deploy_smoke.py +0 -0
  554. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/scripts/publish_eval_json.py +0 -0
  555. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/scripts/release_guard.py +0 -0
  556. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/scripts/release_preflight.py +0 -0
  557. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/scripts/serve_docs.py +0 -0
  558. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/setup.cfg +0 -0
  559. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/sonar-project.properties +0 -0
  560. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/style/README.md +0 -0
  561. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/style/boost.css +0 -0
  562. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/style/boost.js +0 -0
  563. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/style/demo.html +0 -0
  564. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/bdd/features/adapt.feature +0 -0
  565. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/bdd/features/browse.feature +0 -0
  566. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/bdd/features/count.feature +0 -0
  567. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/bdd/features/discover.feature +0 -0
  568. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/bdd/features/doctor.feature +0 -0
  569. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/bdd/features/environment.py +0 -0
  570. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/bdd/features/explain.feature +0 -0
  571. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/bdd/features/index.feature +0 -0
  572. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/bdd/features/install.feature +0 -0
  573. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/bdd/features/list.feature +0 -0
  574. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/bdd/features/mcp.feature +0 -0
  575. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/bdd/features/search.feature +0 -0
  576. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/bdd/features/steps/cli_steps.py +0 -0
  577. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/bdd/features/steps/discovery_steps.py +0 -0
  578. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/bdd/features/steps/mcp_steps.py +0 -0
  579. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/bdd/features/steps/quality_steps.py +0 -0
  580. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/conftest.py +0 -0
  581. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/eval/baseline.json +0 -0
  582. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/eval/explain.jsonl +0 -0
  583. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/eval/golden-natural.jsonl +0 -0
  584. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/eval/golden.jsonl +0 -0
  585. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/eval/recommend.jsonl +0 -0
  586. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/eval/taps-scale.txt +0 -0
  587. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/eval/taps.txt +0 -0
  588. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/functional/test_capabilities_policy.py +0 -0
  589. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/functional/test_cli_adapt.py +0 -0
  590. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/functional/test_cli_catalog.py +0 -0
  591. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/functional/test_cli_chat.py +0 -0
  592. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/functional/test_cli_configuration.py +0 -0
  593. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/functional/test_cli_hooks.py +0 -0
  594. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/functional/test_cli_hooks_gemini.py +0 -0
  595. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/functional/test_cli_pane_width.py +0 -0
  596. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/functional/test_cli_pkg.py +0 -0
  597. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/functional/test_cli_quality.py +0 -0
  598. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/functional/test_cli_taps.py +0 -0
  599. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/functional/test_everyday_loop.py +0 -0
  600. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/functional/test_integrity_enforce.py +0 -0
  601. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/functional/test_kind_conformance.py +0 -0
  602. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/functional/test_property_parsers.py +0 -0
  603. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/functional/test_run.py +0 -0
  604. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/functional/test_tap_signing.py +0 -0
  605. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/functional/test_workspace_scope.py +0 -0
  606. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/fuzz/README.md +0 -0
  607. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
  608. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
  609. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
  610. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
  611. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
  612. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
  613. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
  614. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
  615. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
  616. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
  617. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
  618. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
  619. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
  620. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/registry/02-https.txt +0 -0
  621. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
  622. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
  623. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
  624. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/registry/06-space.txt +0 -0
  625. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
  626. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
  627. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/registry/09-nul.txt +0 -0
  628. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/registry/10-name-too-long.txt +0 -0
  629. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/registry/11-long-owner-repo.txt +0 -0
  630. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/fuzz/fuzz_frontmatter.py +0 -0
  631. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/fuzz/fuzz_registry.py +0 -0
  632. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/langchain/conftest.py +0 -0
  633. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/langchain/test_graph.py +0 -0
  634. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/langchain/test_loader.py +0 -0
  635. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/langchain/test_retriever.py +0 -0
  636. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/make_fixture.py +0 -0
  637. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/perf/test_benchmarks.py +0 -0
  638. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/smoke.sh +0 -0
  639. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_a11y_check.py +0 -0
  640. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_action_pin_lockstep.py +0 -0
  641. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_adapters.py +0 -0
  642. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_adapters_multi.py +0 -0
  643. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_adapters_runner.py +0 -0
  644. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_agents.py +0 -0
  645. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_ai.py +0 -0
  646. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_bmad_core.py +0 -0
  647. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_boost_first_offer.py +0 -0
  648. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_bootstrap.py +0 -0
  649. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_branch_current.py +0 -0
  650. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_browse.py +0 -0
  651. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_builtin.py +0 -0
  652. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_capabilities.py +0 -0
  653. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_catalog.py +0 -0
  654. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_catalogbundle.py +0 -0
  655. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_chat.py +0 -0
  656. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_check_anchors.py +0 -0
  657. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_check_dco.py +0 -0
  658. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_check_licenses.py +0 -0
  659. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_check_reproducible.py +0 -0
  660. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_claude_settings.py +0 -0
  661. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_clean_internal_cache.py +0 -0
  662. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_codeql_analysis_key.py +0 -0
  663. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_command_reference_fresh.py +0 -0
  664. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_community_health_files.py +0 -0
  665. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_compact.py +0 -0
  666. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_complete.py +0 -0
  667. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_complete_rc_block.py +0 -0
  668. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_config.py +0 -0
  669. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_content_dedupe.py +0 -0
  670. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_content_identity.py +0 -0
  671. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_crash_redaction.py +0 -0
  672. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_dedup_trust.py +0 -0
  673. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_demo_index.py +0 -0
  674. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_dense.py +0 -0
  675. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_dense_embed_dedupe.py +0 -0
  676. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_dense_fallback.py +0 -0
  677. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_dense_fix_hint.py +0 -0
  678. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_dense_quantized.py +0 -0
  679. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_dense_ready_order.py +0 -0
  680. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_dense_shard_real_schema.py +0 -0
  681. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_dense_shard_unreadable_vectors.py +0 -0
  682. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_dense_shards.py +0 -0
  683. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_dense_status.py +0 -0
  684. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_dense_status_cheap.py +0 -0
  685. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_dependabot_config.py +0 -0
  686. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_docs_pages_linked.py +0 -0
  687. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_docsite_chrome.py +0 -0
  688. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_ed25519.py +0 -0
  689. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_embed.py +0 -0
  690. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_embed_local.py +0 -0
  691. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_embed_truncated_response.py +0 -0
  692. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_entry_key.py +0 -0
  693. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_eval_baseline.py +0 -0
  694. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_eval_corpus.py +0 -0
  695. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_eval_faithfulness.py +0 -0
  696. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_eval_gate.py +0 -0
  697. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_eval_grading.py +0 -0
  698. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_eval_metrics.py +0 -0
  699. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_eval_stats_summary.py +0 -0
  700. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_failure_alerting_covers_unattended.py +0 -0
  701. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_faithfulness.py +0 -0
  702. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_frontmatter.py +0 -0
  703. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_fuzz_targets.py +0 -0
  704. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_gemini_agent_sanitize.py +0 -0
  705. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_gitleaks_config.py +0 -0
  706. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_gitutil.py +0 -0
  707. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_gitutil_lfs.py +0 -0
  708. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_gitutil_sparse.py +0 -0
  709. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_hook_settings_hosts.py +0 -0
  710. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_hookhost.py +0 -0
  711. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_imperative.py +0 -0
  712. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_import_budget.py +0 -0
  713. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_injectscan.py +0 -0
  714. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_install_permission_error.py +0 -0
  715. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_installscan.py +0 -0
  716. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_integrity.py +0 -0
  717. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_journal.py +0 -0
  718. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_langchain_packaging.py +0 -0
  719. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_link_ownership.py +0 -0
  720. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_localembed.py +0 -0
  721. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_localembed_e2e.py +0 -0
  722. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_lockfile.py +0 -0
  723. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_logs.py +0 -0
  724. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_marketing_counts.py +0 -0
  725. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_mcp.py +0 -0
  726. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_mcp_install_scan.py +0 -0
  727. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_mcpdecl.py +0 -0
  728. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_mcphost.py +0 -0
  729. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_measure_registry.py +0 -0
  730. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_minisign.py +0 -0
  731. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_mutation_hardening.py +0 -0
  732. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_mutation_shards.py +0 -0
  733. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_mutation_subfile_shards.py +0 -0
  734. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_mutmut_source_paths.py +0 -0
  735. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_nethttp.py +0 -0
  736. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_normalize_sdist.py +0 -0
  737. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_page_budget.py +0 -0
  738. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_paths.py +0 -0
  739. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_perf_gate.py +0 -0
  740. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_pkg_confusions.py +0 -0
  741. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_pkg_injection.py +0 -0
  742. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_pkg_secrets.py +0 -0
  743. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_platform_pins.py +0 -0
  744. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_policy.py +0 -0
  745. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_post_deploy_smoke.py +0 -0
  746. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_project_mcp_sidecar.py +0 -0
  747. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_projectlock.py +0 -0
  748. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_provenance.py +0 -0
  749. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_publish_golden_dataset.py +0 -0
  750. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_rag.py +0 -0
  751. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_rag_fastpath.py +0 -0
  752. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_rag_fusion.py +0 -0
  753. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_registries_fresh.py +0 -0
  754. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_registry.py +0 -0
  755. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_registry_categories.py +0 -0
  756. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_registry_control_chars.py +0 -0
  757. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_release_guard.py +0 -0
  758. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_release_preflight.py +0 -0
  759. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_required_checks.py +0 -0
  760. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_rerank_cache.py +0 -0
  761. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_resolve.py +0 -0
  762. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_roadmap_fresh.py +0 -0
  763. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_rules.py +0 -0
  764. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_scale_corpus.py +0 -0
  765. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_scopes.py +0 -0
  766. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_secretscan.py +0 -0
  767. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_selfupdate.py +0 -0
  768. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_serve.py +0 -0
  769. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_serve_docs.py +0 -0
  770. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_shards_matrix.py +0 -0
  771. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_smoke_covers_every_command.py +0 -0
  772. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_spdx_headers.py +0 -0
  773. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_spin.py +0 -0
  774. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_stackprobe.py +0 -0
  775. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_staleness.py +0 -0
  776. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_store.py +0 -0
  777. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_store_materialize.py +0 -0
  778. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_sync_blocked_links.py +0 -0
  779. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_sync_repairs_gutted_skill.py +0 -0
  780. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_token_parity.py +0 -0
  781. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_toolchain_lock.py +0 -0
  782. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_trustaudit.py +0 -0
  783. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_typosquat.py +0 -0
  784. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_updatediff.py +0 -0
  785. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_util.py +0 -0
  786. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_version.py +0 -0
  787. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_vex.py +0 -0
  788. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_visual_harness_flags.py +0 -0
  789. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_workflow_concurrency.py +0 -0
  790. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_workflow_concurrency_groups.py +0 -0
  791. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_workflow_push_has_credentials.py +0 -0
  792. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_workflow_timeouts.py +0 -0
  793. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_workflows.py +0 -0
  794. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/unit/test_zizmor_ignores_still_anchor.py +0 -0
  795. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/visual/a11y_check.mjs +0 -0
  796. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/visual/console_check.mjs +0 -0
  797. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/visual/package-lock.json +0 -0
  798. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/visual/package.json +0 -0
  799. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.38}/tests/visual/visual_check.mjs +0 -0
@@ -79,6 +79,8 @@ lookups
79
79
  lowercasing
80
80
  Magento
81
81
  maintainer's
82
+ Matchers
83
+ matchers
82
84
  mcp
83
85
  mergeable
84
86
  minisign
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.2.36
3
+ Version: 1.2.38
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '1.2.36'
22
- __version_tuple__ = version_tuple = (1, 2, 36)
21
+ __version__ = version = '1.2.38'
22
+ __version_tuple__ = version_tuple = (1, 2, 38)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -199,7 +199,12 @@ def print_help() -> None:
199
199
  else:
200
200
  print(head)
201
201
  for n, s in cmds:
202
- print(" " + out.c(n.ljust(width + 2), out.CYAN)
202
+ # accent, not a raw 16-color CYAN: every other command-name
203
+ # surface (search rows, info badges) resolves through this same
204
+ # semantic role, which is Aurora truecolor cyan with the correct
205
+ # 16-color/plain degradation — a raw CYAN here painted a visibly
206
+ # different cyan on any truecolor terminal.
207
+ print(" " + out.role(n.ljust(width + 2), "accent")
203
208
  + out.truncate(s, max(0, cols - width - 4)))
204
209
  print()
205
210
  print(out.c("%d commands · %d groups" % (len(COMMANDS), len(GROUPS)), out.DIM))
@@ -0,0 +1,66 @@
1
+ # Copyright the boost contributors.
2
+ # SPDX-License-Identifier: GPL-3.0-only
3
+ """A branded ArgumentParser.
4
+
5
+ Argparse's default failure output is a raw, unstyled ``usage:`` block with a
6
+ bare ``prog: error: …`` line — nothing like boost's branded top-level dispatch
7
+ (which routes through :func:`output.err` and offers a "did you mean"). This
8
+ subclass routes a parser's own errors through the same Aurora output layer, so
9
+ a wrong invocation looks as designed as a right one.
10
+
11
+ Adopt it via :func:`parser` in place of ``argparse.ArgumentParser``. Sub-parsers
12
+ created with ``add_subparsers()`` inherit this class automatically, so a single
13
+ top-level swap brands a command's whole tree.
14
+ """
15
+ from __future__ import annotations
16
+
17
+ import argparse
18
+ import sys
19
+
20
+ from .core import output as out
21
+
22
+
23
+ class _BoostHelpFormatter(argparse.HelpFormatter):
24
+ """Wraps help/description text the way :func:`output.wrap` does,
25
+ keeping a backtick-quoted command atomic instead of splitting it across
26
+ lines — the same rule every other long line in this CLI follows.
27
+
28
+ argparse's own ``HelpFormatter`` wraps with plain ``textwrap``, which
29
+ knows nothing about a backtick span (``doctor``/``search`` interpolate
30
+ hints ending in a pasteable ``pip install '...'``-style command; several
31
+ ``help=`` strings quote a ``boost`` invocation the same way) — so a
32
+ narrow terminal could split one across two lines, handing the user a
33
+ command that does not run. Only the two text-filling hooks are
34
+ overridden; ``_format_usage``'s own line-splitting already treats a
35
+ metavar as one atomic part and is left alone.
36
+ """
37
+
38
+ def _split_lines(self, text: str, width: int) -> list[str]:
39
+ text = self._whitespace_matcher.sub(" ", text).strip()
40
+ return out.wrap(text, width) or [text]
41
+
42
+ def _fill_text(self, text: str, width: int, indent: str) -> str:
43
+ text = self._whitespace_matcher.sub(" ", text).strip()
44
+ lines = out.wrap(text, max(width - len(indent), 1)) or [text]
45
+ return "\n".join(indent + ln for ln in lines)
46
+
47
+
48
+ class BoostArgumentParser(argparse.ArgumentParser):
49
+ def __init__(self, *args, **kwargs):
50
+ # add_subparsers() creates each sub-parser via type(self)(**kwargs)
51
+ # without forwarding formatter_class, so defaulting it here (rather
52
+ # than in parser() below) is what brands every subcommand's --help
53
+ # too, not just the top-level one.
54
+ kwargs.setdefault("formatter_class", _BoostHelpFormatter)
55
+ super().__init__(*args, **kwargs)
56
+
57
+ def error(self, message: str):
58
+ """Print a branded error + dimmed usage, then exit 2 (argparse's code)."""
59
+ out.err(message)
60
+ sys.stderr.write(out.c(self.format_usage(), out.DIM))
61
+ self.exit(2)
62
+
63
+
64
+ def parser(*args, **kwargs) -> BoostArgumentParser:
65
+ """Drop-in replacement for ``argparse.ArgumentParser(...)``."""
66
+ return BoostArgumentParser(*args, **kwargs)
@@ -38,11 +38,25 @@ stage the installer in a temp dir and copy only the `bmad-*` skills into
38
38
  ~/.claude/skills, so $HOME never gets a stray `_bmad/`; the runtime is
39
39
  per-project by design.
40
40
 
41
- Both surfaces are **Claude Code only**, and deliberately so: subagent
42
- definitions and `SessionStart`/`UserPromptSubmit` hooks are Claude Code
43
- contracts with no equivalent in the other three agents boost targets, and BMAD's
44
- own installer likewise takes `--tools claude-code`. This is the one part of
45
- boost that does not fan out over `agents.enabled_agents()`.
41
+ The **hooks fan out; the personas do not**, and the split is not arbitrary.
42
+
43
+ A subagent definition is a Claude Code contract, and BMAD's own installer takes
44
+ `--tools claude-code`, so personas stay in `~/.claude/agents/`. Copying them
45
+ into Gemini's `agents/` slot would also ship files its schema rejects — that
46
+ slot validates, and a Claude-dialect persona fails it.
47
+
48
+ The hooks are a different case, and an earlier version of this docstring got it
49
+ wrong by lumping them together: it claimed `SessionStart` and
50
+ `UserPromptSubmit` had "no equivalent in the other three agents", which stopped
51
+ being true when `core/hookhost.py` learned Gemini's vocabulary. They map to
52
+ `SessionStart` and `BeforeAgent`, so `bmad on` now installs them on every host
53
+ with evidence of use, translating the event names and the timeout units on the
54
+ way. Matchers are *not* translated — `hookhost` passes them through
55
+ host-native — so Claude's `startup|resume|clear` source matcher is applied only
56
+ on Claude.
57
+
58
+ What that buys on a second host is prompt shaping, not full parity: the routing
59
+ banner names personas Gemini cannot spawn.
46
60
  """
47
61
  from __future__ import annotations
48
62
 
@@ -61,7 +75,7 @@ from pathlib import Path
61
75
  from .. import cliparse
62
76
  from ..core import bmad as core
63
77
  from ..core import claude_settings as cs
64
- from ..core import journal, paths, util
78
+ from ..core import hookhost, journal, paths, util
65
79
  from ..core import output as out
66
80
  from ..errors import BoostError
67
81
 
@@ -78,7 +92,11 @@ def cmd_bmad(argv) -> int:
78
92
  p = cliparse.parser(
79
93
  prog="boost bmad",
80
94
  description="BMAD Method autopilot: personas, prompt routing, workflows")
81
- p.add_argument("action", choices=_ACTIONS, help=" | ".join(_ACTIONS))
95
+ # metavar="ACTION": the auto-generated {on,off,...,status} metavar (13
96
+ # entries) is one unbreakable token and overflowed the usage line up to
97
+ # 100 columns wide. The full list still shows in `help=` below.
98
+ p.add_argument("action", choices=_ACTIONS, metavar="ACTION",
99
+ help=" | ".join(_ACTIONS))
82
100
  p.add_argument("value", nargs="?",
83
101
  help="startup: on | off | status · route: the prompt to classify")
84
102
  p.add_argument("-s", "--scope", choices=("project", "global"), default=None,
@@ -144,6 +162,74 @@ def _never_fails(command: str) -> str:
144
162
  return command + " || true"
145
163
 
146
164
 
165
+ def _hook_hosts(scope: str) -> list[str]:
166
+ """Hosts to write hooks into: Claude always, others on evidence of use.
167
+
168
+ Claude is unconditional. It is boost's primary host and the behaviour every
169
+ release before this one had, and the check cannot be `shutil.which` the way
170
+ `boost mcp register`'s is: that command *shells out* to `claude mcp add` and
171
+ genuinely cannot work without the binary, while this one only writes a
172
+ settings.json. A user running inside Claude Code whose launcher is not on
173
+ boost's PATH would otherwise silently get no hooks at all.
174
+
175
+ A second host earns its hooks by evidence that it is actually in use —
176
+ its CLI on PATH, or its dotdir already present. Writing into
177
+ `~/.gemini/settings.json` for someone who has never run Gemini is litter in
178
+ a file boost does not own. A host that appears later is picked up by the
179
+ next `boost bmad on`, which is idempotent.
180
+ """
181
+ chosen = [hookhost.CLAUDE]
182
+ for host in hookhost.hosts():
183
+ if host == hookhost.CLAUDE:
184
+ continue
185
+ dotdir = cs.settings_path(scope, host=host).parent
186
+ if shutil.which(hookhost.cli(host)) or dotdir.is_dir():
187
+ chosen.append(host)
188
+ return chosen
189
+
190
+
191
+ #: (Claude event, hook name, matcher). The matcher is Claude's own
192
+ #: `SessionStart` source vocabulary, and `hookhost` deliberately does not
193
+ #: translate matchers — they pass through host-native — so it is applied only
194
+ #: on the host it was written for. Omitting it elsewhere means "every start",
195
+ #: which is what a session briefing wants anyway.
196
+ _ORIENT_HOOK = ("SessionStart", HOOK_NAME, HOOK_MATCHER)
197
+ _ROUTE_HOOK = ("UserPromptSubmit", ROUTE_HOOK_NAME, None)
198
+
199
+
200
+ def _add_hook_everywhere(scope: str, spec: tuple, command: str) -> list[str]:
201
+ """Install one hook on every installed host. Returns the hosts written."""
202
+ event, name, matcher = spec
203
+ written = []
204
+ for host in _hook_hosts(scope):
205
+ target = hookhost.translate(host, event)
206
+ if target is None:
207
+ # Refused out loud rather than dropped: a hook the user asked for
208
+ # and silently never got is worse than one that cannot exist.
209
+ out.warn("%s has no counterpart for %s — skipped"
210
+ % (hookhost.label(host), event))
211
+ continue
212
+ cs.add_hook(scope, target, name, command,
213
+ matcher=matcher if host == hookhost.CLAUDE else None,
214
+ host=host)
215
+ written.append(host)
216
+ return written
217
+
218
+
219
+ def _remove_hook_everywhere(scope: str, *specs: tuple) -> None:
220
+ """Remove hooks from every host, installed or not.
221
+
222
+ Unlike install this does not filter on `shutil.which`: someone who removed
223
+ an agent CLI still wants boost's hooks gone from its settings.json, and
224
+ `remove_hook` against a file that was never written is a no-op.
225
+ """
226
+ for host in hookhost.hosts():
227
+ for event, name, _matcher in specs:
228
+ target = hookhost.translate(host, event)
229
+ if target is not None:
230
+ cs.remove_hook(scope, target, name, host=host)
231
+
232
+
147
233
  def _autopilot_on(scope) -> int:
148
234
  """The one command. Personas + orientation + router, in one idempotent pass.
149
235
 
@@ -156,11 +242,11 @@ def _autopilot_on(scope) -> int:
156
242
  slugs, skipped = core.write_personas(agents)
157
243
 
158
244
  launcher = shlex.quote(str(paths.launcher()))
159
- cs.add_hook(scope, "SessionStart", HOOK_NAME,
160
- _never_fails("%s bmad orient --scope %s" % (launcher, scope)),
161
- matcher=HOOK_MATCHER)
162
- cs.add_hook(scope, "UserPromptSubmit", ROUTE_HOOK_NAME,
163
- _never_fails("%s bmad route" % launcher))
245
+ hosts = _add_hook_everywhere(
246
+ scope, _ORIENT_HOOK,
247
+ _never_fails("%s bmad orient --scope %s" % (launcher, scope)))
248
+ _add_hook_everywhere(scope, _ROUTE_HOOK,
249
+ _never_fails("%s bmad route" % launcher))
164
250
  _set_scope_state(scope, autopilot=True, startup=True, personas=len(slugs),
165
251
  enabled_at=util.now_iso())
166
252
  journal.log("bmad-autopilot", "on", scope=scope, personas=len(slugs))
@@ -172,8 +258,11 @@ def _autopilot_on(scope) -> int:
172
258
  % (len(skipped), ", ".join(skipped)))
173
259
  out.dim(" delete the file to let `boost bmad on` restore the stock version")
174
260
  out.dim(" personas → %s" % paths.tilde(agents))
175
- out.dim(" hooks → %s (SessionStart + UserPromptSubmit)"
176
- % paths.tilde(cs.settings_path(scope)))
261
+ for host in hosts:
262
+ out.dim(" hooks → %s (%s + %s)"
263
+ % (paths.tilde(cs.settings_path(scope, host=host)),
264
+ hookhost.translate(host, "SessionStart"),
265
+ hookhost.translate(host, "UserPromptSubmit")))
177
266
  out.dim(" every substantive prompt now names its lead persona and its "
178
267
  "definition of done; trivial asks are left alone")
179
268
  # Claude Code only watches an agents dir that existed when the session
@@ -185,8 +274,7 @@ def _autopilot_on(scope) -> int:
185
274
 
186
275
  def _autopilot_off(scope) -> int:
187
276
  scope = scope or "global"
188
- cs.remove_hook(scope, "SessionStart", HOOK_NAME)
189
- cs.remove_hook(scope, "UserPromptSubmit", ROUTE_HOOK_NAME)
277
+ _remove_hook_everywhere(scope, _ORIENT_HOOK, _ROUTE_HOOK)
190
278
  removed = core.remove_personas(_agents_dir(scope))
191
279
  _set_scope_state(scope, autopilot=False, startup=False, personas=0)
192
280
  journal.log("bmad-autopilot", "off", scope=scope, personas=len(removed))
@@ -370,14 +458,15 @@ def _startup(value, scope) -> int:
370
458
  if value == "on":
371
459
  cmd = "%s bmad orient --scope %s" % (
372
460
  shlex.quote(str(paths.launcher())), scope)
373
- cs.add_hook(scope, "SessionStart", HOOK_NAME, cmd, matcher=HOOK_MATCHER)
461
+ started = _add_hook_everywhere(scope, _ORIENT_HOOK, cmd)
374
462
  _set_scope_state(scope, startup=True)
375
463
  journal.log("bmad-startup", "on", scope=scope)
376
464
  out.ok("BMAD startup ON (%s) — new sessions get orientation" % scope)
377
- out.dim(" hook → %s" % cs.settings_path(scope))
465
+ for host in started:
466
+ out.dim(" hook → %s" % cs.settings_path(scope, host=host))
378
467
  return 0
379
468
  if value == "off":
380
- cs.remove_hook(scope, "SessionStart", HOOK_NAME)
469
+ _remove_hook_everywhere(scope, _ORIENT_HOOK)
381
470
  _set_scope_state(scope, startup=False)
382
471
  journal.log("bmad-startup", "off", scope=scope)
383
472
  out.ok("BMAD startup OFF (%s) — skills stay installed" % scope)
@@ -415,8 +504,7 @@ def _uninstall(scope, yes) -> int:
415
504
  scope, " + _bmad/, _bmad-output/" if scope == "project" else ""))):
416
505
  out.info("aborted")
417
506
  return 0
418
- cs.remove_hook(scope, "SessionStart", HOOK_NAME)
419
- cs.remove_hook(scope, "UserPromptSubmit", ROUTE_HOOK_NAME)
507
+ _remove_hook_everywhere(scope, _ORIENT_HOOK, _ROUTE_HOOK)
420
508
  removed = _rm_skills(_skills_dir(scope))
421
509
  removed += len(core.remove_personas(_agents_dir(scope)))
422
510
  if scope == "project":
@@ -434,7 +522,7 @@ def _uninstall(scope, yes) -> int:
434
522
  def _disable(scope) -> int:
435
523
  """Quarantine: turn startup off and move skills aside (recoverable)."""
436
524
  scope = scope or "project"
437
- cs.remove_hook(scope, "SessionStart", HOOK_NAME)
525
+ _remove_hook_everywhere(scope, _ORIENT_HOOK)
438
526
  qdir = _quarantine_dir(scope)
439
527
  qdir.mkdir(parents=True, exist_ok=True)
440
528
  moved = 0
@@ -1630,7 +1630,7 @@ def cmd_stats(argv):
1630
1630
  else:
1631
1631
  out.kv("latest", "%s %s" % (latest, out.role("(up to date)", "muted")))
1632
1632
  if upstream:
1633
- out.kv("upstream", upstream)
1633
+ out.kv("upstream", upstream, wrap=True)
1634
1634
  return 0
1635
1635
 
1636
1636
 
@@ -13,7 +13,6 @@ import re
13
13
  import shlex
14
14
  import subprocess
15
15
  import sys
16
- import textwrap
17
16
  import webbrowser
18
17
  from itertools import chain
19
18
  from pathlib import Path
@@ -197,9 +196,12 @@ def _mark(installed: bool) -> str:
197
196
 
198
197
 
199
198
  def _print_wrapped(text: str) -> None:
199
+ """Wrap prose to the *real* pane via out.wrap(), not a hardcoded width —
200
+ a fixed textwrap width=76 neither shrank for a narrow terminal nor grew
201
+ for a wide one, and did not know a backtick span must stay whole."""
200
202
  paras = [p for p in re.split(r"\n\s*\n", text.strip()) if p.strip()]
201
203
  for i, para in enumerate(paras):
202
- for line in textwrap.wrap(" ".join(para.split()), width=76):
204
+ for line in out.wrap(" ".join(para.split()), out.term_width() - 2):
203
205
  out.info(line)
204
206
  if i < len(paras) - 1:
205
207
  print()
@@ -471,10 +473,11 @@ def cmd_info(argv):
471
473
  if badges:
472
474
  out.info(" ".join(badges))
473
475
  if desc:
474
- lines = textwrap.wrap(desc, width=62)
475
- out.kv("description", lines[0])
476
- for ln in lines[1:]:
477
- print(" " * 16 + ln)
476
+ # kv's own wrap=True already folds to the real terminal width and
477
+ # aligns continuations under the value — the hand-rolled version this
478
+ # replaced hardcoded width=62 (a hand copy of kv's default 16-column
479
+ # lead against a fixed 78-column pane) and ignored COLUMNS entirely.
480
+ out.kv("description", desc, wrap=True)
478
481
  if lock:
479
482
  inst_v = str(lock.get("version", "?"))
480
483
  out.kv("version", inst_v)
@@ -630,9 +633,19 @@ def _render_markdown(body: str) -> None:
630
633
  continue
631
634
  m = re.match(r"^(\s*)[-*]\s+(.*)$", line)
632
635
  if m:
633
- print("%s • %s" % (m.group(1), _inline(m.group(2))))
636
+ prefix = "%s • " % m.group(1)
637
+ # Wrap the raw markdown first, THEN colorize each wrapped chunk —
638
+ # coloring before wrapping (the old behavior for the plain-prose
639
+ # branch below) would either split an inline `code` span or leave
640
+ # line 1's color code unterminated. A backtick span is one atomic
641
+ # token either way, via out.wrap().
642
+ wrapped = out.wrap(m.group(2), out.term_width() - len(prefix)) or [""]
643
+ for i, chunk in enumerate(wrapped):
644
+ lead = prefix if i == 0 else " " * len(prefix)
645
+ print(lead + _inline(chunk))
634
646
  continue
635
- print(_inline(line))
647
+ for chunk in out.wrap(line, out.term_width()) or [""]:
648
+ print(_inline(chunk))
636
649
 
637
650
 
638
651
  def cmd_preview(argv):
@@ -772,8 +772,10 @@ _CONTEXT_DEFAULT = {"enabled": False, "rules": []}
772
772
  def cmd_context(argv: list[str]) -> int:
773
773
  ap = cliparse.parser(
774
774
  prog="boost context", description="Branch-aware skill activation")
775
- sub = ap.add_subparsers(dest="action",
776
- metavar="status|enable|disable|map|unmap|apply")
775
+ # metavar="ACTION": the full "status|enable|disable|map|unmap|apply"
776
+ # spelling is one unbreakable token that overflowed the usage line at 60
777
+ # columns. Each subcommand still lists its own help= below.
778
+ sub = ap.add_subparsers(dest="action", metavar="ACTION")
777
779
  sp = sub.add_parser("status", help="show rules, enabled flag & branch")
778
780
  sp.add_argument("--json", action="store_true")
779
781
  sub.add_parser("enable", help="turn on branch-aware activation (runs apply)")
@@ -873,7 +875,8 @@ def _context_status(state: dict, as_json: bool) -> int:
873
875
  out.kv("branch", branch or "(not in a git repository)")
874
876
  rules = state.get("rules", [])
875
877
  if not rules:
876
- out.info("no rules — add one with `boost context map 'feature/*' skill1,skill2`")
878
+ out.info("no rules — add one with `boost context map 'feature/*' "
879
+ "skill1,skill2`", wrap=True)
877
880
  return 0
878
881
  rows = [(r.get("pattern", "?"), ", ".join(r.get("skills", [])),
879
882
  "*" if branch and fnmatch.fnmatch(branch, r.get("pattern", "")) else "")
@@ -128,7 +128,7 @@ def cmd_cohort(argv) -> int:
128
128
  raise BoostError("no cohort named %s" % args.name,
129
129
  hint="list cohorts with `boost cohort list`")
130
130
  if not targets:
131
- out.info("no cohorts defined")
131
+ print(out.empty_state("no cohorts defined"))
132
132
  return 0
133
133
  applied = skipped = 0
134
134
  for cname in targets:
@@ -174,8 +174,11 @@ def cmd_cohort(argv) -> int:
174
174
  print(json.dumps(data, indent=2))
175
175
  return 0
176
176
  if not rows:
177
- out.info("no cohorts defined")
178
- out.info(out.role("create one: `boost cohort create pilot --skills tdd-workflow --percent 50`", "muted"))
177
+ print(out.empty_state(
178
+ "no cohorts defined",
179
+ hint="create one: `boost cohort create pilot --skills "
180
+ "tdd-workflow --percent 50`",
181
+ wrap=True))
179
182
  return 0
180
183
  out.table(rows, headers=("COHORT", "SKILLS", "ROLLOUT", "YOU"))
181
184
  print()
@@ -518,7 +521,9 @@ def cmd_pulse(argv) -> int:
518
521
  print(json.dumps(events, indent=2))
519
522
  return 0
520
523
  if not events:
521
- out.info("no activity yet — events appear as you install and manage skills")
524
+ print(out.empty_state(
525
+ "no activity yet — events appear as you install and manage skills",
526
+ wrap=True))
522
527
  return 0
523
528
  for e in events:
524
529
  action = e.get("action", "?")
@@ -557,7 +562,9 @@ def cmd_replay(argv) -> int:
557
562
  print(json.dumps(history, indent=2))
558
563
  return 0
559
564
  if not history:
560
- out.info("no lock history yet — every install/uninstall snapshots the lock file")
565
+ print(out.empty_state(
566
+ "no lock history yet — every install/uninstall snapshots "
567
+ "the lock file", wrap=True))
561
568
  return 0
562
569
  rows = []
563
570
  prev_items = None
@@ -693,8 +700,9 @@ def cmd_who(argv) -> int:
693
700
 
694
701
  events = journal.events(subject=args.skill) if args.skill else journal.events()
695
702
  if not events:
696
- out.info("no journal activity yet — expertise builds as people install, "
697
- "edit, and evolve skills")
703
+ print(out.empty_state(
704
+ "no journal activity yet — expertise builds as people install, "
705
+ "edit, and evolve skills", wrap=True))
698
706
  return 0
699
707
 
700
708
  if args.skill:
@@ -16,6 +16,7 @@ import os
16
16
  import re
17
17
  import shutil
18
18
  import sys
19
+ import unicodedata
19
20
  from collections.abc import Sequence
20
21
  from dataclasses import dataclass
21
22
 
@@ -336,9 +337,30 @@ def badge(label: str, hue: str = "cyan") -> str:
336
337
  _ANSI_RE = re.compile(r"\033\[[0-9;]*m")
337
338
 
338
339
 
340
+ def _char_width(ch: str) -> int:
341
+ """Terminal display width of one character: 2 for wide/fullwidth CJK and
342
+ most emoji, 0 for a combining mark, 1 otherwise.
343
+
344
+ A pure-stdlib approximation of wcwidth via ``unicodedata`` — no dependency
345
+ to earn just for column math, and the two classes it distinguishes
346
+ (``unicodedata.east_asian_width`` returning "W"/"F") are exactly the ones
347
+ that render two columns wide in every terminal this CLI targets.
348
+ """
349
+ if unicodedata.combining(ch):
350
+ return 0
351
+ return 2 if unicodedata.east_asian_width(ch) in ("W", "F") else 1
352
+
353
+
339
354
  def visible_len(s: str) -> int:
340
- """Length of a string ignoring ANSI color escapes — its column width."""
341
- return len(_ANSI_RE.sub("", s))
355
+ """Column width of a string: ANSI escapes cost nothing, a wide character
356
+ (CJK, most emoji) costs 2, everything else costs 1.
357
+
358
+ ``len()`` alone undercounts any string holding a double-width character,
359
+ which is what silently misaligned a table the moment a cell held an emoji
360
+ or CJK text — the column budget was measured a codepoint short of what
361
+ the terminal actually draws.
362
+ """
363
+ return sum(_char_width(ch) for ch in _ANSI_RE.sub("", s))
342
364
 
343
365
 
344
366
  _CODE_SPAN_RE = re.compile(r"`[^`]*`")
@@ -457,13 +479,26 @@ _TRAFFIC = ((0xff, 0x5f, 0x57, RED), (0xfe, 0xbc, 0x2e, YELLOW),
457
479
  (0x28, 0xc8, 0x40, GREEN))
458
480
 
459
481
 
460
- def empty_state(message: str, hint: str | None = None) -> str:
482
+ def empty_state(message: str, hint: str | None = None, wrap: bool = False) -> str:
461
483
  """A standardized empty-state: a muted ○ bullet + message, with an optional
462
484
  dim → hint on the next line. One affordance so 'nothing here' always reads
463
- the same across commands."""
464
- out_lines = [" " + c("○ " + message, DIM)]
485
+ the same across commands.
486
+
487
+ ``wrap`` as in :func:`warn`: opt-in, folding each block to the pane rather
488
+ than always-on, so a call site with an atomic backtick-quoted command
489
+ (e.g. cohort's create hint) still gets that command whole rather than
490
+ split across lines. Both markers ("○ " / "→ ") are two visible columns,
491
+ matching the module's other 4-column-lead emitters (2-space indent + a
492
+ 2-wide marker), so message and hint wrap to the same budget.
493
+ """
494
+ def _block(marker: str, text: str) -> list[str]:
495
+ body = _wrap_lines(text, 4) if wrap else [text]
496
+ return ([" " + c(marker + body[0], DIM)]
497
+ + [" " + c(ln, DIM) for ln in body[1:]])
498
+
499
+ out_lines = _block("○ ", message)
465
500
  if hint:
466
- out_lines.append(" " + c("→ " + hint, DIM))
501
+ out_lines += _block("→ ", hint)
467
502
  return "\n".join(out_lines)
468
503
 
469
504
 
@@ -676,8 +711,11 @@ def _clip_visible(s: str, width: int, ellipsis: str = "…") -> str:
676
711
  had_escape = True
677
712
  i = m.end()
678
713
  continue
714
+ w = _char_width(s[i])
715
+ if vis + w > keep:
716
+ break # a wide character never gets cut in half for the ellipsis
679
717
  out_chars.append(s[i])
680
- vis += 1
718
+ vis += w
681
719
  i += 1
682
720
  result = "".join(out_chars) + ellipsis
683
721
  if had_escape and not result.endswith(RESET):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.2.36
3
+ Version: 1.2.38
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -196,6 +196,7 @@ docs/roadmap/items/BOOST-D23.md
196
196
  docs/roadmap/items/BOOST-D24.md
197
197
  docs/roadmap/items/BOOST-D25.md
198
198
  docs/roadmap/items/BOOST-D26.md
199
+ docs/roadmap/items/BOOST-D27.md
199
200
  docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md
200
201
  docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md
201
202
  docs/roadmap/items/actionlint-skips-shellcheck-silently.md
@@ -209,6 +210,7 @@ docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md
209
210
  docs/roadmap/items/bm25-has-no-stemming.md
210
211
  docs/roadmap/items/bm25-index-is-one-json-blob.md
211
212
  docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md
213
+ docs/roadmap/items/bmad-hooks-all-hosts.md
212
214
  docs/roadmap/items/boost-first-carried-the-losing-trigger.md
213
215
  docs/roadmap/items/boost-first-rule.md
214
216
  docs/roadmap/items/boost-langchain-publishing.md
@@ -573,6 +575,7 @@ tests/eval/golden.jsonl
573
575
  tests/eval/recommend.jsonl
574
576
  tests/eval/taps-scale.txt
575
577
  tests/eval/taps.txt
578
+ tests/functional/test_bmad_all_hosts.py
576
579
  tests/functional/test_capabilities_policy.py
577
580
  tests/functional/test_cli_adapt.py
578
581
  tests/functional/test_cli_bmad.py
@@ -48,9 +48,9 @@ boost bmad on
48
48
  ```
49
49
 
50
50
  It writes seven BMAD persona subagents into `~/.claude/agents/` and installs two
51
- hooks. A `SessionStart` hook briefs the session on the roster. A
52
- `UserPromptSubmit` hook classifies each incoming prompt and prefixes it with a
53
- short routing banner:
51
+ hooks on every host it finds. A `SessionStart` hook briefs the session on the
52
+ roster. A `UserPromptSubmit` hook classifies each incoming prompt and prefixes
53
+ it with a short routing banner:
54
54
 
55
55
  ```text
56
56
  [BMAD autopilot] track: build
@@ -92,6 +92,33 @@ contents, so the moment you edit one it stops being boost's. `boost bmad on`
92
92
  reports it as kept rather than overwriting it, and `boost bmad off` leaves it
93
93
  alone. Delete the file if you want the stock version back.
94
94
 
95
+ ### Which hosts get the hooks
96
+
97
+ `boost bmad on` writes its two hooks into every host it has evidence you use,
98
+ and re-running it changes nothing that is already correct.
99
+
100
+ - **Claude always.** It is boost's primary host, and the check deliberately is
101
+ not "is the `claude` binary on `PATH`" — `bmad on` only writes a
102
+ settings.json, so someone running inside Claude Code whose launcher is not on
103
+ boost's `PATH` would otherwise silently get no hooks. (`boost mcp register`
104
+ does gate on the binary, because it shells out to `claude mcp add` and
105
+ genuinely cannot work without it.)
106
+ - **Any other host on evidence of use** — its CLI on `PATH`, or its dotdir
107
+ already there. Writing into `~/.gemini/settings.json` for someone who has
108
+ never run Gemini is litter in a file boost does not own. Install that agent
109
+ later and the next `boost bmad on` picks it up.
110
+
111
+ boost translates on the way in. `UserPromptSubmit` is written as Gemini's
112
+ `BeforeAgent`, and `--timeout 10` means ten seconds on both hosts even though
113
+ Gemini's field is milliseconds. Matchers are **not** translated — they pass
114
+ through host-native — so Claude's `startup|resume|clear` source matcher is
115
+ applied only on Claude, where that vocabulary exists.
116
+
117
+ **The personas stay Claude-only.** A subagent definition is a Claude Code
118
+ contract, and Gemini's `agents/` slot validates its input, so a Claude-dialect
119
+ persona would be rejected. What a second host gets is prompt shaping: the
120
+ routing banner arrives and names a lead persona, but Gemini cannot spawn it.
121
+
95
122
  ## The full BMAD method
96
123
 
97
124
  The method itself is a separate, heavier install. `boost bmad install` delegates