Skip to content

macOS: in-place dist binary replacement SIGKILLs on next exec (code signing) -- document upgrade flow or add self-update #40

Description

Problem

Upgrading the compiled binary with cp new dist/mcp2cli (same inode, contents overwritten) invalidates the ad-hoc code signature on macOS. The next exec is killed by the kernel:

$ cp /tmp/build/dist/mcp2cli dist/mcp2cli && mcp2cli --version
# exit code 137 (SIGKILL)

Hit this on 2026-06-11 upgrading skippy-oc from 0.2.0 to 0.3.3.

Working upgrade flow (should be in README/CONTRIBUTING)

rm dist/mcp2cli                      # fresh inode is the fix
cp /path/to/new/mcp2cli dist/mcp2cli
launchctl kickstart -k gui/501/com.mcp2cli.local-ui   # restart local daemon

The already-running daemon keeps the old inode alive and is unaffected until restart, so this is safe to do live.

Nice-to-have

  • mcp2cli self-update (or a scripts/install.sh) that does rm+cp+kickstart atomically.
  • Version-skew warning: a 0.2.0 client talked to the 0.3.3 daemon with no complaint from either side -- 0.2.0 predates the source routing field entirely and just silently ignored it. mcp2cli daemon status could compare client vs daemon version and warn.

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentation

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions