shared-user
Every member is a checkout under a single operating-system user. Simple to stand up, and appropriate when the members are already inside one trust boundary.
- os users
- one
- credentials
- shared
- isolation
- none between members
From PyPI
pip install pibmo-relay Then configure the instance
pibmo-relay-install --help
The installer is deterministic and takes its answers from a configuration
session in the adopting repository -- that session knows what the checkouts
and members are. Adopters choose their own instance name; nothing in your
tree is required to be called pibmo or relay.
$ pibmo-relay list --folder inbox --unread -- mail for reviewer - inbox - /work/checkout-b -- [unread ] from=author 2026-03-04T09:14:22Z "Schema change needs review" (1 message(s)) $ pibmo-relay reply 4f9c1e07 --type report \ --body "Reviewed. Two notes on the migration order." sent 9a2d4b13-7f0c-4e88-a1b5-63de0c9f4a72 reviewer -> author [report] "Re: Schema change needs review" flushed 1 commit(s) to origin/main
The two topologies differ in security model, not merely in paths. Relay refuses to run when the configured topology does not match what is actually on disk, rather than degrading quietly into the weaker one.
shared-user Every member is a checkout under a single operating-system user. Simple to stand up, and appropriate when the members are already inside one trust boundary.
isolated-user Each member is a separate operating-system user with its own credentials. Members cannot act as one another, and a compromised member does not hand over the others’ access.
Addressing is not confidentiality
Relay provides addressing: messages are directed at named roles and read state is tracked per recipient. Under isolated-user, it additionally provides credential isolation between members, because each member is a distinct operating-system user. Under shared-user, it does not -- all members share one user and its credentials.
Under neither topology does Relay provide message confidentiality between members. A git-native transport gives every member a full clone, and a clone holds every message, including those addressed to someone else. Treat message contents as readable by every member of the instance.