Install
openclaw skills install vitavaultVitaVault iOS app integration - sync Apple Health data directly to your AI agent. Auto-setup webhook, token generation, and HTTPS exposure. Works with any iP...
openclaw skills install vitavaultSync Apple Health data from VitaVault iOS app directly to your OpenClaw agent. No shared servers, no middleman - data flows phone to your agent only.
No Mac required. Install VitaVault from TestFlight (beta) or the App Store.
When your user asks to set up VitaVault sync, follow these steps automatically. Don't ask the user to do the technical parts - handle it yourself and hand them the URL + token at the end.
# Generate a secure random token
python3 -c "import secrets; print(secrets.token_hex(32))" > ~/.config/vitavault/sync-token
mkdir -p ~/.config/vitavault
TOKEN=$(cat ~/.config/vitavault/sync-token)
echo "Token: $TOKEN"
VITAVAULT_SYNC_TOKEN="$TOKEN" nohup python3 scripts/webhook.py --host 0.0.0.0 --port 8787 > /tmp/vitavault-webhook.log 2>&1 &
The webhook listens for health data POSTs and saves snapshots to ~/vitavault/data/.
The VitaVault iOS app requires HTTPS (iOS App Transport Security). You MUST expose the webhook over HTTPS. Detect what's available and use the first option that works:
Option A: Tailscale Funnel (recommended if Tailscale is installed)
# Check if Tailscale is available
tailscale status 2>/dev/null
# If yes, expose via Funnel:
sudo tailscale funnel --bg --set-path /vitavault http://127.0.0.1:8787
# Your URL will be: https://<your-tailscale-hostname>/vitavault
tailscale funnel status # to see the URL
Option B: Cloudflare Tunnel (if cloudflared is installed)
cloudflared tunnel --url http://localhost:8787
# Gives you a temporary https://*.trycloudflare.com URL
# For permanent: set up a named tunnel with a custom domain
Option C: VPS with a domain + reverse proxy (nginx/caddy) If the host already has a domain with HTTPS (nginx, caddy, etc.), add a reverse proxy rule:
location /vitavault {
proxy_pass http://127.0.0.1:8787;
}
URL would be: https://yourdomain.com/vitavault
Option D: ngrok (quick testing)
ngrok http 8787
# Gives you a temporary https://*.ngrok-free.app URL
curl -s https://YOUR-URL/health
# Should return: {"ok": true}
Tell your user:
Open VitaVault on your iPhone -> Settings -> OpenClaw
Webhook URL:
https://YOUR-URLSync Token:<the token you generated>Paste both in and tap Connect.
That's it. Once connected, VitaVault auto-syncs health data every time the app opens.
The webhook should survive reboots. Create a systemd service:
cat > /tmp/vitavault-webhook.service << 'EOF'
[Unit]
Description=VitaVault Webhook Receiver
After=network.target
[Service]
Type=simple
User=$USER
Environment=VITAVAULT_SYNC_TOKEN=<TOKEN>
ExecStart=/usr/bin/python3 /path/to/skills/vitavault/scripts/webhook.py --host 127.0.0.1 --port 8787
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
# Adjust paths and token, then:
sudo cp /tmp/vitavault-webhook.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now vitavault-webhook
Once data is syncing, use these scripts to read it:
# Latest snapshot summary
python3 scripts/summary.py
# Raw latest JSON
python3 scripts/query.py latest
# Last 7 days
python3 scripts/query.py week
# Date range
python3 scripts/query.py range 2026-02-01 2026-02-28
Data is stored locally at ~/vitavault/data/ as timestamped JSON files.
Once synced, your agent can:
Users can also export data manually from VitaVault (no webhook needed):
Pre-formatted for AI analysis. Users export from VitaVault and paste directly.
Structured data with nested metrics, dates, and units.
One row per day, opens in Excel/Google Sheets.
When a user shares an export:
VitaVault sync data flows directly: iPhone -> your OpenClaw agent. No shared backend, no central relay, no third-party storage. Data is saved on your agent's host at ~/vitavault/data/ and nowhere else.