share-local-site
Share a local development server with anyone via a public URL. Use when you need to demo a site to a client, let a colleague preview your work, test on mobile, or share localhost over the internet. Supports ngrok (recommended), localhost.run (zero-install), and cloudflared. Handles common issues like Vue CLI Invalid Host Header automatically.
Install via CLI (Recommended)
clawhub install openclaw/skills/skills/darwin7381/share-local-siteShare Local Site
Expose a local development server to the internet so anyone can access it via a public URL. No deployment needed.
When to use
- Demo a work-in-progress site to a client or colleague
- Test a local site on a mobile device
- Share localhost for pair programming or review
- Quick external access without deploying
Methods comparison
| Method | Signup | Install | Stability | Best for |
|---|---|---|---|---|
| localhost.run | No | No | ⭐⭐ | Quickest start. Zero setup, perfect for first-time use |
| ngrok | Yes | Yes | ⭐⭐⭐⭐ | Most stable. Dashboard, multi-tunnel, longer sessions |
| cloudflared | No | Yes | ⭐⭐⭐ | Already installed; quick tunnels |
Quick start
localhost.run (zero-install, fastest to start)
Nothing to install, nothing to sign up for. Just run:
ssh -o StrictHostKeyChecking=no -R 80:localhost:3000 [email protected]
Look for the URL in the output (e.g. https://xxxxx.lhr.life). Share it immediately.
ngrok (most stable, recommended for longer sessions)
# First time only
brew install ngrok # or: npm i -g ngrok, or download from ngrok.com
ngrok config add-authtoken YOUR_TOKEN # get token from dashboard.ngrok.com
# Start tunnel
ngrok http 3000 # replace 3000 with your port
Get the public URL:
curl -s http://127.0.0.1:4040/api/tunnels | jq -r '.tunnels[0].public_url'
Web dashboard: http://127.0.0.1:4040
cloudflared
brew install cloudflared # first time only
cloudflared tunnel --url http://localhost:3000
Pre-send checklist
Before sharing any tunnel URL, always verify:
-
Confirm the tunnel points to the correct port:
curl -s http://localhost:4040/api/tunnels | python3 -c " import sys,json; d=json.load(sys.stdin) for t in d['tunnels']: print(t['config']['addr'], t['public_url'])" -
Verify the page loads correctly:
curl -sI <TUNNEL_URL> # check HTTP 200 curl -s <TUNNEL_URL> | grep -i '<title>' # confirm correct siteWatch for:
Invalid Host header, wrong project, blank page, 502. -
Only send the URL after both checks pass.
Multiple tunnels (ngrok)
ngrok free tier supports up to 3 simultaneous tunnels. Run each in a separate terminal or tmux session:
# Terminal 1: frontend on port 5173
ngrok http 5173
# Terminal 2: backend on port 3001
ngrok http 3001
List all active tunnels:
curl -s http://localhost:4040/api/tunnels | python3 -c "
import sys,json; d=json.load(sys.stdin)
for t in d['tunnels']:
print(f\"{t['name']:20s} {t['config']['addr']:30s} {t['public_url']}\")"
Framework-specific fixes
Vue CLI: "Invalid Host header"
Vue CLI's webpack-dev-server blocks non-localhost hosts by default.
Vue CLI 2/3 (webpack-dev-server v3):
// vue.config.js
module.exports = {
devServer: { disableHostCheck: true }
}
Metadata
Not sure this is the right skill?
Describe what you want to build — we'll match you to the best skill from 16,000+ options.
Find the right skillPaste this into your clawhub.json to enable this plugin.
{
"plugins": {
"official-darwin7381-share-local-site": {
"enabled": true,
"auto_update": true
}
}
}Related Skills
openclaw-tmux-persistent-process
Run programs that survive OpenClaw exec session cleanup and gateway restarts via tmux. Use when you need long-running servers, dev servers, tunnels (ngrok/cloudflared), coding agents, or any process that must outlive the current exec session. Solves: exec background processes getting SIGKILL on session cleanup. Recommended for all OpenClaw users running any long-lived process.
frp-tunnel
Share local development servers via self-hosted frp tunnel with custom domains and auto HTTPS. Use when you need to share localhost with others, demo to clients, or test on mobile. Replaces ngrok/localhost.run with a stable, unlimited, self-hosted solution.