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.
- {specify_cli-0.13.3 → specify_cli-0.14.0}/.devcontainer/devcontainer.json +2 -1
- {specify_cli-0.13.3 → specify_cli-0.14.0}/.devcontainer/post-create.sh +11 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/ISSUE_TEMPLATE/agent_request.yml +1 -1
- {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/ISSUE_TEMPLATE/bug_report.yml +1 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/ISSUE_TEMPLATE/feature_request.yml +1 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/AGENTS.md +41 -2
- {specify_cli-0.13.3 → specify_cli-0.14.0}/CHANGELOG.md +50 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/PKG-INFO +1 -1
- {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/community/friends.md +3 -1
- {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/community/presets.md +1 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/concepts/complex-features.md +8 -4
- specify_cli-0.14.0/docs/concepts/spec-of-specs.md +171 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/installation.md +4 -2
- {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/local-development.md +2 -2
- {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/quickstart.md +1 -1
- {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/reference/core.md +1 -1
- {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/reference/integrations.md +24 -24
- {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/toc.yml +2 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/upgrade.md +75 -69
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/git/scripts/bash/auto-commit.sh +6 -1
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/git/scripts/powershell/create-new-feature-branch.ps1 +7 -1
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/git/scripts/python/auto_commit.py +9 -1
- {specify_cli-0.13.3 → specify_cli-0.14.0}/integrations/catalog.json +10 -1
- {specify_cli-0.13.3 → specify_cli-0.14.0}/presets/catalog.community.json +29 -0
- specify_cli-0.14.0/presets/lean/commands/speckit.constitution.md +33 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/pyproject.toml +2 -1
- specify_cli-0.14.0/src/specify_cli/_download_security.py +218 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/_github_http.py +9 -4
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/_version.py +10 -3
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/authentication/azure_devops.py +49 -7
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/authentication/http.py +30 -5
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/bundler/commands_impl/catalog_config.py +9 -2
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/bundler/lib/yamlio.py +7 -1
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/bundler/models/catalog.py +15 -1
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/bundler/models/manifest.py +13 -4
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/bundler/services/packager.py +7 -1
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/commands/init.py +2 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/extensions/__init__.py +5 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integration_runtime.py +8 -1
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/__init__.py +2 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/catalog.py +34 -14
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/cline/__init__.py +22 -3
- specify_cli-0.14.0/src/specify_cli/integrations/droid/__init__.py +135 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/kiro_cli/__init__.py +7 -7
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/lingma/__init__.py +1 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/presets/_commands.py +10 -19
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/workflows/_commands.py +17 -76
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/workflows/catalog.py +5 -1
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/workflows/expressions.py +4 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/workflows/overlays/merge.py +15 -3
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/workflows/steps/command/__init__.py +5 -1
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/workflows/steps/gate/__init__.py +6 -2
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/workflows/steps/init/__init__.py +1 -1
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/workflows/steps/prompt/__init__.py +4 -1
- {specify_cli-0.13.3 → specify_cli-0.14.0}/templates/commands/constitution.md +20 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/templates/commands/specify.md +2 -2
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/contract/test_catalog_schema.py +36 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/contract/test_manifest_schema.py +41 -0
- specify_cli-0.14.0/tests/contract/test_wheel_core_pack_scripts.py +40 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/extensions/git/test_git_extension.py +16 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/extensions/git/test_git_extension_python_parity.py +26 -0
- specify_cli-0.14.0/tests/http_helpers.py +46 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_base.py +18 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_catalog.py +69 -0
- specify_cli-0.14.0/tests/integrations/test_integration_droid.py +262 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_forge.py +36 -0
- specify_cli-0.14.0/tests/integrations/test_integration_lingma.py +18 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_state.py +28 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_registry.py +1 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/self_upgrade_helpers.py +2 -1
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_agent_config_consistency.py +1 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_authentication.py +342 -28
- specify_cli-0.14.0/tests/test_download_security.py +227 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_extensions.py +43 -5
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_github_http.py +52 -8
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_post_process.py +31 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_presets.py +33 -5
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_self_upgrade_detection.py +1 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_self_upgrade_execution.py +1 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_self_upgrade_guidance.py +1 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_self_upgrade_verification.py +1 -0
- specify_cli-0.14.0/tests/test_specify_template_numbering.py +39 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_upgrade.py +51 -6
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_workflows.py +180 -50
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/unit/test_bundler_catalog_config.py +41 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/unit/test_bundler_packager.py +17 -0
- specify_cli-0.14.0/tests/unit/test_bundler_yamlio.py +26 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/workflows/test_overlay_merge.py +17 -0
- specify_cli-0.13.3/presets/lean/commands/speckit.constitution.md +0 -15
- specify_cli-0.13.3/tests/http_helpers.py +0 -15
- specify_cli-0.13.3/tests/integrations/test_integration_lingma.py +0 -10
- {specify_cli-0.13.3 → specify_cli-0.14.0}/.editorconfig +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/.gitattributes +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/CODEOWNERS +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/ISSUE_TEMPLATE/bundle_submission.yml +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/ISSUE_TEMPLATE/extension_submission.yml +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/ISSUE_TEMPLATE/preset_submission.yml +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/aw/actions-lock.json +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/dependabot.yml +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/scripts/check_security_requirements.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/security-audit-requirements.txt +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/skills/add-community-extension/SKILL.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/workflows/RELEASE-PROCESS.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/workflows/add-community-bundle.lock.yml +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/workflows/add-community-bundle.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/workflows/add-community-extension.lock.yml +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/workflows/add-community-extension.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/workflows/add-community-preset.lock.yml +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/workflows/add-community-preset.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/workflows/bug-assess.lock.yml +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/workflows/bug-assess.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/workflows/bug-fix.lock.yml +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/workflows/bug-fix.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/workflows/bug-test.lock.yml +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/workflows/bug-test.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/workflows/catalog-assign.yml +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/workflows/codeql.yml +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/workflows/docs.yml +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/workflows/lint.yml +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/workflows/publish-pypi.yml +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/workflows/release-trigger.yml +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/workflows/release.yml +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/workflows/security.yml +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/workflows/stale.yml +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/.github/workflows/test.yml +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/.gitignore +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/.markdownlint-cli2.jsonc +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/.pre-commit-config.yaml +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/.zenodo.json +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/CITATION.cff +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/CODE_OF_CONDUCT.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/CONTRIBUTING.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/DEVELOPMENT.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/LICENSE +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/README.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/SECURITY.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/SUPPORT.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/bundles/catalog.community.json +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/.gitignore +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/README.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/community/bundles.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/community/extensions.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/community/overview.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/community/walkthroughs.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/concepts/sdd.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/concepts/spec-persistence.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/docfx.json +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/guides/evolving-specs.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/guides/monorepo.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/index.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/install/air-gapped.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/install/one-time.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/install/pipx.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/install/pypi.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/install/uv.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/reference/agentic-bugfix.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/reference/agentic-sdd.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/reference/authentication.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/reference/bundles.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/reference/extensions.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/reference/overview.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/reference/presets.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/reference/workflows.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/docs/template/public/main.css +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/examples/bundles/business-analyst/README.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/examples/bundles/business-analyst/bundle.yml +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/examples/bundles/developer/README.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/examples/bundles/developer/bundle.yml +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/examples/bundles/product-manager/README.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/examples/bundles/product-manager/bundle.yml +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/examples/bundles/security-researcher/README.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/examples/bundles/security-researcher/bundle.yml +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/EXTENSION-API-REFERENCE.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/EXTENSION-DEVELOPMENT-GUIDE.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/EXTENSION-PUBLISHING-GUIDE.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/EXTENSION-USER-GUIDE.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/README.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/RFC-EXTENSION-SYSTEM.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/agent-context/README.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/agent-context/agent-context-config.yml +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/agent-context/agent-context-defaults.json +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/agent-context/commands/speckit.agent-context.update.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/agent-context/extension.yml +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/agent-context/scripts/bash/update-agent-context.sh +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/agent-context/scripts/powershell/update-agent-context.ps1 +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/agent-context/scripts/python/update_agent_context.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/assess/README.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/assess/commands/speckit.assess.decide.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/assess/commands/speckit.assess.define.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/assess/commands/speckit.assess.intake.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/assess/commands/speckit.assess.research.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/assess/commands/speckit.assess.shape.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/assess/extension.yml +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/bug/README.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/bug/commands/speckit.bug.assess.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/bug/commands/speckit.bug.fix.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/bug/commands/speckit.bug.test.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/bug/extension.yml +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/catalog.community.json +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/catalog.json +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/git/README.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/git/commands/speckit.git.commit.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/git/commands/speckit.git.feature.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/git/commands/speckit.git.initialize.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/git/commands/speckit.git.remote.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/git/commands/speckit.git.validate.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/git/config-template.yml +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/git/extension.yml +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/git/git-config.yml +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/git/scripts/bash/create-new-feature-branch.sh +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/git/scripts/bash/git-common.sh +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/git/scripts/bash/initialize-repo.sh +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/git/scripts/powershell/auto-commit.ps1 +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/git/scripts/powershell/git-common.ps1 +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/git/scripts/powershell/initialize-repo.ps1 +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/git/scripts/python/create_new_feature_branch.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/git/scripts/python/git_common.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/git/scripts/python/initialize_repo.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/selftest/commands/selftest.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/selftest/extension.yml +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/template/.gitignore +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/template/CHANGELOG.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/template/EXAMPLE-README.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/template/LICENSE +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/template/README.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/template/commands/example.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/template/config-template.yml +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/extensions/template/extension.yml +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/integrations/CONTRIBUTING.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/integrations/README.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/integrations/catalog.community.json +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/media/bootstrap-claude-code.gif +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/media/logo_large.webp +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/media/logo_small.webp +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/media/spec-kit-video-header.jpg +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/media/specify_cli.gif +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/newsletters/2026-April.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/newsletters/2026-February.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/newsletters/2026-June.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/newsletters/2026-March.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/newsletters/2026-May.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/presets/ARCHITECTURE.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/presets/PUBLISHING.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/presets/README.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/presets/catalog.json +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/presets/lean/README.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/presets/lean/commands/speckit.implement.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/presets/lean/commands/speckit.plan.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/presets/lean/commands/speckit.specify.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/presets/lean/commands/speckit.tasks.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/presets/lean/preset.yml +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/presets/scaffold/README.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/presets/scaffold/commands/speckit.myext.myextcmd.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/presets/scaffold/commands/speckit.specify.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/presets/scaffold/preset.yml +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/presets/scaffold/templates/myext-template.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/presets/scaffold/templates/spec-template.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/presets/self-test/commands/speckit.specify.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/presets/self-test/commands/speckit.wrap-test.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/presets/self-test/preset.yml +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/presets/self-test/templates/checklist-template.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/presets/self-test/templates/constitution-template.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/presets/self-test/templates/plan-template.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/presets/self-test/templates/spec-template.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/presets/self-test/templates/tasks-template.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/scripts/bash/check-prerequisites.sh +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/scripts/bash/common.sh +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/scripts/bash/create-new-feature.sh +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/scripts/bash/setup-plan.sh +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/scripts/bash/setup-tasks.sh +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/scripts/powershell/check-prerequisites.ps1 +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/scripts/powershell/common.ps1 +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/scripts/powershell/create-new-feature.ps1 +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/scripts/powershell/setup-plan.ps1 +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/scripts/powershell/setup-tasks.ps1 +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/scripts/python/check_prerequisites.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/scripts/python/common.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/scripts/python/create_new_feature.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/scripts/python/setup_plan.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/scripts/python/setup_tasks.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/spec-driven.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/spec-kit.code-workspace +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/_agent_config.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/_assets.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/_console.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/_init_options.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/_invocation_style.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/_project.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/_toml_string.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/_utils.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/agents.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/authentication/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/authentication/base.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/authentication/config.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/authentication/github.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/bundler/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/bundler/commands_impl/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/bundler/lib/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/bundler/lib/project.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/bundler/lib/versioning.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/bundler/models/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/bundler/models/records.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/bundler/services/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/bundler/services/adapters.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/bundler/services/catalog_stack.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/bundler/services/conflict.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/bundler/services/installer.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/bundler/services/primitives.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/bundler/services/references.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/bundler/services/resolver.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/bundler/services/validator.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/catalogs.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/commands/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/commands/bundle/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/extensions/_commands.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integration_scaffold.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integration_state.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integration_status.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/_commands.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/_helpers.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/_install_commands.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/_migrate_commands.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/_query_commands.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/_scaffold_commands.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/agy/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/amp/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/auggie/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/base.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/bob/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/claude/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/codebuddy/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/codex/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/copilot/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/cursor_agent/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/devin/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/firebender/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/forge/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/gemini/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/generic/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/goose/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/grok/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/hermes/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/junie/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/kilocode/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/kimi/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/manifest.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/omp/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/opencode/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/pi/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/qodercli/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/qwen/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/rovodev/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/shai/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/tabnine/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/trae/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/vibe/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/zcode/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/integrations/zed/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/presets/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/shared_infra.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/workflows/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/workflows/base.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/workflows/engine.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/workflows/overlays/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/workflows/overlays/_commands.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/workflows/overlays/composer.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/workflows/overlays/layer_sources.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/workflows/overlays/schema.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/workflows/steps/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/workflows/steps/do_while/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/workflows/steps/fan_in/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/workflows/steps/fan_out/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/workflows/steps/if_then/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/workflows/steps/shell/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/workflows/steps/switch/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/src/specify_cli/workflows/steps/while_loop/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/templates/checklist-template.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/templates/commands/analyze.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/templates/commands/checklist.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/templates/commands/clarify.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/templates/commands/converge.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/templates/commands/implement.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/templates/commands/plan.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/templates/commands/tasks.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/templates/commands/taskstoissues.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/templates/constitution-template.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/templates/plan-template.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/templates/spec-template.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/templates/tasks-template.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/templates/vscode-settings.json +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/auth_helpers.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/bundler_helpers.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/conftest.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/contract/test_bundle_cli.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/extensions/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/extensions/assess/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/extensions/assess/test_assess_extension.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/extensions/bug/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/extensions/bug/test_bug_extension.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/extensions/git/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/extensions/test_agent_context_cli_free.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/extensions/test_extension_agent_context.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/extensions/test_update_agent_context_feature_json.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/extensions/test_update_agent_context_python_parity.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/hooks/TESTING.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/hooks/plan.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/hooks/spec.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/hooks/tasks.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integration/test_bundler_catalog_stack.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integration/test_bundler_init_install.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integration/test_bundler_install_flow.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integration/test_bundler_local_install.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integration/test_bundler_offline.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integration/test_bundler_security_paths.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/__init__.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/conftest.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_cli.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_extra_args.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_home_isolation.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_agy.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_amp.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_auggie.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_base_markdown.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_base_skills.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_base_toml.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_base_yaml.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_bob.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_claude.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_cline.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_codebuddy.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_codex.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_copilot.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_cursor_agent.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_devin.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_firebender.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_gemini.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_generic.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_goose.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_grok.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_hermes.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_junie.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_kilocode.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_kimi.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_kiro_cli.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_omp.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_opencode.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_pi.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_qodercli.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_qwen.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_rovodev.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_scaffold.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_shai.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_subcommand.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_tabnine.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_trae.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_vibe.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_zcode.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_integration_zed.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_manifest.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/integrations/test_skill_frontmatter_quoting.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/parity_helpers.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_branch_numbering.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_check_prerequisites_paths_only.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_check_prerequisites_python_parity.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_check_tool.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_cli_version.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_command_template_py_scripts.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_commands_package.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_console_imports.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_create_new_feature_python_parity.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_extension_registration.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_extension_skills.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_extension_update_hardening.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_github_workflows.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_init_dir.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_init_dir_cli.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_live_transient_windows.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_merge.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_ps1_encoding.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_registrar_path_traversal.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_security_workflow.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_setup_plan_feature_json.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_setup_plan_no_overwrite.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_setup_plan_python_parity.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_setup_tasks.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_setup_tasks_python_parity.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_shared_infra_integrity.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_skill_placeholder_py.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_timestamp_branches.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_utils.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_utils_assets_imports.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_version_imports.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/test_workflow_run_without_project.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/unit/test_bundle_download_url.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/unit/test_bundler_adapters.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/unit/test_bundler_conflict.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/unit/test_bundler_primitives.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/unit/test_bundler_records.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/unit/test_bundler_references.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/unit/test_bundler_resolver.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/unit/test_bundler_validator.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/unit/test_bundler_versioning.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/workflows/conftest.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/workflows/test_overlay_commands.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/workflows/test_overlay_composer.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/workflows/test_overlay_layer_sources.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/workflows/test_overlay_schema.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/workflows/test_overlay_security.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/tests/workflows/test_resolver_integration.py +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/workflows/ARCHITECTURE.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/workflows/PUBLISHING.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/workflows/README.md +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/workflows/catalog.community.json +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/workflows/catalog.json +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/workflows/speckit/workflow.yml +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/workflows/step-catalog.community.json +0 -0
- {specify_cli-0.13.3 → specify_cli-0.14.0}/workflows/step-catalog.json +0 -0
|
@@ -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
|
|
@@ -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
|
|
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
|
|
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,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.
|
|
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:
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
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
|
|
80
|
+
### Specify Script Type (Shell, PowerShell, or Python)
|
|
81
81
|
|
|
82
|
-
|
|
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
|
|
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
|
|
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
|
|
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`
|
|
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`
|
|
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`
|
|
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`
|
|
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
|
|
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 |
|
|
266
|
-
| --- |
|
|
267
|
-
| `auggie` | `.augment/commands
|
|
268
|
-
| `claude` | `.claude/skills
|
|
269
|
-
| `cline` | `.clinerules/workflows
|
|
270
|
-
| `codebuddy` | `.codebuddy/commands
|
|
271
|
-
| `codex` | `.agents/skills
|
|
272
|
-
| `cursor-agent` | `.cursor/skills
|
|
273
|
-
| `firebender` | `.firebender/commands
|
|
274
|
-
| `gemini` | `.gemini/commands
|
|
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
|
|
277
|
-
| `kilocode` | `.kilocode/workflows
|
|
278
|
-
| `
|
|
279
|
-
| `
|
|
280
|
-
| `
|
|
281
|
-
| `
|
|
282
|
-
| `
|
|
283
|
-
| `
|
|
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
|
|