specify-cli 0.12.16__tar.gz → 0.12.17__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (469) hide show
  1. {specify_cli-0.12.16 → specify_cli-0.12.17}/.github/ISSUE_TEMPLATE/agent_request.yml +1 -1
  2. {specify_cli-0.12.16 → specify_cli-0.12.17}/.github/ISSUE_TEMPLATE/bug_report.yml +1 -0
  3. {specify_cli-0.12.16 → specify_cli-0.12.17}/.github/ISSUE_TEMPLATE/feature_request.yml +1 -0
  4. {specify_cli-0.12.16 → specify_cli-0.12.17}/.gitignore +2 -1
  5. {specify_cli-0.12.16 → specify_cli-0.12.17}/CHANGELOG.md +15 -0
  6. {specify_cli-0.12.16 → specify_cli-0.12.17}/PKG-INFO +1 -1
  7. {specify_cli-0.12.16 → specify_cli-0.12.17}/docs/community/extensions.md +3 -1
  8. {specify_cli-0.12.16 → specify_cli-0.12.17}/docs/reference/integrations.md +8 -2
  9. {specify_cli-0.12.16 → specify_cli-0.12.17}/extensions/agent-context/agent-context-defaults.json +1 -0
  10. {specify_cli-0.12.16 → specify_cli-0.12.17}/extensions/catalog.community.json +106 -8
  11. {specify_cli-0.12.16 → specify_cli-0.12.17}/extensions/git/scripts/powershell/create-new-feature-branch.ps1 +10 -0
  12. {specify_cli-0.12.16 → specify_cli-0.12.17}/integrations/catalog.json +10 -1
  13. {specify_cli-0.12.16 → specify_cli-0.12.17}/pyproject.toml +1 -1
  14. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/_invocation_style.py +1 -1
  15. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/commands/init.py +7 -0
  16. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/extensions/__init__.py +26 -0
  17. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/integrations/__init__.py +2 -0
  18. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/integrations/_helpers.py +15 -2
  19. specify_cli-0.12.17/src/specify_cli/integrations/grok/__init__.py +60 -0
  20. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/workflows/steps/if_then/__init__.py +23 -0
  21. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/workflows/steps/switch/__init__.py +33 -0
  22. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/extensions/git/test_git_extension.py +28 -0
  23. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integrations/test_cli.py +60 -0
  24. specify_cli-0.12.17/tests/integrations/test_integration_grok.py +187 -0
  25. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integrations/test_integration_subcommand.py +37 -0
  26. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integrations/test_integration_zed.py +2 -0
  27. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/test_agent_config_consistency.py +1 -0
  28. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/test_extension_skills.py +107 -0
  29. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/test_workflows.py +148 -0
  30. {specify_cli-0.12.16 → specify_cli-0.12.17}/.devcontainer/devcontainer.json +0 -0
  31. {specify_cli-0.12.16 → specify_cli-0.12.17}/.devcontainer/post-create.sh +0 -0
  32. {specify_cli-0.12.16 → specify_cli-0.12.17}/.editorconfig +0 -0
  33. {specify_cli-0.12.16 → specify_cli-0.12.17}/.gitattributes +0 -0
  34. {specify_cli-0.12.16 → specify_cli-0.12.17}/.github/CODEOWNERS +0 -0
  35. {specify_cli-0.12.16 → specify_cli-0.12.17}/.github/ISSUE_TEMPLATE/bundle_submission.yml +0 -0
  36. {specify_cli-0.12.16 → specify_cli-0.12.17}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  37. {specify_cli-0.12.16 → specify_cli-0.12.17}/.github/ISSUE_TEMPLATE/extension_submission.yml +0 -0
  38. {specify_cli-0.12.16 → specify_cli-0.12.17}/.github/ISSUE_TEMPLATE/preset_submission.yml +0 -0
  39. {specify_cli-0.12.16 → specify_cli-0.12.17}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  40. {specify_cli-0.12.16 → specify_cli-0.12.17}/.github/aw/actions-lock.json +0 -0
  41. {specify_cli-0.12.16 → specify_cli-0.12.17}/.github/dependabot.yml +0 -0
  42. {specify_cli-0.12.16 → specify_cli-0.12.17}/.github/skills/add-community-extension/SKILL.md +0 -0
  43. {specify_cli-0.12.16 → specify_cli-0.12.17}/.github/workflows/RELEASE-PROCESS.md +0 -0
  44. {specify_cli-0.12.16 → specify_cli-0.12.17}/.github/workflows/add-community-extension.lock.yml +0 -0
  45. {specify_cli-0.12.16 → specify_cli-0.12.17}/.github/workflows/add-community-extension.md +0 -0
  46. {specify_cli-0.12.16 → specify_cli-0.12.17}/.github/workflows/add-community-preset.lock.yml +0 -0
  47. {specify_cli-0.12.16 → specify_cli-0.12.17}/.github/workflows/add-community-preset.md +0 -0
  48. {specify_cli-0.12.16 → specify_cli-0.12.17}/.github/workflows/bug-assess.lock.yml +0 -0
  49. {specify_cli-0.12.16 → specify_cli-0.12.17}/.github/workflows/bug-assess.md +0 -0
  50. {specify_cli-0.12.16 → specify_cli-0.12.17}/.github/workflows/bug-fix.lock.yml +0 -0
  51. {specify_cli-0.12.16 → specify_cli-0.12.17}/.github/workflows/bug-fix.md +0 -0
  52. {specify_cli-0.12.16 → specify_cli-0.12.17}/.github/workflows/bug-test.lock.yml +0 -0
  53. {specify_cli-0.12.16 → specify_cli-0.12.17}/.github/workflows/bug-test.md +0 -0
  54. {specify_cli-0.12.16 → specify_cli-0.12.17}/.github/workflows/catalog-assign.yml +0 -0
  55. {specify_cli-0.12.16 → specify_cli-0.12.17}/.github/workflows/codeql.yml +0 -0
  56. {specify_cli-0.12.16 → specify_cli-0.12.17}/.github/workflows/docs.yml +0 -0
  57. {specify_cli-0.12.16 → specify_cli-0.12.17}/.github/workflows/lint.yml +0 -0
  58. {specify_cli-0.12.16 → specify_cli-0.12.17}/.github/workflows/publish-pypi.yml +0 -0
  59. {specify_cli-0.12.16 → specify_cli-0.12.17}/.github/workflows/release-trigger.yml +0 -0
  60. {specify_cli-0.12.16 → specify_cli-0.12.17}/.github/workflows/release.yml +0 -0
  61. {specify_cli-0.12.16 → specify_cli-0.12.17}/.github/workflows/stale.yml +0 -0
  62. {specify_cli-0.12.16 → specify_cli-0.12.17}/.github/workflows/test.yml +0 -0
  63. {specify_cli-0.12.16 → specify_cli-0.12.17}/.markdownlint-cli2.jsonc +0 -0
  64. {specify_cli-0.12.16 → specify_cli-0.12.17}/.pre-commit-config.yaml +0 -0
  65. {specify_cli-0.12.16 → specify_cli-0.12.17}/.zenodo.json +0 -0
  66. {specify_cli-0.12.16 → specify_cli-0.12.17}/AGENTS.md +0 -0
  67. {specify_cli-0.12.16 → specify_cli-0.12.17}/CITATION.cff +0 -0
  68. {specify_cli-0.12.16 → specify_cli-0.12.17}/CODE_OF_CONDUCT.md +0 -0
  69. {specify_cli-0.12.16 → specify_cli-0.12.17}/CONTRIBUTING.md +0 -0
  70. {specify_cli-0.12.16 → specify_cli-0.12.17}/DEVELOPMENT.md +0 -0
  71. {specify_cli-0.12.16 → specify_cli-0.12.17}/LICENSE +0 -0
  72. {specify_cli-0.12.16 → specify_cli-0.12.17}/README.md +0 -0
  73. {specify_cli-0.12.16 → specify_cli-0.12.17}/SECURITY.md +0 -0
  74. {specify_cli-0.12.16 → specify_cli-0.12.17}/SUPPORT.md +0 -0
  75. {specify_cli-0.12.16 → specify_cli-0.12.17}/docs/.gitignore +0 -0
  76. {specify_cli-0.12.16 → specify_cli-0.12.17}/docs/README.md +0 -0
  77. {specify_cli-0.12.16 → specify_cli-0.12.17}/docs/community/bundles.md +0 -0
  78. {specify_cli-0.12.16 → specify_cli-0.12.17}/docs/community/friends.md +0 -0
  79. {specify_cli-0.12.16 → specify_cli-0.12.17}/docs/community/overview.md +0 -0
  80. {specify_cli-0.12.16 → specify_cli-0.12.17}/docs/community/presets.md +0 -0
  81. {specify_cli-0.12.16 → specify_cli-0.12.17}/docs/community/walkthroughs.md +0 -0
  82. {specify_cli-0.12.16 → specify_cli-0.12.17}/docs/concepts/complex-features.md +0 -0
  83. {specify_cli-0.12.16 → specify_cli-0.12.17}/docs/concepts/sdd.md +0 -0
  84. {specify_cli-0.12.16 → specify_cli-0.12.17}/docs/concepts/spec-persistence.md +0 -0
  85. {specify_cli-0.12.16 → specify_cli-0.12.17}/docs/docfx.json +0 -0
  86. {specify_cli-0.12.16 → specify_cli-0.12.17}/docs/guides/evolving-specs.md +0 -0
  87. {specify_cli-0.12.16 → specify_cli-0.12.17}/docs/guides/monorepo.md +0 -0
  88. {specify_cli-0.12.16 → specify_cli-0.12.17}/docs/index.md +0 -0
  89. {specify_cli-0.12.16 → specify_cli-0.12.17}/docs/install/air-gapped.md +0 -0
  90. {specify_cli-0.12.16 → specify_cli-0.12.17}/docs/install/one-time.md +0 -0
  91. {specify_cli-0.12.16 → specify_cli-0.12.17}/docs/install/pipx.md +0 -0
  92. {specify_cli-0.12.16 → specify_cli-0.12.17}/docs/install/pypi.md +0 -0
  93. {specify_cli-0.12.16 → specify_cli-0.12.17}/docs/install/uv.md +0 -0
  94. {specify_cli-0.12.16 → specify_cli-0.12.17}/docs/installation.md +0 -0
  95. {specify_cli-0.12.16 → specify_cli-0.12.17}/docs/local-development.md +0 -0
  96. {specify_cli-0.12.16 → specify_cli-0.12.17}/docs/quickstart.md +0 -0
  97. {specify_cli-0.12.16 → specify_cli-0.12.17}/docs/reference/authentication.md +0 -0
  98. {specify_cli-0.12.16 → specify_cli-0.12.17}/docs/reference/bundles.md +0 -0
  99. {specify_cli-0.12.16 → specify_cli-0.12.17}/docs/reference/core.md +0 -0
  100. {specify_cli-0.12.16 → specify_cli-0.12.17}/docs/reference/extensions.md +0 -0
  101. {specify_cli-0.12.16 → specify_cli-0.12.17}/docs/reference/overview.md +0 -0
  102. {specify_cli-0.12.16 → specify_cli-0.12.17}/docs/reference/presets.md +0 -0
  103. {specify_cli-0.12.16 → specify_cli-0.12.17}/docs/reference/workflows.md +0 -0
  104. {specify_cli-0.12.16 → specify_cli-0.12.17}/docs/template/public/main.css +0 -0
  105. {specify_cli-0.12.16 → specify_cli-0.12.17}/docs/toc.yml +0 -0
  106. {specify_cli-0.12.16 → specify_cli-0.12.17}/docs/upgrade.md +0 -0
  107. {specify_cli-0.12.16 → specify_cli-0.12.17}/examples/bundles/business-analyst/README.md +0 -0
  108. {specify_cli-0.12.16 → specify_cli-0.12.17}/examples/bundles/business-analyst/bundle.yml +0 -0
  109. {specify_cli-0.12.16 → specify_cli-0.12.17}/examples/bundles/developer/README.md +0 -0
  110. {specify_cli-0.12.16 → specify_cli-0.12.17}/examples/bundles/developer/bundle.yml +0 -0
  111. {specify_cli-0.12.16 → specify_cli-0.12.17}/examples/bundles/product-manager/README.md +0 -0
  112. {specify_cli-0.12.16 → specify_cli-0.12.17}/examples/bundles/product-manager/bundle.yml +0 -0
  113. {specify_cli-0.12.16 → specify_cli-0.12.17}/examples/bundles/security-researcher/README.md +0 -0
  114. {specify_cli-0.12.16 → specify_cli-0.12.17}/examples/bundles/security-researcher/bundle.yml +0 -0
  115. {specify_cli-0.12.16 → specify_cli-0.12.17}/extensions/EXTENSION-API-REFERENCE.md +0 -0
  116. {specify_cli-0.12.16 → specify_cli-0.12.17}/extensions/EXTENSION-DEVELOPMENT-GUIDE.md +0 -0
  117. {specify_cli-0.12.16 → specify_cli-0.12.17}/extensions/EXTENSION-PUBLISHING-GUIDE.md +0 -0
  118. {specify_cli-0.12.16 → specify_cli-0.12.17}/extensions/EXTENSION-USER-GUIDE.md +0 -0
  119. {specify_cli-0.12.16 → specify_cli-0.12.17}/extensions/README.md +0 -0
  120. {specify_cli-0.12.16 → specify_cli-0.12.17}/extensions/RFC-EXTENSION-SYSTEM.md +0 -0
  121. {specify_cli-0.12.16 → specify_cli-0.12.17}/extensions/agent-context/README.md +0 -0
  122. {specify_cli-0.12.16 → specify_cli-0.12.17}/extensions/agent-context/agent-context-config.yml +0 -0
  123. {specify_cli-0.12.16 → specify_cli-0.12.17}/extensions/agent-context/commands/speckit.agent-context.update.md +0 -0
  124. {specify_cli-0.12.16 → specify_cli-0.12.17}/extensions/agent-context/extension.yml +0 -0
  125. {specify_cli-0.12.16 → specify_cli-0.12.17}/extensions/agent-context/scripts/bash/update-agent-context.sh +0 -0
  126. {specify_cli-0.12.16 → specify_cli-0.12.17}/extensions/agent-context/scripts/powershell/update-agent-context.ps1 +0 -0
  127. {specify_cli-0.12.16 → specify_cli-0.12.17}/extensions/agent-context/scripts/python/update_agent_context.py +0 -0
  128. {specify_cli-0.12.16 → specify_cli-0.12.17}/extensions/bug/README.md +0 -0
  129. {specify_cli-0.12.16 → specify_cli-0.12.17}/extensions/bug/commands/speckit.bug.assess.md +0 -0
  130. {specify_cli-0.12.16 → specify_cli-0.12.17}/extensions/bug/commands/speckit.bug.fix.md +0 -0
  131. {specify_cli-0.12.16 → specify_cli-0.12.17}/extensions/bug/commands/speckit.bug.test.md +0 -0
  132. {specify_cli-0.12.16 → specify_cli-0.12.17}/extensions/bug/extension.yml +0 -0
  133. {specify_cli-0.12.16 → specify_cli-0.12.17}/extensions/catalog.json +0 -0
  134. {specify_cli-0.12.16 → specify_cli-0.12.17}/extensions/git/README.md +0 -0
  135. {specify_cli-0.12.16 → specify_cli-0.12.17}/extensions/git/commands/speckit.git.commit.md +0 -0
  136. {specify_cli-0.12.16 → specify_cli-0.12.17}/extensions/git/commands/speckit.git.feature.md +0 -0
  137. {specify_cli-0.12.16 → specify_cli-0.12.17}/extensions/git/commands/speckit.git.initialize.md +0 -0
  138. {specify_cli-0.12.16 → specify_cli-0.12.17}/extensions/git/commands/speckit.git.remote.md +0 -0
  139. {specify_cli-0.12.16 → specify_cli-0.12.17}/extensions/git/commands/speckit.git.validate.md +0 -0
  140. {specify_cli-0.12.16 → specify_cli-0.12.17}/extensions/git/config-template.yml +0 -0
  141. {specify_cli-0.12.16 → specify_cli-0.12.17}/extensions/git/extension.yml +0 -0
  142. {specify_cli-0.12.16 → specify_cli-0.12.17}/extensions/git/git-config.yml +0 -0
  143. {specify_cli-0.12.16 → specify_cli-0.12.17}/extensions/git/scripts/bash/auto-commit.sh +0 -0
  144. {specify_cli-0.12.16 → specify_cli-0.12.17}/extensions/git/scripts/bash/create-new-feature-branch.sh +0 -0
  145. {specify_cli-0.12.16 → specify_cli-0.12.17}/extensions/git/scripts/bash/git-common.sh +0 -0
  146. {specify_cli-0.12.16 → specify_cli-0.12.17}/extensions/git/scripts/bash/initialize-repo.sh +0 -0
  147. {specify_cli-0.12.16 → specify_cli-0.12.17}/extensions/git/scripts/powershell/auto-commit.ps1 +0 -0
  148. {specify_cli-0.12.16 → specify_cli-0.12.17}/extensions/git/scripts/powershell/git-common.ps1 +0 -0
  149. {specify_cli-0.12.16 → specify_cli-0.12.17}/extensions/git/scripts/powershell/initialize-repo.ps1 +0 -0
  150. {specify_cli-0.12.16 → specify_cli-0.12.17}/extensions/git/scripts/python/auto_commit.py +0 -0
  151. {specify_cli-0.12.16 → specify_cli-0.12.17}/extensions/git/scripts/python/create_new_feature_branch.py +0 -0
  152. {specify_cli-0.12.16 → specify_cli-0.12.17}/extensions/git/scripts/python/git_common.py +0 -0
  153. {specify_cli-0.12.16 → specify_cli-0.12.17}/extensions/git/scripts/python/initialize_repo.py +0 -0
  154. {specify_cli-0.12.16 → specify_cli-0.12.17}/extensions/selftest/commands/selftest.md +0 -0
  155. {specify_cli-0.12.16 → specify_cli-0.12.17}/extensions/selftest/extension.yml +0 -0
  156. {specify_cli-0.12.16 → specify_cli-0.12.17}/extensions/template/.gitignore +0 -0
  157. {specify_cli-0.12.16 → specify_cli-0.12.17}/extensions/template/CHANGELOG.md +0 -0
  158. {specify_cli-0.12.16 → specify_cli-0.12.17}/extensions/template/EXAMPLE-README.md +0 -0
  159. {specify_cli-0.12.16 → specify_cli-0.12.17}/extensions/template/LICENSE +0 -0
  160. {specify_cli-0.12.16 → specify_cli-0.12.17}/extensions/template/README.md +0 -0
  161. {specify_cli-0.12.16 → specify_cli-0.12.17}/extensions/template/commands/example.md +0 -0
  162. {specify_cli-0.12.16 → specify_cli-0.12.17}/extensions/template/config-template.yml +0 -0
  163. {specify_cli-0.12.16 → specify_cli-0.12.17}/extensions/template/extension.yml +0 -0
  164. {specify_cli-0.12.16 → specify_cli-0.12.17}/integrations/CONTRIBUTING.md +0 -0
  165. {specify_cli-0.12.16 → specify_cli-0.12.17}/integrations/README.md +0 -0
  166. {specify_cli-0.12.16 → specify_cli-0.12.17}/integrations/catalog.community.json +0 -0
  167. {specify_cli-0.12.16 → specify_cli-0.12.17}/media/bootstrap-claude-code.gif +0 -0
  168. {specify_cli-0.12.16 → specify_cli-0.12.17}/media/logo_large.webp +0 -0
  169. {specify_cli-0.12.16 → specify_cli-0.12.17}/media/logo_small.webp +0 -0
  170. {specify_cli-0.12.16 → specify_cli-0.12.17}/media/spec-kit-video-header.jpg +0 -0
  171. {specify_cli-0.12.16 → specify_cli-0.12.17}/media/specify_cli.gif +0 -0
  172. {specify_cli-0.12.16 → specify_cli-0.12.17}/newsletters/2026-April.md +0 -0
  173. {specify_cli-0.12.16 → specify_cli-0.12.17}/newsletters/2026-February.md +0 -0
  174. {specify_cli-0.12.16 → specify_cli-0.12.17}/newsletters/2026-June.md +0 -0
  175. {specify_cli-0.12.16 → specify_cli-0.12.17}/newsletters/2026-March.md +0 -0
  176. {specify_cli-0.12.16 → specify_cli-0.12.17}/newsletters/2026-May.md +0 -0
  177. {specify_cli-0.12.16 → specify_cli-0.12.17}/presets/ARCHITECTURE.md +0 -0
  178. {specify_cli-0.12.16 → specify_cli-0.12.17}/presets/PUBLISHING.md +0 -0
  179. {specify_cli-0.12.16 → specify_cli-0.12.17}/presets/README.md +0 -0
  180. {specify_cli-0.12.16 → specify_cli-0.12.17}/presets/catalog.community.json +0 -0
  181. {specify_cli-0.12.16 → specify_cli-0.12.17}/presets/catalog.json +0 -0
  182. {specify_cli-0.12.16 → specify_cli-0.12.17}/presets/lean/README.md +0 -0
  183. {specify_cli-0.12.16 → specify_cli-0.12.17}/presets/lean/commands/speckit.constitution.md +0 -0
  184. {specify_cli-0.12.16 → specify_cli-0.12.17}/presets/lean/commands/speckit.implement.md +0 -0
  185. {specify_cli-0.12.16 → specify_cli-0.12.17}/presets/lean/commands/speckit.plan.md +0 -0
  186. {specify_cli-0.12.16 → specify_cli-0.12.17}/presets/lean/commands/speckit.specify.md +0 -0
  187. {specify_cli-0.12.16 → specify_cli-0.12.17}/presets/lean/commands/speckit.tasks.md +0 -0
  188. {specify_cli-0.12.16 → specify_cli-0.12.17}/presets/lean/preset.yml +0 -0
  189. {specify_cli-0.12.16 → specify_cli-0.12.17}/presets/scaffold/README.md +0 -0
  190. {specify_cli-0.12.16 → specify_cli-0.12.17}/presets/scaffold/commands/speckit.myext.myextcmd.md +0 -0
  191. {specify_cli-0.12.16 → specify_cli-0.12.17}/presets/scaffold/commands/speckit.specify.md +0 -0
  192. {specify_cli-0.12.16 → specify_cli-0.12.17}/presets/scaffold/preset.yml +0 -0
  193. {specify_cli-0.12.16 → specify_cli-0.12.17}/presets/scaffold/templates/myext-template.md +0 -0
  194. {specify_cli-0.12.16 → specify_cli-0.12.17}/presets/scaffold/templates/spec-template.md +0 -0
  195. {specify_cli-0.12.16 → specify_cli-0.12.17}/presets/self-test/commands/speckit.specify.md +0 -0
  196. {specify_cli-0.12.16 → specify_cli-0.12.17}/presets/self-test/commands/speckit.wrap-test.md +0 -0
  197. {specify_cli-0.12.16 → specify_cli-0.12.17}/presets/self-test/preset.yml +0 -0
  198. {specify_cli-0.12.16 → specify_cli-0.12.17}/presets/self-test/templates/checklist-template.md +0 -0
  199. {specify_cli-0.12.16 → specify_cli-0.12.17}/presets/self-test/templates/constitution-template.md +0 -0
  200. {specify_cli-0.12.16 → specify_cli-0.12.17}/presets/self-test/templates/plan-template.md +0 -0
  201. {specify_cli-0.12.16 → specify_cli-0.12.17}/presets/self-test/templates/spec-template.md +0 -0
  202. {specify_cli-0.12.16 → specify_cli-0.12.17}/presets/self-test/templates/tasks-template.md +0 -0
  203. {specify_cli-0.12.16 → specify_cli-0.12.17}/scripts/bash/check-prerequisites.sh +0 -0
  204. {specify_cli-0.12.16 → specify_cli-0.12.17}/scripts/bash/common.sh +0 -0
  205. {specify_cli-0.12.16 → specify_cli-0.12.17}/scripts/bash/create-new-feature.sh +0 -0
  206. {specify_cli-0.12.16 → specify_cli-0.12.17}/scripts/bash/setup-plan.sh +0 -0
  207. {specify_cli-0.12.16 → specify_cli-0.12.17}/scripts/bash/setup-tasks.sh +0 -0
  208. {specify_cli-0.12.16 → specify_cli-0.12.17}/scripts/powershell/check-prerequisites.ps1 +0 -0
  209. {specify_cli-0.12.16 → specify_cli-0.12.17}/scripts/powershell/common.ps1 +0 -0
  210. {specify_cli-0.12.16 → specify_cli-0.12.17}/scripts/powershell/create-new-feature.ps1 +0 -0
  211. {specify_cli-0.12.16 → specify_cli-0.12.17}/scripts/powershell/setup-plan.ps1 +0 -0
  212. {specify_cli-0.12.16 → specify_cli-0.12.17}/scripts/powershell/setup-tasks.ps1 +0 -0
  213. {specify_cli-0.12.16 → specify_cli-0.12.17}/scripts/python/check_prerequisites.py +0 -0
  214. {specify_cli-0.12.16 → specify_cli-0.12.17}/scripts/python/common.py +0 -0
  215. {specify_cli-0.12.16 → specify_cli-0.12.17}/spec-driven.md +0 -0
  216. {specify_cli-0.12.16 → specify_cli-0.12.17}/spec-kit.code-workspace +0 -0
  217. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/__init__.py +0 -0
  218. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/_agent_config.py +0 -0
  219. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/_assets.py +0 -0
  220. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/_console.py +0 -0
  221. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/_github_http.py +0 -0
  222. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/_init_options.py +0 -0
  223. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/_project.py +0 -0
  224. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/_toml_string.py +0 -0
  225. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/_utils.py +0 -0
  226. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/_version.py +0 -0
  227. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/agents.py +0 -0
  228. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/authentication/__init__.py +0 -0
  229. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/authentication/azure_devops.py +0 -0
  230. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/authentication/base.py +0 -0
  231. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/authentication/config.py +0 -0
  232. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/authentication/github.py +0 -0
  233. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/authentication/http.py +0 -0
  234. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/bundler/__init__.py +0 -0
  235. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/bundler/commands_impl/__init__.py +0 -0
  236. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/bundler/commands_impl/catalog_config.py +0 -0
  237. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/bundler/lib/__init__.py +0 -0
  238. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/bundler/lib/project.py +0 -0
  239. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/bundler/lib/versioning.py +0 -0
  240. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/bundler/lib/yamlio.py +0 -0
  241. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/bundler/models/__init__.py +0 -0
  242. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/bundler/models/catalog.py +0 -0
  243. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/bundler/models/manifest.py +0 -0
  244. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/bundler/models/records.py +0 -0
  245. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/bundler/services/__init__.py +0 -0
  246. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/bundler/services/adapters.py +0 -0
  247. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/bundler/services/catalog_stack.py +0 -0
  248. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/bundler/services/conflict.py +0 -0
  249. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/bundler/services/installer.py +0 -0
  250. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/bundler/services/packager.py +0 -0
  251. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/bundler/services/primitives.py +0 -0
  252. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/bundler/services/references.py +0 -0
  253. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/bundler/services/resolver.py +0 -0
  254. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/bundler/services/validator.py +0 -0
  255. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/catalogs.py +0 -0
  256. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/commands/__init__.py +0 -0
  257. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/commands/bundle/__init__.py +0 -0
  258. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/extensions/_commands.py +0 -0
  259. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/integration_runtime.py +0 -0
  260. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/integration_scaffold.py +0 -0
  261. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/integration_state.py +0 -0
  262. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/integration_status.py +0 -0
  263. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/integrations/_commands.py +0 -0
  264. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/integrations/_install_commands.py +0 -0
  265. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/integrations/_migrate_commands.py +0 -0
  266. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/integrations/_query_commands.py +0 -0
  267. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/integrations/_scaffold_commands.py +0 -0
  268. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/integrations/agy/__init__.py +0 -0
  269. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/integrations/amp/__init__.py +0 -0
  270. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/integrations/auggie/__init__.py +0 -0
  271. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/integrations/base.py +0 -0
  272. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/integrations/bob/__init__.py +0 -0
  273. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/integrations/catalog.py +0 -0
  274. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/integrations/claude/__init__.py +0 -0
  275. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/integrations/cline/__init__.py +0 -0
  276. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/integrations/codebuddy/__init__.py +0 -0
  277. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/integrations/codex/__init__.py +0 -0
  278. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/integrations/copilot/__init__.py +0 -0
  279. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/integrations/cursor_agent/__init__.py +0 -0
  280. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/integrations/devin/__init__.py +0 -0
  281. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/integrations/firebender/__init__.py +0 -0
  282. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/integrations/forge/__init__.py +0 -0
  283. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/integrations/gemini/__init__.py +0 -0
  284. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/integrations/generic/__init__.py +0 -0
  285. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/integrations/goose/__init__.py +0 -0
  286. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/integrations/hermes/__init__.py +0 -0
  287. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/integrations/junie/__init__.py +0 -0
  288. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/integrations/kilocode/__init__.py +0 -0
  289. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/integrations/kimi/__init__.py +0 -0
  290. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/integrations/kiro_cli/__init__.py +0 -0
  291. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/integrations/lingma/__init__.py +0 -0
  292. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/integrations/manifest.py +0 -0
  293. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/integrations/omp/__init__.py +0 -0
  294. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/integrations/opencode/__init__.py +0 -0
  295. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/integrations/pi/__init__.py +0 -0
  296. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/integrations/qodercli/__init__.py +0 -0
  297. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/integrations/qwen/__init__.py +0 -0
  298. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/integrations/rovodev/__init__.py +0 -0
  299. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/integrations/shai/__init__.py +0 -0
  300. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/integrations/tabnine/__init__.py +0 -0
  301. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/integrations/trae/__init__.py +0 -0
  302. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/integrations/vibe/__init__.py +0 -0
  303. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/integrations/zcode/__init__.py +0 -0
  304. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/integrations/zed/__init__.py +0 -0
  305. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/presets/__init__.py +0 -0
  306. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/presets/_commands.py +0 -0
  307. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/shared_infra.py +0 -0
  308. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/workflows/__init__.py +0 -0
  309. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/workflows/_commands.py +0 -0
  310. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/workflows/base.py +0 -0
  311. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/workflows/catalog.py +0 -0
  312. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/workflows/engine.py +0 -0
  313. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/workflows/expressions.py +0 -0
  314. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/workflows/steps/__init__.py +0 -0
  315. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/workflows/steps/command/__init__.py +0 -0
  316. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/workflows/steps/do_while/__init__.py +0 -0
  317. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/workflows/steps/fan_in/__init__.py +0 -0
  318. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/workflows/steps/fan_out/__init__.py +0 -0
  319. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/workflows/steps/gate/__init__.py +0 -0
  320. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/workflows/steps/init/__init__.py +0 -0
  321. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/workflows/steps/prompt/__init__.py +0 -0
  322. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/workflows/steps/shell/__init__.py +0 -0
  323. {specify_cli-0.12.16 → specify_cli-0.12.17}/src/specify_cli/workflows/steps/while_loop/__init__.py +0 -0
  324. {specify_cli-0.12.16 → specify_cli-0.12.17}/templates/checklist-template.md +0 -0
  325. {specify_cli-0.12.16 → specify_cli-0.12.17}/templates/commands/analyze.md +0 -0
  326. {specify_cli-0.12.16 → specify_cli-0.12.17}/templates/commands/checklist.md +0 -0
  327. {specify_cli-0.12.16 → specify_cli-0.12.17}/templates/commands/clarify.md +0 -0
  328. {specify_cli-0.12.16 → specify_cli-0.12.17}/templates/commands/constitution.md +0 -0
  329. {specify_cli-0.12.16 → specify_cli-0.12.17}/templates/commands/converge.md +0 -0
  330. {specify_cli-0.12.16 → specify_cli-0.12.17}/templates/commands/implement.md +0 -0
  331. {specify_cli-0.12.16 → specify_cli-0.12.17}/templates/commands/plan.md +0 -0
  332. {specify_cli-0.12.16 → specify_cli-0.12.17}/templates/commands/specify.md +0 -0
  333. {specify_cli-0.12.16 → specify_cli-0.12.17}/templates/commands/tasks.md +0 -0
  334. {specify_cli-0.12.16 → specify_cli-0.12.17}/templates/commands/taskstoissues.md +0 -0
  335. {specify_cli-0.12.16 → specify_cli-0.12.17}/templates/constitution-template.md +0 -0
  336. {specify_cli-0.12.16 → specify_cli-0.12.17}/templates/plan-template.md +0 -0
  337. {specify_cli-0.12.16 → specify_cli-0.12.17}/templates/spec-template.md +0 -0
  338. {specify_cli-0.12.16 → specify_cli-0.12.17}/templates/tasks-template.md +0 -0
  339. {specify_cli-0.12.16 → specify_cli-0.12.17}/templates/vscode-settings.json +0 -0
  340. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/__init__.py +0 -0
  341. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/auth_helpers.py +0 -0
  342. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/bundler_helpers.py +0 -0
  343. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/conftest.py +0 -0
  344. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/contract/test_bundle_cli.py +0 -0
  345. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/contract/test_catalog_schema.py +0 -0
  346. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/contract/test_manifest_schema.py +0 -0
  347. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/extensions/__init__.py +0 -0
  348. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/extensions/bug/__init__.py +0 -0
  349. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/extensions/bug/test_bug_extension.py +0 -0
  350. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/extensions/git/__init__.py +0 -0
  351. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/extensions/git/test_git_extension_python_parity.py +0 -0
  352. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/extensions/test_agent_context_cli_free.py +0 -0
  353. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/extensions/test_extension_agent_context.py +0 -0
  354. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/extensions/test_update_agent_context_feature_json.py +0 -0
  355. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/extensions/test_update_agent_context_python_parity.py +0 -0
  356. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/hooks/TESTING.md +0 -0
  357. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/hooks/plan.md +0 -0
  358. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/hooks/spec.md +0 -0
  359. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/hooks/tasks.md +0 -0
  360. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/http_helpers.py +0 -0
  361. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integration/test_bundler_catalog_stack.py +0 -0
  362. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integration/test_bundler_init_install.py +0 -0
  363. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integration/test_bundler_install_flow.py +0 -0
  364. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integration/test_bundler_local_install.py +0 -0
  365. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integration/test_bundler_offline.py +0 -0
  366. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integration/test_bundler_security_paths.py +0 -0
  367. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integrations/__init__.py +0 -0
  368. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integrations/conftest.py +0 -0
  369. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integrations/test_base.py +0 -0
  370. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integrations/test_extra_args.py +0 -0
  371. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integrations/test_home_isolation.py +0 -0
  372. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integrations/test_integration_agy.py +0 -0
  373. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integrations/test_integration_amp.py +0 -0
  374. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integrations/test_integration_auggie.py +0 -0
  375. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integrations/test_integration_base_markdown.py +0 -0
  376. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integrations/test_integration_base_skills.py +0 -0
  377. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integrations/test_integration_base_toml.py +0 -0
  378. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integrations/test_integration_base_yaml.py +0 -0
  379. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integrations/test_integration_bob.py +0 -0
  380. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integrations/test_integration_catalog.py +0 -0
  381. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integrations/test_integration_claude.py +0 -0
  382. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integrations/test_integration_cline.py +0 -0
  383. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integrations/test_integration_codebuddy.py +0 -0
  384. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integrations/test_integration_codex.py +0 -0
  385. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integrations/test_integration_copilot.py +0 -0
  386. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integrations/test_integration_cursor_agent.py +0 -0
  387. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integrations/test_integration_devin.py +0 -0
  388. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integrations/test_integration_firebender.py +0 -0
  389. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integrations/test_integration_forge.py +0 -0
  390. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integrations/test_integration_gemini.py +0 -0
  391. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integrations/test_integration_generic.py +0 -0
  392. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integrations/test_integration_goose.py +0 -0
  393. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integrations/test_integration_hermes.py +0 -0
  394. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integrations/test_integration_junie.py +0 -0
  395. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integrations/test_integration_kilocode.py +0 -0
  396. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integrations/test_integration_kimi.py +0 -0
  397. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integrations/test_integration_kiro_cli.py +0 -0
  398. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integrations/test_integration_lingma.py +0 -0
  399. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integrations/test_integration_omp.py +0 -0
  400. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integrations/test_integration_opencode.py +0 -0
  401. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integrations/test_integration_pi.py +0 -0
  402. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integrations/test_integration_qodercli.py +0 -0
  403. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integrations/test_integration_qwen.py +0 -0
  404. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integrations/test_integration_rovodev.py +0 -0
  405. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integrations/test_integration_scaffold.py +0 -0
  406. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integrations/test_integration_shai.py +0 -0
  407. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integrations/test_integration_state.py +0 -0
  408. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integrations/test_integration_tabnine.py +0 -0
  409. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integrations/test_integration_trae.py +0 -0
  410. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integrations/test_integration_vibe.py +0 -0
  411. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integrations/test_integration_zcode.py +0 -0
  412. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integrations/test_manifest.py +0 -0
  413. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integrations/test_registry.py +0 -0
  414. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/integrations/test_skill_frontmatter_quoting.py +0 -0
  415. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/self_upgrade_helpers.py +0 -0
  416. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/test_authentication.py +0 -0
  417. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/test_branch_numbering.py +0 -0
  418. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/test_check_prerequisites_paths_only.py +0 -0
  419. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/test_check_prerequisites_python_parity.py +0 -0
  420. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/test_check_tool.py +0 -0
  421. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/test_cli_version.py +0 -0
  422. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/test_command_template_py_scripts.py +0 -0
  423. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/test_commands_package.py +0 -0
  424. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/test_console_imports.py +0 -0
  425. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/test_extension_registration.py +0 -0
  426. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/test_extension_update_hardening.py +0 -0
  427. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/test_extensions.py +0 -0
  428. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/test_github_http.py +0 -0
  429. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/test_github_workflows.py +0 -0
  430. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/test_init_dir.py +0 -0
  431. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/test_init_dir_cli.py +0 -0
  432. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/test_live_transient_windows.py +0 -0
  433. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/test_merge.py +0 -0
  434. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/test_post_process.py +0 -0
  435. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/test_presets.py +0 -0
  436. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/test_ps1_encoding.py +0 -0
  437. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/test_registrar_path_traversal.py +0 -0
  438. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/test_self_upgrade_detection.py +0 -0
  439. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/test_self_upgrade_execution.py +0 -0
  440. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/test_self_upgrade_guidance.py +0 -0
  441. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/test_self_upgrade_verification.py +0 -0
  442. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/test_setup_plan_feature_json.py +0 -0
  443. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/test_setup_plan_no_overwrite.py +0 -0
  444. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/test_setup_tasks.py +0 -0
  445. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/test_shared_infra_integrity.py +0 -0
  446. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/test_timestamp_branches.py +0 -0
  447. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/test_upgrade.py +0 -0
  448. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/test_utils.py +0 -0
  449. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/test_utils_assets_imports.py +0 -0
  450. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/test_version_imports.py +0 -0
  451. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/test_workflow_run_without_project.py +0 -0
  452. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/unit/test_bundler_adapters.py +0 -0
  453. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/unit/test_bundler_catalog_config.py +0 -0
  454. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/unit/test_bundler_conflict.py +0 -0
  455. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/unit/test_bundler_packager.py +0 -0
  456. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/unit/test_bundler_primitives.py +0 -0
  457. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/unit/test_bundler_records.py +0 -0
  458. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/unit/test_bundler_references.py +0 -0
  459. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/unit/test_bundler_resolver.py +0 -0
  460. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/unit/test_bundler_validator.py +0 -0
  461. {specify_cli-0.12.16 → specify_cli-0.12.17}/tests/unit/test_bundler_versioning.py +0 -0
  462. {specify_cli-0.12.16 → specify_cli-0.12.17}/workflows/ARCHITECTURE.md +0 -0
  463. {specify_cli-0.12.16 → specify_cli-0.12.17}/workflows/PUBLISHING.md +0 -0
  464. {specify_cli-0.12.16 → specify_cli-0.12.17}/workflows/README.md +0 -0
  465. {specify_cli-0.12.16 → specify_cli-0.12.17}/workflows/catalog.community.json +0 -0
  466. {specify_cli-0.12.16 → specify_cli-0.12.17}/workflows/catalog.json +0 -0
  467. {specify_cli-0.12.16 → specify_cli-0.12.17}/workflows/speckit/workflow.yml +0 -0
  468. {specify_cli-0.12.16 → specify_cli-0.12.17}/workflows/step-catalog.community.json +0 -0
  469. {specify_cli-0.12.16 → specify_cli-0.12.17}/workflows/step-catalog.json +0 -0
@@ -8,7 +8,7 @@ body:
8
8
  value: |
9
9
  Thanks for requesting a new agent! Before submitting, please check if the agent is already supported.
10
10
 
11
- **Currently supported agents**: Amp, Antigravity, Auggie CLI, Claude Code, Cline, CodeBuddy, Codex CLI, Cursor, Devin for Terminal, Firebender, Forge, Gemini CLI, GitHub Copilot, Goose, Hermes Agent, IBM Bob, Junie, Kilo Code, Kimi Code, Kiro CLI, Lingma, Mistral Vibe, Oh My Pi, opencode, Pi Coding Agent, Qoder CLI, Qwen Code, RovoDev ACLI, SHAI, Tabnine CLI, Trae, ZCode, Zed
11
+ **Currently supported agents**: Amp, Antigravity, Auggie CLI, Claude Code, Cline, CodeBuddy, Codex CLI, Cursor, Devin for Terminal, Firebender, Forge, Gemini CLI, GitHub Copilot, Goose, Grok Build, Hermes Agent, IBM Bob, Junie, Kilo Code, Kimi Code, Kiro CLI, Lingma, Mistral Vibe, Oh My Pi, opencode, Pi Coding Agent, Qoder CLI, Qwen Code, RovoDev ACLI, SHAI, Tabnine CLI, Trae, ZCode, Zed
12
12
 
13
13
  - type: input
14
14
  id: agent-name
@@ -76,6 +76,7 @@ body:
76
76
  - Gemini CLI
77
77
  - GitHub Copilot
78
78
  - Goose
79
+ - Grok Build
79
80
  - Hermes Agent
80
81
  - IBM Bob
81
82
  - Junie
@@ -70,6 +70,7 @@ body:
70
70
  - Gemini CLI
71
71
  - GitHub Copilot
72
72
  - Goose
73
+ - Grok Build
73
74
  - Hermes Agent
74
75
  - IBM Bob
75
76
  - Junie
@@ -53,9 +53,10 @@ docs/dev
53
53
 
54
54
  # The following directories/file are intentionally ignored so that they are not accidentally
55
55
  # committed to the repository. They contain the scaffolding `specify init --integration copilot`
56
- # does and they are meant for dogfooding Spec Kit during its own feature development.
56
+ # (or other agents) does and they are meant for dogfooding Spec Kit during its own feature development.
57
57
  .github/agents/
58
58
  .github/prompts/
59
59
  .github/copilot-instructions.md
60
+ .grok/
60
61
  .specify/
61
62
  specs/
@@ -2,6 +2,21 @@
2
2
 
3
3
  <!-- insert new changelog below this comment -->
4
4
 
5
+ ## [0.12.17] - 2026-07-16
6
+
7
+ ### Changed
8
+
9
+ - fix(extensions): resolve __SPECKIT_COMMAND tokens in auto-registered skills (#3544)
10
+ - fix(workflows): fail if/switch steps on non-list branch instead of crashing (#3515)
11
+ - feat(integrations): add Grok Build skills-based integration (#3535)
12
+ - fix(extensions/git): reject negative -Number in create-new-feature-branch.ps1 (#3538)
13
+ - test: cover preset constitution seeding through init CLI (#3297)
14
+ - fix(integration): preserve ai_skills on `use` for skills-mode Copilot (#3550) (#3551)
15
+ - [extension] Add Figma Starter extension to community catalog (#3547)
16
+ - [extension] Add Spec-Kit BDD extension to community catalog (#3548)
17
+ - [extension] Update Quality Gates (Enforcement Layer) extension to v0.3.2 (#3542)
18
+ - chore: release 0.12.16, begin 0.12.17.dev0 development (#3549)
19
+
5
20
  ## [0.12.16] - 2026-07-15
6
21
 
7
22
  ### Changed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: specify-cli
3
- Version: 0.12.16
3
+ Version: 0.12.17
4
4
  Summary: Specify CLI, part of GitHub Spec Kit. A tool to bootstrap your projects for Spec-Driven Development (SDD).
5
5
  License-File: LICENSE
6
6
  Requires-Python: >=3.11
@@ -54,6 +54,7 @@ The following community-contributed extensions are available in [`catalog.commun
54
54
  | DocGuard — CDD Enforcement | Doc-integrity engine with MCP server, SARIF output, and zero-LLM core. Validates, scores, and traces documentation against code — 24 validators, stable finding codes, spec-kit hooks. Pure Node.js. | `docs` | Read+Write | [spec-kit-docguard](https://github.com/raccioly/docguard) |
55
55
  | EARS Requirements Syntax | Author, lint, and convert requirements using EARS - the five industry-standard sentence patterns for unambiguous, testable requirements | `docs` | Read+Write | [spec-kit-ears](https://github.com/dhruv-15-03/spec-kit-ears) |
56
56
  | Extensify | Create and validate extensions and extension catalogs | `process` | Read+Write | [extensify](https://github.com/mnriem/spec-kit-extensions/tree/main/extensify) |
57
+ | Figma Starter | Turns a Figma section's screens into per-screen spec.md files, an app-level user-stories.md, and a build-order.md, then hands off to /speckit.specify | `integration` | Read+Write | [spec-kit-figma-starter](https://github.com/wavemaker/spec-kit-figma-starter) |
57
58
  | Fix Findings | Automated analyze-fix-reanalyze loop that resolves spec findings until clean | `code` | Read+Write | [spec-kit-fix-findings](https://github.com/Quratulain-bilal/spec-kit-fix-findings) |
58
59
  | FixIt Extension | Spec-aware bug fixing — maps bugs to spec artifacts, proposes a plan, applies minimal changes | `code` | Read+Write | [spec-kit-fixit](https://github.com/speckit-community/spec-kit-fixit) |
59
60
  | Fleet Orchestrator | Orchestrate a full feature lifecycle with human-in-the-loop gates across all SpecKit phases | `process` | Read+Write | [spec-kit-fleet](https://github.com/sharathsatish/spec-kit-fleet) |
@@ -100,7 +101,7 @@ The following community-contributed extensions are available in [`catalog.commun
100
101
  | Project Health Check | Diagnose a Spec Kit project and report health issues across structure, agents, features, scripts, extensions, and git | `visibility` | Read-only | [spec-kit-doctor](https://github.com/KhawarHabibKhan/spec-kit-doctor) |
101
102
  | Project Status | Show current SDD workflow progress — active feature, artifact status, task completion, workflow phase, and extensions summary | `visibility` | Read-only | [spec-kit-status](https://github.com/KhawarHabibKhan/spec-kit-status) |
102
103
  | QA Testing Extension | Systematic QA testing with browser-driven or CLI-based validation of acceptance criteria from spec | `code` | Read-only | [spec-kit-qa](https://github.com/arunt14/spec-kit-qa) |
103
- | Quality Gates (Enforcement Layer) | Deterministic quality enforcement for Spec Kit projects at three boundaries — agent hooks, git pre-commit, CI — with one policy file and provable enforcement (attestations, canaries, verified parity). | `process` | Read+Write | [spec-gates](https://github.com/schwichtgit/spec-gates) |
104
+ | Quality Gates (Enforcement Layer) | Deterministic quality enforcement for Spec Kit across agent hooks, git checks, and CI pipelines with one policy file and one verify entrypoint for identical results at every boundary. | `process` | Read+Write | [spec-gates](https://github.com/schwichtgit/spec-gates) |
104
105
  | RAG Azure Builder | Spec Kit extension for onboarding and operating an Azure RAG stack with guided workflows. | `process` | Read+Write | [spec-kit-extension-rag-azure-builder](https://github.com/Sertxito/spec-kit-extension-rag-azure-builder) |
105
106
  | Ralph Loop | Autonomous implementation loop using AI agent CLI | `code` | Read+Write | [spec-kit-ralph](https://github.com/Rubiss-Projects/spec-kit-ralph) |
106
107
  | Reconcile Extension | Reconcile implementation drift by surgically updating feature artifacts. | `docs` | Read+Write | [spec-kit-reconcile](https://github.com/stn1slv/spec-kit-reconcile) |
@@ -134,6 +135,7 @@ The following community-contributed extensions are available in [`catalog.commun
134
135
  | Spec Sync | Detect and resolve drift between specs and implementation. AI-assisted resolution with human approval | `docs` | Read+Write | [spec-kit-sync](https://github.com/bgervin/spec-kit-sync) |
135
136
  | Spec Trace | Build a requirement → test traceability matrix from spec.md and the test suite — surface untested requirements and orphan tests | `code` | Read+Write | [spec-kit-trace](https://github.com/Quratulain-bilal/spec-kit-trace) |
136
137
  | Spec Validate | Comprehension validation, review gating, and approval state for spec-kit artifacts — staged quizzes, peer review SLA, and a hard gate before /speckit.implement | `process` | Read+Write | [spec-kit-spec-validate](https://github.com/aeltayeb/spec-kit-spec-validate) |
138
+ | Spec-Kit BDD | ATDD/BDD extension: convert specs to Gherkin scenarios, scaffold step definitions, and verify acceptance test coverage | `process` | Read+Write | [spec-kit-bdd](https://github.com/RSginer/spec-kit-bdd) |
137
139
  | Spec2Cloud | Spec-driven workflow tuned for shipping to Azure | `process` | Read+Write | [spec2cloud](https://github.com/Azure-Samples/Spec2Cloud) |
138
140
  | SpecKit Companion | Live spec-driven progress — lifecycle capture, status, resume, and a turbo pipeline profile | `visibility` | Read+Write | [speckit-companion](https://github.com/alfredoperez/speckit-companion) |
139
141
  | SpecTest | Auto-generate test scaffolds from spec criteria, map coverage, and find untested requirements | `code` | Read+Write | [spec-kit-spectest](https://github.com/Quratulain-bilal/spec-kit-spectest) |
@@ -20,6 +20,7 @@ The Specify CLI supports a wide range of AI coding agents. When you run `specify
20
20
  | [Gemini CLI](https://github.com/google-gemini/gemini-cli) | `gemini` | |
21
21
  | [GitHub Copilot](https://code.visualstudio.com/) | `copilot` | Defaults to legacy markdown mode: `.agent.md` command files under `.github/agents/`, companion `.prompt.md` files under `.github/prompts/`, and a `.vscode/settings.json` merge. Pass `--integration-options="--skills"` to scaffold skills as `speckit-<command>/SKILL.md` under `.github/skills/` instead. Legacy markdown mode is deprecated and will stop being the default in a future release. |
22
22
  | [Goose](https://goose-docs.ai/) | `goose` | Uses YAML recipe format in `.goose/recipes/` |
23
+ | [Grok Build](https://docs.x.ai/build/overview) | `grok` | Skills-based integration; installs skills into `.grok/skills` and invokes them as `/speckit-<command>` |
23
24
  | [Hermes](https://github.com/NousResearch/hermes-agent) | `hermes` | Skills-based integration; installs skills globally into `~/.hermes/skills/` |
24
25
  | [IBM Bob](https://www.ibm.com/products/bob) | `bob` | IDE-based agent |
25
26
  | [Junie](https://junie.jetbrains.com/) | `junie` | |
@@ -249,7 +250,11 @@ Spec Kit tracks one default integration in `.specify/integration.json` with `def
249
250
 
250
251
  ### Which integrations are multi-install safe?
251
252
 
252
- An integration is multi-install safe when it uses isolated agent directories, a dedicated context file that does not collide with another safe integration, stable command invocation settings, and a separate install manifest. Shared Spec Kit templates remain aligned to the single default integration.
253
+ An integration is multi-install safe when it uses a static, unique agent root and command directory, stable command invocation settings, and a separate install manifest whose managed files do not overlap another safe integration. Registry tests enforce those path and manifest invariants. Shared Spec Kit templates remain aligned to the single default integration.
254
+
255
+ The Isolation column below lists paths Spec Kit manages for that integration (skills/commands roots and any integration-owned rule files). It is not a full inventory of every file an agent may read.
256
+
257
+ **Agent-context defaults are separate.** The optional agent-context extension maps each integration to a default context file in `extensions/agent-context/agent-context-defaults.json`. Those defaults are independent of multi-install safety: several agents may share a root file such as `AGENTS.md` when the extension is enabled. Multi-install safety does not require a unique context file per safe integration.
253
258
 
254
259
  The currently declared multi-install safe integrations are:
255
260
 
@@ -263,6 +268,7 @@ The currently declared multi-install safe integrations are:
263
268
  | `cursor-agent` | `.cursor/skills`, `.cursor/rules/specify-rules.mdc` |
264
269
  | `firebender` | `.firebender/commands`, `.firebender/rules/specify-rules.mdc` |
265
270
  | `gemini` | `.gemini/commands`, `GEMINI.md` |
271
+ | `grok` | `.grok/skills` |
266
272
  | `junie` | `.junie/commands`, `.junie/AGENTS.md` |
267
273
  | `kilocode` | `.kilocode/workflows`, `.kilocode/rules/specify-rules.md` |
268
274
  | `qodercli` | `.qoder/commands`, `QODER.md` |
@@ -272,7 +278,7 @@ The currently declared multi-install safe integrations are:
272
278
  | `trae` | `.trae/skills`, `.trae/rules/project_rules.md` |
273
279
  | `zcode` | `.zcode/skills`, `ZCODE.md` |
274
280
 
275
- Integrations that share a context file or command directory with another integration, require dynamic install paths such as `--commands-dir`, or merge shared tool settings are not declared safe by default. They can still be installed alongside another integration with `--force`.
281
+ Integrations that share a command directory with another integration, require dynamic install paths such as `--commands-dir`, or merge shared tool settings are not declared safe by default. They can still be installed alongside another integration with `--force`.
276
282
 
277
283
  ### What happens to my changes when I uninstall or switch?
278
284
 
@@ -17,6 +17,7 @@
17
17
  "gemini": "GEMINI.md",
18
18
  "generic": "AGENTS.md",
19
19
  "goose": "AGENTS.md",
20
+ "grok": "AGENTS.md",
20
21
  "hermes": "AGENTS.md",
21
22
  "junie": ".junie/AGENTS.md",
22
23
  "kilocode": ".kilocode/rules/specify-rules.md",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schema_version": "1.0",
3
- "updated_at": "2026-07-15T00:00:00Z",
3
+ "updated_at": "2026-07-15T14:10:00Z",
4
4
  "catalog_url": "https://raw.githubusercontent.com/github/spec-kit/main/extensions/catalog.community.json",
5
5
  "extensions": {
6
6
  "aide": {
@@ -395,6 +395,66 @@
395
395
  "created_at": "2026-03-03T00:00:00Z",
396
396
  "updated_at": "2026-03-03T00:00:00Z"
397
397
  },
398
+ "bdd": {
399
+ "name": "Spec-Kit BDD",
400
+ "id": "bdd",
401
+ "description": "ATDD/BDD extension: convert specs to Gherkin scenarios, scaffold step definitions, and verify acceptance test coverage.",
402
+ "author": "RSginer",
403
+ "version": "1.0.2",
404
+ "download_url": "https://github.com/RSginer/spec-kit-bdd/archive/refs/tags/v1.0.2.zip",
405
+ "repository": "https://github.com/RSginer/spec-kit-bdd",
406
+ "homepage": "https://github.com/RSginer/spec-kit-bdd",
407
+ "documentation": "https://github.com/RSginer/spec-kit-bdd/blob/main/docs/usage.md",
408
+ "changelog": "https://github.com/RSginer/spec-kit-bdd/releases",
409
+ "license": "MIT",
410
+ "category": "process",
411
+ "effect": "read-write",
412
+ "requires": {
413
+ "speckit_version": ">=0.2.0",
414
+ "tools": [
415
+ {
416
+ "name": "pytest-bdd",
417
+ "required": false
418
+ },
419
+ {
420
+ "name": "behave",
421
+ "required": false
422
+ },
423
+ {
424
+ "name": "@cucumber/cucumber",
425
+ "required": false
426
+ },
427
+ {
428
+ "name": "cucumber",
429
+ "required": false
430
+ },
431
+ {
432
+ "name": "io.cucumber",
433
+ "required": false
434
+ },
435
+ {
436
+ "name": "SpecFlow",
437
+ "required": false
438
+ }
439
+ ]
440
+ },
441
+ "provides": {
442
+ "commands": 3,
443
+ "hooks": 2
444
+ },
445
+ "tags": [
446
+ "bdd",
447
+ "gherkin",
448
+ "atdd",
449
+ "acceptance-testing",
450
+ "tdd"
451
+ ],
452
+ "verified": false,
453
+ "downloads": 0,
454
+ "stars": 0,
455
+ "created_at": "2026-07-15T00:00:00Z",
456
+ "updated_at": "2026-07-15T00:00:00Z"
457
+ },
398
458
  "blueprint": {
399
459
  "name": "Blueprint",
400
460
  "id": "blueprint",
@@ -1295,6 +1355,43 @@
1295
1355
  "created_at": "2026-07-08T00:00:00Z",
1296
1356
  "updated_at": "2026-07-08T00:00:00Z"
1297
1357
  },
1358
+ "figma-starter": {
1359
+ "name": "Figma Starter",
1360
+ "id": "figma-starter",
1361
+ "description": "Turns a Figma section's screens into per-screen spec.md files, an app-level user-stories.md, and a build-order.md, then hands off to /speckit.specify.",
1362
+ "author": "WaveMaker",
1363
+ "version": "1.0.0",
1364
+ "download_url": "https://github.com/wavemaker/spec-kit-figma-starter/archive/refs/tags/v1.0.0.zip",
1365
+ "repository": "https://github.com/wavemaker/spec-kit-figma-starter",
1366
+ "homepage": "https://github.com/wavemaker/spec-kit-figma-starter",
1367
+ "documentation": "https://github.com/wavemaker/spec-kit-figma-starter/blob/main/README.md",
1368
+ "changelog": "https://github.com/wavemaker/spec-kit-figma-starter/blob/main/CHANGELOG.md",
1369
+ "license": "MIT",
1370
+ "category": "integration",
1371
+ "effect": "read-write",
1372
+ "requires": {
1373
+ "speckit_version": ">=0.1.0",
1374
+ "tools": [
1375
+ { "name": "python3", "version": ">=3.8", "required": true }
1376
+ ]
1377
+ },
1378
+ "provides": {
1379
+ "commands": 1,
1380
+ "hooks": 1
1381
+ },
1382
+ "tags": [
1383
+ "figma",
1384
+ "design",
1385
+ "design-to-spec",
1386
+ "ui",
1387
+ "frontend"
1388
+ ],
1389
+ "verified": false,
1390
+ "downloads": 0,
1391
+ "stars": 0,
1392
+ "created_at": "2026-07-15T00:00:00Z",
1393
+ "updated_at": "2026-07-15T00:00:00Z"
1394
+ },
1298
1395
  "fix-findings": {
1299
1396
  "name": "Fix Findings",
1300
1397
  "id": "fix-findings",
@@ -1438,13 +1535,14 @@
1438
1535
  "gates": {
1439
1536
  "name": "Quality Gates (Enforcement Layer)",
1440
1537
  "id": "gates",
1441
- "description": "Deterministic quality enforcement for Spec Kit projects at three boundaries — agent hooks, git pre-commit, CI — with one policy file and provable enforcement (attestations, canaries, verified parity).",
1538
+ "description": "Deterministic quality enforcement for Spec Kit across agent hooks, git checks, and CI pipelines with one policy file and one verify entrypoint for identical results at every boundary.",
1442
1539
  "author": "schwichtgit",
1443
- "version": "0.1.0",
1444
- "download_url": "https://github.com/schwichtgit/spec-gates/releases/download/v0.1.0/gates-0.1.0.zip",
1540
+ "version": "0.3.2",
1541
+ "download_url": "https://github.com/schwichtgit/spec-gates/releases/download/v0.3.2/gates-0.3.2.zip",
1445
1542
  "repository": "https://github.com/schwichtgit/spec-gates",
1446
1543
  "homepage": "https://github.com/schwichtgit/spec-gates",
1447
1544
  "documentation": "https://github.com/schwichtgit/spec-gates/blob/main/docs/how-it-works.md",
1545
+ "changelog": "https://github.com/schwichtgit/spec-gates/releases",
1448
1546
  "license": "MIT",
1449
1547
  "category": "process",
1450
1548
  "effect": "read-write",
@@ -1457,7 +1555,7 @@
1457
1555
  },
1458
1556
  {
1459
1557
  "name": "git",
1460
- "required": true
1558
+ "required": false
1461
1559
  },
1462
1560
  {
1463
1561
  "name": "node",
@@ -1470,8 +1568,8 @@
1470
1568
  ]
1471
1569
  },
1472
1570
  "provides": {
1473
- "commands": 5,
1474
- "hooks": 1
1571
+ "commands": 8,
1572
+ "hooks": 2
1475
1573
  },
1476
1574
  "tags": [
1477
1575
  "quality",
@@ -1484,7 +1582,7 @@
1484
1582
  "downloads": 0,
1485
1583
  "stars": 0,
1486
1584
  "created_at": "2026-07-09T00:00:00Z",
1487
- "updated_at": "2026-07-13T00:00:00Z"
1585
+ "updated_at": "2026-07-15T00:00:00Z"
1488
1586
  },
1489
1587
  "github-issues": {
1490
1588
  "name": "GitHub Issues Integration 1",
@@ -41,6 +41,16 @@ if ($Help) {
41
41
  exit 0
42
42
  }
43
43
 
44
+ # -Number is [long], so PowerShell binds "-5" as -5 rather than rejecting it
45
+ # the way the bash/Python twins do (`^[0-9]+$`). A negative value would format
46
+ # via '{0:000}' to e.g. "-005" and produce a branch name starting with "-",
47
+ # which git refuses (refs cannot begin with a dash). Reject it here, before the
48
+ # description check, matching the bash twin's parse-time validation order.
49
+ if ($Number -lt 0) {
50
+ Write-Error 'Error: --number must be a non-negative integer'
51
+ exit 1
52
+ }
53
+
44
54
  if (-not $FeatureDescription -or $FeatureDescription.Count -eq 0) {
45
55
  Write-Error "Usage: ./create-new-feature-branch.ps1 [-Json] [-DryRun] [-AllowExistingBranch] [-ShortName <name>] [-Number N] [-Timestamp] <feature description>"
46
56
  exit 1
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schema_version": "1.0",
3
- "updated_at": "2026-06-23T00:00:00Z",
3
+ "updated_at": "2026-07-15T00:00:00Z",
4
4
  "catalog_url": "https://raw.githubusercontent.com/github/spec-kit/main/integrations/catalog.json",
5
5
  "integrations": {
6
6
  "claude": {
@@ -282,6 +282,15 @@
282
282
  "repository": "https://github.com/github/spec-kit",
283
283
  "tags": ["cli"]
284
284
  },
285
+ "grok": {
286
+ "id": "grok",
287
+ "name": "Grok Build",
288
+ "version": "1.0.0",
289
+ "description": "xAI Grok Build CLI skills-based integration",
290
+ "author": "spec-kit-core",
291
+ "repository": "https://github.com/github/spec-kit",
292
+ "tags": ["cli", "skills", "xai"]
293
+ },
285
294
  "hermes": {
286
295
  "id": "hermes",
287
296
  "name": "Hermes Agent",
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "specify-cli"
3
- version = "0.12.16"
3
+ version = "0.12.17"
4
4
  description = "Specify CLI, part of GitHub Spec Kit. A tool to bootstrap your projects for Spec-Driven Development (SDD)."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
@@ -12,7 +12,7 @@ from __future__ import annotations
12
12
  DOLLAR_SKILLS_AGENTS: frozenset[str] = frozenset({"codex", "zcode"})
13
13
 
14
14
  # Agents that always render /speckit-<name>, regardless of ai_skills.
15
- ALWAYS_SLASH_AGENTS: frozenset[str] = frozenset({"devin", "trae", "zed"})
15
+ ALWAYS_SLASH_AGENTS: frozenset[str] = frozenset({"devin", "grok", "trae", "zed"})
16
16
 
17
17
  # Agents that render /speckit-<name> only when ai_skills is enabled.
18
18
  CONDITIONAL_SLASH_AGENTS: frozenset[str] = frozenset(
@@ -701,6 +701,7 @@ def register(app: typer.Typer) -> None:
701
701
  copilot_skill_mode = selected_ai == "copilot" and _is_skills_integration
702
702
  devin_skill_mode = selected_ai == "devin"
703
703
  zed_skill_mode = selected_ai == "zed" and _is_skills_integration
704
+ grok_skill_mode = selected_ai == "grok" and _is_skills_integration
704
705
  cline_skill_mode = selected_ai == "cline"
705
706
  native_skill_mode = (
706
707
  codex_skill_mode
@@ -713,6 +714,7 @@ def register(app: typer.Typer) -> None:
713
714
  or copilot_skill_mode
714
715
  or devin_skill_mode
715
716
  or zed_skill_mode
717
+ or grok_skill_mode
716
718
  )
717
719
 
718
720
  if codex_skill_mode:
@@ -745,6 +747,11 @@ def register(app: typer.Typer) -> None:
745
747
  f"{step_num}. Start Zed in this project directory; spec-kit skills were installed to [cyan].agents/skills[/cyan]"
746
748
  )
747
749
  step_num += 1
750
+ if grok_skill_mode:
751
+ steps_lines.append(
752
+ f"{step_num}. Start Grok Build in this project directory; spec-kit skills were installed to [cyan].grok/skills[/cyan]"
753
+ )
754
+ step_num += 1
748
755
  usage_label = "skills" if native_skill_mode else "slash commands"
749
756
 
750
757
  from .._invocation_style import (
@@ -1004,6 +1004,7 @@ class ExtensionManager:
1004
1004
  from .. import load_init_options
1005
1005
  from ..agents import CommandRegistrar
1006
1006
  from ..integrations import get_integration
1007
+ from ..integrations.base import IntegrationBase
1007
1008
 
1008
1009
  written: List[str] = []
1009
1010
  opts = load_init_options(self.project_root)
@@ -1015,6 +1016,30 @@ class ExtensionManager:
1015
1016
  registrar = CommandRegistrar()
1016
1017
  agent_config = registrar.AGENT_CONFIGS.get(selected_ai, {})
1017
1018
  integration = get_integration(selected_ai)
1019
+ ai_skills_enabled = is_ai_skills_enabled(opts)
1020
+
1021
+ def _resolve_command_ref_tokens(body: str) -> str:
1022
+ """Resolve explicit command-ref tokens with the active skill style."""
1023
+
1024
+ def _replacement(match: re.Match[str]) -> str:
1025
+ command_name = "speckit." + match.group(1).lower().replace("_", ".")
1026
+ if is_dollar_skills_agent(selected_ai, ai_skills_enabled):
1027
+ return "$" + command_name.replace("speckit.", "speckit-").replace(
1028
+ ".", "-"
1029
+ )
1030
+ if is_slash_skills_agent(selected_ai, ai_skills_enabled):
1031
+ return "/" + command_name.replace("speckit.", "speckit-").replace(
1032
+ ".", "-"
1033
+ )
1034
+ if integration is not None:
1035
+ return integration.build_command_invocation(command_name)
1036
+ return IntegrationBase.resolve_command_refs(
1037
+ match.group(0), agent_config.get("invoke_separator", ".")
1038
+ )
1039
+
1040
+ return re.sub(
1041
+ r"__SPECKIT_COMMAND_([A-Z][A-Z0-9_]*)__", _replacement, body
1042
+ )
1018
1043
 
1019
1044
  for cmd_info in manifest.commands:
1020
1045
  cmd_name = cmd_info["name"]
@@ -1086,6 +1111,7 @@ class ExtensionManager:
1086
1111
  body = registrar.resolve_skill_placeholders(
1087
1112
  selected_ai, frontmatter, body, self.project_root, extension_id=manifest.id
1088
1113
  )
1114
+ body = _resolve_command_ref_tokens(body)
1089
1115
 
1090
1116
  original_desc = frontmatter.get("description", "")
1091
1117
  description = original_desc or f"Extension command: {cmd_name}"
@@ -63,6 +63,7 @@ def _register_builtins() -> None:
63
63
  from .gemini import GeminiIntegration
64
64
  from .generic import GenericIntegration
65
65
  from .goose import GooseIntegration
66
+ from .grok import GrokIntegration
66
67
  from .hermes import HermesIntegration
67
68
  from .junie import JunieIntegration
68
69
  from .kilocode import KilocodeIntegration
@@ -99,6 +100,7 @@ def _register_builtins() -> None:
99
100
  _register(GeminiIntegration())
100
101
  _register(GenericIntegration())
101
102
  _register(GooseIntegration())
103
+ _register(GrokIntegration())
102
104
  _register(HermesIntegration())
103
105
  _register(JunieIntegration())
104
106
  _register(KilocodeIntegration())
@@ -260,6 +260,7 @@ def _update_init_options_for_integration(
260
260
  project_root: Path,
261
261
  integration: Any,
262
262
  script_type: str | None = None,
263
+ parsed_options: dict[str, Any] | None = None,
263
264
  ) -> None:
264
265
  """Update init-options.json to reflect *integration* as the active one.
265
266
 
@@ -278,7 +279,17 @@ def _update_init_options_for_integration(
278
279
  opts["speckit_version"] = _get_speckit_version()
279
280
  if script_type:
280
281
  opts["script"] = script_type
281
- if isinstance(integration, SkillsIntegration) or getattr(integration, "_skills_mode", False):
282
+ # Skills mode is either intrinsic (SkillsIntegration), set on the instance
283
+ # during setup() (_skills_mode), or requested via parsed options (e.g.
284
+ # Copilot's --skills, persisted as parsed_options["skills"]). The latter is
285
+ # the only signal available on the `use` path, where no setup() runs and a
286
+ # fresh integration instance has _skills_mode == False (issue #3550).
287
+ skills_mode = (
288
+ isinstance(integration, SkillsIntegration)
289
+ or getattr(integration, "_skills_mode", False)
290
+ or bool((parsed_options or {}).get("skills"))
291
+ )
292
+ if skills_mode:
282
293
  opts["ai_skills"] = True
283
294
  else:
284
295
  opts.pop("ai_skills", None)
@@ -334,7 +345,9 @@ def _set_default_integration(
334
345
  ) from exc
335
346
 
336
347
  _write_integration_json(project_root, key, installed_keys, settings)
337
- _update_init_options_for_integration(project_root, integration, script_type=resolved_script)
348
+ _update_init_options_for_integration(
349
+ project_root, integration, script_type=resolved_script, parsed_options=parsed_options
350
+ )
338
351
 
339
352
 
340
353
  def _set_default_integration_or_exit(*args: Any, **kwargs: Any) -> None:
@@ -0,0 +1,60 @@
1
+ """Grok Build integration — skills-based agent.
2
+
3
+ Grok Build discovers project skills from ``.grok/skills/speckit-<name>/SKILL.md``
4
+ (and also scans ``.agents/skills/``). Spec Kit installs into the native
5
+ ``.grok/skills`` tree so skills take highest local priority.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ from ..base import SkillsIntegration
11
+
12
+
13
+ class GrokIntegration(SkillsIntegration):
14
+ """Integration for xAI Grok Build CLI."""
15
+
16
+ key = "grok"
17
+ config = {
18
+ "name": "Grok Build",
19
+ "folder": ".grok/",
20
+ "commands_subdir": "skills",
21
+ "install_url": "https://docs.x.ai/build/overview",
22
+ "requires_cli": True,
23
+ }
24
+ registrar_config = {
25
+ "dir": ".grok/skills",
26
+ "format": "markdown",
27
+ "args": "$ARGUMENTS",
28
+ "extension": "/SKILL.md",
29
+ }
30
+ multi_install_safe = True
31
+
32
+ def build_exec_args(
33
+ self,
34
+ prompt: str,
35
+ *,
36
+ model: str | None = None,
37
+ output_json: bool = True,
38
+ ) -> list[str] | None:
39
+ """Build CLI arguments for non-interactive ``grok`` execution.
40
+
41
+ Mandatory headless flag:
42
+
43
+ * ``--always-approve`` — auto-approve tool executions so workflow
44
+ dispatch and ``dispatch_command()`` are not blocked at permission
45
+ gates (same role as Cursor's ``--force`` / Copilot's ``--yolo``).
46
+ """
47
+ if not self.config or not self.config.get("requires_cli"):
48
+ return None
49
+ args = [
50
+ self._resolve_executable(),
51
+ "-p",
52
+ prompt,
53
+ "--always-approve",
54
+ ]
55
+ self._apply_extra_args_env_var(args)
56
+ if model:
57
+ args.extend(["--model", model])
58
+ if output_json:
59
+ args.extend(["--output-format", "json"])
60
+ return args
@@ -22,10 +22,33 @@ class IfThenStep(StepBase):
22
22
  result = evaluate_condition(condition, context)
23
23
 
24
24
  if result:
25
+ branch_name = "then"
25
26
  branch = config.get("then", [])
26
27
  else:
28
+ branch_name = "else"
27
29
  branch = config.get("else", [])
28
30
 
31
+ # The engine does not auto-validate step config (see
32
+ # ``WorkflowEngine.load_workflow``), and it feeds ``next_steps`` straight
33
+ # into ``_execute_steps`` which iterates them as step mappings. A
34
+ # non-list branch (a single mapping or scalar authoring mistake) would
35
+ # otherwise be iterated element-wise — a dict yields its string keys, a
36
+ # str its characters — and crash the whole run with AttributeError on
37
+ # ``.get()``. ``validate`` already rejects a non-list branch; fail this
38
+ # step loudly on an unvalidated run instead, mirroring the switch/fan-out
39
+ # steps. A missing ``else`` defaults to ``[]`` and stays valid.
40
+ if branch is None and branch_name == "else":
41
+ branch = []
42
+ elif not isinstance(branch, list):
43
+ return StepResult(
44
+ status=StepStatus.FAILED,
45
+ output={"condition_result": result},
46
+ error=(
47
+ f"If step {config.get('id', '?')!r}: {branch_name!r} must be "
48
+ f"a list of steps, got {type(branch).__name__}."
49
+ ),
50
+ )
51
+
29
52
  return StepResult(
30
53
  status=StepStatus.COMPLETED,
31
54
  output={"condition_result": result},