Install
openclaw skills install ogp-exposeExpose OGP via a public HTTPS endpoint, usually a stable Cloudflare hostname or named tunnel. Use when the user wants to verify or fix gateway reachability, align `gatewayUrl` with the real public endpoint, or set up temporary cloudflared/ngrok exposure for testing.
openclaw skills install ogp-exposeTunnels are optional — and often more private than alternatives.
ogp expose can create a temporary public URL for your OGP daemon. This is one approach, not the only approach. You can expose your gateway however you prefer:
gatewayUrl in ~/.ogp/config.json manuallyThe tunnel approach is provided as a zero-config convenience. It installs no persistent services unless you explicitly run ogp install (which creates a LaunchAgent/systemd service and asks for confirmation first).
The OGP daemon must be installed. If you see errors like 'ogp: command not found', install it first:
npm install -g @dp-pcs/ogp
ogp-install-skills
ogp setup
ogp config show
Full documentation: https://github.com/dp-pcs/ogp
This skill helps expose the OGP daemon to the internet and, more importantly, confirm that the public discovery endpoint matches the intended framework identity.
Use this skill when:
gatewayUrl or tunnel config is stale or mismatchedIf multiple frameworks are enabled, choose the framework first:
ogp config show
ogp --for openclaw status
ogp --for hermes status
Use --for <framework> on all exposure and verification commands when the target is not obvious.
Prefer one stable HTTPS hostname per framework:
https://ogp.example.comhttps://hermes.example.comThose hostnames should terminate at a named Cloudflare tunnel or equivalent reverse proxy and forward to the local daemon port for that framework.
After any tunnel or routing change, verify all three values agree:
gatewayUrl in the framework configcurl -s http://127.0.0.1:18790/.well-known/ogp
curl -s https://ogp.example.com/.well-known/ogp
The public key and gatewayUrl should match. If they do not, do not federate yet.
Install cloudflared:
# macOS (Homebrew)
brew install cloudflared
# Linux
wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64
sudo mv cloudflared-linux-amd64 /usr/local/bin/cloudflared
sudo chmod +x /usr/local/bin/cloudflared
# Windows
# Download from: https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/downloads/
Install ngrok:
# macOS (Homebrew)
brew install ngrok/ngrok/ngrok
# Linux/Windows
# Download from: https://ngrok.com/download
Sign up at https://ngrok.com and get your auth token:
ngrok config add-authtoken <your-token>
ogp --for openclaw expose
This will:
https://abc-def-123.trycloudflare.com)Update your config:
# Edit the correct framework config
# Set "gatewayUrl" to the URL shown by cloudflared only if this temporary URL is the intended canonical endpoint
ogp --for openclaw expose --method ngrok
This will:
https://abc123.ngrok-free.app)Update your config:
# Edit ~/.ogp/config.json
# Set "gatewayUrl" to the ngrok URL
Run OGP setup:
ogp setup
Start the daemon:
ogp --for openclaw start
In a new terminal, expose the daemon:
ogp --for openclaw expose
Copy the public URL shown by cloudflared/ngrok
Update the config:
# Edit ~/.ogp/config.json
# Update "gatewayUrl": "https://your-tunnel-url"
Restart the daemon:
# Stop with Ctrl+C in the daemon terminal
ogp --for openclaw start
Verify the setup:
# In another terminal or browser, test:
curl https://your-tunnel-url/.well-known/ogp
For production use, create a permanent cloudflared tunnel:
# Authenticate
cloudflared tunnel login
# Create tunnel
cloudflared tunnel create ogp-daemon
# Note the tunnel ID shown
# Create config file: ~/.cloudflared/config.yml
cat > ~/.cloudflared/config.yml <<EOF
tunnel: <tunnel-id>
credentials-file: ~/.cloudflared/<tunnel-id>.json
ingress:
- hostname: ogp.yourdomain.com
service: http://localhost:18790
- hostname: hermes.yourdomain.com
service: http://localhost:18793
- service: http_status:404
EOF
# Run tunnel
cloudflared tunnel run sarcastek-backend
Then make sure each framework config uses its own canonical hostname:
{
"gatewayUrl": "https://ogp.yourdomain.com"
}
{
"gatewayUrl": "https://hermes.yourdomain.com"
}
Pros:
Cons:
Pros:
Cons:
ogp config showgatewayUrlgateway.publicUrl overrides and keep only the canonical gatewayUrlogp --for <framework> status)curl http://localhost:<port>/.well-known/ogpCreate ~/Library/LaunchAgents/com.ogp.tunnel.plist:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.ogp.tunnel</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/cloudflared</string>
<string>tunnel</string>
<string>--url</string>
<string>http://localhost:18790</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
</dict>
</plist>
Load the service:
launchctl load ~/Library/LaunchAgents/com.ogp.tunnel.plist
Create /etc/systemd/system/ogp-tunnel.service:
[Unit]
Description=OGP Cloudflared Tunnel
After=network.target
[Service]
Type=simple
User=youruser
ExecStart=/usr/local/bin/cloudflared tunnel --url http://localhost:18790
Restart=always
[Install]
WantedBy=multi-user.target
Enable and start:
sudo systemctl enable ogp-tunnel
sudo systemctl start ogp-tunnel