Skip to content

berthPorts your agents and your terminal agree on

Every project gets a permanent, decodable block of ports. A ledger records who holds what, a reconciler checks it against what is really listening, and every Claude Code session is told its ports before it binds anything. Advisory by design; it never kills.

Port 13204 decoded: base 10000, P=3 breach-resolve, W=2 second worktree, R=04 smtp. Once P reaches 10 the digits stop lining up, so subtract the base first: 31010 − 10000 = 21010, project 21, worktree 0, role 10.Port 13204 decoded: base 10000, P=3 breach-resolve, W=2 second worktree, R=04 smtp. Once P reaches 10 the digits stop lining up, so subtract the base first: 31010 − 10000 = 21010, project 21, worktree 0, role 10.

Sixty seconds ​

bash
npm install -g @amiable-dev/berth
berth init                                   # a starting policy in ~/.config/berth/policy.toml
cd ~/projects/my-app && berth project add .  # permanent project number, ports found in your configs
eval "$(berth env --shell)"                  # PORT, API_PORT, DB_PORT … for this checkout
berth check                                  # what is listening, who holds it, what needs attention

With Claude Code, install the plugin instead and let the agent register its own repository:

bash
claude plugin marketplace add amiable-dev/berth
claude plugin install berth@berth
berth ui map viewberth ui map view

Released under the MIT licence.