Skip to content

praxis update refreshes skills from the OLD binary's embedded content #56

Description

@anujhydrabadi

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).

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions