Update the Local Plugin
1
Refresh the Marketplace
2
Update the Plugin
/plugin manager offers the same actions in a menu.3
Start a New Session
Start a new Claude Code session if the updated skills do not appear.
4
Re-Run Initialization
In each repository, enter:This backfills configuration keys the new release added, refreshes
.prflow/config.schema.json, and adds any newly shipped prompt-extension .md.example files — refreshing an existing example whose content is out of date, while never creating one beside a live <skill>.md. Your existing values and arrays are kept. Review the diff before you commit it.Update the Cloud Files
A default cloud installation has two parts that update independently:- The workflows and composite actions committed in your repository.
- The plugin content fetched at the
prflow_versionref recorded in.prflow/config.json.
Preview, Then Apply
Download the installer again at the ref you are moving to — do not re-run an installer you saved from an earlier release. Each release ships its owninstall.sh logic, so a saved copy applies an older release’s install steps to the newer files. Fetch it at the release tag, read it, then run the copy you read:
An upgrade is a dry run by default. The first command writes nothing to your repository. It prints the full plan and a unified diff of the bytes the upgrade would change, working against a sandbox copy. The diff leaves out the ephemeral
tmp/ scratch folder and the vendored plugin tree under each state directory (.prflow/ and the older .devflow/), and if it meets a file it cannot open — a dangling symlink or a path the platform cannot read — it lists that file as an UNREADABLE row and adds a line counting how many could not be compared, instead of stopping. Nothing reaches the repository until you re-run with --apply.A first-time install is different. With no PRFlow files present, the installer applies immediately. Pass --dry-run to force a preview there too.install.sh, devflow-install.sh, or prflow-install.sh) sits committed at your repository root, /prflow:init and the installer’s scaffolding step also warn about it and print the download command for the current release.
Your Edits Are Never Overwritten
The installer records the exact bytes it wrote for each file it owns. On the next run it compares:- Unchanged since the installer wrote it. The file is updated in place.
- You edited it. The file is preserved exactly as you left it, and the new version is written beside it as
<path>.prflow-newfor you to merge by hand. The installer reports each file it preserved. - The installer cannot tell. A file with no recorded fingerprint, or one it could not read, is preserved the same way and reported with the reason.
- You deleted it. The file is recreated.
.prflow/config.json is never rewritten by this mechanism at all. Only newly added keys are backfilled into it.
The Version Pin
The installer re-stampsprflow_version when the existing value is empty or looks like a commit SHA. A tag or branch name you set deliberately is preserved, so move that value yourself when you want a newer one.
A committed-vendor installation, created with DEVFLOW_VENDOR=1, stores the plugin tree in the repository and ignores prflow_version. Re-run the installer to refresh that tree: an apply run that finds a git-tracked .prflow/vendor/prflow/ treats the repository as vendor mode, replaces the committed tree with the fetched release’s plugin files, keeps /vendor/ out of .prflow/.gitignore, and logs how to switch to a thin install — so CI stops running the old plugin after an upgrade.
After the Upgrade
Review and commit the resulting diff. A fresh cloud installation maintainsdevflow.yml and devflow-implement.yml. An older repository can still hold a workflow the installer no longer ships. The installer reports such a file by name and never removes it without explicit direction, because no future installer run can refresh it either.
See Cloud Runs for the complete cloud update path.