← 返回 Skills 市场
bewareofddog

ClawTime Setup

作者 bewareofddog · GitHub ↗ · v1.2.0
cross-platform ⚠ suspicious
603
总下载
0
收藏
0
当前安装
3
版本数
在 OpenClaw 中安装
/install clawtime-setup
功能描述
Install, configure, start, and troubleshoot ClawTime — a private self-hosted webchat UI for OpenClaw with passkey (Face ID) auth, Piper TTS voice, and 3D ava...
使用说明 (SKILL.md)

ClawTime — Local Installation with Cloudflare Tunnel

ClawTime is a private webchat UI connecting to the OpenClaw gateway via WebSocket. Features: passkey (Face ID/Touch ID) auth, Piper TTS voice, 3D avatar.

Why Cloudflare is required: WebAuthn (passkeys) need HTTPS on a real domain. http://localhost only works on the same machine — not from a phone on your network.

Architecture

iPhone/Browser → https://portal.yourdomain.com → Cloudflare Tunnel → localhost:3000 (ClawTime) → ws://127.0.0.1:18789 (OpenClaw Gateway)

Prerequisites

  • Node.js v22+
  • cloudflared CLI: brew install cloudflared
  • A domain with DNS on Cloudflare (free tier works)
  • OpenClaw running: openclaw status
  • (Optional) Piper TTS + ffmpeg for voice

Installation Steps

1. Clone & install

cd ~/Projects
git clone https://github.com/youngkent/clawtime.git
cd clawtime
npm install --legacy-peer-deps

2. Set up Cloudflare Tunnel

# Login to Cloudflare
cloudflared tunnel login

# Create named tunnel
cloudflared tunnel create clawtime

# Configure routing
# Edit ~/.cloudflared/config.yml:

~/.cloudflared/config.yml:

tunnel: clawtime
credentials-file: /Users/YOUR_USER/.cloudflared/\x3Ctunnel-id>.json

ingress:
  - hostname: portal.yourdomain.com
    service: http://localhost:3000
  - service: http_status:404

Then in Cloudflare DNS dashboard: add a CNAME record:

  • Name: portal → Target: \x3Ctunnel-id>.cfargotunnel.com (Proxied ✅)

3. Configure OpenClaw gateway

The gateway must whitelist ClawTime's origin:

openclaw config patch '{"gateway":{"controlUi":{"allowedOrigins":["https://portal.yourdomain.com"]}}}'
openclaw gateway restart

⚠️ PUBLIC_URL must match this origin exactly — it's used as the WebSocket origin header for device auth.

4. Start ClawTime server

Minimum (no TTS):

cd ~/Projects/clawtime
PUBLIC_URL=https://portal.yourdomain.com \
SETUP_TOKEN=\x3Cyour-setup-token> \
GATEWAY_TOKEN=\x3Cgateway-token> \
node server.js

With Piper TTS:

cd ~/Projects/clawtime
PUBLIC_URL=https://portal.yourdomain.com \
SETUP_TOKEN=\x3Cyour-setup-token> \
GATEWAY_TOKEN=\x3Cgateway-token> \
BOT_NAME="Beware" \
BOT_EMOJI="🌀" \
TTS_COMMAND='python3 -m piper --data-dir ~/Documents/resources/piper-voices -m en_US-kusal-medium -f /tmp/clawtime-tts-tmp.wav -- {{TEXT}} && ffmpeg -y -loglevel error -i /tmp/clawtime-tts-tmp.wav {{OUTPUT}}' \
node server.js

⚠️ TTS Security Note: The {{TEXT}} placeholder is substituted into a shell command. ClawTime's server must sanitize text before substitution to prevent command injection. The server should strip or escape shell metacharacters (; | & $ \ ( ) { } \x3C >) from user input before passing it to the TTS command. If you're modifying the TTS pipeline, use child_process.execFile()with argument arrays instead ofchild_process.exec()` with string interpolation.

5. Start Cloudflare tunnel

cloudflared tunnel run clawtime

6. Register passkey (first time only)

  1. Open https://portal.yourdomain.com/?setup=\x3Cyour-setup-token> in Safari
  2. Follow the passkey (Face ID / Touch ID) prompt
  3. ❌ Do NOT use private/incognito mode — Safari blocks passkeys there
  4. ❌ Do NOT use Chrome on iOS — use Safari

After registration, access ClawTime at https://portal.yourdomain.com.


Environment Variables

Variable Required Description
PUBLIC_URL Public HTTPS URL (must match allowedOrigins in gateway config)
GATEWAY_TOKEN OpenClaw gateway auth token
SETUP_TOKEN For registration Passphrase for ?setup=\x3Ctoken> passkey registration URL
TTS_COMMAND For voice Piper command with {{TEXT}} and {{OUTPUT}} placeholders
BOT_NAME No Display name (default: "Beware")
BOT_EMOJI No Avatar emoji (default: "🌀")
PORT No Server port (default: 3000)

Storing Tokens Securely (recommended)

Instead of passing tokens as plaintext env vars or in plist files, store them in macOS Keychain:

# Store tokens in Keychain
security add-generic-password -s "clawtime-gateway-token" -a "$(whoami)" -w "YOUR_GATEWAY_TOKEN"
security add-generic-password -s "clawtime-setup-token" -a "$(whoami)" -w "YOUR_SETUP_TOKEN"

Then retrieve them at launch time:

GATEWAY_TOKEN=$(security find-generic-password -s "clawtime-gateway-token" -a "$(whoami)" -w) \
SETUP_TOKEN=$(security find-generic-password -s "clawtime-setup-token" -a "$(whoami)" -w) \
PUBLIC_URL=https://portal.yourdomain.com \
node server.js

This avoids storing secrets in plaintext on disk.


Device Authentication (Critical)

ClawTime authenticates with the OpenClaw gateway using Ed25519 keypair auth. This is where most installs break — see details in references/device-auth.md.

Quick summary:

  • Keypair auto-generated in ~/.clawtime/device-key.json on first run
  • Device ID = SHA-256 of raw 32-byte Ed25519 pubkey (NOT the full SPKI-encoded key)
  • Signature payload format: v2|deviceId|clientId|clientMode|role|scopes|signedAtMs|token|nonce
  • If device auth fails → delete ~/.clawtime/device-key.json and restart

Auto-Start on Boot (macOS launchd)

See references/launchd.md for plist templates for both the server and tunnel.


Managing Services

# Stop server
pkill -f "node server.js"

# Stop tunnel
pkill -f "cloudflared"

# View logs (if backgrounded)
tail -f /tmp/clawtime.log
tail -f /tmp/cloudflared.log

# Restart after code/config changes
pkill -9 -f "node server.js"; sleep 2; # then re-run start command

Getting the Gateway Token

# From macOS Keychain
security find-generic-password -s "openclaw-gateway-token" -a "$(whoami)" -w

# From config file
cat ~/.openclaw/openclaw.json | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('gateway',{}).get('token',''))"

Passkey Operations

# Reset passkeys (re-register from scratch)
echo '[]' > ~/.clawtime/credentials.json
# Restart server, then visit /?setup=\x3Ctoken>

# Reset device key (new keypair on next restart)
rm ~/.clawtime/device-key.json

Troubleshooting

See references/troubleshooting.md for all common errors and fixes. See references/device-auth.md for deep-dive on gateway auth issues.

安全使用建议
Things to consider before installing: - Review the remote repo before running it: the installer will git clone https://github.com/youngkent/clawtime.git and run npm install and node server.js. Inspect server.js and package.json (and all npm dependencies) for unexpected network calls, credential exfiltration, or privileged actions. - Metadata mismatches: the registry claims no required env vars but SKILL.md requires PUBLIC_URL and GATEWAY_TOKEN; the installer also uses the 'openclaw' CLI but the top-level required binaries list omitted it. Expect to need the OpenClaw CLI and tokens. - Sensitive tokens: the installer will store GATEWAY_TOKEN and SETUP_TOKEN in your macOS Keychain (or ask you to paste them). That is reasonable for this use case, but ensure you trust the code that will read them at runtime. - Persistence: the docs encourage creating launchd agents (auto-start, KeepAlive). If you install, be prepared to remove those plists and start scripts to uninstall. - Supply-chain risk: npm install will fetch third‑party packages. If you cannot audit the repo and dependencies, consider running the service in an isolated environment (VM/container) or reviewing a pinned commit in the repo first. - TTS command injection: the documentation correctly warns that unescaped {{TEXT}} substituted into shell commands is dangerous; verify the server implementation does proper sanitization or uses execFile/argument arrays. - What would increase confidence: a trustworthy homepage or verified upstream repo, an explicit list of file changes the installer makes, and a quick manual review of server.js and package.json confirming no unexpected outbound network endpoints or secret uploads. Given the above inconsistencies and the fact the installer fetches and executes remote code, proceed only after code review or using an isolated environment.
功能分析
Type: OpenClaw Skill Name: clawtime-setup Version: 1.2.0 The skill bundle is classified as suspicious due to a shell injection vulnerability in `scripts/install.sh`. The `openclaw config patch` command directly interpolates the `PUBLIC_URL` variable without proper sanitization, allowing for arbitrary command execution if a malicious `PUBLIC_URL` is provided. Additionally, `SKILL.md` explicitly warns about a command injection vulnerability in the ClawTime server's `TTS_COMMAND` if user input is not sanitized, highlighting a significant risk in the application being installed, though not a direct vulnerability in the skill's execution itself. There is no evidence of intentional malicious behavior like data exfiltration to unauthorized endpoints or stealthy backdoors.
能力评估
Purpose & Capability
The name/description (installing a local ClawTime webchat behind a Cloudflare tunnel) aligns with the required binaries and actions (node, cloudflared, git, npm, keychain, filesystem). However registry metadata omitted the openclaw CLI although the install script and SKILL.md require and call 'openclaw' (the installer checks for it and attempts to use ~/.openclaw/openclaw.json). Also the top-level registry fields claim 'no required env vars' while SKILL.md documents PUBLIC_URL and GATEWAY_TOKEN as required.
Instruction Scope
SKILL.md and included docs instruct the agent to clone a GitHub repo, edit/write ~/.cloudflared/config.yml, create ~/Projects/clawtime, start services, and read/write local files (including ~/.openclaw/openclaw.json and keychain entries). These actions are consistent with installing a local web UI but are broad (filesystem, network, keychain). There is no obvious exfiltration endpoint in the docs, and the authors explicitly note TTS command injection risks and recommend safe patterns.
Install Mechanism
The included scripts clone and run code from https://github.com/youngkent/clawtime.git and run 'npm install' and 'node server.js' — i.e., the installer will fetch and execute third‑party code at runtime. While GitHub is a common host, the repo owner is unknown (no homepage provided) and npm dependencies introduce supply‑chain risk. There is no packaged install spec from a verified registry; the script performs persistent changes (writing start scripts, config files).
Credentials
The skill needs sensitive tokens (GATEWAY_TOKEN, SETUP_TOKEN) and PUBLIC_URL to function; requesting and storing these in macOS Keychain is proportionate. But the registry manifest claims 'no required env vars' while the SKILL.md marks PUBLIC_URL and GATEWAY_TOKEN as required — an inconsistency the user should notice. The installer also attempts to auto-read ~/.openclaw/openclaw.json to extract a token, which is related to the gateway purpose but means the script will access other local config files.
Persistence & Privilege
The skill does not declare always:true. However the provided instructions and scripts guide the user to create persistent launchd agents (KeepAlive: true) and write start scripts under ~/Projects and ~/.cloudflared, which grants long‑lived presence on the machine. This is expected for a local service but increases blast radius if the installed code is malicious.
如何使用
  1. 确保已安装 OpenClaw(本地或 Docker 部署)
  2. 在对话框中输入安装命令:/install clawtime-setup
  3. 安装完成后,直接呼叫该 Skill 的名称或使用 /clawtime-setup 触发
  4. 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
版本历史
v1.2.0
Fixed metadata: declares all required/optional binaries (node, git, cloudflared, python3, ffmpeg, piper), env vars, files, and permissions (network, keychain, filesystem). Resolves OpenClaw suspicious flag caused by under-documented installer scope.
v1.1.0
Security patch: tokens now stored in macOS Keychain instead of plaintext plists, added TTS command injection warning, launchd uses wrapper script for secure token loading
v1.0.0
Full ClawTime install guide — Cloudflare tunnel, passkey (Face ID) auth, Piper TTS, Ed25519 device auth deep-dive, launchd auto-start, and automated install script
元数据
Slug clawtime-setup
版本 1.2.0
许可证
累计安装 0
当前安装数 0
历史版本数 3
常见问题

ClawTime Setup 是什么?

Install, configure, start, and troubleshoot ClawTime — a private self-hosted webchat UI for OpenClaw with passkey (Face ID) auth, Piper TTS voice, and 3D ava... 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 603 次。

如何安装 ClawTime Setup?

在 OpenClaw 或 Claude Code 对话框中运行命令「/install clawtime-setup」即可一键安装,无需额外配置。

ClawTime Setup 是免费的吗?

是的,ClawTime Setup 完全免费(开源免费),可自由下载、安装和使用。

ClawTime Setup 支持哪些平台?

ClawTime Setup 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。

谁开发了 ClawTime Setup?

由 bewareofddog(@bewareofddog)开发并维护,当前版本 v1.2.0。

💬 留言讨论