trellis update to refresh existing projects. No --migrate required.
Enhancements
Pi memory session discovery
trellis mem now reads Pi session storage from both global ~/.pi/agent/settings.json and project-local .pi/settings.json. Relative sessionDir values resolve from the directory containing the settings file, matching Pi’s settings behavior.
Bug Fixes
Channel path validation
trellis channel now rejects channel and worker names that are unsafe filesystem path segments. Cross-channel discovery skips legacy directories whose names do not pass the same validation instead of aborting the scan.
State and template writes
Generated files,.trellis/.template-hashes.json, registry config, task.json, and session pointers now use atomic replace operations. downloadWithStrategy(..., "overwrite") downloads into a temporary directory before replacing existing templates, and temporary-directory cleanup errors no longer mask the download result.
Destructive command guards
Trellis now protects user-owned data across destructive operations:trellis uninstallremoves only the managed block fromAGENTS.mdand refuses unattended--yesremoval when.trellis/spec/,.trellis/tasks/, or.trellis/workspace/contains uncommitted files.task.py archiveaccepts only real task directories under.trellis/tasks/.trellis updatekeeps an existingjournal-N.mdduring the legacytraces-N.mdrename and only appliesrename-dirautomatically to directories tracked as Trellis-owned.
Upgrade
--migrate required. Pi users with project-local session storage can run trellis mem from that project after upgrading.