Goal:
- Dedicated bot identity
- Remote control over Tailnet
- iMessage working
- Minimal permissions, easy to expand later
- Separate macOS user:
openclaw - Separate Apple ID: email-only iMessage identity
- OpenClaw Gateway bound to loopback
- Remote access via Tailscale Serve
- Start with messaging-only tools profile
This gives isolation now and a clean path to widen access later.
System Settings → Users & Groups → Add User
Create Standard user: openclaw
Log into that user.
Messages → Settings → iMessage Sign in with the bot Apple ID (email only) Set “Start new conversations from” = that email.
Done.
Install on:
- Mac mini
- Your MacBook Pro
Log both into the same tailnet.
Confirm:
ping <mini-hostname>System Settings → General → Sharing → Remote Login ON Allow access for your admin account.
You can skip Screen Sharing for now.
From Terminal inside openclaw user:
curl -fsSL https://openclaw.ai/install.sh | bashAfter install:
openclaw --versionEnsure version ≥ 2026.2.21.
If not:
npm install -g openclaw@latestopenclaw onboardChoose:
- Mode: local
- Gateway bind: loopback
- Auth: token
- Tailscale exposure: Serve
- Install daemon: yes
- Skip skills for now
Afterward:
openclaw gateway --tailscale serveFrom your MacBook, open:
https://<mini-magicdns-name>/
Approve device pairing:
openclaw devices list
openclaw devices approve <id>You now have remote Control UI.
Before adding iMessage, reduce power.
openclaw config set tools.profile messaging
openclaw config set session.dmScope per-channel-peer
openclaw config set tools.elevated.enabled falseRestart:
openclaw gateway restartNow it cannot:
- Touch filesystem
- Execute commands
- Spawn sessions
It can only chat.
brew install steipete/tap/imsgTest:
imsg chats --limit 1If prompted:
- Grant Full Disk Access
- Approve Automation (control Messages.app)
openclaw config set channels.imessage.enabled true
openclaw config set channels.imessage.cliPath "$(which imsg)"
openclaw config set channels.imessage.dbPath "$HOME/Library/Messages/chat.db"
openclaw config set channels.imessage.dmPolicy pairing
openclaw config set channels.imessage.groupPolicy disabled
openclaw config set channels.imessage.configWrites falseRestart:
openclaw gateway restartFrom your iPhone:
Message the bot Apple ID email:
hello
Approve pairing:
openclaw pairing list imessage
openclaw pairing approve imessage <CODE>Message again.
You now have working iMessage → OpenClaw → response.
Minimum required:
- Keep
openclawuser logged in - Disable sleep
- Avoid surprise reboots
Important reality: LaunchAgent + Messages requires logged-in session. If you reboot while away, you may need to log in once.
You chose “safer/easier,” so do not enable auto-login yet.
Create a dedicated folder inside the workspace for files you want it to see.
Then allow only read tool, not write.
Allow only /usr/bin/osascript with approval prompts.
Do not globally enable exec.
Instead of signing bot into your Apple ID, share specific folders/calendars with it.
That keeps isolation intact.
- Separate identity avoids catastrophic Apple ecosystem leakage.
- Loopback + Tailscale Serve avoids LAN exposure.
- Messaging-only profile prevents it from “fucking up your shit.”
- imsg gets you to hello world fastest.
- Everything expands cleanly without reinstalling.