specify-cli 0.13.3__tar.gz → 0.14.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (521) hide show
  1. {specify_cli-0.13.3 → specify_cli-0.14.0}/.devcontainer/devcontainer.json +2 -1
  2. {specify_cli-0.13.3 → specify_cli-0.14.0}/.devcontainer/post-create.sh +11 -0
  3. {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/ISSUE_TEMPLATE/agent_request.yml +1 -1
  4. {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/ISSUE_TEMPLATE/bug_report.yml +1 -0
  5. {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/ISSUE_TEMPLATE/feature_request.yml +1 -0
  6. {specify_cli-0.13.3 → specify_cli-0.14.0}/AGENTS.md +41 -2
  7. {specify_cli-0.13.3 → specify_cli-0.14.0}/CHANGELOG.md +50 -0
  8. {specify_cli-0.13.3 → specify_cli-0.14.0}/PKG-INFO +1 -1
  9. {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/community/friends.md +3 -1
  10. {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/community/presets.md +1 -0
  11. {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/concepts/complex-features.md +8 -4
  12. specify_cli-0.14.0/docs/concepts/spec-of-specs.md +171 -0
  13. {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/installation.md +4 -2
  14. {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/local-development.md +2 -2
  15. {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/quickstart.md +1 -1
  16. {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/reference/core.md +1 -1
  17. {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/reference/integrations.md +24 -24
  18. {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/toc.yml +2 -0
  19. {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/upgrade.md +75 -69
  20. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/git/scripts/bash/auto-commit.sh +6 -1
  21. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/git/scripts/powershell/create-new-feature-branch.ps1 +7 -1
  22. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/git/scripts/python/auto_commit.py +9 -1
  23. {specify_cli-0.13.3 → specify_cli-0.14.0}/integrations/catalog.json +10 -1
  24. {specify_cli-0.13.3 → specify_cli-0.14.0}/presets/catalog.community.json +29 -0
  25. specify_cli-0.14.0/presets/lean/commands/speckit.constitution.md +33 -0
  26. {specify_cli-0.13.3 → specify_cli-0.14.0}/pyproject.toml +2 -1
  27. specify_cli-0.14.0/src/specify_cli/_download_security.py +218 -0
  28. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/_github_http.py +9 -4
  29. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/_version.py +10 -3
  30. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/authentication/azure_devops.py +49 -7
  31. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/authentication/http.py +30 -5
  32. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/bundler/commands_impl/catalog_config.py +9 -2
  33. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/bundler/lib/yamlio.py +7 -1
  34. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/bundler/models/catalog.py +15 -1
  35. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/bundler/models/manifest.py +13 -4
  36. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/bundler/services/packager.py +7 -1
  37. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/commands/init.py +2 -0
  38. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/extensions/__init__.py +5 -0
  39. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integration_runtime.py +8 -1
  40. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/__init__.py +2 -0
  41. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/catalog.py +34 -14
  42. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/cline/__init__.py +22 -3
  43. specify_cli-0.14.0/src/specify_cli/integrations/droid/__init__.py +135 -0
  44. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/kiro_cli/__init__.py +7 -7
  45. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/lingma/__init__.py +1 -0
  46. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/presets/_commands.py +10 -19
  47. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/workflows/_commands.py +17 -76
  48. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/workflows/catalog.py +5 -1
  49. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/workflows/expressions.py +4 -0
  50. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/workflows/overlays/merge.py +15 -3
  51. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/workflows/steps/command/__init__.py +5 -1
  52. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/workflows/steps/gate/__init__.py +6 -2
  53. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/workflows/steps/init/__init__.py +1 -1
  54. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/workflows/steps/prompt/__init__.py +4 -1
  55. {specify_cli-0.13.3 → specify_cli-0.14.0}/templates/commands/constitution.md +20 -0
  56. {specify_cli-0.13.3 → specify_cli-0.14.0}/templates/commands/specify.md +2 -2
  57. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/contract/test_catalog_schema.py +36 -0
  58. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/contract/test_manifest_schema.py +41 -0
  59. specify_cli-0.14.0/tests/contract/test_wheel_core_pack_scripts.py +40 -0
  60. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/extensions/git/test_git_extension.py +16 -0
  61. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/extensions/git/test_git_extension_python_parity.py +26 -0
  62. specify_cli-0.14.0/tests/http_helpers.py +46 -0
  63. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_base.py +18 -0
  64. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_catalog.py +69 -0
  65. specify_cli-0.14.0/tests/integrations/test_integration_droid.py +262 -0
  66. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_forge.py +36 -0
  67. specify_cli-0.14.0/tests/integrations/test_integration_lingma.py +18 -0
  68. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_state.py +28 -0
  69. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_registry.py +1 -0
  70. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/self_upgrade_helpers.py +2 -1
  71. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_agent_config_consistency.py +1 -0
  72. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_authentication.py +342 -28
  73. specify_cli-0.14.0/tests/test_download_security.py +227 -0
  74. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_extensions.py +43 -5
  75. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_github_http.py +52 -8
  76. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_post_process.py +31 -0
  77. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_presets.py +33 -5
  78. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_self_upgrade_detection.py +1 -0
  79. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_self_upgrade_execution.py +1 -0
  80. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_self_upgrade_guidance.py +1 -0
  81. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_self_upgrade_verification.py +1 -0
  82. specify_cli-0.14.0/tests/test_specify_template_numbering.py +39 -0
  83. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_upgrade.py +51 -6
  84. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_workflows.py +180 -50
  85. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/unit/test_bundler_catalog_config.py +41 -0
  86. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/unit/test_bundler_packager.py +17 -0
  87. specify_cli-0.14.0/tests/unit/test_bundler_yamlio.py +26 -0
  88. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/workflows/test_overlay_merge.py +17 -0
  89. specify_cli-0.13.3/presets/lean/commands/speckit.constitution.md +0 -15
  90. specify_cli-0.13.3/tests/http_helpers.py +0 -15
  91. specify_cli-0.13.3/tests/integrations/test_integration_lingma.py +0 -10
  92. {specify_cli-0.13.3 → specify_cli-0.14.0}/.editorconfig +0 -0
  93. {specify_cli-0.13.3 → specify_cli-0.14.0}/.gitattributes +0 -0
  94. {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/CODEOWNERS +0 -0
  95. {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/ISSUE_TEMPLATE/bundle_submission.yml +0 -0
  96. {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  97. {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/ISSUE_TEMPLATE/extension_submission.yml +0 -0
  98. {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/ISSUE_TEMPLATE/preset_submission.yml +0 -0
  99. {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  100. {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/aw/actions-lock.json +0 -0
  101. {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/dependabot.yml +0 -0
  102. {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/scripts/check_security_requirements.py +0 -0
  103. {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/security-audit-requirements.txt +0 -0
  104. {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/skills/add-community-extension/SKILL.md +0 -0
  105. {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/workflows/RELEASE-PROCESS.md +0 -0
  106. {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/workflows/add-community-bundle.lock.yml +0 -0
  107. {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/workflows/add-community-bundle.md +0 -0
  108. {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/workflows/add-community-extension.lock.yml +0 -0
  109. {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/workflows/add-community-extension.md +0 -0
  110. {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/workflows/add-community-preset.lock.yml +0 -0
  111. {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/workflows/add-community-preset.md +0 -0
  112. {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/workflows/bug-assess.lock.yml +0 -0
  113. {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/workflows/bug-assess.md +0 -0
  114. {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/workflows/bug-fix.lock.yml +0 -0
  115. {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/workflows/bug-fix.md +0 -0
  116. {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/workflows/bug-test.lock.yml +0 -0
  117. {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/workflows/bug-test.md +0 -0
  118. {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/workflows/catalog-assign.yml +0 -0
  119. {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/workflows/codeql.yml +0 -0
  120. {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/workflows/docs.yml +0 -0
  121. {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/workflows/lint.yml +0 -0
  122. {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/workflows/publish-pypi.yml +0 -0
  123. {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/workflows/release-trigger.yml +0 -0
  124. {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/workflows/release.yml +0 -0
  125. {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/workflows/security.yml +0 -0
  126. {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/workflows/stale.yml +0 -0
  127. {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/workflows/test.yml +0 -0
  128. {specify_cli-0.13.3 → specify_cli-0.14.0}/.gitignore +0 -0
  129. {specify_cli-0.13.3 → specify_cli-0.14.0}/.markdownlint-cli2.jsonc +0 -0
  130. {specify_cli-0.13.3 → specify_cli-0.14.0}/.pre-commit-config.yaml +0 -0
  131. {specify_cli-0.13.3 → specify_cli-0.14.0}/.zenodo.json +0 -0
  132. {specify_cli-0.13.3 → specify_cli-0.14.0}/CITATION.cff +0 -0
  133. {specify_cli-0.13.3 → specify_cli-0.14.0}/CODE_OF_CONDUCT.md +0 -0
  134. {specify_cli-0.13.3 → specify_cli-0.14.0}/CONTRIBUTING.md +0 -0
  135. {specify_cli-0.13.3 → specify_cli-0.14.0}/DEVELOPMENT.md +0 -0
  136. {specify_cli-0.13.3 → specify_cli-0.14.0}/LICENSE +0 -0
  137. {specify_cli-0.13.3 → specify_cli-0.14.0}/README.md +0 -0
  138. {specify_cli-0.13.3 → specify_cli-0.14.0}/SECURITY.md +0 -0
  139. {specify_cli-0.13.3 → specify_cli-0.14.0}/SUPPORT.md +0 -0
  140. {specify_cli-0.13.3 → specify_cli-0.14.0}/bundles/catalog.community.json +0 -0
  141. {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/.gitignore +0 -0
  142. {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/README.md +0 -0
  143. {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/community/bundles.md +0 -0
  144. {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/community/extensions.md +0 -0
  145. {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/community/overview.md +0 -0
  146. {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/community/walkthroughs.md +0 -0
  147. {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/concepts/sdd.md +0 -0
  148. {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/concepts/spec-persistence.md +0 -0
  149. {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/docfx.json +0 -0
  150. {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/guides/evolving-specs.md +0 -0
  151. {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/guides/monorepo.md +0 -0
  152. {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/index.md +0 -0
  153. {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/install/air-gapped.md +0 -0
  154. {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/install/one-time.md +0 -0
  155. {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/install/pipx.md +0 -0
  156. {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/install/pypi.md +0 -0
  157. {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/install/uv.md +0 -0
  158. {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/reference/agentic-bugfix.md +0 -0
  159. {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/reference/agentic-sdd.md +0 -0
  160. {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/reference/authentication.md +0 -0
  161. {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/reference/bundles.md +0 -0
  162. {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/reference/extensions.md +0 -0
  163. {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/reference/overview.md +0 -0
  164. {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/reference/presets.md +0 -0
  165. {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/reference/workflows.md +0 -0
  166. {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/template/public/main.css +0 -0
  167. {specify_cli-0.13.3 → specify_cli-0.14.0}/examples/bundles/business-analyst/README.md +0 -0
  168. {specify_cli-0.13.3 → specify_cli-0.14.0}/examples/bundles/business-analyst/bundle.yml +0 -0
  169. {specify_cli-0.13.3 → specify_cli-0.14.0}/examples/bundles/developer/README.md +0 -0
  170. {specify_cli-0.13.3 → specify_cli-0.14.0}/examples/bundles/developer/bundle.yml +0 -0
  171. {specify_cli-0.13.3 → specify_cli-0.14.0}/examples/bundles/product-manager/README.md +0 -0
  172. {specify_cli-0.13.3 → specify_cli-0.14.0}/examples/bundles/product-manager/bundle.yml +0 -0
  173. {specify_cli-0.13.3 → specify_cli-0.14.0}/examples/bundles/security-researcher/README.md +0 -0
  174. {specify_cli-0.13.3 → specify_cli-0.14.0}/examples/bundles/security-researcher/bundle.yml +0 -0
  175. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/EXTENSION-API-REFERENCE.md +0 -0
  176. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/EXTENSION-DEVELOPMENT-GUIDE.md +0 -0
  177. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/EXTENSION-PUBLISHING-GUIDE.md +0 -0
  178. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/EXTENSION-USER-GUIDE.md +0 -0
  179. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/README.md +0 -0
  180. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/RFC-EXTENSION-SYSTEM.md +0 -0
  181. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/agent-context/README.md +0 -0
  182. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/agent-context/agent-context-config.yml +0 -0
  183. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/agent-context/agent-context-defaults.json +0 -0
  184. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/agent-context/commands/speckit.agent-context.update.md +0 -0
  185. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/agent-context/extension.yml +0 -0
  186. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/agent-context/scripts/bash/update-agent-context.sh +0 -0
  187. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/agent-context/scripts/powershell/update-agent-context.ps1 +0 -0
  188. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/agent-context/scripts/python/update_agent_context.py +0 -0
  189. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/assess/README.md +0 -0
  190. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/assess/commands/speckit.assess.decide.md +0 -0
  191. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/assess/commands/speckit.assess.define.md +0 -0
  192. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/assess/commands/speckit.assess.intake.md +0 -0
  193. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/assess/commands/speckit.assess.research.md +0 -0
  194. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/assess/commands/speckit.assess.shape.md +0 -0
  195. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/assess/extension.yml +0 -0
  196. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/bug/README.md +0 -0
  197. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/bug/commands/speckit.bug.assess.md +0 -0
  198. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/bug/commands/speckit.bug.fix.md +0 -0
  199. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/bug/commands/speckit.bug.test.md +0 -0
  200. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/bug/extension.yml +0 -0
  201. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/catalog.community.json +0 -0
  202. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/catalog.json +0 -0
  203. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/git/README.md +0 -0
  204. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/git/commands/speckit.git.commit.md +0 -0
  205. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/git/commands/speckit.git.feature.md +0 -0
  206. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/git/commands/speckit.git.initialize.md +0 -0
  207. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/git/commands/speckit.git.remote.md +0 -0
  208. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/git/commands/speckit.git.validate.md +0 -0
  209. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/git/config-template.yml +0 -0
  210. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/git/extension.yml +0 -0
  211. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/git/git-config.yml +0 -0
  212. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/git/scripts/bash/create-new-feature-branch.sh +0 -0
  213. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/git/scripts/bash/git-common.sh +0 -0
  214. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/git/scripts/bash/initialize-repo.sh +0 -0
  215. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/git/scripts/powershell/auto-commit.ps1 +0 -0
  216. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/git/scripts/powershell/git-common.ps1 +0 -0
  217. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/git/scripts/powershell/initialize-repo.ps1 +0 -0
  218. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/git/scripts/python/create_new_feature_branch.py +0 -0
  219. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/git/scripts/python/git_common.py +0 -0
  220. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/git/scripts/python/initialize_repo.py +0 -0
  221. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/selftest/commands/selftest.md +0 -0
  222. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/selftest/extension.yml +0 -0
  223. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/template/.gitignore +0 -0
  224. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/template/CHANGELOG.md +0 -0
  225. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/template/EXAMPLE-README.md +0 -0
  226. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/template/LICENSE +0 -0
  227. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/template/README.md +0 -0
  228. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/template/commands/example.md +0 -0
  229. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/template/config-template.yml +0 -0
  230. {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/template/extension.yml +0 -0
  231. {specify_cli-0.13.3 → specify_cli-0.14.0}/integrations/CONTRIBUTING.md +0 -0
  232. {specify_cli-0.13.3 → specify_cli-0.14.0}/integrations/README.md +0 -0
  233. {specify_cli-0.13.3 → specify_cli-0.14.0}/integrations/catalog.community.json +0 -0
  234. {specify_cli-0.13.3 → specify_cli-0.14.0}/media/bootstrap-claude-code.gif +0 -0
  235. {specify_cli-0.13.3 → specify_cli-0.14.0}/media/logo_large.webp +0 -0
  236. {specify_cli-0.13.3 → specify_cli-0.14.0}/media/logo_small.webp +0 -0
  237. {specify_cli-0.13.3 → specify_cli-0.14.0}/media/spec-kit-video-header.jpg +0 -0
  238. {specify_cli-0.13.3 → specify_cli-0.14.0}/media/specify_cli.gif +0 -0
  239. {specify_cli-0.13.3 → specify_cli-0.14.0}/newsletters/2026-April.md +0 -0
  240. {specify_cli-0.13.3 → specify_cli-0.14.0}/newsletters/2026-February.md +0 -0
  241. {specify_cli-0.13.3 → specify_cli-0.14.0}/newsletters/2026-June.md +0 -0
  242. {specify_cli-0.13.3 → specify_cli-0.14.0}/newsletters/2026-March.md +0 -0
  243. {specify_cli-0.13.3 → specify_cli-0.14.0}/newsletters/2026-May.md +0 -0
  244. {specify_cli-0.13.3 → specify_cli-0.14.0}/presets/ARCHITECTURE.md +0 -0
  245. {specify_cli-0.13.3 → specify_cli-0.14.0}/presets/PUBLISHING.md +0 -0
  246. {specify_cli-0.13.3 → specify_cli-0.14.0}/presets/README.md +0 -0
  247. {specify_cli-0.13.3 → specify_cli-0.14.0}/presets/catalog.json +0 -0
  248. {specify_cli-0.13.3 → specify_cli-0.14.0}/presets/lean/README.md +0 -0
  249. {specify_cli-0.13.3 → specify_cli-0.14.0}/presets/lean/commands/speckit.implement.md +0 -0
  250. {specify_cli-0.13.3 → specify_cli-0.14.0}/presets/lean/commands/speckit.plan.md +0 -0
  251. {specify_cli-0.13.3 → specify_cli-0.14.0}/presets/lean/commands/speckit.specify.md +0 -0
  252. {specify_cli-0.13.3 → specify_cli-0.14.0}/presets/lean/commands/speckit.tasks.md +0 -0
  253. {specify_cli-0.13.3 → specify_cli-0.14.0}/presets/lean/preset.yml +0 -0
  254. {specify_cli-0.13.3 → specify_cli-0.14.0}/presets/scaffold/README.md +0 -0
  255. {specify_cli-0.13.3 → specify_cli-0.14.0}/presets/scaffold/commands/speckit.myext.myextcmd.md +0 -0
  256. {specify_cli-0.13.3 → specify_cli-0.14.0}/presets/scaffold/commands/speckit.specify.md +0 -0
  257. {specify_cli-0.13.3 → specify_cli-0.14.0}/presets/scaffold/preset.yml +0 -0
  258. {specify_cli-0.13.3 → specify_cli-0.14.0}/presets/scaffold/templates/myext-template.md +0 -0
  259. {specify_cli-0.13.3 → specify_cli-0.14.0}/presets/scaffold/templates/spec-template.md +0 -0
  260. {specify_cli-0.13.3 → specify_cli-0.14.0}/presets/self-test/commands/speckit.specify.md +0 -0
  261. {specify_cli-0.13.3 → specify_cli-0.14.0}/presets/self-test/commands/speckit.wrap-test.md +0 -0
  262. {specify_cli-0.13.3 → specify_cli-0.14.0}/presets/self-test/preset.yml +0 -0
  263. {specify_cli-0.13.3 → specify_cli-0.14.0}/presets/self-test/templates/checklist-template.md +0 -0
  264. {specify_cli-0.13.3 → specify_cli-0.14.0}/presets/self-test/templates/constitution-template.md +0 -0
  265. {specify_cli-0.13.3 → specify_cli-0.14.0}/presets/self-test/templates/plan-template.md +0 -0
  266. {specify_cli-0.13.3 → specify_cli-0.14.0}/presets/self-test/templates/spec-template.md +0 -0
  267. {specify_cli-0.13.3 → specify_cli-0.14.0}/presets/self-test/templates/tasks-template.md +0 -0
  268. {specify_cli-0.13.3 → specify_cli-0.14.0}/scripts/bash/check-prerequisites.sh +0 -0
  269. {specify_cli-0.13.3 → specify_cli-0.14.0}/scripts/bash/common.sh +0 -0
  270. {specify_cli-0.13.3 → specify_cli-0.14.0}/scripts/bash/create-new-feature.sh +0 -0
  271. {specify_cli-0.13.3 → specify_cli-0.14.0}/scripts/bash/setup-plan.sh +0 -0
  272. {specify_cli-0.13.3 → specify_cli-0.14.0}/scripts/bash/setup-tasks.sh +0 -0
  273. {specify_cli-0.13.3 → specify_cli-0.14.0}/scripts/powershell/check-prerequisites.ps1 +0 -0
  274. {specify_cli-0.13.3 → specify_cli-0.14.0}/scripts/powershell/common.ps1 +0 -0
  275. {specify_cli-0.13.3 → specify_cli-0.14.0}/scripts/powershell/create-new-feature.ps1 +0 -0
  276. {specify_cli-0.13.3 → specify_cli-0.14.0}/scripts/powershell/setup-plan.ps1 +0 -0
  277. {specify_cli-0.13.3 → specify_cli-0.14.0}/scripts/powershell/setup-tasks.ps1 +0 -0
  278. {specify_cli-0.13.3 → specify_cli-0.14.0}/scripts/python/check_prerequisites.py +0 -0
  279. {specify_cli-0.13.3 → specify_cli-0.14.0}/scripts/python/common.py +0 -0
  280. {specify_cli-0.13.3 → specify_cli-0.14.0}/scripts/python/create_new_feature.py +0 -0
  281. {specify_cli-0.13.3 → specify_cli-0.14.0}/scripts/python/setup_plan.py +0 -0
  282. {specify_cli-0.13.3 → specify_cli-0.14.0}/scripts/python/setup_tasks.py +0 -0
  283. {specify_cli-0.13.3 → specify_cli-0.14.0}/spec-driven.md +0 -0
  284. {specify_cli-0.13.3 → specify_cli-0.14.0}/spec-kit.code-workspace +0 -0
  285. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/__init__.py +0 -0
  286. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/_agent_config.py +0 -0
  287. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/_assets.py +0 -0
  288. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/_console.py +0 -0
  289. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/_init_options.py +0 -0
  290. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/_invocation_style.py +0 -0
  291. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/_project.py +0 -0
  292. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/_toml_string.py +0 -0
  293. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/_utils.py +0 -0
  294. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/agents.py +0 -0
  295. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/authentication/__init__.py +0 -0
  296. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/authentication/base.py +0 -0
  297. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/authentication/config.py +0 -0
  298. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/authentication/github.py +0 -0
  299. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/bundler/__init__.py +0 -0
  300. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/bundler/commands_impl/__init__.py +0 -0
  301. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/bundler/lib/__init__.py +0 -0
  302. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/bundler/lib/project.py +0 -0
  303. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/bundler/lib/versioning.py +0 -0
  304. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/bundler/models/__init__.py +0 -0
  305. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/bundler/models/records.py +0 -0
  306. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/bundler/services/__init__.py +0 -0
  307. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/bundler/services/adapters.py +0 -0
  308. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/bundler/services/catalog_stack.py +0 -0
  309. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/bundler/services/conflict.py +0 -0
  310. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/bundler/services/installer.py +0 -0
  311. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/bundler/services/primitives.py +0 -0
  312. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/bundler/services/references.py +0 -0
  313. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/bundler/services/resolver.py +0 -0
  314. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/bundler/services/validator.py +0 -0
  315. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/catalogs.py +0 -0
  316. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/commands/__init__.py +0 -0
  317. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/commands/bundle/__init__.py +0 -0
  318. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/extensions/_commands.py +0 -0
  319. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integration_scaffold.py +0 -0
  320. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integration_state.py +0 -0
  321. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integration_status.py +0 -0
  322. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/_commands.py +0 -0
  323. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/_helpers.py +0 -0
  324. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/_install_commands.py +0 -0
  325. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/_migrate_commands.py +0 -0
  326. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/_query_commands.py +0 -0
  327. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/_scaffold_commands.py +0 -0
  328. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/agy/__init__.py +0 -0
  329. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/amp/__init__.py +0 -0
  330. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/auggie/__init__.py +0 -0
  331. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/base.py +0 -0
  332. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/bob/__init__.py +0 -0
  333. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/claude/__init__.py +0 -0
  334. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/codebuddy/__init__.py +0 -0
  335. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/codex/__init__.py +0 -0
  336. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/copilot/__init__.py +0 -0
  337. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/cursor_agent/__init__.py +0 -0
  338. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/devin/__init__.py +0 -0
  339. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/firebender/__init__.py +0 -0
  340. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/forge/__init__.py +0 -0
  341. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/gemini/__init__.py +0 -0
  342. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/generic/__init__.py +0 -0
  343. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/goose/__init__.py +0 -0
  344. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/grok/__init__.py +0 -0
  345. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/hermes/__init__.py +0 -0
  346. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/junie/__init__.py +0 -0
  347. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/kilocode/__init__.py +0 -0
  348. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/kimi/__init__.py +0 -0
  349. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/manifest.py +0 -0
  350. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/omp/__init__.py +0 -0
  351. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/opencode/__init__.py +0 -0
  352. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/pi/__init__.py +0 -0
  353. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/qodercli/__init__.py +0 -0
  354. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/qwen/__init__.py +0 -0
  355. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/rovodev/__init__.py +0 -0
  356. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/shai/__init__.py +0 -0
  357. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/tabnine/__init__.py +0 -0
  358. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/trae/__init__.py +0 -0
  359. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/vibe/__init__.py +0 -0
  360. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/zcode/__init__.py +0 -0
  361. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/zed/__init__.py +0 -0
  362. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/presets/__init__.py +0 -0
  363. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/shared_infra.py +0 -0
  364. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/workflows/__init__.py +0 -0
  365. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/workflows/base.py +0 -0
  366. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/workflows/engine.py +0 -0
  367. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/workflows/overlays/__init__.py +0 -0
  368. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/workflows/overlays/_commands.py +0 -0
  369. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/workflows/overlays/composer.py +0 -0
  370. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/workflows/overlays/layer_sources.py +0 -0
  371. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/workflows/overlays/schema.py +0 -0
  372. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/workflows/steps/__init__.py +0 -0
  373. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/workflows/steps/do_while/__init__.py +0 -0
  374. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/workflows/steps/fan_in/__init__.py +0 -0
  375. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/workflows/steps/fan_out/__init__.py +0 -0
  376. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/workflows/steps/if_then/__init__.py +0 -0
  377. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/workflows/steps/shell/__init__.py +0 -0
  378. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/workflows/steps/switch/__init__.py +0 -0
  379. {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/workflows/steps/while_loop/__init__.py +0 -0
  380. {specify_cli-0.13.3 → specify_cli-0.14.0}/templates/checklist-template.md +0 -0
  381. {specify_cli-0.13.3 → specify_cli-0.14.0}/templates/commands/analyze.md +0 -0
  382. {specify_cli-0.13.3 → specify_cli-0.14.0}/templates/commands/checklist.md +0 -0
  383. {specify_cli-0.13.3 → specify_cli-0.14.0}/templates/commands/clarify.md +0 -0
  384. {specify_cli-0.13.3 → specify_cli-0.14.0}/templates/commands/converge.md +0 -0
  385. {specify_cli-0.13.3 → specify_cli-0.14.0}/templates/commands/implement.md +0 -0
  386. {specify_cli-0.13.3 → specify_cli-0.14.0}/templates/commands/plan.md +0 -0
  387. {specify_cli-0.13.3 → specify_cli-0.14.0}/templates/commands/tasks.md +0 -0
  388. {specify_cli-0.13.3 → specify_cli-0.14.0}/templates/commands/taskstoissues.md +0 -0
  389. {specify_cli-0.13.3 → specify_cli-0.14.0}/templates/constitution-template.md +0 -0
  390. {specify_cli-0.13.3 → specify_cli-0.14.0}/templates/plan-template.md +0 -0
  391. {specify_cli-0.13.3 → specify_cli-0.14.0}/templates/spec-template.md +0 -0
  392. {specify_cli-0.13.3 → specify_cli-0.14.0}/templates/tasks-template.md +0 -0
  393. {specify_cli-0.13.3 → specify_cli-0.14.0}/templates/vscode-settings.json +0 -0
  394. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/__init__.py +0 -0
  395. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/auth_helpers.py +0 -0
  396. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/bundler_helpers.py +0 -0
  397. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/conftest.py +0 -0
  398. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/contract/test_bundle_cli.py +0 -0
  399. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/extensions/__init__.py +0 -0
  400. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/extensions/assess/__init__.py +0 -0
  401. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/extensions/assess/test_assess_extension.py +0 -0
  402. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/extensions/bug/__init__.py +0 -0
  403. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/extensions/bug/test_bug_extension.py +0 -0
  404. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/extensions/git/__init__.py +0 -0
  405. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/extensions/test_agent_context_cli_free.py +0 -0
  406. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/extensions/test_extension_agent_context.py +0 -0
  407. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/extensions/test_update_agent_context_feature_json.py +0 -0
  408. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/extensions/test_update_agent_context_python_parity.py +0 -0
  409. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/hooks/TESTING.md +0 -0
  410. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/hooks/plan.md +0 -0
  411. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/hooks/spec.md +0 -0
  412. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/hooks/tasks.md +0 -0
  413. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integration/test_bundler_catalog_stack.py +0 -0
  414. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integration/test_bundler_init_install.py +0 -0
  415. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integration/test_bundler_install_flow.py +0 -0
  416. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integration/test_bundler_local_install.py +0 -0
  417. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integration/test_bundler_offline.py +0 -0
  418. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integration/test_bundler_security_paths.py +0 -0
  419. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/__init__.py +0 -0
  420. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/conftest.py +0 -0
  421. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_cli.py +0 -0
  422. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_extra_args.py +0 -0
  423. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_home_isolation.py +0 -0
  424. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_agy.py +0 -0
  425. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_amp.py +0 -0
  426. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_auggie.py +0 -0
  427. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_base_markdown.py +0 -0
  428. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_base_skills.py +0 -0
  429. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_base_toml.py +0 -0
  430. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_base_yaml.py +0 -0
  431. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_bob.py +0 -0
  432. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_claude.py +0 -0
  433. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_cline.py +0 -0
  434. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_codebuddy.py +0 -0
  435. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_codex.py +0 -0
  436. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_copilot.py +0 -0
  437. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_cursor_agent.py +0 -0
  438. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_devin.py +0 -0
  439. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_firebender.py +0 -0
  440. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_gemini.py +0 -0
  441. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_generic.py +0 -0
  442. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_goose.py +0 -0
  443. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_grok.py +0 -0
  444. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_hermes.py +0 -0
  445. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_junie.py +0 -0
  446. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_kilocode.py +0 -0
  447. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_kimi.py +0 -0
  448. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_kiro_cli.py +0 -0
  449. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_omp.py +0 -0
  450. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_opencode.py +0 -0
  451. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_pi.py +0 -0
  452. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_qodercli.py +0 -0
  453. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_qwen.py +0 -0
  454. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_rovodev.py +0 -0
  455. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_scaffold.py +0 -0
  456. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_shai.py +0 -0
  457. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_subcommand.py +0 -0
  458. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_tabnine.py +0 -0
  459. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_trae.py +0 -0
  460. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_vibe.py +0 -0
  461. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_zcode.py +0 -0
  462. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_zed.py +0 -0
  463. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_manifest.py +0 -0
  464. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_skill_frontmatter_quoting.py +0 -0
  465. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/parity_helpers.py +0 -0
  466. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_branch_numbering.py +0 -0
  467. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_check_prerequisites_paths_only.py +0 -0
  468. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_check_prerequisites_python_parity.py +0 -0
  469. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_check_tool.py +0 -0
  470. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_cli_version.py +0 -0
  471. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_command_template_py_scripts.py +0 -0
  472. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_commands_package.py +0 -0
  473. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_console_imports.py +0 -0
  474. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_create_new_feature_python_parity.py +0 -0
  475. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_extension_registration.py +0 -0
  476. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_extension_skills.py +0 -0
  477. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_extension_update_hardening.py +0 -0
  478. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_github_workflows.py +0 -0
  479. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_init_dir.py +0 -0
  480. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_init_dir_cli.py +0 -0
  481. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_live_transient_windows.py +0 -0
  482. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_merge.py +0 -0
  483. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_ps1_encoding.py +0 -0
  484. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_registrar_path_traversal.py +0 -0
  485. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_security_workflow.py +0 -0
  486. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_setup_plan_feature_json.py +0 -0
  487. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_setup_plan_no_overwrite.py +0 -0
  488. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_setup_plan_python_parity.py +0 -0
  489. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_setup_tasks.py +0 -0
  490. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_setup_tasks_python_parity.py +0 -0
  491. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_shared_infra_integrity.py +0 -0
  492. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_skill_placeholder_py.py +0 -0
  493. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_timestamp_branches.py +0 -0
  494. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_utils.py +0 -0
  495. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_utils_assets_imports.py +0 -0
  496. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_version_imports.py +0 -0
  497. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_workflow_run_without_project.py +0 -0
  498. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/unit/test_bundle_download_url.py +0 -0
  499. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/unit/test_bundler_adapters.py +0 -0
  500. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/unit/test_bundler_conflict.py +0 -0
  501. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/unit/test_bundler_primitives.py +0 -0
  502. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/unit/test_bundler_records.py +0 -0
  503. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/unit/test_bundler_references.py +0 -0
  504. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/unit/test_bundler_resolver.py +0 -0
  505. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/unit/test_bundler_validator.py +0 -0
  506. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/unit/test_bundler_versioning.py +0 -0
  507. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/workflows/conftest.py +0 -0
  508. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/workflows/test_overlay_commands.py +0 -0
  509. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/workflows/test_overlay_composer.py +0 -0
  510. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/workflows/test_overlay_layer_sources.py +0 -0
  511. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/workflows/test_overlay_schema.py +0 -0
  512. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/workflows/test_overlay_security.py +0 -0
  513. {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/workflows/test_resolver_integration.py +0 -0
  514. {specify_cli-0.13.3 → specify_cli-0.14.0}/workflows/ARCHITECTURE.md +0 -0
  515. {specify_cli-0.13.3 → specify_cli-0.14.0}/workflows/PUBLISHING.md +0 -0
  516. {specify_cli-0.13.3 → specify_cli-0.14.0}/workflows/README.md +0 -0
  517. {specify_cli-0.13.3 → specify_cli-0.14.0}/workflows/catalog.community.json +0 -0
  518. {specify_cli-0.13.3 → specify_cli-0.14.0}/workflows/catalog.json +0 -0
  519. {specify_cli-0.13.3 → specify_cli-0.14.0}/workflows/speckit/workflow.yml +0 -0
  520. {specify_cli-0.13.3 → specify_cli-0.14.0}/workflows/step-catalog.community.json +0 -0
  521. {specify_cli-0.13.3 → specify_cli-0.14.0}/workflows/step-catalog.json +0 -0
@@ -65,7 +65,8 @@
65
65
  },
66
66
  "chat.tools.terminal.autoApprove": {
67
67
  ".specify/scripts/bash/": true,
68
- ".specify/scripts/powershell/": true
68
+ ".specify/scripts/powershell/": true,
69
+ ".specify/scripts/python/": true
69
70
  }
70
71
  }
71
72
  }
@@ -97,6 +97,17 @@ echo -e "\n🤖 Installing CodeBuddy CLI..."
97
97
  run_command "npm install -g @tencent-ai/codebuddy-code@latest"
98
98
  echo "✅ Done"
99
99
 
100
+ echo -e "\n🤖 Installing Factory Droid CLI..."
101
+ run_command "npm install -g droid@latest"
102
+
103
+ if ! command -v droid >/dev/null 2>&1; then
104
+ echo -e "\033[0;31m[ERROR] Droid CLI installation did not create 'droid' in PATH.\033[0m" >&2
105
+ exit 1
106
+ fi
107
+
108
+ run_command "droid --version > /dev/null"
109
+ echo "✅ Done"
110
+
100
111
  # Installing UV (Python package manager)
101
112
  echo -e "\n🐍 Installing UV - Python Package Manager..."
102
113
  run_command "pipx install uv"
@@ -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, 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
11
+ **Currently supported agents**: Amp, Antigravity, Auggie CLI, Claude Code, Cline, CodeBuddy, Codex CLI, Cursor, Devin for Terminal, Factory Droid, 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
@@ -71,6 +71,7 @@ body:
71
71
  - Codex CLI
72
72
  - Cursor
73
73
  - Devin for Terminal
74
+ - Factory Droid
74
75
  - Firebender
75
76
  - Forge
76
77
  - Gemini CLI
@@ -65,6 +65,7 @@ body:
65
65
  - Codex CLI
66
66
  - Cursor
67
67
  - Devin for Terminal
68
+ - Factory Droid
68
69
  - Firebender
69
70
  - Forge
70
71
  - Gemini CLI
@@ -187,7 +187,7 @@ context_markers:
187
187
  end: "<!-- SPECKIT END -->"
188
188
  ```
189
189
 
190
- - The Specify CLI does **not** write this config. When `context_file` is empty, the extension's bundled scripts self-seed it by looking up the active integration's key in the extension's own `agent-context-defaults.json` map (`extensions/agent-context/scripts/bash/update-agent-context.sh` and `.ps1`). The CLI registry is never consulted — all agent→context-file knowledge lives inside the extension.
190
+ - The Specify CLI does **not** write this config. When `context_file` is empty, the extension's bundled scripts self-seed it by looking up the active integration's key in the extension's own `agent-context-defaults.json` map (`extensions/agent-context/scripts/bash/update-agent-context.sh`, `.ps1`, and `extensions/agent-context/scripts/python/update_agent_context.py`). The CLI registry is never consulted — all agent→context-file knowledge lives inside the extension.
191
191
  - `context_markers.{start,end}` are read solely by the extension's scripts; they default to the Spec Kit markers shown above and can be customized by editing `agent-context-config.yml` directly.
192
192
 
193
193
  Existing projects created by older Spec Kit versions keep working: any previously written managed section or extension config is left intact and is only ever updated by the extension when run.
@@ -268,6 +268,25 @@ echo "✅ Done"
268
268
 
269
269
  ## Command File Formats
270
270
 
271
+ ### Script References (`scripts:` frontmatter)
272
+
273
+ Core command templates (`templates/commands/*.md`) that invoke a helper script declare it in a `scripts:` frontmatter block with one line per supported script type. The `{SCRIPT}` placeholder in the command body is replaced at install time with the entry matching the project's selected script type (`--script sh|ps|py`):
274
+
275
+ ```yaml
276
+ scripts:
277
+ sh: scripts/bash/setup-plan.sh --json
278
+ ps: scripts/powershell/setup-plan.ps1 -Json
279
+ py: scripts/python/setup_plan.py --json
280
+ ```
281
+
282
+ | Key | Script type | Location |
283
+ | ---- | ---------------------- | -------------------------- |
284
+ | `sh` | POSIX shell (bash/zsh) | `scripts/bash/*.sh` |
285
+ | `ps` | PowerShell | `scripts/powershell/*.ps1` |
286
+ | `py` | Python | `scripts/python/*.py` |
287
+
288
+ All three entries must be present and behaviorally equivalent — agents parse the same stdout contract (`FEATURE_DIR:…`, `AVAILABLE_DOCS:…`, `--json` shapes) regardless of which one runs. (The bundled `agent-context` and `git` extension command templates also invoke helpers but do not yet use `scripts:` frontmatter — see [Script Types and Migration](#script-types-and-migration).)
289
+
271
290
  ### Markdown Format
272
291
 
273
292
  **Standard format:**
@@ -328,9 +347,29 @@ Different agents use different argument placeholders. The placeholder used in co
328
347
  - **TOML-based**: `{{args}}` (e.g., Gemini)
329
348
  - **YAML-based**: `{{args}}` (e.g., Goose)
330
349
  - **Custom**: some agents override the default (e.g., Forge uses `{{parameters}}`)
331
- - **Script placeholders**: `{SCRIPT}` (replaced with actual script path)
350
+ - **Script placeholders**: `{SCRIPT}` (replaced with the resolved command from the template's `scripts:` frontmatter, per the project's `--script sh|ps|py` selection)
332
351
  - **Agent placeholders**: `__AGENT__` (replaced with agent name)
333
352
 
353
+ ## Script Types and Migration
354
+
355
+ Spec Kit ships every core workflow script in three interchangeable variants — POSIX shell (`sh`), PowerShell (`ps`), and Python (`py`) — selected per project with `specify init --script sh|ps|py`. Each core command template that invokes a helper script carries all three in its `scripts:` frontmatter (templates that don't call a script, e.g. `constitution`/`specify`, have no `scripts:` block); see [Script References](#script-references-scripts-frontmatter).
356
+
357
+ ### Why Python is recommended
358
+
359
+ - **No extra runtime.** The `specify` CLI is already Python, so the interpreter is guaranteed present — `py` adds no new dependency.
360
+ - **Path toward a single source of truth.** The shell variants require paired `.sh` + `.ps1` maintenance and diverge on JSON handling (`jq` vs manual parsing). The Python variant avoids `jq` and is intended to eventually replace that dual-maintenance — but that consolidation has not happened yet: all three variants are still maintained in parallel (see the parity rule below).
361
+ - **Parity-tested.** The Python ports are covered by tests — output-parity tests against the shell scripts where the contract is stdout-based, and direct unit tests elsewhere — so the stdout contract agents rely on stays stable.
362
+
363
+ ### Defaults and availability
364
+
365
+ - `py` is available today for the core command templates (via their `scripts:` frontmatter). The bundled extensions (`agent-context`, `git`) ship Python script variants on disk, but their command templates still hard-code the Bash/PowerShell invocations, so `--script py` does not yet route those extension commands to Python — wiring `py` into the extension command templates is tracked separately.
366
+ - Selection is per project: interactive `specify init` prompts for the script type, while non-interactive runs default to a shell variant by OS (`sh` on Linux/macOS, `ps` on Windows). `py` is chosen at the prompt or via `--script py`.
367
+ - `sh` and `ps` remain fully supported. Nothing is removed, and `py` is not yet the default.
368
+
369
+ ### Parity rule for contributors
370
+
371
+ All three script types are first-class: any change to a workflow script must update `sh`, `ps`, and `py` together and keep their tests (parity and unit) green. Making `py` the default and eventually retiring `sh`/`ps` is future work gated on adoption, tracked under the script-unification epic ([#3277](https://github.com/github/spec-kit/issues/3277)) — not something to act on from this doc.
372
+
334
373
  ## Special Processing Requirements
335
374
 
336
375
  Some agents require custom processing beyond the standard template transformations:
@@ -2,6 +2,56 @@
2
2
 
3
3
  <!-- insert new changelog below this comment -->
4
4
 
5
+ ## [0.14.0] - 2026-07-23
6
+
7
+ ### Changed
8
+
9
+ - docs: add spec-kit-copilot to community friends (#3675)
10
+ - fix(integrations): recompute invoke_separator from retained parsed_options (#3664)
11
+ - fix(workflows): preserve intra-overlay order for multiple insert_after edits (#3662)
12
+ - fix(bundler): reject falsy non-mapping requires/provides in manifest from_dict (#3661)
13
+ - fix(bundler): dump_yaml writes literal UTF-8 (allow_unicode=True) (#3660)
14
+ - fix(integrations): declare kiro-cli multi-install safe (#3477)
15
+ - fix(git-extension): trim trailing whitespace before stripping commit-message quotes (#3673)
16
+ - fix(bundler): order bundle members by canonical POSIX arcname (reproducible builds) (#3658)
17
+ - fix(integrations): Cline overrides post_process_command_content (correct hook name) (#3657)
18
+ - docs(workflows): gate step docstring lists the 'retry' on_reject behaviour (#3656)
19
+ - fix: harden bounded reads and redirect validation (#3671)
20
+ - fix(packaging): bundle scripts/python into the wheel core_pack (#3665) (#3670)
21
+ - fix: bundle scripts/python in wheel so --script py works (#3665) (#3668)
22
+ - docs(workflows): init step docstring lists the 'py' script type (#3655)
23
+ - fix(integrations): declare LingmaIntegration multi_install_safe (#3654)
24
+ - fix: guard constitution command against feature execution (#3646)
25
+ - Fix duplicate step numbering in specify command (#3647)
26
+ - docs(scripts): document the 'py' script type and sh/ps migration plan (#3284) (#3653)
27
+ - harden: bound HTTP reads and enforce strict redirects (#3140)
28
+ - chore: release 0.13.4, begin 0.13.5.dev0 development (#3649)
29
+
30
+ ## [0.13.4] - 2026-07-22
31
+
32
+ ### Changed
33
+
34
+ - docs(concepts): document the spec-of-specs feature breakdown approach (#3648)
35
+ - fix(scripts): git-ext PowerShell emits the '# To persist' SPECIFY_FEATURE hint (parity) (#3632)
36
+ - fix(integrations): validate cached catalog shape before returning it (#3627)
37
+ - fix(bundler): reject non-list 'catalogs' in bundle-catalogs.yml with a clean error (#3623)
38
+ - fix(bundler): guard lazy .hostname ValueError in catalog add_source (#3644)
39
+ - Add Intake Authoring Governance preset to community catalog (#3643)
40
+ - feat: add Factory Droid CLI integration (#822) (#3587)
41
+ - docs(installation): document the 'py' (Python) script type (#3640)
42
+ - fix(init): show hyphenated /speckit-<name> in Next Steps for Forge projects (#3642)
43
+ - fix(extensions): render hyphenated hook invocations for Forge projects (#3641)
44
+ - fix(workflows): workflow add detects local YAML files case-insensitively (#3633)
45
+ - fix(workflows): list-literal expression ignores trailing/empty commas (#3631)
46
+ - fix(workflows): StepRegistry.add tolerates a corrupted non-dict existing entry (#3630)
47
+ - fix(bundler): reject non-mapping 'integration' in a bundle manifest (#3629)
48
+ - fix(workflows): command/prompt steps fail cleanly on a non-string integration (#3626)
49
+ - docs(core): document the 'py' (Python) --script type in the init option table (#3625)
50
+ - fix(workflows): gate prompt uses isdecimal() so a superscript digit doesn't crash (#3624)
51
+ - fix(integrations): Cline dispatches hyphenated /speckit-<cmd> invocations (#3622)
52
+ - docs(upgrade): document integration upgrade / extension update as the project-files upgrade path (#3326)
53
+ - chore: release 0.13.3, begin 0.13.4.dev0 development (#3645)
54
+
5
55
  ## [0.13.3] - 2026-07-22
6
56
 
7
57
  ### Changed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: specify-cli
3
- Version: 0.13.3
3
+ Version: 0.14.0
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
@@ -1,7 +1,7 @@
1
1
  # Community Friends
2
2
 
3
3
  > [!NOTE]
4
- > Community projects listed here are independently created and maintained by their respective authors. They are **not reviewed, nor endorsed, nor supported by GitHub**. Review their source code before installation and use at your own discretion.
4
+ > Community projects listed here are independently created and maintained by their respective authors. Unless explicitly marked as a **first-party GitHub project**, they are **not reviewed, nor endorsed, nor supported by GitHub**. Review their source code before installation and use at your own discretion.
5
5
 
6
6
  Community projects that extend, visualize, or build on Spec Kit:
7
7
 
@@ -16,3 +16,5 @@ Community projects that extend, visualize, or build on Spec Kit:
16
16
  - **[cc-spec-kit](https://github.com/speckit-community/cc-spec-kit)** — Community-maintained plugin for Claude Code and GitHub Copilot CLI that installs Spec Kit skills via the plugin marketplace.
17
17
 
18
18
  - **[spectatui](https://github.com/tinesoft/spectatui)** — A terminal UI (TUI) dashboard for Spec Kit that lets you track features, manage specifications, integrations, presets, workflows, and extensions, and monitor AI agent workflows. Attach to existing AI sessions or launch new ones from your terminal. Keyboard and mouse support. Light/dark theme support. Customizable and performance-oriented. Requires the `specify` CLI in your PATH.
19
+
20
+ - **[spec-kit-copilot](https://github.com/github/spec-kit-copilot)** — _First-party GitHub project._ A GitHub Copilot **skills plugin** that exposes the Spec Kit `specify` CLI to the Copilot agent in both the Copilot CLI and the GitHub Copilot app. It provides a focused skill per `specify` command group — setup, init, check, extensions, presets, bundles, workflows, workflow steps, and self-upgrade — so you can navigate and drive the entire Spec Kit ecosystem through natural language, letting Copilot decide when and how to run the right `specify` commands on your behalf.
@@ -19,6 +19,7 @@ The following community-contributed presets customize how Spec Kit behaves — o
19
19
  | Explicit Task Dependencies | Adds explicit `(depends on T###)` dependency declarations and an Execution Wave DAG to tasks.md for parallel scheduling | 1 template, 1 command | — | [spec-kit-preset-explicit-task-dependencies](https://github.com/Quratulain-bilal/spec-kit-preset-explicit-task-dependencies) |
20
20
  | Fiction Book Writing | It adapts the Spec-Driven Development workflow for storytelling to create books or audiobooks (with annotations) in 12 languages: features become story elements, specs become story briefs, plans become story structures, and tasks become scene-by-scene writing tasks. Supports single and multi-POV, all major plot structure frameworks, and two style modes: an author voice sample or humanized AI prose principles. Supports interactive elements like brainstorming, interview, roleplay, and extras like statistics, cover builder, illustration builder, and bio command. Export with templates for KDP, D2D, etc. | 26 templates, 34 commands, 2 scripts | — | [speckit-preset-fiction-book-writing](https://github.com/adaumann/speckit-preset-fiction-book-writing) |
21
21
  | Game Narrative Writing | Preset for game narrative design and interactive storytelling. It adapts the Spec-Driven Development workflow for game narratives: features become story mechanics, specs become narrative briefs, plans become story maps, and tasks become dialogue and scene-writing tasks. Supports branching narratives, player agency systems, state machines, and interactive dialogue trees. | 37 templates, 34 commands, 5 scripts | — | [speckit-preset-game-narrative-writing](https://github.com/adaumann/speckit-preset-game-narrative-writing) |
22
+ | Intake Authoring Governance | Creates traceable Spec Kit intake files and receipts from ordered text sources while preserving clarification, update, and delivery-authority boundaries. | 7 templates, 2 commands, 2 scripts | — | [spec-kit-preset-intake-authoring-governance](https://github.com/hindermath/spec-kit-preset-intake-authoring-governance) |
22
23
  | Intake Review Governance | Adds hash-bound review, repair, and status gates for single, series, and campaign intake files before interactive, autonomous, or parallel Spec Kit execution. | 8 templates, 3 commands, 2 scripts | — | [spec-kit-preset-intake-review-governance](https://github.com/hindermath/spec-kit-preset-intake-review-governance) |
23
24
  | iSAQB Architecture Governance | Adds general iSAQB/CPSA-F and arc42 software-architecture governance, including audit-ready Spec Kit run evidence for architecture goals, views, quality scenarios, ADRs, risks, and technical debt. | 13 templates, 3 commands | — | [spec-kit-preset-isaqb-architecture-governance](https://github.com/hindermath/spec-kit-preset-isaqb-architecture-governance) |
24
25
  | Jira Issue Tracking | Overrides `speckit.taskstoissues` to create Jira epics, stories, and tasks instead of GitHub Issues via Atlassian MCP tools | 1 command | — | [spec-kit-preset-jira](https://github.com/luno/spec-kit-preset-jira) |
@@ -63,10 +63,14 @@ independently specified sub-features. Each sub-feature gets its own
63
63
  `spec.md`, `plan.md`, and `tasks.md`, and runs through its own
64
64
  specify/plan/tasks/implement cycle.
65
65
 
66
- This is the "spec of specs" approach: the first iteration breaks a massive
67
- feature into smaller, self-contained specs that can each be implemented without
68
- overwhelming the model. It adds the most overhead, so reserve it for features
69
- that are too large to handle any other way.
66
+ This is the "spec of specs" approach: a first pass breaks a massive feature into
67
+ smaller, self-contained specs that can each be implemented without overwhelming the
68
+ model. It adds the most overhead, so reserve it for features that are too large to
69
+ handle any other way.
70
+
71
+ See [Spec of Specs](spec-of-specs.md) for the full procedure — how to run the
72
+ roadmap pass, structure the roadmap artifact, link sub-specs back to it, and a worked
73
+ example.
70
74
 
71
75
  ## Which Approach to Choose
72
76
 
@@ -0,0 +1,171 @@
1
+ # Spec of Specs
2
+
3
+ When a feature is too large to run through a single
4
+ `/speckit.specify` → `/speckit.plan` → `/speckit.tasks` → `/speckit.implement`
5
+ cycle without the model losing track mid-implementation, you can break it into a
6
+ **roadmap** of smaller, independently-specified sub-features. This is the "spec of
7
+ specs" approach: one up-front pass decomposes a massive feature into self-contained
8
+ specs, and each of those runs through its own specify/plan/tasks/implement cycle.
9
+
10
+ > **When to reach for this.** Decomposition adds the most overhead of any strategy
11
+ > in [Handling Complex Features](complex-features.md). Use it **only when the lighter
12
+ > options there are insufficient** — first try limiting how many tasks run per
13
+ > `/speckit.implement` invocation, then sub-agent delegation, then a combination.
14
+ > Reach for a spec of specs only when even a single phase is too large to handle in
15
+ > one run.
16
+
17
+ The rest of this page describes *how* to do it with the tools you already have. No
18
+ new commands or extensions are required.
19
+
20
+ ## The roadmap pass
21
+
22
+ Before writing any sub-spec, do a single decomposition pass to produce a roadmap.
23
+ Treat this as a lightweight planning conversation with your agent, not a full spec:
24
+
25
+ 1. **State the whole feature.** Describe the large feature (the "epic") in a
26
+ sentence or two so the agent has the full picture up front.
27
+ 2. **Identify independent slices.** Ask the agent to propose a small set of
28
+ sub-features that each deliver a coherent piece of the epic and can be specified
29
+ on their own. Aim for slices that are independently testable — implementing just
30
+ one should leave you with something demonstrable.
31
+ 3. **Draw the boundaries.** For each slice, write one line of intent and an explicit
32
+ scope boundary (what is in, what is deferred to a sibling slice). Sharp
33
+ boundaries are what keep each sub-spec small enough to fit in context.
34
+ 4. **Order by dependency.** Note which slices depend on others and sequence them so
35
+ prerequisites come first. Slices with no dependency on each other can be built in
36
+ any order. To build independent slices in parallel, use separate worktrees so each
37
+ run has isolated active-feature state.
38
+ 5. **Record the result as a roadmap.** Capture the slices in a durable roadmap file
39
+ (below) so every later sub-spec can point back to it.
40
+
41
+ The roadmap is deliberately shallow: it names and orders the sub-features but does
42
+ **not** design them. The design happens when each slice runs through its own
43
+ `/speckit.specify`.
44
+
45
+ ## The roadmap artifact
46
+
47
+ The roadmap is an ordinary Markdown file you author and keep under version control —
48
+ there is no special tooling behind it. Put it where the sub-specs can find it:
49
+
50
+ - For a feature-scoped epic: `specs/<epic-slug>/roadmap.md`.
51
+ - For a larger, cross-cutting epic: a top-level `ROADMAP.md`.
52
+
53
+ Each roadmap entry carries a stable id (used later for linking), a name, its intent,
54
+ its scope boundary, its dependencies, a status, and — once the sub-spec exists — a
55
+ link to it. A minimal template:
56
+
57
+ ```markdown
58
+ # Roadmap: <epic name>
59
+
60
+ <One or two sentences: what the epic is and why it is being decomposed.>
61
+
62
+ **Status legend**: planned · in-progress · done
63
+
64
+ | ID | Sub-feature | Intent | Scope boundary | Depends on | Status | Sub-spec |
65
+ |----|-------------|--------|----------------|-----------|--------|----------|
66
+ | R1 | <name> | <one line> | <in / deferred> | — | planned | — |
67
+ | R2 | <name> | <one line> | <in / deferred> | R1 | planned | — |
68
+ | R3 | <name> | <one line> | <in / deferred> | R1 | planned | — |
69
+ ```
70
+
71
+ Keep the `ID` column immutable once a sub-spec references it — it is the anchor for
72
+ traceability. Fill in the `Sub-spec` column with the path to each sub-feature's spec
73
+ directory as you create it, and update `Status` as work progresses.
74
+
75
+ ## Specifying each sub-feature
76
+
77
+ With the roadmap in hand, work through the entries one at a time using the normal
78
+ Spec Kit flow — nothing new to learn:
79
+
80
+ 1. Pick the next roadmap entry whose dependencies are already `done` (or have none).
81
+ 2. Run `/speckit.specify` for just that slice, describing only its intent and scope
82
+ from the roadmap entry. Because the slice is bounded, its spec, plan, and tasks
83
+ stay well within the context window.
84
+ 3. Run `/speckit.plan`, `/speckit.tasks`, and `/speckit.implement` for that slice as
85
+ usual.
86
+ 4. Mark the roadmap entry `done` and move to the next one.
87
+
88
+ Each slice is a complete, independent Spec Kit feature with its own
89
+ `spec.md`/`plan.md`/`tasks.md`. The roadmap is what ties them together.
90
+
91
+ ## Linking sub-specs to the roadmap
92
+
93
+ To keep scope and intent from drifting across separate runs, every sub-spec
94
+ references its roadmap entry, and the roadmap links back — a simple, greppable,
95
+ bidirectional convention:
96
+
97
+ - **Sub-spec → roadmap.** In the sub-feature's `spec.md`, name the parent roadmap
98
+ and entry id in the `Input` / summary line, for example:
99
+
100
+ ```markdown
101
+ **Input**: Parent roadmap: `specs/<epic>/roadmap.md` → entry **R3**. <feature description>
102
+ ```
103
+
104
+ - **Roadmap → sub-spec.** In the roadmap table, set the entry's `Sub-spec` column to
105
+ the sub-feature's directory, e.g. `specs/<epic>-part-3/`.
106
+
107
+ Because both directions are plain text, you can trace any sub-spec back to its place
108
+ in the epic (and find its siblings) with a quick search — no tooling, no metadata
109
+ schema.
110
+
111
+ ## Keeping the roadmap and sub-specs in sync
112
+
113
+ The roadmap is a living document. As you learn more, keep it and the sub-specs
114
+ aligned:
115
+
116
+ - **Roadmap first, then reconcile.** When scope shifts, update the roadmap entry
117
+ first, then update any sub-specs it affects. The roadmap is the source of truth for
118
+ how the epic is divided.
119
+ - **Respect dependencies and ordering.** If a slice depends on another, build the
120
+ prerequisite first and cross-reference the dependent sub-spec so the relationship
121
+ is visible from both sides.
122
+ - **Recurse when a slice is still too big.** If a sub-feature turns out to be too
123
+ large to specify in one cycle, give it its own roadmap and decompose it further —
124
+ the same approach applies one level down. Recursion adds overhead, so only go as
125
+ deep as the context problem actually requires.
126
+
127
+ ## Worked example
128
+
129
+ Suppose the epic is **"Add a self-service billing portal"** — far too large for a
130
+ single cycle. The roadmap pass breaks it into three independently-specifiable
131
+ slices.
132
+
133
+ `specs/billing-portal/roadmap.md`:
134
+
135
+ ```markdown
136
+ # Roadmap: Self-service billing portal
137
+
138
+ Let customers view invoices, manage payment methods, and change plans without
139
+ contacting support. Too large for one cycle, so it is split into independent slices.
140
+
141
+ **Status legend**: planned · in-progress · done
142
+
143
+ | ID | Sub-feature | Intent | Scope boundary | Depends on | Status | Sub-spec |
144
+ |----|--------------------|------------------------------------------|---------------------------------------------|-----------|---------|----------|
145
+ | R1 | Invoice history | Customers view and download past invoices | Read-only; no payment actions | — | done | specs/billing-invoices/ |
146
+ | R2 | Payment methods | Add, remove, and set a default card | No plan changes; assumes invoices exist | R1 | in-progress | specs/billing-payment-methods/ |
147
+ | R3 | Plan changes | Upgrade/downgrade the subscription plan | Uses R2's default payment method | R1, R2 | planned | — |
148
+ ```
149
+
150
+ Each slice is then specified on its own. For example, the **R2** sub-feature's
151
+ `spec.md` opens with a back-reference:
152
+
153
+ ```markdown
154
+ # Feature Specification: Billing — payment methods
155
+
156
+ **Input**: Parent roadmap: `specs/billing-portal/roadmap.md` → entry **R2**.
157
+ Let customers add, remove, and set a default payment method in the billing portal.
158
+ ```
159
+
160
+ From here a reader can trace **R2** back to the roadmap, see that it depends on
161
+ **R1** (invoice history, already `done`), and see that **R3** (plan changes) is
162
+ waiting on it. Building R1, then R2, then R3 keeps every run small while the roadmap
163
+ preserves the shape of the whole epic.
164
+
165
+ ## For automation (optional)
166
+
167
+ If you would rather automate roadmap capture and consistency checks than maintain
168
+ the file by hand, the community-maintained
169
+ [Spec Roadmap extension](https://github.com/srobroek/speckit-roadmap) explores that
170
+ direction. It is a third-party extension and is not required — the manual convention
171
+ above is enough on its own.
@@ -77,9 +77,9 @@ specify init <project_name> --integration pi
77
77
  specify init <project_name> --integration omp
78
78
  ```
79
79
 
80
- ### Specify Script Type (Shell vs PowerShell)
80
+ ### Specify Script Type (Shell, PowerShell, or Python)
81
81
 
82
- All automation scripts now have both Bash (`.sh`) and PowerShell (`.ps1`) variants.
82
+ Automation scripts are available as Bash (`.sh`), PowerShell (`.ps1`), and Python (`.py`) variants.
83
83
 
84
84
  Auto behavior:
85
85
 
@@ -92,6 +92,7 @@ Force a specific script type:
92
92
  ```bash
93
93
  specify init <project_name> --script sh
94
94
  specify init <project_name> --script ps
95
+ specify init <project_name> --script py
95
96
  ```
96
97
 
97
98
  ### Ignore Agent Tools Check
@@ -131,6 +132,7 @@ Scripts are installed into a variant subdirectory matching the chosen script typ
131
132
 
132
133
  - `.specify/scripts/bash/` — contains `.sh` scripts (default on Linux/macOS)
133
134
  - `.specify/scripts/powershell/` — contains `.ps1` scripts (default on Windows)
135
+ - `.specify/scripts/python/` — contains `.py` scripts (chosen with `--script py`; also installs the platform shell fallback)
134
136
 
135
137
  ## Troubleshooting
136
138
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  This guide shows how to iterate on the `specify` CLI locally without publishing a release or committing to `main` first.
4
4
 
5
- > Scripts now have both Bash (`.sh`) and PowerShell (`.ps1`) variants. The CLI auto-selects based on OS unless you pass `--script sh|ps`.
5
+ > Scripts are available as Bash (`.sh`), PowerShell (`.ps1`), and Python (`.py`) variants. Interactive `specify init` prompts you to choose one; non-interactive runs default to a shell variant for your OS. Pass `--script sh|ps|py` to select explicitly.
6
6
 
7
7
  ## 1. Clone and Switch Branches
8
8
 
@@ -189,7 +189,7 @@ rm -rf .venv dist build *.egg-info
189
189
  | `ModuleNotFoundError: typer` | Run `uv pip install -e .` |
190
190
  | Scripts not executable (Linux) | Re-run init or `chmod +x scripts/*.sh` |
191
191
  | Git commands unavailable | Install the git extension with `specify extension add git` |
192
- | Wrong script type downloaded | Pass `--script sh` or `--script ps` explicitly |
192
+ | Wrong script type downloaded | Pass `--script sh`, `--script ps`, or `--script py` explicitly |
193
193
  | TLS errors on corporate network | Configure your environment's certificate store or proxy. The `--skip-tls` flag is deprecated and has no effect. |
194
194
 
195
195
  ## 14. Next Steps
@@ -3,7 +3,7 @@
3
3
  This guide will help you get started with Spec-Driven Development using Spec Kit. Throughout, we illustrate each step with a running example: **Taskify**, a small team productivity platform.
4
4
 
5
5
  > [!NOTE]
6
- > Automation scripts are provided as both Bash (`.sh`) and PowerShell (`.ps1`) variants. The `specify` CLI auto-selects based on your OS unless you pass `--script sh|ps`.
6
+ > Automation scripts are provided as Bash (`.sh`), PowerShell (`.ps1`), and Python (`.py`) variants. Interactive `specify init` prompts you to choose one; non-interactive runs default to a shell variant for your OS. Pass `--script sh|ps|py` to select explicitly.
7
7
 
8
8
  > [!NOTE]
9
9
  > Commands are shown here in `/speckit.*` form, but the exact invocation depends on your agent. Some skills-based agents use `$speckit-*` (e.g. Codex, ZCode) or `/skill:speckit-*` (e.g. Kimi). Use whichever form your agent exposes — the steps are otherwise identical.
@@ -12,7 +12,7 @@ specify init [<project_name>]
12
12
  | ------------------------ | ------------------------------------------------------------------------ |
13
13
  | `--integration <key>` | AI coding agent integration to use (e.g. `copilot`, `claude`, `gemini`). See the [Integrations reference](integrations.md) for all available keys |
14
14
  | `--integration-options` | Options for the integration (e.g. `--integration-options="--commands-dir .myagent/cmds"`) |
15
- | `--script sh\|ps` | Script type: `sh` (bash/zsh) or `ps` (PowerShell) |
15
+ | `--script sh\|ps\|py` | Script type: `sh` (bash/zsh), `ps` (PowerShell), or `py` (Python) |
16
16
  | `--here` | Initialize in the current directory instead of creating a new one |
17
17
  | `--force` | Force merge/overwrite when initializing in an existing directory |
18
18
  | `--ignore-agent-tools` | Skip checks for AI coding agent CLI tools |
@@ -15,6 +15,7 @@ The Specify CLI supports a wide range of AI coding agents. When you run `specify
15
15
  | [Codex CLI](https://github.com/openai/codex) | `codex` | Skills-based integration; installs skills into `.agents/skills` and invokes them as `$speckit-<command>` |
16
16
  | [Cursor](https://cursor.sh/) | `cursor-agent` | |
17
17
  | [Devin for Terminal](https://cli.devin.ai/docs) | `devin` | Skills-based integration; installs skills into `.devin/skills/` and invokes them as `/speckit-<command>` |
18
+ | [Factory Droid](https://docs.factory.ai/cli/getting-started/overview) | `droid` | Skills-based integration; installs skills into `.factory/skills/` and invokes them as `/speckit-<command>` |
18
19
  | [Firebender](https://firebender.com/) | `firebender` | IDE-based agent for Android Studio / IntelliJ |
19
20
  | [Forge](https://forgecode.dev/) | `forge` | |
20
21
  | [Gemini CLI](https://github.com/google-gemini/gemini-cli) | `gemini` | |
@@ -85,7 +86,7 @@ specify integration install <key>
85
86
 
86
87
  | Option | Description |
87
88
  | ------------------------ | ------------------------------------------------------------------------ |
88
- | `--script sh\|ps` | Script type: `sh` (bash/zsh) or `ps` (PowerShell) |
89
+ | `--script sh\|ps\|py` | Script type: `sh` (bash/zsh), `ps` (PowerShell), or `py` (Python) |
89
90
  | `--force` | Opt in to installing alongside integrations that are not declared multi-install safe |
90
91
  | `--integration-options` | Integration-specific options (e.g. `--integration-options="--commands-dir .myagent/cmds"`) |
91
92
 
@@ -121,7 +122,7 @@ specify integration switch <key>
121
122
 
122
123
  | Option | Description |
123
124
  | ------------------------ | ------------------------------------------------------------------------ |
124
- | `--script sh\|ps` | Script type: `sh` (bash/zsh) or `ps` (PowerShell) |
125
+ | `--script sh\|ps\|py` | Script type: `sh` (bash/zsh), `ps` (PowerShell), or `py` (Python) |
125
126
  | `--force` | Force removal of modified files during uninstall; when the target is already installed, overwrite managed shared templates while changing the default |
126
127
  | `--refresh-shared-infra` | Also overwrite shared infrastructure files even if you customized them (otherwise customizations are preserved) |
127
128
  | `--integration-options` | Options for the target integration when it is not already installed |
@@ -149,7 +150,7 @@ specify integration upgrade [<key>]
149
150
  | Option | Description |
150
151
  | ------------------------ | ------------------------------------------------------------------------ |
151
152
  | `--force` | Overwrite files even if they have been modified |
152
- | `--script sh\|ps` | Script type: `sh` (bash/zsh) or `ps` (PowerShell) |
153
+ | `--script sh\|ps\|py` | Script type: `sh` (bash/zsh), `ps` (PowerShell), or `py` (Python) |
153
154
  | `--integration-options` | Options for the integration |
154
155
 
155
156
  Reinstalls an installed integration with updated templates and commands (e.g., after upgrading Spec Kit). Defaults to the default integration; if a key is provided, it must be one of the installed integrations. Detects locally modified files and blocks the upgrade unless `--force` is used. Stale files from the previous install that are no longer needed are removed automatically. Shared templates stay aligned with the default integration even when upgrading a non-default integration.
@@ -256,31 +257,30 @@ Spec Kit tracks one default integration in `.specify/integration.json` with `def
256
257
 
257
258
  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.
258
259
 
259
- 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.
260
-
261
- **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.
260
+ The Command directory column below lists the directory each integration installs its commands or skills into. Context-file targeting is a separate concern from integration multi-install safety: `multi_install_safe` is an integration declaration about command/skill paths, whereas the optional agent-context extension manages a per-agent context file (for example `AGENTS.md` or `CLAUDE.md`) and can even synchronize several anchors at once via its `context_files` setting. Multiple agents mapping to the same context file is expected there and does not affect whether an integration is multi-install safe; see the agent-context extension for details.
262
261
 
263
262
  The currently declared multi-install safe integrations are:
264
263
 
265
- | Key | Isolation |
266
- | --- | --------- |
267
- | `auggie` | `.augment/commands`, `.augment/rules/specify-rules.md` |
268
- | `claude` | `.claude/skills`, `CLAUDE.md` |
269
- | `cline` | `.clinerules/workflows`, `.clinerules/specify-rules.md` |
270
- | `codebuddy` | `.codebuddy/commands`, `CODEBUDDY.md` |
271
- | `codex` | `.agents/skills`, `AGENTS.md` |
272
- | `cursor-agent` | `.cursor/skills`, `.cursor/rules/specify-rules.mdc` |
273
- | `firebender` | `.firebender/commands`, `.firebender/rules/specify-rules.mdc` |
274
- | `gemini` | `.gemini/commands`, `GEMINI.md` |
264
+ | Key | Command directory |
265
+ | --- | ----------------- |
266
+ | `auggie` | `.augment/commands` |
267
+ | `claude` | `.claude/skills` |
268
+ | `cline` | `.clinerules/workflows` |
269
+ | `codebuddy` | `.codebuddy/commands` |
270
+ | `codex` | `.agents/skills` |
271
+ | `cursor-agent` | `.cursor/skills` |
272
+ | `firebender` | `.firebender/commands` |
273
+ | `gemini` | `.gemini/commands` |
275
274
  | `grok` | `.grok/skills` |
276
- | `junie` | `.junie/commands`, `.junie/AGENTS.md` |
277
- | `kilocode` | `.kilocode/workflows`, `.kilocode/rules/specify-rules.md` |
278
- | `qodercli` | `.qoder/commands`, `QODER.md` |
279
- | `qwen` | `.qwen/commands`, `QWEN.md` |
280
- | `shai` | `.shai/commands`, `SHAI.md` |
281
- | `tabnine` | `.tabnine/agent/commands`, `TABNINE.md` |
282
- | `trae` | `.trae/skills`, `.trae/rules/project_rules.md` |
283
- | `zcode` | `.zcode/skills`, `ZCODE.md` |
275
+ | `junie` | `.junie/commands` |
276
+ | `kilocode` | `.kilocode/workflows` |
277
+ | `kiro-cli` | `.kiro/prompts` |
278
+ | `qodercli` | `.qoder/commands` |
279
+ | `qwen` | `.qwen/commands` |
280
+ | `shai` | `.shai/commands` |
281
+ | `tabnine` | `.tabnine/agent/commands` |
282
+ | `trae` | `.trae/skills` |
283
+ | `zcode` | `.zcode/skills` |
284
284
 
285
285
  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`.
286
286
 
@@ -55,6 +55,8 @@
55
55
  href: concepts/spec-persistence.md
56
56
  - name: Handling Complex Features
57
57
  href: concepts/complex-features.md
58
+ - name: Spec of Specs
59
+ href: concepts/spec-of-specs.md
58
60
 
59
61
  # Development workflows
60
62
  - name: Development