link a second computer
what this is
Carnivore can link two of your computers. Your main computer keeps its sessions, and the new computer shows up next to them. You see both computers' sessions in one place, on your desk or on your phone. Setting it up takes about a minute and one 6 digit code. if both computers are on the same network, carnivore can find your pack for you with one click ("look for a pack").
what you need
- two apple silicon macs, m1 chip or newer, both on macos 13 or newer.
- carnivore 1.16.1 or newer on both. older versions cannot link this way. to see yours, click the carnivore icon in the menu bar and choose "About Carnivore".
- both computers on the same network, for example the same wifi.
- someone logged in at the new computer's screen.
- your main computer awake and carnivore open on it.
you do not need to open a port, change your router or sign up for anything.
set it up from the new computer
use this when you are sitting at the new computer.
- on your main computer, open carnivore, open the menu, then "pack". the "computers" tab opens first.
- click "add a computer". a 6 digit code appears, like "123 456", with a "join link" under it. leave this screen open.
- on the new computer, open "terminal".
- paste this line and press return:
curl -fsSL https://carnivore.ai/install.sh | bash - wait. it installs carnivore. if it needs homebrew, python or tmux, it installs those too. it may ask for the password you use to log in to this mac.
- when it asks "type the 6 digit code from your main computer, or press enter to set up as a new computer:", type the 6 digits with no space, then press return. nothing shows while you type; stars show once you press return. pressing return with no code sets up a separate computer.
- wait for "joined" and your main computer's name. you are done. the new computer is now in your pack.
no terminal? use the app window instead:
- on your main computer, do steps 1 and 2 above.
- on the new computer, download carnivore from carnivore.ai and open the dmg. drag carnivore to applications, then open it.
- in the window, click "join your pack".
- easiest, when both computers are on the same network: click "look for a pack". wait for "looking for a pack on this network...". when your pack shows up, you see "join {name}?" with the pack's name and a short key. click "yes". if it is not your pack, click "no".
- type the 6 digit code from your main computer. you can paste it. "yes" does not skip the code. you can also skip "look for a pack" and just type the code.
- click "join".
- a terminal window opens by itself. leave it open. carnivore needs it to reach your network.
- wait for "this computer joined" and your main computer's name. you can close the terminal window now.
"look for a pack" also opens a terminal window by itself, to do the search. because of that, macos does not ask you for any network permission.
if the terminal window does not open, the window shows a line to copy. open terminal, paste the line, press return, then type your code there.
already set up carnivore on the new computer and it is not in a pack yet? open carnivore there, open the menu, then "pack", then "computers", find "join a pack", and use the same "look for a pack" button, or type the code in "code or link" and click "join".
you can also get the code from your phone. open carnivore on your phone, tap the carnivore button at the top, then the house tab, then "pack", then "computers", and click "add a computer". the code shows there. type it on the new computer.
after the new computer joins, a box may pop up on it: "allow logins from this pack?". "yes" lets the new computer use the claude login from your main computer, so you do not log in to claude again there. "no" keeps it off. either answer is safe, and you can change it later in "pack", "logins". more in share a claude login.
set it up from your main computer
use this when the new computer is across the room or you do not want to touch it. you will need to log in to it with ssh, and you ask for the link from your main computer.
first, on the new computer, do these once:
- turn on remote login. open "system settings", "general", "sharing", and turn on "remote login".
- make sure someone is logged in at its screen.
- make sure your main computer can log in to it with an ssh key, not a password.
then, on your main computer, with the app:
- open carnivore. open the menu, then "pack", then "computers".
- under "add over ssh", type the new computer's "ssh login". it looks like "user@host". if it uses a special port, type it in "port".
- click "check". carnivore shows the computer's host key and says if it is new.
- read the result. if a problem shows, fix it and click "check" again. the problems and fixes are in "if something goes wrong".
- click "add". the steps run on their own: "checking the host key", "connecting", "checking the installer", "downloading carnivore", "installing", "starting carnivore", "waiting for it to come up", "ready to join", "joining", "joined".
- when you see "joined", you are done. nothing to type on the new computer.
or ask an agent. open an agent session on your main computer and say:
"add you@office-mac to my carnivore pack."
use your own ssh login in place of "you@office-mac". the agent checks the computer first, then asks to add it. you get one approval prompt in carnivore. click approve. that is the only click.
what you get
- one 6 digit code links a computer. no account, no config file.
- one line installs carnivore on the new computer.
- add a computer from your main computer with no typing on the new one.
- an agent can add a computer for you, with one approval from you.
- see the other computer's sessions in your sessions list, labeled with its name.
- open any of them and type into it, from either computer.
- start a new session on the other computer.
- reach the other computer from your phone. your phone goes through your main computer.
- the new computer needs no authenticator of its own. one login to protect: your main computer's.
- the new computer closes to your network. only your main computer can talk to it.
- both ways control by default: each computer can act on the other.
- a one way switch for each computer: it can no longer change anything on your main computer.
- remove a computer any time from your main computer.
- leave the pack any time from the new computer.
- the link comes back by itself after a restart or a network drop.
- carnivore turns on "launch at login" on the new computer, so it comes back after a reboot.
- the link follows the new computer if its address changes.
- no port to open and no router change.
- no network permission prompt on the new computer.
- each computer keeps its own layout, pins and groups.
- notifications from the other computer's sessions show up on your main computer.
- the stats bar adds up token use across your computers.
- "pack", "computers" shows each computer's cpu, memory and disk, and its installed tools. the "pack machines" card on your home screen adds battery and agent count.
- move a project to the other computer, and back.
- move a running session to the other computer. it waits for the current turn to end, then resumes there.
- new heavy work goes to the computer with the most room. light work stays home.
- a compute reserve keeps part of each computer free for you.
- each computer decides what it accepts: hosting agents, receiving projects, receiving logins (and which accounts).
- share a claude login with the other computer. it is on by default for every account, you can turn it off per account, and the other computer's owner says yes first, in a box that pops up on that computer. only the short lived access token moves, never the refresh token.
- the other computer's owner picks which accounts to allow, or all of them. a computer refuses any account it did not accept.
- "look for a pack" finds your pack on the same network. you still type the 6 digit code.
- give your pack a name (optional, off by default) so it is easy to spot when another computer looks for it.
- computers you already paired with ssh keep working.
- wrong codes are limited, so a guesser cannot get in.
if something goes wrong
on the new computer, in terminal:
| you see | it means | do this |
|---|---|---|
| "carnivore: log in at this computer's screen, then run this again." | nobody is logged in at this computer's screen. | log in at its screen, run the line again. |
| "carnivore: this needs a terminal to type in. run it from a Terminal window." | you ran it somewhere that cannot take typing. | open terminal on the new computer and run it there. |
| "carnivore: homebrew is missing and needs a terminal to ask for your password. run this command from a Terminal window" | it needs to install homebrew and must ask for your password. | run the line in terminal at the new computer. |
| "carnivore: /Applications is not writable. run this from an admin account" | this user cannot install apps. | log in as an admin user and run it again. |
| "carnivore: carnivore is running. quit it, then run this command again" | carnivore is open but not answering. | quit carnivore, run the line again. |
| "carnivore: carnivore {version} is running and is too old to join. quit it, then run this again." | the carnivore on the new computer is too old. | quit it and run the line again. it installs the new one. |
| "carnivore: the download does not match the pinned checksum, so nothing was installed" | the download was damaged or changed. nothing was installed. | run the line again. if it repeats, stop and tell us. |
| "carnivore: this release is for apple silicon macs only" | an intel mac, or a terminal running under rosetta. | use an apple silicon mac, or open a normal terminal. |
| "carnivore: carnivore needs macos 13 or newer" | the macos is too old. | update macos. |
| "that code did not match. 2 tries left." | a wrong digit. | check the code on your main computer and type it again. |
| "that code is used up. make a new one on your main computer." | three wrong tries burned it. | on your main computer click "add a computer" for a new code. |
| "that code expired. make a new one on your main computer." | codes last 15 minutes. | make a new one. |
| "no pack found on this network. paste the link from your main computer instead." | the new computer did not find your main computer. | check both are on the same network. or copy the "join link" from your main computer's screen and paste it instead of the code. |
| "this computer is already in a pack." | it already joined. | nothing to do. to move it, leave its pack first. |
| "this computer is already set up. type a code from its authenticator to confirm:" | this computer has its own login. | type the 6 digit code from its authenticator app. joining then turns that authenticator off. |
| "carnivore: this computer is already set up. join from carnivore on this computer, under pack, instead." | the install line cannot join a set up computer. | open carnivore on the new computer, open the menu, then "pack", then "computers", then "join a pack". |
| "too many tries. wait a minute, then try again." | too many attempts in a row. | wait a minute. |
| "your main computer is busy. try again in a moment." | main is handling another join. | try again in a moment. |
| "carnivore: could not reach your main computer." | the new computer found main but could not talk to it. | check both are awake and on the same network. |
| "carnivore: macos blocked the join from reaching your network. open system settings, privacy and security, local network, turn on terminal (or sshd if you joined over ssh), then try again." | macos is blocking terminal from your network. | do what it says, then run the line again. |
| "this computer's firewall is on. if your main computer cannot reach it, open system settings, network, firewall, options, and allow incoming connections for python." | the new computer's firewall may block your main computer. | if the link does not come up, allow it as the line says. to do that, open system settings, network, firewall, options, and allow incoming connections for the app the message names. |
| "carnivore: carnivore did not start in time." | carnivore took too long to start. | run the line again. the log is in "~/Library/Application Support/Carnivore Menubar/logs/server.log". |
| "carnivore: too many tries. run this again when you have a new code." | ten bad entries in a row. | run the line again with a new code. |
| "carnivore: could not join your pack." | the join failed for another reason. | make a new code on your main computer and try again. |
in the app window on the new computer:
| you see | it means | do this |
|---|---|---|
| "that code did not match. check it on your main computer and try again." | wrong code. | check it and type it again. |
| "that code is used up. make a new one on your main computer." | burned by wrong tries. | make a new code. |
| "that code expired. make a new one on your main computer." | older than 15 minutes. | make a new code. |
| "no pack found on this network. paste the link from your main computer instead." | not found. | check both computers are on the same network and that your main computer has carnivore open. or click "paste a link instead" and paste the "join link". on the pack page, paste the link into "code or link". |
| "more than one pack answered. pick yours" | two main computers are on this network. | pick the one whose name and short key match your main computer's screen. |
| "could not reach your main computer." | cannot connect. | check both are on and on the same network. |
| "that was not the computer the code came from. nothing was changed." | a different computer answered. | start again with a fresh code. |
| "the join helper did not start. open terminal on this computer, paste this line and press return, then type your code there:" | the terminal window did not open. | do what it says. |
| "that computer runs an older carnivore. update it, then try again." | one side is on an old version. | update carnivore on both. |
| "your main computer refused this join." | main said no. | make a new code and try again. |
| "this computer is already set up. finish joining from the pack row in the menu, signed in." | it has its own login. | sign in, then open the menu, then "pack", then "computers", then "join a pack". |
| "that is not a join link. copy it again from your main computer." | the pasted link is broken. | copy the whole "join link" again. |
on your main computer, "computers" screen:
| you see | it means | do this |
|---|---|---|
| "too many wrong codes. codes are off until {time}; use the link." | ten wrong codes in an hour. codes switch off for an hour. | use the "join link" instead, or wait. |
| "reaching {name}" | trying to connect. | wait a few seconds. |
| "can't reach {name} since {time}. it comes back when it is on and on a network this computer can reach." | the other computer is off, asleep or on another network. | turn it on or wake it. it reconnects by itself. |
| "{name}'s firewall may be blocking carnivore." | the other computer's firewall is on. | on it, allow incoming connections for python, as above. |
| "this computer is not allowed to reach your network. open system settings, privacy and security, local network, and turn on carnivore." | macos is blocking carnivore on your main computer. | turn on "carnivore" there. |
| "{name} no longer accepts this computer. remove it here, then add it again." | the other side forgot this main computer. | click "remove", then add it again. |
| "{name} answered with a key that is not its own. another device on the network may be answering for it. carnivore keeps trying." | something else answered at that address. | wait. if it stays, check your network. |
| "{name} could not be told. it keeps its old link until you remove it there too." | you removed it, but it was off. | on that computer, click "leave pack". |
adding over ssh, under "check":
| you see | it means | do this |
|---|---|---|
| "this host key changed. not adding." | the computer's identity differs from the one you trusted. it may be a different computer. | do not add it. check the address. |
| "could not reach that computer over ssh." | remote login is off, or the address is wrong. | turn on "remote login" there and check the address. |
| "ssh refused the login. this computer needs a key that works there." | your main computer has no ssh key accepted there. | add your key to that computer, then click "check". |
| "that login does not use a posix shell. use a login that does." | the user's shell is unusual. | use a normal user with zsh or bash. |
| "nobody is logged in at that computer's screen. log in there first." | no one is at its screen. | log in at its screen. |
| "homebrew is not installed there, and its installer needs a password at a terminal. install homebrew on that computer first." | it has no homebrew and no carnivore. | install homebrew on it first. |
| "the live install script is too old for this. try again after the next release." | the install line on carnivore.ai is not updated yet. | wait for the newest version of carnivore. |
| "that computer is already set up. it has to join from carnivore on that computer, under pack." | it has its own login. | join from carnivore on that computer, under "pack". |
| "that computer already joined another pack." | it belongs to another main. | leave that pack first. |
security in plain words
- the 6 digit code is only a way to start. it is never sent across the network. the two computers use it to prove they both know it, without saying it.
- the link is encrypted. each side remembers the other's key, and nothing else is ever accepted.
- a computer that is not yours is refused, even if it is on your network.
- a code works for 15 minutes and burns after 3 wrong tries.
- ten wrong codes in an hour switch codes off for an hour.
- codes and links are never written to disk or to a log. they are never placed on the command line, where other programs could see them.
- the new computer is not open to the network. only your main computer can talk to it.
- you can remove a computer any time, and its access ends.
- "look for a pack" only lists packs it finds. it never joins by itself, and you still need the 6 digit code.
- a pack name is off by default. it is sent on your local network only while you have one set.
- a computer only receives a claude login after its own owner says yes, for the accounts that owner picked. only the short lived access token is copied, never the refresh token.
- one thing to know: the new computer's firewall, if it is on, may block your main computer. carnivore tells you if so, and does not change your firewall.
linked? see use your pack.