Introduction
OpenClaw is genuinely useful once it’s set up well — and a security disaster waiting to happen when it isn’t. Most of the “here’s how to deploy OpenClaw in five minutes” tutorials skip every safeguard a professional setup actually needs. They expose the agent to the public internet, run it as root, plug it directly into a primary Gmail account, and burn through API credits with no model routing in place.
This is the professional developer’s version: how to host it so it can’t be reached except by you, how to keep the model bill predictable, how to compartmentalise integrations so a prompt injection can’t reach your real inbox, and the actual daily workflows the setup unlocks. The walkthrough is opinionated. If you skip the security parts, you’re shipping a bot with internet access and your credentials — that’s not what you want.
📚 Table of contents
- The five-layer security setup
- Why Telegram over WhatsApp for the chat interface
- Model selection: Codex for 99% of work, Opus 4.5 for planning
- Compartmentalised integrations and prompt-injection defence
- The ops hub: monitoring, observability, and a custom dashboard
- Real workflows: accounting, YouTube research, Kanban + heartbeat
- GitHub as the auto-save layer
- Common mistakes
- Pro tips
- Best practices
- Frequently asked questions
🔒 The five-layer security setup
OpenClaw is an autonomous agent with shell access. A naive deploy on a public IP is the digital equivalent of putting your laptop on the kerb with a sign that says “please type here.” The professional setup uses five layers, each of which fails closed.
Layer 1 — a VPS, not a home server
Pick any reputable VPS provider. Don’t run this on the laptop you use to bank. A separate machine with a separate network identity makes blast-radius reasoning much easier.
Layer 2 — TailScale instead of public ports
Install TailScale on the VPS and on your local machine. Now the VPS is reachable over a private
virtual network — not the public internet. To anyone scanning the internet, this server
doesn’t exist. No pings, no SSH attempts, no exposure. Set OpenClaw to bind to
localhost only, never to 0.0.0.0.
Layer 3 — a strict default-deny firewall
ufw or your provider’s firewall: block all inbound by default, allow only the
TailScale interface. Belt-and-braces is the right energy here — even if TailScale ever
misconfigured, the firewall holds the line.
Layer 4 — a non-root user account
Create a dedicated user (e.g. opclaw) with its own password and no
sudo privileges. Run OpenClaw under that user. If the agent goes off the rails or a
prompt injection lands, it can’t disable the firewall, uninstall TailScale, or reach
system-level files. The agent should only own the directories it actually needs.
Layer 5 — treat the agent like an untrusted insider
Every credential, integration, and key it touches should assume it’s a low-trust process. Strict API key scoping, spending caps, and notifications on unusual usage all live at this layer.
The whole stack should pass a simple test: if someone got your server’s public IP, would they even know OpenClaw was running? With this setup, the answer is no.
⌨️ The exact commands — from blank VPS to locked-down agent
Here’s what the security layers actually look like on a fresh Debian 13 VPS. Run these in order. Save them somewhere; you’ll re-use them every time you spin up a new instance.
1. Install TailScale & enable the SSH service
curl -fsSL https://tailscale.com/install.sh | shtailscale up --ssh— paste the auth URL into a browser, sign in, approve the device.- Add your laptop / phone as another TailScale device too — same account, same network.
tailscale status— confirm both devices show up and grab the VPS’s 100.x TailScale IP.
2. Lock down SSH to TailScale only
Edit /etc/ssh/sshd_config (nano /etc/ssh/sshd_config) and change three settings:
ListenAddress→ uncomment and set to your TailScale IP (the 100.x one). Now SSHd only listens on the private network, not on the public IP.PasswordAuthentication no— force key-based auth.PermitRootLogin no— root over SSH is finished.
Save with Ctrl+S, exit with Ctrl+X, then systemctl restart ssh.
Public-IP SSH attempts now fail by design.
3. Create the non-root user OpenClaw will run as
adduser tim— supply a strong, distinct password. (Pick whatever username you want; we’ll usetimhere.)usermod -aG sudo tim— sudo group, so you can escalate when needed but the agent can’t.su - timthensudo whoami— confirms the sudo path works.
Now SSH back in as ssh tim@<tailscale-ip>. The agent will run under this user; any
escalation requires a password it doesn’t have.
4. Default-deny firewall at the provider level
On Hostinger (or your VPS provider’s equivalent), create a firewall set to deny all inbound. Add exactly one rule to allow what TailScale needs:
- Accept · UDP · port 41641 · source anywhere — TailScale’s data port.
- Do not open TCP/22. SSH no longer needs the public port; TailScale handles connectivity.
- If you’ll later expose a public website from this server, add TCP 80 and TCP 443 then — not before.
Synchronize the firewall. From any non-TailScale machine, the VPS now appears completely dark.
5. Install OpenClaw & run the configure wizard
Use the macOS/Linux one-liner from the OpenClaw site (installs npm + OpenClaw). When the wizard asks:
- Manual configuration, local gateway, default workspace.
- Bind the gateway to loopback, enable token auth, leave TailScale exposure off.
- Chat channel → Telegram. Create a bot via @BotFather, paste the token.
- DM policy → pairing — locks the bot to your Telegram user ID.
- Install gateway service: yes. Hatch the bot in the terminal UI.
6. Connect a subscription-backed model
For Codex via ChatGPT Pro: openclaw configure → local → model → OpenAI →
OpenAI Codex subscription. Sign in via the printed URL, copy the redirect’s code=
parameter (everything up to the &), paste back in. For Opus via the Claude plan:
install claude CLI on any machine, run claude setup-token, sign in, paste
the token into openclaw configure → Anthropic. Two models, both subscription-backed.
7. Reach the gateway UI without exposing it
The gateway UI runs on port 18789 on the VPS, but bound to loopback — not reachable
remotely. Forward it over SSH (TailScale-only):
ssh -N -L 18789:127.0.0.1:18789 tim@<tailscale-ip>
Leave that running. Open http://localhost:18789?token=<your-gateway-token> in your
browser. The token comes from asking your bot in Telegram “how do I find the gateway
token?”. Same pattern works for any port the agent later exposes — FastAPI on 5000,
a dashboard on 3000 — just change the port number in the SSH command.
That’s the full hardened path. Public IP scan returns nothing. Root SSH refused. Agent runs as a sandboxed user that can’t escalate. Gateway UI reachable only via authenticated SSH tunnel on a private network. From here, every skill, integration, and workflow you add inherits the same posture.
📲 Why Telegram over WhatsApp
OpenClaw can chat through several messengers. Telegram is the safer default for the same reason a burner phone is safer than your primary phone — less is connected to it.
WhatsApp risks
- Tied to your real phone number
- Often receives 2FA codes from banks, services
- Identity is your social graph
- Compromise has high real-world blast radius
Telegram trade-offs
- Separate account, separate identity
- Not the inbox for 2FA codes from anything important
- Bot API is well-designed and stable
- Even total compromise has low knock-on impact
Lock down the Telegram side too: scope the bot to your user ID only, so even if someone discovers the bot’s handle, they can’t prompt it.
💸 Model selection: Codex for 99%, Opus 4.5 for planning
Running OpenClaw against a frontier API like Opus 4.5 around the clock will quietly drain hundreds of dollars a month. The cost graph is what catches most first-time setups by surprise — a casual afternoon of experimentation can cost more than a month of API rent.
The pragmatic answer is to route work to a subscription-backed coding model for the bulk of operations and reserve a frontier model for genuinely hard planning tasks.
The two-model setup
- Primary — Codex via the ChatGPT Pro plan ($200/month). Effectively unlimited usage for high-throughput coding and tool-calling. Strong on follow-through, very good at routine engineering tasks. Replaces 99% of frontier-model calls without compromising results.
- Fallback — Opus 4.5 via a $20/month Claude subscription. Used only when the task genuinely needs higher-end planning or reasoning. The remaining 1% of calls.
- Routing rule. Tell OpenClaw: “Use Opus 4.5 for complex planning tasks. Use Codex for everything else. If Opus quota is exhausted, fall back to Codex.” This one prompt at setup makes the cost graph predictable.
The result: 24/7 sub-agent activity, constant heartbeat work, parallel execution — all inside the subscription quota. A few times a week, OpenClaw escalates a planning task to Opus, and the $20 plan covers it. If neither subscription is an option for you, swap in any local model with decent tool-calling support and a smaller frontier fallback — the principle is the same: route by task complexity.
🔌 Compartmentalised integrations and prompt-injection defence
The single biggest mistake people make: handing the agent their primary email password. Now any spam email is a potential code-execution vector. The defence is compartmentalisation.
The dedicated Google account pattern
- Create a brand-new Google account just for the agent. Nothing personal lives here.
- Grant it the integrations OpenClaw needs — Gmail, Drive, Calendar, Sheets — in this fresh workspace only.
- On your real account, set up filters that forward only trusted-sender emails to the agent’s account.
- Block external email delivery to the agent’s inbox. It can only read mail that you explicitly forwarded.
- For each external API the agent uses, create scoped keys with hard spending caps and notification thresholds.
The prompt-injection threat model: an attacker emails you, you open it, the agent reads it, the email contains hidden instructions. With this setup, the attacker can’t get their email to the agent in the first place — it’s not in the allow-list. Even if a trusted sender were compromised, the agent operates on a separate Google account with no path back to your real identity, banking, or 2FA.
📊 The ops hub: monitoring and observability
The first thing to ask OpenClaw to build for itself is its own observability layer. Without it, the agent is a black box and you’ll spend more time guessing than working.
What the ops hub tracks
- Every sub-agent session, with start time, duration, and outcome.
- Tool calls made, prompts sent, and errors encountered.
- Real-time logs so you can step into any session and see what it’s thinking.
- Token usage and estimated cost across all connected models.
- Quota status against subscription limits, refreshed live.
Build it as a small dashboard the agent itself maintains. Prompt: “Create an internal dashboard called Ops Hub. It should log every session and sub-agent, surface real-time activity, track token usage and quota across all models, and let me inspect past sessions by clicking them.” Once that’s live, every subsequent automation has a paper trail.
⚙️ Real workflows that pay rent
The pattern that actually pulls weight: take the boring, repetitive parts of running a business or side project, and let the agent handle them while you focus on the work it can’t.
Accounting automation
Spend a single afternoon teaching the agent your accounting process. From then on it reads
forwarded receipt and invoice emails, classifies them (receipt / expense / bank statement /
contract), logs entries to a Google Sheet, saves PDFs to Drive, and matches incoming payments
to prior invoices. Add a custom skill (e.g. /invoice-generator) and you can dictate
“invoice client X for Y hours at Z rate” and have a finished PDF land in Drive.
YouTube outlier research (or any content radar)
A daily cron runs while you sleep. The agent scans competitor channels, ranks outlier videos by views-per-hour, and ships a morning briefing with thumbnails, titles, and click-through ideas. Stash interesting ones in a “YouTube OS” idea board so nothing falls through the cracks.
Kanban + heartbeat pattern
Build a Kanban board with To-Do, In Progress, and Done. Configure the heartbeat to run every 30 minutes: pick up the next task, spin up sub-agents in parallel, work it, move it to Done. You can drop 500 tasks into the backlog and walk away — the agent grinds through them whenever it has tokens to spend. Pair with the ops hub and you can watch the queue drain in real time.
Other daily crons worth wiring up
- Sponsorship contact triage — sort, prioritise, draft replies.
- AI accounting triage on forwarded receipts and expenses.
- Self-improvement loop — review yesterday’s sessions, propose new skills, queue them.
- Backlog grooming — pull priorities, refresh the Kanban, surface stale items.
🐙 GitHub as the auto-save layer
Same principle as the integrations section: don’t hand the agent your primary GitHub
account. Create a dedicated your-name-bot account, add it to your organisation, give
it scoped access. Then prompt OpenClaw once: “All code you write is committed to GitHub
under this organisation. Make clean commits, push regularly, never lose work.” Every
automation, dashboard, and skill the agent builds now lives in version control.
The win is two-fold: a broken or hallucinated change is one git revert away from
being undone, and you have a permanent history of every script the agent has produced —
invaluable when you want to audit, fork, or rebuild.
❌ Common mistakes
- Running OpenClaw on the public IP of a VPS — instant exposure to scanners and prompt-injection probes.
- Running as root — one bad prompt and the firewall is gone.
- Plugging it straight into your primary Gmail — every spam email is now an attack vector.
- Routing every request to a frontier API — the bill shows up before the value does.
- Skipping the observability dashboard — you can’t fix what you can’t see.
- No API spending caps — a runaway agent will spend until it can’t.
- Letting the agent use your primary GitHub identity — commit history gets confusing fast.
💡 Pro tips
- Backup the agent’s home directory daily — skills, memory, and dashboards are worth restoring.
- Audit the activity log weekly. Look for sub-agents that never finish, repeated errors, or unexpected tool calls.
- Build a small “kill switch” skill that disables crons, clears the queue, and pings you on Telegram.
- Set per-task token budgets. Most jobs don’t need 100k tokens; setting 20k caps surprises.
- Snapshot the VPS before any risky upgrade. Rolling back is the cheapest recovery option.
- Document your routing rule in
CLAUDE.mdor the agent’s memory so it survives session resets.
✅ Best practices
- Default-deny everything: network, accounts, integrations, API keys.
- Compartmentalise identities — separate Google account, separate GitHub account, separate Telegram.
- Route by task complexity, not by “always pick the best model.”
- Treat observability as a feature, not an afterthought.
- Push everything to version control — the agent’s scripts are now your scripts.
- Review weekly. New skills, new automations, prune what didn’t work.
Conclusion
OpenClaw isn’t life-changing out of the box. With the security hardening, the subscription-backed model routing, the compartmentalised integrations, and an ops hub watching it work, it quietly turns into the kind of background process every busy operator wants — one that handles accounting, research, and queue-clearing while you focus on the things only you can do.
The setup is the moat. The agent itself is the easy part. Put the firewall and the dedicated accounts in place first, then let it loose on real work.
Related reading: OpenClaw full course: setup, skills, memory — Warp + OZ Cloud parallel agents tutorial