Updates are explicit. A downloaded ZIP, cloned repository, or installed AI Skill does not change when a new GitHub release appears.
A Git clone contains a .git directory. Update it with Git:
git checkout main
git pull --ff-only origin main
python tests/run_tests.py
python scripts/install.py --tool cursor --forceReplace cursor with the host you use. Re-run the installer because the cloned source and the installed Skill are separate copies.
The release updater refuses to replace a Git working tree by default.
An installed release contains VERSION and normally .installed-manifest.json, but no .git directory.
Check for a release:
python scripts/check_update.pyApply it:
python scripts/update.pyIn non-interactive use:
python scripts/update.py --yesWhen local files were changed intentionally:
python scripts/update.py --force --yesThe prior installation is still backed up before replacement.
Download the release ZIP and SHA256SUMS, verify the ZIP checksum, then run:
python scripts/update.py --archive google-flow-scripting-skill-v1.6.0.zip --sha256 EXPECTED_HASH --yesA local archive must also contain a valid internal MANIFEST.json and pass the package tests.
- The target is an installed Skill.
- A Git source tree is not being overwritten accidentally.
- Local changes are detected through
.installed-manifest.json. - The release asset matches
SHA256SUMS. - Archive paths are safe.
- The internal
MANIFEST.jsonmatches every packaged file. - The package version, changelog, and release record agree.
- The full automated test suite passes.
- The current installation is backed up before replacement.
Restart the AI host or begin a new session. An already-running conversation may continue using instructions loaded from the prior version.
Backups use names such as:
google-flow-scripting.bak-20260724-153000-12345
To roll back, close the AI host, rename the current installation, then rename the selected backup to the original installation path.