Version: eval-97ce23f (v0.9.0+338) · Platform: Linux 6.x, single user account
What happens
Two separate HOMEs, each with its own codebase-memory-mcp install, same version, byte-identical binaries (identical sha256, separate files on disk). With a daemon already warm from the first install, a client launched from the second never connects — it reports status: "pending" indefinitely and offers zero tools.
The reason appears only in the daemon log:
level=error msg=daemon.client_image_rejected reason=image_unverifiable
Two adjacent constraints compound the problem:
- the daemon socket lives in
/tmp/cbm-daemon-<uid> — keyed by uid, so HOME isolation does not isolate the daemon;
- only one
CBM_CACHE_DIR may be active per user at a time. A second is refused with "the active account daemon uses a different cache directory (active cache …; requested cache …). Close all CBM sessions and commands, then retry with one consistent CBM_CACHE_DIR."
That second message is clear and actionable. The image_unverifiable path is not: the client sees only pending, which is indistinguishable from a slow cold start.
Why it matters
Anyone running two workspaces side by side, or a build agent running two checkouts under one service account, hits this. It also makes A/B comparison of two configurations of the same version impossible without a workaround.
Workaround
Hard-linking both installs' binaries to a single inode, plus sharing one CBM_CACHE_DIR, makes both clients connect to one daemon. That works but is not something a user would discover from the symptom.
Suggestion
- If the check is a supply-chain guard, comparing binary content (hash) rather than image identity would admit a genuinely identical binary while keeping the guarantee.
- If single-instance enforcement is intentional, surfacing the reason to the client — instead of an indefinite
pending — would save considerable diagnosis time.
Version:
eval-97ce23f(v0.9.0+338) · Platform: Linux 6.x, single user accountWhat happens
Two separate
HOMEs, each with its owncodebase-memory-mcp install, same version, byte-identical binaries (identical sha256, separate files on disk). With a daemon already warm from the first install, a client launched from the second never connects — it reportsstatus: "pending"indefinitely and offers zero tools.The reason appears only in the daemon log:
Two adjacent constraints compound the problem:
/tmp/cbm-daemon-<uid>— keyed by uid, soHOMEisolation does not isolate the daemon;CBM_CACHE_DIRmay be active per user at a time. A second is refused with "the active account daemon uses a different cache directory (active cache …; requested cache …). Close all CBM sessions and commands, then retry with one consistent CBM_CACHE_DIR."That second message is clear and actionable. The
image_unverifiablepath is not: the client sees onlypending, which is indistinguishable from a slow cold start.Why it matters
Anyone running two workspaces side by side, or a build agent running two checkouts under one service account, hits this. It also makes A/B comparison of two configurations of the same version impossible without a workaround.
Workaround
Hard-linking both installs' binaries to a single inode, plus sharing one
CBM_CACHE_DIR, makes both clients connect to one daemon. That works but is not something a user would discover from the symptom.Suggestion
pending— would save considerable diagnosis time.