Update
act-update brings a newer template state into your project: you see the diff, you consent, and
python .act/scripts/update.py does the rest. There is no merge and nothing to resolve by hand. Say
Check for a template update or run the script yourself.
Before you start
Section titled “Before you start”Commit or finish open work first (git status should be clean). The template’s address lives in
.act-lock.json (template.source); --source and --ref pick another source or a tag. The source recorded there
comes first: a git remote named template is used only if the lock names no source, and the script says which one it
took. If the fetch fails, the message names the source, where it came from, and the way out (--source, --ref).
python .act/scripts/update.py --plan # show the diff and describe the later steps, write nothingpython .act/scripts/update.py # the real run, asks for consentThe ten steps
Section titled “The ten steps”- Fetch the template into a temporary checkout. Nothing from it is run.
- Local changes. Checks whether you edited
.act/since the last update.--on-local-changes rescue|discard|abortanswers up front;rescuemoves your edits todocs/ai/local/first. - Diff from old to new, with rule and coding-rule IDs individually.
- Consent. Nothing is replaced before you agree.
--yesskips the prompt once you already agreed. - Replace
.act/as a whole. - Refresh the copies outside
.act/: unchanged skill copies and role bridges are replaced, copies you edited are kept and reported. - Hooks and Git files. Reconciles the hook entries in
.claude/settings.jsonand the template blocks in.gitattributesand.gitignore. - Migrations. Runs any that are due.
- Doctor.
doctor.pychecks for drift; findings land indocs/ai/inbox/, never as a silent fix. - Lock and commit.
.act-lock.jsonis rewritten and a commit is made, unless you pass--no-commit.
Then the assistant adds a journal line with the base-commit change and the number of findings.
Downgrade guard
Section titled “Downgrade guard”If the fetched state is older than the installed one, or the installed commit is unknown to the source (for example a
local checkout with unpushed commits), --plan warns and a real run refuses unless you pass --allow-downgrade. The
usual fix is --source <local template checkout>.
Your own changes
Section titled “Your own changes”.act/ is replaced, so never edit it. Put a project version of a rule, skill, or role into
docs/ai/local/<same path>; an update never overwrites that folder or your own content in docs/ai/ and docs/project/. It refreshes only unedited generated files (such as an unedited docs/ai/rules.md), files findings in the inbox and runs migrations. See
Layers and overrides.
If .act/ was replaced another way
Section titled “If .act/ was replaced another way”After a plain git pull of the template or a manual copy, a normal run notices it and resumes instead of
reporting “nothing to update”. --catch-up finishes the later steps from the .act/ on disk without a fetch;
it refuses if .act/ no longer matches its own MANIFEST.json.