* docs: replace deprecated --ai flag with --integration in all documentation Replace all user-facing --ai, --ai-skills, and --ai-commands-dir references with their modern equivalents: - --ai <agent> → --integration <agent> - --ai-skills → --integration-options="--skills" - --ai-commands-dir <dir> → --integration generic --integration-options="--commands-dir <dir>" Updated files: - README.md (~17 occurrences) - docs/installation.md (~8 occurrences) - docs/upgrade.md (~11 occurrences) - docs/local-development.md (~5 occurrences) - CONTRIBUTING.md (1 occurrence) - extensions/EXTENSION-USER-GUIDE.md (1 occurrence) - src/specify_cli/__init__.py (docstring examples and error messages) Left unchanged: - CHANGELOG.md (historical record) - Test files (intentionally exercise deprecated flag path) - CLI flag implementation (backward compatibility) Closes #2358 * docs: address review feedback on pre-existing issues - Fix duplicate copilot example in README.md (replace with codex) - Fix invalid gemini --integration-options="--skills" example (gemini does not support --skills) - Update generic integration comment from 'Unsupported agent' to 'Bring your own agent; requires --commands-dir' - Clarify EXTENSION-USER-GUIDE.md: skills auto-register for skills-based integrations, not only with --integration-options * docs: replace bare 'AI agent' / 'AI assistant' with 'coding agent' throughout Full sweep across all documentation and user-facing CLI messages to align terminology. Bare references like 'AI agent', 'AI assistant', and 'AI Agent' are replaced with 'coding agent' or 'coding agent integration' as appropriate. Intentionally left unchanged: - 'AI coding agent' (already correct expanded form) - Deprecated --ai flag help text and error messages (describes the deprecated flag itself) - Community extension descriptions (external project text) - 'generated by an AI' in CONTRIBUTING.md (general AI, not agent) * docs: address review — remove deprecated --offline, qualify --skills scope - Remove --offline from docstring examples (deprecated no-op) - Remove --offline from CONTRIBUTING.md testing example - Replace --offline instructions in docs/installation.md with note that bundled assets are used by default - Qualify --integration-options="--skills" in README.md to note it only applies to integrations that support skills mode
5.0 KiB
Local Development Guide
This guide shows how to iterate on the specify CLI locally without publishing a release or committing to main first.
Scripts now have both Bash (
.sh) and PowerShell (.ps1) variants. The CLI auto-selects based on OS unless you pass--script sh|ps.
1. Clone and Switch Branches
git clone https://github.com/github/spec-kit.git
cd spec-kit
# Work on a feature branch
git checkout -b your-feature-branch
2. Run the CLI Directly (Fastest Feedback)
You can execute the CLI via the module entrypoint without installing anything:
# From repo root
python -m src.specify_cli --help
python -m src.specify_cli init demo-project --integration claude --ignore-agent-tools --script sh
If you prefer invoking the script file style (uses shebang):
python src/specify_cli/__init__.py init demo-project --script ps
3. Use Editable Install (Isolated Environment)
Create an isolated environment using uv so dependencies resolve exactly like end users get them:
# Create & activate virtual env (uv auto-manages .venv)
uv venv
source .venv/bin/activate # or on Windows PowerShell: .venv\Scripts\Activate.ps1
# Install project in editable mode
uv pip install -e .
# Now 'specify' entrypoint is available
specify --help
Re-running after code edits requires no reinstall because of editable mode.
4. Invoke with uvx Directly From Git (Current Branch)
uvx can run from a local path (or a Git ref) to simulate user flows:
uvx --from . specify init demo-uvx --integration copilot --ignore-agent-tools --script sh
You can also point uvx at a specific branch without merging:
# Push your working branch first
git push origin your-feature-branch
uvx --from git+https://github.com/github/spec-kit.git@your-feature-branch specify init demo-branch-test --script ps
4a. Absolute Path uvx (Run From Anywhere)
If you're in another directory, use an absolute path instead of .:
uvx --from /mnt/c/GitHub/spec-kit specify --help
uvx --from /mnt/c/GitHub/spec-kit specify init demo-anywhere --integration copilot --ignore-agent-tools --script sh
Set an environment variable for convenience:
export SPEC_KIT_SRC=/mnt/c/GitHub/spec-kit
uvx --from "$SPEC_KIT_SRC" specify init demo-env --integration copilot --ignore-agent-tools --script ps
(Optional) Define a shell function:
specify-dev() { uvx --from /mnt/c/GitHub/spec-kit specify "$@"; }
# Then
specify-dev --help
5. Testing Script Permission Logic
After running an init, check that shell scripts are executable on POSIX systems:
ls -l scripts | grep .sh
# Expect owner execute bit (e.g. -rwxr-xr-x)
On Windows you will instead use the .ps1 scripts (no chmod needed).
6. Run Lint / Basic Checks (Add Your Own)
Currently no enforced lint config is bundled, but you can quickly sanity check importability:
python -c "import specify_cli; print('Import OK')"
7. Build a Wheel Locally (Optional)
Validate packaging before publishing:
uv build
ls dist/
Install the built artifact into a fresh throwaway environment if needed.
8. Using a Temporary Workspace
When testing init --here in a dirty directory, create a temp workspace:
mkdir /tmp/spec-test && cd /tmp/spec-test
python -m src.specify_cli init --here --integration claude --ignore-agent-tools --script sh # if repo copied here
Or copy only the modified CLI portion if you want a lighter sandbox.
9. Debug Network / TLS Issues
Deprecated: The
--skip-tlsflag is a no-op and has no effect. It was previously used to bypass TLS validation during local testing. If you encounter TLS errors (e.g., on a corporate network), configure your environment's certificate store or proxy instead.For example, set
SSL_CERT_FILEor configureHTTPS_PROXY/HTTP_PROXY.
10. Rapid Edit Loop Summary
| Action | Command |
|---|---|
| Run CLI directly | python -m src.specify_cli --help |
| Editable install | uv pip install -e . then specify ... |
| Local uvx run (repo root) | uvx --from . specify ... |
| Local uvx run (abs path) | uvx --from /mnt/c/GitHub/spec-kit specify ... |
| Git branch uvx | uvx --from git+URL@branch specify ... |
| Build wheel | uv build |
11. Cleaning Up
Remove build artifacts / virtual env quickly:
rm -rf .venv dist build *.egg-info
12. Common Issues
| Symptom | Fix |
|---|---|
ModuleNotFoundError: typer |
Run uv pip install -e . |
| Scripts not executable (Linux) | Re-run init or chmod +x scripts/*.sh |
| Git step skipped | You passed --no-git or Git not installed |
| Wrong script type downloaded | Pass --script sh or --script ps explicitly |
| TLS errors on corporate network | Configure your environment's certificate store or proxy. The --skip-tls flag is deprecated and has no effect. |
13. Next Steps
- Update docs and run through Quick Start using your modified CLI
- Open a PR when satisfied
- (Optional) Tag a release once changes land in
main