Your Mac stays on and holds all the work. Your laptop and phone are windows onto it. Most of this is one setting; the rest is making sure the Mac is still awake, online, and running when you come back to it.
Any device can see and drive a running session. Nothing to install, no VPN, no file sync, no scripts.
A session lives only while its process is running and the Mac is awake and online. Quit the app, or lose the network for about ten minutes, and it ends.
This machine does everything. It runs the app, holds your files, and keeps every session alive. The other two devices need almost nothing by comparison.
Download the Claude desktop app from claude.ai/download, install it, and sign in. Then open the block below and follow it before continuing: it starts your first session and checks the machine.
Open the Code tab and start a session in the Local environment, pointed at a real project folder such as ~/Projects/test, and accept the trust prompt when it appears. Claude Code comes with the app, so nothing else is needed for this step; step 02 adds one terminal command. Use Local, not Cloud, SSH, or Remote Control: those run somewhere else, and every setting below would be applied to the wrong machine. Pick a real project folder rather than your home folder, because trust is not saved for the home folder and Remote Control will not start in a folder you have not trusted.
This is a brand new Mac. Check whether the Xcode command line tools and git are installed, and install them if they are missing. If you hit a password prompt or a dialog you cannot dismiss, stop and tell me exactly what to click, because those are mine to do. Then confirm you can read and write a file in this folder.
One prompt sets it, below. Restart Claude Code afterwards, then prove it worked before going further: start a session on the Mac and open claude.ai/code in a browser. The session should be listed, with a computer icon and a green dot.
Add "remoteControlAtStartup": true at the top level of my ~/.claude/settings.json. Read the file first and preserve everything already in it, then confirm the result is valid JSON and show me what you changed.
Valid JSON is not proof. A plan, an organization policy, a sign-in problem, or an untrusted folder will each leave the session local-only, and nothing on the Mac will tell you. If it is not listed, work through the troubleshooting section at the end of this page.
Three changes, by hand, with your administrator password.
sudo pmset -a sleep 0 disksleep 0 womp 1 autorestart 1 and enter your password.Coming back by itself after a reboot costs you disk encryption. Decide deliberately, and know you can change your mind later.
Leave FileVault on and automatic login off. Everything on this page still works. The cost is that after any reboot the Mac sits at the login screen, unreachable, until someone types the password in person.
Pick this if the Mac lives anywhere you would not leave an unlocked laptop, or if your employer requires encryption.
Turn FileVault off in Privacy & Security, then set Users & Groups › Automatically log in as to your account. The Mac returns to a working desktop on its own after a power cut or an overnight update.
Only when the machine is physically secure, such as a locked office. Its disk is readable by anyone who walks away with it.
Either way, remember what is on that disk: ~/.claude stores your session transcripts in plain text, and those can contain file contents, command output, and anything a tool happened to print. An unencrypted always-on Mac is holding all of it.
If the automatic-login menu is greyed out even with FileVault off, your Mac is managed by your employer or your account signs in with an Apple Account password. Neither can be worked around here.
Claude reopens its own sessions on its own. Give it a moment after login, then check claude.ai/code: the sessions you care about should be listed, each with a green dot. A claude rc server from step 02 is the exception: it does not restart itself, so open Terminal in its folder and run it again. Do that within about four hours and the sessions it was serving come back where they left off; wait longer and you are starting fresh ones.
A session listed without a dot is loaded but not registered, so your phone can see it and not drive it. Open it on the Mac and it reconnects. The same thing happens after a network outage longer than about ten minutes, which ends a session even on a machine that never slept.
Memory: 16GB minimum, 24GB better.
Install the Claude desktop app and sign in with the same account. That on its own is enough: the Mac’s sessions appear in the sidebar grouped by folder, and they are fully interactive, so you are typing into a session executing on the other machine.
The same setting works here as well. It does nothing for the Mac’s sessions; it exposes sessions hosted on the laptop, which is only useful if you sometimes start something here and want to reach it from your phone.
Add "remoteControlAtStartup": true at the top level of my ~/.claude/settings.json. Read the file first and preserve everything already in it, then confirm the result is valid JSON and show me what you changed.
A session you start here with the Local environment runs on the laptop, with the laptop’s files and skills, and ends when you shut down. Fine for one sitting. If the work needs the Mac’s files or skills, or you want it tomorrow from your phone, it has to start on the Mac, through a Remote Control environment.
claude on your PATH, so in Terminal run curl -fsSL https://claude.ai/install.sh | bash, then open a new Terminal window and confirm claude --version answers.cd ~/Projects/test — run claude, sign in with the same account if it asks, accept the trust prompt, and quit. Once per folder you will register.claude rc, answer y, and leave the window open. It registers the folder as an environment and immediately opens one starter session of its own, which is expected.hostname and pwd. It should answer with the Mac’s name and the registered folder. If it answers with the laptop’s, you picked Local by mistake.The server hosts its sessions itself: if the claude rc window closes, or the Mac reboots, those sessions stop, and it does not come back on its own — run claude rc again in the same folder. Do that within about four hours and it picks its sessions back up where they stopped; after that you get fresh ones. If one session crashes while the server stays up, message it from any device and the server revives it. Its sessions also all share the one folder, so keep one server per project and do not point two sessions at the same files at once.
When you cannot tell which machine a session is on, and the sidebar will not tell you because it groups both by folder name, ask the session to run hostname.
There is no moving a session afterwards: work kept in a repository can be pushed and pulled across, but the conversation stays on the machine that started it.
You probably do not need them here. A Mac session opened from the laptop still executes on the Mac, so the files, tools, MCP servers, and skills in play are all the Mac’s. If you do want skills on both machines, never by syncing: share them with git or plugins.
Skills live in ~/.claude/skills, inside the one folder this page tells you never to sync, and that is exactly where people get caught. The laptop’s own skills only matter for sessions the laptop itself hosts.
For anything you did not write yourself, install it as a plugin from a marketplace on each machine. settings.json records which are enabled, so matching the two machines is a small edit.
For skills you wrote, keep them in a git repo and link them in. Run this once on each machine:
I keep my own Claude skills in a git repo. Clone it to ~/Development/my-skills, then symlink each skill folder from inside that repo into ~/.claude/skills/. Skip any name that already exists there so nothing local gets clobbered. Do not copy the files, and do not put the repo itself inside ~/.claude. Tell me what you linked and what you skipped, and ask me for the repo URL if I have not given it to you.
The real files stay outside ~/.claude and only the links live inside it. That is what keeps the never-sync rule true by construction instead of by memory. After that, git pull in the repo updates both machines at once; a brand-new skill needs its link made once.
Almost nothing to do here, because the phone runs no sessions of its own.
While a claude rc server from step 02 is running, the Mac appears as a device card at the top of the Code tab. Tap it, pick one of its folders, and the new session starts on the Mac, with the Mac’s files and skills, exactly as if you had started it from the laptop. No card means no server is running — the card is the server, so this works only while that Terminal window is open on the Mac.
Without the card, New Session asks you to connect GitHub and install the Claude Code app into your repositories, then runs in the cloud from a fresh clone on its own claude/session-… branch. That works fine, and the session appears on your laptop too, so you can carry on there. Just know it is not touching your Mac: anything uncommitted, or outside that repository, will not be there.
The phone is for steering rather than building: read what happened, answer a question, approve a direction, then pick it back up at a real keyboard.
The Mac keeps the files it needs to reopen a past session for 30 days, then deletes them. Raise that early: expired files are swept the next time Claude Code launches. And weigh it first — a year of history is a year of plaintext on that disk, against the security mode you chose in step 01.
Set "cleanupPeriodDays": 365 at the top level of my ~/.claude/settings.json so the local session files on this Mac are kept for a year instead of 30 days. Read the file first, preserve everything already in it, and confirm the result is valid JSON.
This covers the resume files on this Mac only. While Remote Control is connected, the transcript is also stored on Anthropic’s servers to keep your devices in sync, and that copy follows Anthropic’s retention policy, not this setting: on Pro and Max it is kept for 30 days, or five years if you have the model-improvement sharing setting on. So this is not a guarantee that a year-old session will still open from your phone — and turning it up does not shorten what Anthropic keeps.
Sessions do not need this. It is for the times you want the files themselves from the laptop, or a dev server running on the Mac. Tailscale puts both machines on a private network with no ports opened to the internet.
On both machines, because every step needs an approval only you can give:
Then, on the Mac only, turn on System Settings › General › Sharing › File Sharing and add just the folders you actually need. Turn on Screen Sharing in the same place if you ever want to see the Mac’s own screen from the laptop. The default is easy to leave wider than you meant. To find the Mac’s name on the network:
Find the Tailscale command line tool on this Mac. It is usually inside the app bundle rather than on my PATH, so give me the full path if it isn't found directly. Then run its status command and tell me this machine's name on the tailnet.
Now connect from the laptop. In Finder choose Go › Connect to Server, enter smb:// followed by that name, and when Finder asks how to connect choose Registered User. The name and password it wants are the Mac’s own macOS account, not your Claude or Tailscale login. Then pick the folder or volume you want.
A dev server bound to 127.0.0.1 will not answer over Tailscale. Bind it to the Mac’s Tailscale address and reach it at http://<mac-name>:<port>. Binding to 0.0.0.0 also works, but that exposes it to every network the Mac is on, not just the tailnet. Tailscale also has iPhone and Android apps, but the phone does not need to be on the network. It reaches your sessions through Claude, not through the Mac.
Close the lid and anything hosted there is unreachable until it wakes; shut down and it is gone. Anything you want to pick up from another device should be started on the Mac.
Keep ~/.claude out of Syncthing, Dropbox, and iCloud. Its session logs are append-only and its registry is keyed by process ID, so two machines writing produces conflicts and nonsense. That includes the skills folder inside it: share skills with git or plugins instead.
An overnight OS update ends anything mid-run. The conversations survive and reopen from the sidebar where they left off, but they are not reachable from your other devices again until you do reopen them.
The usual failure is discovering the Mac is unreachable at the worst moment. A daily reachability check turns that into something you fixed on Tuesday.
Seven environment and sign-in states each leave a session local-only, silently.
CLAUDE_CODE_USE_BEDROCK and CLAUDE_CODE_USE_VERTEX.env block of a settings.json file, not just your shell.Commands like claude auth login only exist if you also installed the terminal CLI — step 02 has you do that. The desktop app does not put a claude command on your PATH. Anthropic’s own reference is at code.claude.com/docs/en/remote-control.
None of this applies on Pro or Max. There is no organization console on those plans, so the admin link below will tell you that you do not have access to organization settings. That is expected, and nothing needs enabling.
Anything shown as a prompt can be pasted straight into Claude Code, which will make the change for you. Everything else needs an administrator password, a System Settings toggle, or an approval dialog that no tool can click on your behalf.