boost-skill-cli 1.0.419__tar.gz → 1.0.421__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.
- {boost_skill_cli-1.0.419/boost_skill_cli.egg-info → boost_skill_cli-1.0.421}/PKG-INFO +65 -15
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/README.md +64 -14
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/_version.py +2 -2
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/cli.py +1 -1
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/commands/bmad.py +220 -47
- boost_skill_cli-1.0.421/boost_cli/core/bmad.py +692 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421/boost_skill_cli.egg-info}/PKG-INFO +65 -15
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_skill_cli.egg-info/SOURCES.txt +4 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/commands.html +9 -7
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/index.html +1 -1
- boost_skill_cli-1.0.421/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +96 -0
- boost_skill_cli-1.0.421/docs/roadmap/items/tool-call-eval-tier.md +65 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap.html +158 -2
- boost_skill_cli-1.0.421/tests/functional/test_cli_bmad.py +519 -0
- boost_skill_cli-1.0.421/tests/unit/test_bmad_core.py +594 -0
- boost_skill_cli-1.0.419/tests/functional/test_cli_bmad.py +0 -225
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/.gitattributes +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/.gitignore +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/.gitleaks.toml +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/.htmlvalidate.json +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/.lighthouserc.json +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/.lycheeignore +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/.markdownlint-cli2.jsonc +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/.pre-commit-config.yaml +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/.stylelintrc.json +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/.vale/styles/boost/Terminology.yml +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/.vale.ini +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/CLAUDE.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/CODE_OF_CONDUCT.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/CONTRIBUTING.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/LICENSE +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/MANIFEST.in +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/Makefile +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/SECURITY.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/__init__.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/__main__.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/cliparse.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/commands/__init__.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/commands/_common.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/commands/configuration.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/commands/discovery.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/commands/hooks.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/commands/info.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/commands/intelligence.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/commands/pkg.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/commands/quality.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/commands/run.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/commands/safety.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/commands/taps.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/commands/team.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/core/__init__.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/core/adapters.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/core/agents.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/core/ai.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/core/bootstrap.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/core/capabilities.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/core/catalog.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/core/chat.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/core/claude_settings.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/core/complete.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/core/config.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/core/dense.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/core/ed25519.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/core/embed.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/core/faithfulness.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/core/frontmatter.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/core/gitutil.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/core/imperative.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/core/injectscan.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/core/installscan.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/core/integrity.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/core/journal.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/core/localembed.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/core/lockfile.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/core/logs.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/core/mcp.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/core/mcpdecl.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/core/mcphost.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/core/minisign.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/core/nethttp.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/core/output.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/core/paths.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/core/policy.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/core/projectlock.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/core/provenance.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/core/rag.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/core/registry.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/core/resolve.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/core/rules.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/core/scopes.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/core/secretscan.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/core/selfupdate.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/core/serve.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/core/stackprobe.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/core/staleness.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/core/store.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/core/trustaudit.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/core/typosquat.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/core/updatediff.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/core/util.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/core/workflows.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/data/registries.json +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/errors.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_cli/spin.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_langchain/__init__.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_langchain/_compat.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_langchain/graph.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_langchain/loader.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_langchain/py.typed +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_langchain/retriever.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_skill_cli.egg-info/entry_points.txt +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_skill_cli.egg-info/requires.txt +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/boost_skill_cli.egg-info/top_level.txt +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/codecov.yml +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/.claude/settings.local.json +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/DEBUGGING.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/adapters.html +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/architecture/README.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/architecture/c4-components-core.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/architecture/c4-containers.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/architecture/c4-context.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/architecture/c4-dynamic-install.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/carousel/gifs/distill.gif +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/carousel/gifs/doctor.gif +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/carousel/gifs/explain.gif +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/carousel/gifs/hooks.gif +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/carousel/gifs/install.gif +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/carousel/gifs/pulse.gif +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/carousel/gifs/search.gif +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/carousel/gifs/tap.gif +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/carousel/tapes/distill.tape +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/carousel/tapes/doctor.tape +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/carousel/tapes/explain.tape +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/carousel/tapes/hooks.tape +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/carousel/tapes/install.tape +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/carousel/tapes/pulse.tape +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/carousel/tapes/search.tape +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/carousel/tapes/tap.tape +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/carousel.html +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/chat.html +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/demo-index.json +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/demo.gif +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/demo.html +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/demo.tape +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/design-roadmap.html +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/eval-latest.json +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/eval.html +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/langchain.html +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/mcp-hub.html +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/rag-architecture.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/BOOST-D01.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/BOOST-D02.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/BOOST-D03.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/BOOST-D04.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/BOOST-D05.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/BOOST-D06.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/BOOST-D07.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/BOOST-D08.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/BOOST-D09.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/BOOST-D10.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/BOOST-D11.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/BOOST-D12.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/BOOST-D13.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/BOOST-D14.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/BOOST-D15.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/BOOST-D16.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/BOOST-D17.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/BOOST-D18.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/BOOST-D19.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/BOOST-D20.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/BOOST-D21.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/BOOST-D22.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/BOOST-D23.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/BOOST-D24.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/BOOST-D25.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/BOOST-D26.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/boost-run-live-agents.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/command-carousel-page.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/command-reference-docs-site.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/github-community-health-files.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/html-validation-html-validate.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/license-compliance-scanning.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/mcp-aware-skills.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/required-checks-config-drift.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/typo-detection-codespell.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/update-diff-before-apply.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/workspace-scope-install.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/zip-strict-audit.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/eslint.config.mjs +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/evals/README.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/evals/__init__.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/evals/baseline.json +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/evals/faithfulness.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/evals/golden_set.json +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/evals/make_corpus.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/evals/make_golden.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/evals/metrics.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/evals/publish_golden_dataset.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/evals/run_evals.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/examples/README.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/examples/adapt-demo.sh +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/examples/boost-run-prototype.sh +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/index.html +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/noxfile.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/pyproject.toml +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/requirements/coverage-tools.in +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/requirements/coverage-tools.txt +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/requirements/lint-tools.in +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/requirements/lint-tools.txt +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/requirements/mutation-tools.in +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/requirements/mutation-tools.txt +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/requirements/platform-pins.lock +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/requirements/release-tools.in +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/requirements/release-tools.txt +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/requirements/test-tools.in +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/requirements/test-tools.txt +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/scripts/a11y_check.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/scripts/bench_cli.sh +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/scripts/build_command_reference.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/scripts/build_demo_index.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/scripts/build_registries.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/scripts/build_roadmap.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/scripts/build_scale_corpus.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/scripts/check_anchors.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/scripts/check_licenses.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/scripts/check_required_checks.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/scripts/ensure_eval_corpus.sh +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/scripts/eval_corpus.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/scripts/eval_explain.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/scripts/eval_gate.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/scripts/eval_recommend.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/scripts/eval_retrieval.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/scripts/eval_stats_summary.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/scripts/import_budget.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/scripts/lock_toolchain.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/scripts/mutation_gate.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/scripts/mutation_shards.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/scripts/mutation_weights.json +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/scripts/page_budget.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/scripts/perf_gate.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/scripts/post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/scripts/publish_eval_json.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/scripts/release_guard.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/scripts/release_preflight.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/scripts/serve_docs.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/setup.cfg +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/sonar-project.properties +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/style/README.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/style/boost.css +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/style/boost.js +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/style/demo.html +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/bdd/features/adapt.feature +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/bdd/features/browse.feature +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/bdd/features/count.feature +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/bdd/features/discover.feature +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/bdd/features/doctor.feature +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/bdd/features/environment.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/bdd/features/explain.feature +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/bdd/features/index.feature +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/bdd/features/install.feature +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/bdd/features/list.feature +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/bdd/features/mcp.feature +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/bdd/features/search.feature +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/bdd/features/steps/cli_steps.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/bdd/features/steps/discovery_steps.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/bdd/features/steps/mcp_steps.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/bdd/features/steps/quality_steps.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/conftest.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/eval/baseline.json +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/eval/explain.jsonl +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/eval/golden-natural.jsonl +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/eval/golden.jsonl +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/eval/recommend.jsonl +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/eval/taps-scale.txt +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/eval/taps.txt +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/functional/test_capabilities_policy.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/functional/test_cli_adapt.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/functional/test_cli_chat.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/functional/test_cli_configuration.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/functional/test_cli_discovery.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/functional/test_cli_hooks.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/functional/test_cli_info.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/functional/test_cli_intelligence.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/functional/test_cli_pkg.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/functional/test_cli_quality.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/functional/test_cli_taps.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/functional/test_cli_team.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/functional/test_everyday_loop.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/functional/test_integrity_enforce.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/functional/test_kind_conformance.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/functional/test_property_parsers.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/functional/test_run.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/functional/test_tap_signing.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/functional/test_workspace_scope.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/fuzz/README.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/fuzz/corpus/registry/02-https.txt +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/fuzz/corpus/registry/06-space.txt +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/fuzz/fuzz_frontmatter.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/fuzz/fuzz_registry.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/langchain/conftest.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/langchain/test_graph.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/langchain/test_loader.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/langchain/test_retriever.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/make_fixture.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/perf/test_benchmarks.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/smoke.sh +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_a11y_check.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_adapters.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_adapters_multi.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_adapters_runner.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_agents.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_ai.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_bootstrap.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_capabilities.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_catalog.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_chat.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_check_anchors.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_check_licenses.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_claude_settings.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_cliparse.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_codeql_analysis_key.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_command_reference_fresh.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_community_health_files.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_complete.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_config.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_content_dedupe.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_dedup_trust.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_demo_index.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_dense.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_dense_fallback.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_dense_fix_hint.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_dense_shards.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_dense_status.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_dependabot_config.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_docs_pages_linked.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_docsite_chrome.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_ed25519.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_embed.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_embed_local.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_entry_key.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_errors_and_cli_table.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_eval_baseline.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_eval_corpus.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_eval_faithfulness.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_eval_gate.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_eval_grading.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_eval_metrics.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_eval_stats_summary.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_faithfulness.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_frontmatter.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_fuzz_targets.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_gitleaks_config.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_gitutil.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_imperative.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_import_budget.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_injectscan.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_installscan.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_integrity.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_journal.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_langchain_packaging.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_link_ownership.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_localembed.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_localembed_e2e.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_lockfile.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_logs.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_marketing_counts.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_mcp.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_mcp_install_scan.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_mcpdecl.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_mcphost.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_minisign.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_mutation_hardening.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_mutation_shards.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_mutation_subfile_shards.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_mutmut_source_paths.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_nethttp.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_output.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_page_budget.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_paths.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_perf_gate.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_pkg_confusions.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_pkg_injection.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_pkg_secrets.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_platform_pins.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_policy.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_post_deploy_smoke.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_project_mcp_sidecar.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_projectlock.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_provenance.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_rag.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_rag_fusion.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_registries_fresh.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_registry.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_registry_categories.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_release_guard.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_release_preflight.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_required_checks.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_resolve.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_roadmap_fresh.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_rules.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_scale_corpus.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_scopes.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_secretscan.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_selfupdate.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_serve.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_serve_docs.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_spin.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_stackprobe.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_staleness.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_store.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_token_parity.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_toolchain_lock.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_trustaudit.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_typosquat.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_updatediff.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_util.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_version.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_workflow_concurrency.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_workflow_timeouts.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/unit/test_workflows.py +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/visual/a11y_check.mjs +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/visual/console_check.mjs +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/visual/package-lock.json +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/visual/package.json +0 -0
- {boost_skill_cli-1.0.419 → boost_skill_cli-1.0.421}/tests/visual/visual_check.mjs +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: boost-skill-cli
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.421
|
|
4
4
|
Summary: boost — Homebrew for AI coding skills
|
|
5
5
|
Author: Jonathan Reyes
|
|
6
6
|
License: GNU GENERAL PUBLIC LICENSE
|
|
@@ -1016,29 +1016,79 @@ boost hooks list
|
|
|
1016
1016
|
boost hooks remove -n greet --scope project
|
|
1017
1017
|
```
|
|
1018
1018
|
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1019
|
+
### BMAD autopilot
|
|
1020
|
+
|
|
1021
|
+
`boost bmad on` is a one-time, global switch that puts the
|
|
1022
|
+
[BMAD Method](https://bmadcode.com/)'s personas in charge of every task that
|
|
1023
|
+
arrives, without you having to invoke anything. No Node, no network, one
|
|
1024
|
+
command:
|
|
1025
|
+
|
|
1026
|
+
```bash
|
|
1027
|
+
boost bmad on # ← that's it
|
|
1028
|
+
```
|
|
1029
|
+
|
|
1030
|
+
It writes seven BMAD persona subagents into `~/.claude/agents/` and installs two
|
|
1031
|
+
hooks. A `SessionStart` hook briefs the session on the roster; a
|
|
1032
|
+
`UserPromptSubmit` hook classifies each incoming prompt and prefixes it with a
|
|
1033
|
+
short routing banner:
|
|
1034
|
+
|
|
1035
|
+
```text
|
|
1036
|
+
[BMAD autopilot] track: build
|
|
1037
|
+
Lead: `bmad-dev` subagent — Amelia, Senior Software Engineer. Ship it complete and verified.
|
|
1038
|
+
Support: `bmad-tea` (Murat), `bmad-scribe` (Paige) — spawn them with the Agent tool…
|
|
1039
|
+
BMAD skill: `bmad-build` — invoke it if it is installed; otherwise the persona's own playbook stands.
|
|
1040
|
+
Done means: tests: add or update coverage under `tests/`, and run them · docs: update
|
|
1041
|
+
`README.md` / `docs/` wherever the change shows · roadmap: create or claim the item under
|
|
1042
|
+
`docs/roadmap/items/` · gate: `make check` green, with real output · `CLAUDE.md` is binding
|
|
1043
|
+
Work autonomously through to a finished, verified change; stop to ask only when a choice
|
|
1044
|
+
would change what gets delivered.
|
|
1045
|
+
```
|
|
1046
|
+
|
|
1047
|
+
Nine tracks (`build`, `quality`, `docs`, `planning`, `product`, `architecture`,
|
|
1048
|
+
`ux`, `discovery`, `review`) each name a lead persona, the support personas to
|
|
1049
|
+
spawn alongside it, and the canonical BMAD v6 skill for that kind of work.
|
|
1050
|
+
**That last line is the point**: the definition of done is read off the repo in
|
|
1051
|
+
front of you — your test directory, your docs, your roadmap items, your gate
|
|
1052
|
+
command — so documentation, testing and roadmap bookkeeping travel with the task
|
|
1053
|
+
instead of being remembered afterwards.
|
|
1054
|
+
|
|
1055
|
+
The router costs a question nothing. Acknowledgements, slash commands, short
|
|
1056
|
+
informational questions ("what does `scan_dir` do?") and anything containing
|
|
1057
|
+
`no bmad` produce **no banner at all** — and because a `UserPromptSubmit` hook
|
|
1058
|
+
that exits non-zero would erase your prompt, it degrades every failure to
|
|
1059
|
+
silence and always exits 0.
|
|
1060
|
+
|
|
1061
|
+
```bash
|
|
1062
|
+
boost bmad personas # the roster, and whether it's installed
|
|
1063
|
+
boost bmad route "add tests for the scanner" --plain # what would this route to?
|
|
1064
|
+
boost bmad doctor # autopilot + workflow state, both scopes
|
|
1065
|
+
boost bmad off # remove the hooks and the personas
|
|
1066
|
+
boost bmad on --scope project # or keep it to one repo
|
|
1067
|
+
```
|
|
1068
|
+
|
|
1069
|
+
Every persona file carries an ownership stamp containing a digest of its own
|
|
1070
|
+
contents, so **the moment you edit one it stops being boost's**: `boost bmad on`
|
|
1071
|
+
reports it as kept rather than overwriting it, and `boost bmad off` leaves it
|
|
1072
|
+
alone. Delete the file if you want the stock version back.
|
|
1073
|
+
|
|
1074
|
+
**The full method** is still a separate, heavier install. `boost bmad install`
|
|
1075
|
+
delegates to the canonical `npx bmad-method install` (needs Node.js 20.12+) for
|
|
1076
|
+
the `bmad-*` workflow skills and the per-project `_bmad/` runtime they read on
|
|
1077
|
+
activation:
|
|
1024
1078
|
|
|
1025
1079
|
```bash
|
|
1026
1080
|
boost bmad install --scope project # skills + per-project _bmad/ runtime
|
|
1027
1081
|
boost bmad install --scope global # skills into ~/.claude/skills for every session
|
|
1028
1082
|
boost bmad init # add the _bmad/ runtime to the current repo
|
|
1029
|
-
boost bmad startup on
|
|
1030
|
-
boost bmad startup off # stop injecting it (skills stay installed)
|
|
1083
|
+
boost bmad startup on|off # just the SessionStart briefing
|
|
1031
1084
|
boost bmad disable / enable # quarantine / restore skills (recoverable)
|
|
1032
1085
|
boost bmad uninstall # delete skills + _bmad/ for a scope
|
|
1033
|
-
boost bmad doctor # what's installed where
|
|
1034
1086
|
```
|
|
1035
1087
|
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
skipping the full brief → PRD → architecture ceremony unless you ask for full
|
|
1041
|
-
planning. Global installs stage the installer in a temp dir and copy only the
|
|
1088
|
+
The two compose. The autopilot routes at `bmad-build`, `bmad-prd` and friends
|
|
1089
|
+
whether or not they are installed and says which case you're in — with the
|
|
1090
|
+
skills present you get BMAD's full workflow, without them the persona's own
|
|
1091
|
+
playbook. Global installs stage the installer in a temp dir and copy only the
|
|
1042
1092
|
`bmad-*` skills, so `$HOME` never gets a stray `_bmad/` — the workflow runtime
|
|
1043
1093
|
stays per-project.
|
|
1044
1094
|
|
|
@@ -298,29 +298,79 @@ boost hooks list
|
|
|
298
298
|
boost hooks remove -n greet --scope project
|
|
299
299
|
```
|
|
300
300
|
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
301
|
+
### BMAD autopilot
|
|
302
|
+
|
|
303
|
+
`boost bmad on` is a one-time, global switch that puts the
|
|
304
|
+
[BMAD Method](https://bmadcode.com/)'s personas in charge of every task that
|
|
305
|
+
arrives, without you having to invoke anything. No Node, no network, one
|
|
306
|
+
command:
|
|
307
|
+
|
|
308
|
+
```bash
|
|
309
|
+
boost bmad on # ← that's it
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
It writes seven BMAD persona subagents into `~/.claude/agents/` and installs two
|
|
313
|
+
hooks. A `SessionStart` hook briefs the session on the roster; a
|
|
314
|
+
`UserPromptSubmit` hook classifies each incoming prompt and prefixes it with a
|
|
315
|
+
short routing banner:
|
|
316
|
+
|
|
317
|
+
```text
|
|
318
|
+
[BMAD autopilot] track: build
|
|
319
|
+
Lead: `bmad-dev` subagent — Amelia, Senior Software Engineer. Ship it complete and verified.
|
|
320
|
+
Support: `bmad-tea` (Murat), `bmad-scribe` (Paige) — spawn them with the Agent tool…
|
|
321
|
+
BMAD skill: `bmad-build` — invoke it if it is installed; otherwise the persona's own playbook stands.
|
|
322
|
+
Done means: tests: add or update coverage under `tests/`, and run them · docs: update
|
|
323
|
+
`README.md` / `docs/` wherever the change shows · roadmap: create or claim the item under
|
|
324
|
+
`docs/roadmap/items/` · gate: `make check` green, with real output · `CLAUDE.md` is binding
|
|
325
|
+
Work autonomously through to a finished, verified change; stop to ask only when a choice
|
|
326
|
+
would change what gets delivered.
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
Nine tracks (`build`, `quality`, `docs`, `planning`, `product`, `architecture`,
|
|
330
|
+
`ux`, `discovery`, `review`) each name a lead persona, the support personas to
|
|
331
|
+
spawn alongside it, and the canonical BMAD v6 skill for that kind of work.
|
|
332
|
+
**That last line is the point**: the definition of done is read off the repo in
|
|
333
|
+
front of you — your test directory, your docs, your roadmap items, your gate
|
|
334
|
+
command — so documentation, testing and roadmap bookkeeping travel with the task
|
|
335
|
+
instead of being remembered afterwards.
|
|
336
|
+
|
|
337
|
+
The router costs a question nothing. Acknowledgements, slash commands, short
|
|
338
|
+
informational questions ("what does `scan_dir` do?") and anything containing
|
|
339
|
+
`no bmad` produce **no banner at all** — and because a `UserPromptSubmit` hook
|
|
340
|
+
that exits non-zero would erase your prompt, it degrades every failure to
|
|
341
|
+
silence and always exits 0.
|
|
342
|
+
|
|
343
|
+
```bash
|
|
344
|
+
boost bmad personas # the roster, and whether it's installed
|
|
345
|
+
boost bmad route "add tests for the scanner" --plain # what would this route to?
|
|
346
|
+
boost bmad doctor # autopilot + workflow state, both scopes
|
|
347
|
+
boost bmad off # remove the hooks and the personas
|
|
348
|
+
boost bmad on --scope project # or keep it to one repo
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
Every persona file carries an ownership stamp containing a digest of its own
|
|
352
|
+
contents, so **the moment you edit one it stops being boost's**: `boost bmad on`
|
|
353
|
+
reports it as kept rather than overwriting it, and `boost bmad off` leaves it
|
|
354
|
+
alone. Delete the file if you want the stock version back.
|
|
355
|
+
|
|
356
|
+
**The full method** is still a separate, heavier install. `boost bmad install`
|
|
357
|
+
delegates to the canonical `npx bmad-method install` (needs Node.js 20.12+) for
|
|
358
|
+
the `bmad-*` workflow skills and the per-project `_bmad/` runtime they read on
|
|
359
|
+
activation:
|
|
306
360
|
|
|
307
361
|
```bash
|
|
308
362
|
boost bmad install --scope project # skills + per-project _bmad/ runtime
|
|
309
363
|
boost bmad install --scope global # skills into ~/.claude/skills for every session
|
|
310
364
|
boost bmad init # add the _bmad/ runtime to the current repo
|
|
311
|
-
boost bmad startup on
|
|
312
|
-
boost bmad startup off # stop injecting it (skills stay installed)
|
|
365
|
+
boost bmad startup on|off # just the SessionStart briefing
|
|
313
366
|
boost bmad disable / enable # quarantine / restore skills (recoverable)
|
|
314
367
|
boost bmad uninstall # delete skills + _bmad/ for a scope
|
|
315
|
-
boost bmad doctor # what's installed where
|
|
316
368
|
```
|
|
317
369
|
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
skipping the full brief → PRD → architecture ceremony unless you ask for full
|
|
323
|
-
planning. Global installs stage the installer in a temp dir and copy only the
|
|
370
|
+
The two compose. The autopilot routes at `bmad-build`, `bmad-prd` and friends
|
|
371
|
+
whether or not they are installed and says which case you're in — with the
|
|
372
|
+
skills present you get BMAD's full workflow, without them the persona's own
|
|
373
|
+
playbook. Global installs stage the installer in a temp dir and copy only the
|
|
324
374
|
`bmad-*` skills, so `$HOME` never gets a stray `_bmad/` — the workflow runtime
|
|
325
375
|
stays per-project.
|
|
326
376
|
|
|
@@ -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.0.
|
|
22
|
-
__version_tuple__ = version_tuple = (1, 0,
|
|
21
|
+
__version__ = version = '1.0.421'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 0, 421)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -124,7 +124,7 @@ COMMANDS = [
|
|
|
124
124
|
("serve", "cfg", "configuration", "Serve the skill catalog over HTTP (port 8787)"),
|
|
125
125
|
("mcp", "cfg", "configuration", "Register boost as an MCP server (Claude Code, Gemini CLI)"),
|
|
126
126
|
("hooks", "cfg", "hooks", "Manage Claude Code hooks (scope-aware) in settings.json"),
|
|
127
|
-
("bmad", "cfg", "bmad", "
|
|
127
|
+
("bmad", "cfg", "bmad", "BMAD Method autopilot — `bmad on` routes every task to a persona"),
|
|
128
128
|
("self-update", "cfg", "configuration", "Update boost itself to the latest version"),
|
|
129
129
|
# Team & Collaboration (6)
|
|
130
130
|
("cohort", "team", "team", "Controlled skill rollouts & team A/B testing"),
|
|
@@ -1,21 +1,46 @@
|
|
|
1
|
-
"""boost bmad —
|
|
1
|
+
"""boost bmad — the BMAD Method as a one-command, global autopilot.
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
There are two surfaces here, and the split is the whole design.
|
|
4
|
+
|
|
5
|
+
**The autopilot** is `boost bmad on`. One command, global by default, no Node
|
|
6
|
+
and no network: it writes the seven BMAD persona subagents into
|
|
7
|
+
`~/.claude/agents/`, and installs two hooks — a `SessionStart` briefing and a
|
|
8
|
+
`UserPromptSubmit` router. After that, every substantive prompt arrives already
|
|
9
|
+
carrying the persona that should lead it, the support personas to spawn
|
|
10
|
+
alongside, the BMAD skill for that track, and a definition of done read off the
|
|
11
|
+
repo in front of it (its test dir, its docs, its roadmap items, its gate
|
|
12
|
+
command). Trivial asks get nothing, so the router costs a question nothing. All
|
|
13
|
+
of the thinking lives in :mod:`boost_cli.core.bmad`; this module is glue.
|
|
14
|
+
|
|
15
|
+
boost bmad on # <- the one command. global.
|
|
16
|
+
boost bmad off # remove hooks + boost-written personas
|
|
17
|
+
boost bmad personas # the roster, and whether it is installed
|
|
18
|
+
boost bmad route [PROMPT] [--plain] # hook target; pipeable for debugging
|
|
19
|
+
|
|
20
|
+
**The full method** is `boost bmad install`, unchanged: it delegates to the
|
|
21
|
+
canonical `npx bmad-method install` (Node.js 20.12+) for the `bmad-*` workflow
|
|
22
|
+
skills and the per-project `_bmad/` runtime they read on activation.
|
|
6
23
|
|
|
7
24
|
boost bmad install --scope project # skills + _bmad/ runtime in this repo
|
|
8
|
-
boost bmad install --scope global # skills into ~/.claude/skills
|
|
25
|
+
boost bmad install --scope global # skills into ~/.claude/skills
|
|
9
26
|
boost bmad init # add _bmad/ runtime to the current repo
|
|
10
|
-
boost bmad startup on|off|status #
|
|
11
|
-
# (biases build/fix/change work to bmad-quick-dev)
|
|
27
|
+
boost bmad startup on|off|status # just the SessionStart briefing
|
|
12
28
|
boost bmad disable / enable # quarantine / restore skills (recoverable)
|
|
13
29
|
boost bmad uninstall # delete skills + _bmad/ for a scope
|
|
14
30
|
boost bmad doctor # what's installed where
|
|
15
31
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
32
|
+
The two compose: the autopilot routes at `bmad-build` and friends whether or
|
|
33
|
+
not they are installed, and says so — with the skills present you get BMAD's
|
|
34
|
+
full workflow, without them you get the persona's own playbook. Global installs
|
|
35
|
+
stage the installer in a temp dir and copy only the `bmad-*` skills into
|
|
36
|
+
~/.claude/skills, so $HOME never gets a stray `_bmad/`; the runtime is
|
|
37
|
+
per-project by design.
|
|
38
|
+
|
|
39
|
+
Both surfaces are **Claude Code only**, and deliberately so: subagent
|
|
40
|
+
definitions and `SessionStart`/`UserPromptSubmit` hooks are Claude Code
|
|
41
|
+
contracts with no equivalent in the other three agents boost targets, and BMAD's
|
|
42
|
+
own installer likewise takes `--tools claude-code`. This is the one part of
|
|
43
|
+
boost that does not fan out over `agents.enabled_agents()`.
|
|
19
44
|
"""
|
|
20
45
|
from __future__ import annotations
|
|
21
46
|
|
|
@@ -26,11 +51,13 @@ import re
|
|
|
26
51
|
import shlex
|
|
27
52
|
import shutil
|
|
28
53
|
import subprocess
|
|
54
|
+
import sys
|
|
29
55
|
import tempfile
|
|
30
56
|
from contextlib import suppress
|
|
31
57
|
from pathlib import Path
|
|
32
58
|
|
|
33
59
|
from .. import cliparse
|
|
60
|
+
from ..core import bmad as core
|
|
34
61
|
from ..core import claude_settings as cs
|
|
35
62
|
from ..core import journal, paths, util
|
|
36
63
|
from ..core import output as out
|
|
@@ -39,51 +66,39 @@ from ..errors import BoostError
|
|
|
39
66
|
DEFAULT_MODULES = "bmm"
|
|
40
67
|
HOOK_NAME = "bmad"
|
|
41
68
|
HOOK_MATCHER = "startup|resume|clear"
|
|
69
|
+
ROUTE_HOOK_NAME = "bmad-route"
|
|
42
70
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
BMAD-aware without hijacking simple requests: use the workflow when the user is
|
|
46
|
-
planning or building a feature; answer trivial one-off asks directly.
|
|
47
|
-
|
|
48
|
-
Entry point: invoke the `bmad-help` skill to assess state and recommend a step.
|
|
49
|
-
|
|
50
|
-
Persona agents (skills): bmad-agent-analyst (Mary, research/brief),
|
|
51
|
-
bmad-agent-pm (John, PRD), bmad-agent-architect (Winston, architecture),
|
|
52
|
-
bmad-agent-ux-designer (Sally), bmad-agent-dev (Amelia, implementation),
|
|
53
|
-
bmad-agent-tech-writer (Paige).
|
|
54
|
-
|
|
55
|
-
Phases: Analysis (bmad-brainstorming -> bmad-product-brief -> research) ->
|
|
56
|
-
Planning (bmad-prd -> bmad-architecture -> bmad-create-epics-and-stories) ->
|
|
57
|
-
Build (bmad-sprint-planning -> bmad-create-story -> bmad-dev-story ->
|
|
58
|
-
bmad-code-review -> bmad-qa-generate-e2e-tests -> bmad-retrospective).
|
|
59
|
-
|
|
60
|
-
Default bias: for a build, fix, change, or refactor request, go straight to the
|
|
61
|
-
`bmad-quick-dev` skill (clarify -> plan -> implement -> review) — skip the full
|
|
62
|
-
brief -> PRD -> architecture ceremony unless the user asks for full planning.
|
|
63
|
-
|
|
64
|
-
Full workflows need a per-project `_bmad/` runtime — run `boost bmad init` in a
|
|
65
|
-
repo if it isn't there yet. Turn this orientation off with `boost bmad startup off`."""
|
|
66
|
-
|
|
67
|
-
_ACTIONS = ("install", "init", "startup", "orient", "uninstall",
|
|
68
|
-
"disable", "enable", "doctor", "status")
|
|
71
|
+
_ACTIONS = ("on", "off", "route", "personas", "install", "init", "startup",
|
|
72
|
+
"orient", "uninstall", "disable", "enable", "doctor", "status")
|
|
69
73
|
|
|
70
74
|
|
|
71
75
|
def cmd_bmad(argv) -> int:
|
|
72
76
|
p = cliparse.parser(
|
|
73
77
|
prog="boost bmad",
|
|
74
|
-
description="
|
|
78
|
+
description="BMAD Method autopilot: personas, prompt routing, workflows")
|
|
75
79
|
p.add_argument("action", choices=_ACTIONS, help=" | ".join(_ACTIONS))
|
|
76
|
-
p.add_argument("value", nargs="?",
|
|
80
|
+
p.add_argument("value", nargs="?",
|
|
81
|
+
help="startup: on | off | status · route: the prompt to classify")
|
|
77
82
|
p.add_argument("-s", "--scope", choices=("project", "global"), default=None,
|
|
78
|
-
help="target scope (default: project)")
|
|
83
|
+
help="target scope (on/off default: global; others: project)")
|
|
79
84
|
p.add_argument("--modules", default=DEFAULT_MODULES,
|
|
80
85
|
help="BMAD modules to install (default: %s)" % DEFAULT_MODULES)
|
|
81
86
|
p.add_argument("-y", "--yes", action="store_true",
|
|
82
87
|
help="skip confirmation prompts")
|
|
83
88
|
p.add_argument("--startup", action="store_true",
|
|
84
89
|
help="enable the startup toggle right after install")
|
|
90
|
+
p.add_argument("--plain", action="store_true",
|
|
91
|
+
help="route: print the banner as text, not as hook JSON")
|
|
85
92
|
args = p.parse_args(argv)
|
|
86
93
|
|
|
94
|
+
if args.action == "on":
|
|
95
|
+
return _autopilot_on(args.scope)
|
|
96
|
+
if args.action == "off":
|
|
97
|
+
return _autopilot_off(args.scope)
|
|
98
|
+
if args.action == "route":
|
|
99
|
+
return _route(args.value, args.plain)
|
|
100
|
+
if args.action == "personas":
|
|
101
|
+
return _personas(args.scope)
|
|
87
102
|
if args.action == "install":
|
|
88
103
|
return _install(args.scope, args.modules, args.startup)
|
|
89
104
|
if args.action == "init":
|
|
@@ -101,6 +116,152 @@ def cmd_bmad(argv) -> int:
|
|
|
101
116
|
return _doctor() # doctor | status
|
|
102
117
|
|
|
103
118
|
|
|
119
|
+
# ------------------------------------------------------------------- autopilot
|
|
120
|
+
|
|
121
|
+
def _agents_dir(scope) -> Path:
|
|
122
|
+
"""Where Claude Code reads subagent definitions for a scope."""
|
|
123
|
+
base = paths.home() if scope == "global" else Path.cwd()
|
|
124
|
+
return base / ".claude" / "agents"
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
def _never_fails(command: str) -> str:
|
|
128
|
+
"""Make a hook command structurally incapable of reporting failure.
|
|
129
|
+
|
|
130
|
+
`_route` is careful to always exit 0 — but argparse never gets that far. The
|
|
131
|
+
hook is installed against :func:`paths.launcher`, i.e. whatever `boost` is on
|
|
132
|
+
PATH, which is not necessarily the build that wrote the hook: a stale pipx
|
|
133
|
+
install, or a later downgrade, reaches `bmad route`, does not recognise the
|
|
134
|
+
action, and exits **2**. On UserPromptSubmit exit 2 does not merely log — it
|
|
135
|
+
blocks the prompt and erases it from the transcript, so every message the
|
|
136
|
+
user typed would vanish until they found the hook.
|
|
137
|
+
|
|
138
|
+
`|| true` closes that at the shell, outside any version of boost. The
|
|
139
|
+
`# boost:<name>` ownership marker `claude_settings` appends still parses as a
|
|
140
|
+
trailing comment.
|
|
141
|
+
"""
|
|
142
|
+
return command + " || true"
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
def _autopilot_on(scope) -> int:
|
|
146
|
+
"""The one command. Personas + orientation + router, in one idempotent pass.
|
|
147
|
+
|
|
148
|
+
Global by default: the point of the autopilot is that a task arriving in
|
|
149
|
+
*any* repo already knows which persona owns it, and per-project setup would
|
|
150
|
+
make that a per-repo chore.
|
|
151
|
+
"""
|
|
152
|
+
scope = scope or "global"
|
|
153
|
+
agents = _agents_dir(scope)
|
|
154
|
+
slugs, skipped = core.write_personas(agents)
|
|
155
|
+
|
|
156
|
+
launcher = shlex.quote(str(paths.launcher()))
|
|
157
|
+
cs.add_hook(scope, "SessionStart", HOOK_NAME,
|
|
158
|
+
_never_fails("%s bmad orient --scope %s" % (launcher, scope)),
|
|
159
|
+
matcher=HOOK_MATCHER)
|
|
160
|
+
cs.add_hook(scope, "UserPromptSubmit", ROUTE_HOOK_NAME,
|
|
161
|
+
_never_fails("%s bmad route" % launcher))
|
|
162
|
+
_set_scope_state(scope, autopilot=True, startup=True, personas=len(slugs),
|
|
163
|
+
enabled_at=util.now_iso())
|
|
164
|
+
journal.log("bmad-autopilot", "on", scope=scope, personas=len(slugs))
|
|
165
|
+
|
|
166
|
+
out.ok("BMAD autopilot ON (%s) — %d persona subagent(s) + prompt router"
|
|
167
|
+
% (scope, len(slugs)))
|
|
168
|
+
if skipped:
|
|
169
|
+
out.warn("kept your edits to %d persona(s): %s"
|
|
170
|
+
% (len(skipped), ", ".join(skipped)))
|
|
171
|
+
out.dim(" delete the file to let `boost bmad on` restore the stock version")
|
|
172
|
+
out.dim(" personas → %s" % paths.tilde(agents))
|
|
173
|
+
out.dim(" hooks → %s (SessionStart + UserPromptSubmit)"
|
|
174
|
+
% paths.tilde(cs.settings_path(scope)))
|
|
175
|
+
out.dim(" every substantive prompt now names its lead persona and its "
|
|
176
|
+
"definition of done; trivial asks are left alone")
|
|
177
|
+
# Claude Code only watches an agents dir that existed when the session
|
|
178
|
+
# started, so a first-ever install is invisible until the next launch.
|
|
179
|
+
out.info("restart your agent session to pick up the new subagents")
|
|
180
|
+
out.dim(" full BMAD workflow skills (needs Node): boost bmad install")
|
|
181
|
+
return 0
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
def _autopilot_off(scope) -> int:
|
|
185
|
+
scope = scope or "global"
|
|
186
|
+
cs.remove_hook(scope, "SessionStart", HOOK_NAME)
|
|
187
|
+
cs.remove_hook(scope, "UserPromptSubmit", ROUTE_HOOK_NAME)
|
|
188
|
+
removed = core.remove_personas(_agents_dir(scope))
|
|
189
|
+
_set_scope_state(scope, autopilot=False, startup=False, personas=0)
|
|
190
|
+
journal.log("bmad-autopilot", "off", scope=scope, personas=len(removed))
|
|
191
|
+
out.ok("BMAD autopilot OFF (%s) — removed %d persona(s) and both hooks"
|
|
192
|
+
% (scope, len(removed)))
|
|
193
|
+
out.dim(" hand-edited personas were left in place")
|
|
194
|
+
return 0
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
def _read_hook_stdin() -> dict:
|
|
198
|
+
"""Claude Code's UserPromptSubmit payload, or {} for anything unreadable.
|
|
199
|
+
|
|
200
|
+
Accepts plain text too, so `echo "add tests for the scanner" | boost bmad
|
|
201
|
+
route` works for a human debugging the routing table. (Give it a real
|
|
202
|
+
prompt: anything under `core.MIN_WORDS` words classifies as trivial and
|
|
203
|
+
prints nothing, which reads like a broken install.)
|
|
204
|
+
"""
|
|
205
|
+
try:
|
|
206
|
+
if sys.stdin.isatty():
|
|
207
|
+
return {} # interactive: don't block waiting for an EOF
|
|
208
|
+
raw = sys.stdin.read().strip()
|
|
209
|
+
except (OSError, ValueError, UnicodeDecodeError):
|
|
210
|
+
return {}
|
|
211
|
+
if not raw:
|
|
212
|
+
return {}
|
|
213
|
+
try:
|
|
214
|
+
data = json.loads(raw)
|
|
215
|
+
except ValueError:
|
|
216
|
+
return {"prompt": raw}
|
|
217
|
+
return data if isinstance(data, dict) else {"prompt": raw}
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
def _route(prompt, plain) -> int:
|
|
221
|
+
"""UserPromptSubmit hook target: classify, then emit the routing banner.
|
|
222
|
+
|
|
223
|
+
This runs on every single prompt, so it has exactly one hard rule: **always
|
|
224
|
+
exit 0**. On UserPromptSubmit an exit code of 2 blocks the prompt and erases
|
|
225
|
+
it from the transcript — a crash here would eat the user's message. Every
|
|
226
|
+
failure mode therefore degrades to silence.
|
|
227
|
+
"""
|
|
228
|
+
try:
|
|
229
|
+
payload = {} if prompt else _read_hook_stdin()
|
|
230
|
+
text = prompt or str(payload.get("prompt") or "")
|
|
231
|
+
cwd = payload.get("cwd")
|
|
232
|
+
root = Path(cwd) if cwd else Path.cwd()
|
|
233
|
+
banner = core.route_context(text, root)
|
|
234
|
+
except Exception: # a hook must never break the session
|
|
235
|
+
return 0
|
|
236
|
+
if not banner:
|
|
237
|
+
return 0
|
|
238
|
+
if plain:
|
|
239
|
+
print(banner)
|
|
240
|
+
return 0
|
|
241
|
+
print(json.dumps({"hookSpecificOutput": {
|
|
242
|
+
"hookEventName": "UserPromptSubmit",
|
|
243
|
+
"additionalContext": banner,
|
|
244
|
+
}}))
|
|
245
|
+
return 0
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
def _personas(scope) -> int:
|
|
249
|
+
scope = scope or "global"
|
|
250
|
+
agents = _agents_dir(scope)
|
|
251
|
+
live = set(core.installed_personas(agents))
|
|
252
|
+
out.heading("BMAD personas — %s" % scope)
|
|
253
|
+
for p in core.PERSONAS:
|
|
254
|
+
mark = "installed" if p.slug in live else "not installed"
|
|
255
|
+
# width 16: `bmad-architect` is exactly the default 14, which leaves no
|
|
256
|
+
# gap between the key and the value.
|
|
257
|
+
out.kv(p.slug, "%s, %s (%s) — %s"
|
|
258
|
+
% (p.character, p.title, p.module, mark), width=16)
|
|
259
|
+
out.dim(" → %s" % paths.tilde(agents))
|
|
260
|
+
if not live:
|
|
261
|
+
out.dim(" install them with `boost bmad on`")
|
|
262
|
+
return 0
|
|
263
|
+
|
|
264
|
+
|
|
104
265
|
# ------------------------------------------------------------------- provisioning
|
|
105
266
|
|
|
106
267
|
def _require_npx() -> None:
|
|
@@ -223,11 +384,11 @@ def _startup(value, scope) -> int:
|
|
|
223
384
|
|
|
224
385
|
|
|
225
386
|
def _orient(scope) -> int:
|
|
226
|
-
"""SessionStart hook target: print
|
|
387
|
+
"""SessionStart hook target: print the briefing iff enabled (else silent)."""
|
|
227
388
|
scope = scope or "project"
|
|
228
389
|
with suppress(Exception): # a hook must never break the session
|
|
229
390
|
if _get_scope_state(scope).get("startup"):
|
|
230
|
-
print(
|
|
391
|
+
print(core.orientation())
|
|
231
392
|
return 0
|
|
232
393
|
|
|
233
394
|
|
|
@@ -253,7 +414,9 @@ def _uninstall(scope, yes) -> int:
|
|
|
253
414
|
out.info("aborted")
|
|
254
415
|
return 0
|
|
255
416
|
cs.remove_hook(scope, "SessionStart", HOOK_NAME)
|
|
417
|
+
cs.remove_hook(scope, "UserPromptSubmit", ROUTE_HOOK_NAME)
|
|
256
418
|
removed = _rm_skills(_skills_dir(scope))
|
|
419
|
+
removed += len(core.remove_personas(_agents_dir(scope)))
|
|
257
420
|
if scope == "project":
|
|
258
421
|
for extra in ("_bmad", "_bmad-output"):
|
|
259
422
|
pth = Path.cwd() / extra
|
|
@@ -310,15 +473,25 @@ def _enable(scope) -> int:
|
|
|
310
473
|
|
|
311
474
|
def _doctor() -> int:
|
|
312
475
|
out.heading("BMAD status")
|
|
313
|
-
|
|
314
|
-
|
|
476
|
+
# Node is only needed by `install`/`init`; the autopilot never shells out,
|
|
477
|
+
# so MISSING here is a limitation, not a fault.
|
|
478
|
+
out.kv("npx", shutil.which("npx") or "MISSING (only `install` needs it)")
|
|
479
|
+
out.kv("node", shutil.which("node") or "MISSING (only `install` needs it)")
|
|
315
480
|
for scope in ("global", "project"):
|
|
316
481
|
st = _get_scope_state(scope)
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
482
|
+
agents = _agents_dir(scope)
|
|
483
|
+
personas = len(core.installed_personas(agents))
|
|
484
|
+
router = cs.has_hook(scope, "UserPromptSubmit", ROUTE_HOOK_NAME)
|
|
485
|
+
live = bool(st.get("autopilot")) and router
|
|
486
|
+
out.kv(scope, "autopilot=%s %d personas router=%s briefing=%s"
|
|
487
|
+
% ("on" if live else "off", personas,
|
|
488
|
+
"on" if router else "off",
|
|
489
|
+
"on" if cs.has_hook(scope, "SessionStart", HOOK_NAME) else "off"))
|
|
490
|
+
out.kv(" workflows", "skills=%d installed=%s"
|
|
491
|
+
% (_count_skills(_skills_dir(scope)), bool(st.get("installed"))))
|
|
321
492
|
out.dim(" project = %s" % Path.cwd())
|
|
493
|
+
if not any(_get_scope_state(s).get("autopilot") for s in ("global", "project")):
|
|
494
|
+
out.dim(" turn it on with `boost bmad on`")
|
|
322
495
|
return 0
|
|
323
496
|
|
|
324
497
|
|