Bug
praxis update (cmd/update.go:140-147) refreshes installed skills after atomicReplace swaps the binary on disk — but refreshSkills() runs in the old process, so skillinstall.Refresh() rewrites the embedded meta-skills (praxis, praxis-memory, praxis-onboarding) from the OLD binary's go:embed content. A code comment acknowledges this.
Result: the exact artifacts most likely to change in a CLI release — the meta-skills that teach AI hosts how to drive the new binary — stay stale until the next praxis login or refresh-skills. If an update changes command syntax or the preamble contract, hosts follow outdated instructions in the window.
Suggested fix
After the binary swap, re-exec the NEW binary for the refresh step instead of calling refreshSkills() in-process:
exec.Command(newBinaryPath, "refresh-skills", "--embedded-only").Run()
(add a hidden --embedded-only flag if refreshing catalog skills too is undesirable there — though a full refresh-skills is arguably correct after an update). Print a fallback hint if the re-exec fails: "run praxis refresh-skills to update installed skills."
Test: update flow invokes the new binary for the refresh (can be asserted with a fake binary that records its argv).
Found during the praxis skills/gateway audit (2026-07-06).
Bug
praxis update(cmd/update.go:140-147) refreshes installed skills afteratomicReplaceswaps the binary on disk — butrefreshSkills()runs in the old process, soskillinstall.Refresh()rewrites the embedded meta-skills (praxis,praxis-memory,praxis-onboarding) from the OLD binary'sgo:embedcontent. A code comment acknowledges this.Result: the exact artifacts most likely to change in a CLI release — the meta-skills that teach AI hosts how to drive the new binary — stay stale until the next
praxis loginorrefresh-skills. If an update changes command syntax or the preamble contract, hosts follow outdated instructions in the window.Suggested fix
After the binary swap, re-exec the NEW binary for the refresh step instead of calling
refreshSkills()in-process:(add a hidden
--embedded-onlyflag if refreshing catalog skills too is undesirable there — though a fullrefresh-skillsis arguably correct after an update). Print a fallback hint if the re-exec fails: "runpraxis refresh-skillsto update installed skills."Test: update flow invokes the new binary for the refresh (can be asserted with a fake binary that records its argv).
Found during the praxis skills/gateway audit (2026-07-06).