Share

外观
风格

clawdbot

2026年2月7日 · 技术

Clawdbot(clawd.bot)部署与远程连接

⚠️ 已废弃(2025-01-27) 这货一晚上就把额度造光了,已被开除。文档留作参考,不再维护。 如需清理 aws1 上的残留服务,见下方"清理命令"。

当前状态(2026-02-06):aws1clawdbot-gateway / clawdbot-taskboard 已清理完成。

这份笔记记录 envvar 的 Clawdbot Gateway 在 aws1 的部署方式、配置位置、排障命令、以及 macOS 客户端如何远程连接。


部署现状(aws1)

  • 服务器:ssh aws1(AlmaLinux 9)
  • Tailscale:<REDACTED_IP>
  • Gateway:
    • WebSocket:<REDACTED_TOKEN>(loopback)
    • Dashboard(HTTP):<REDACTED_TOKEN>
    • 绑定:gateway.bind = "loopback"(配合 macOS “Remote over SSH” 使用)
  • Provider:
    • 自定义 OpenAI-compatible:chenrs
    • Base URL:<REDACTED_TOKEN>
    • Key:当前写在 <REDACTED_TOKEN>(建议后续改成 EnvironmentFile 注入,避免明文落盘)

关键文件路径(aws1)

  • Clawdbot 配置:<REDACTED_TOKEN>
  • Gateway token(给 macOS Remote 用):<REDACTED_TOKEN>
  • Provider Key(建议改为 systemd EnvironmentFile):<REDACTED_TOKEN>
  • systemd user service:
    • 单元文件:<REDACTED_TOKEN>
    • override:<REDACTED_TOKEN>.d/override.conf
  • 日志文件:<REDACTED_TOKEN>

清理命令(aws1)

# 停止并禁用 user service
systemctl --user disable --now <REDACTED_TOKEN> <REDACTED_TOKEN>

# 删除 unit 与 override
rm -f <REDACTED_TOKEN> ~/.config/systemd/user/<REDACTED_TOKEN>
rm -rf <REDACTED_TOKEN>.d ~/.config/systemd/user/<REDACTED_TOKEN>.d
systemctl --user daemon-reload
systemctl --user reset-failed

# 卸载全局包(如已安装)
npm rm -g clawdbot

# 清理配置/日志/工作目录
rm -rf ~/.clawdbot /tmp/clawdbot ~/clawd

常用运维命令(aws1)

说明:目前 provider key 是写在 clawdbot.json 里,所以不强制 source;如果你后续换成 env 注入,再按下面方式 source

# 基本信息
~/.npm-global/bin/clawdbot --version
~/.npm-global/bin/clawdbot status --plain
~/.npm-global/bin/clawdbot health --plain

# 模型列表(当前只配置了 3 个)
~/.npm-global/bin/clawdbot models list --plain

# 服务状态/重启(优先用 systemctl,避免 CLI 因 env 未加载而报错)
systemctl --user status <REDACTED_TOKEN> --no-pager
systemctl --user restart <REDACTED_TOKEN>

# 看端口是否监听(tailnet IP 上)
ss -lntp | grep -E ':18789\\b'

# 看日志
tail -n 200 /tmp/clawdbot/clawdbot-*.log

# 实时看日志(systemd)
journalctl --user -u <REDACTED_TOKEN> -n 200 --no-pager
journalctl --user -u <REDACTED_TOKEN> -f

Telegram Bot(待你提供 token 后开通)

  1. 在 Telegram 的 @BotFather 创建 bot,拿到 token。

  2. aws1 上添加 Telegram channel(默认 account):

source <REDACTED_TOKEN>
# Telegram 插件默认是 disabled,需要先启用一次
~/.npm-global/bin/clawdbot plugins enable telegram
systemctl --user restart <REDACTED_TOKEN>

# 把 token 放进文件(避免出现在 shell history)
install -m 600 /dev/null ~/.clawdbot/telegram.token
cat > ~/.clawdbot/telegram.token <<'EOF'
<TELEGRAM_BOT_TOKEN>
EOF

~/.npm-global/bin/clawdbot channels add --channel telegram --token-file ~/.clawdbot/telegram.token --name 'envvar-bot'
~/.npm-global/bin/clawdbot channels status --probe

实际部署(aws1)使用的是 --token-file ~/.clawdbot/telegram.token,并且 bot 为 @tingt1bot

  1. 配对(如果 DM policy 要求 pairing):
~/.npm-global/bin/clawdbot pairing list telegram
~/.npm-global/bin/clawdbot pairing approve telegram <PAIR_CODE> --notify

macOS 客户端远程连接(你本机)

前提:Mac 能 ssh aws1(或能用你配置的 SSH Host)。

方式 A:macOS 客户端 “Remote over SSH”

  • Host:aws1
  • Remote port:18789
  • Token:从 aws1<REDACTED_TOKEN> 获取

方式 B:手动 SSH tunnel(通用)

ssh -N -L 18789:127.0.0.1:18789 aws1

然后在本机连接:

  • Remote URL:<REDACTED_TOKEN>
  • Token:同上

Control UI / Webchat 需要 token(常见坑)

如果你在 <REDACTED_TOKEN> 看到 unauthorized / gateway token mismatch

  1. aws1 上打印 tokenized dashboard URL:
source <REDACTED_TOKEN>
~/.npm-global/bin/clawdbot dashboard --no-open
  1. 在本机先开 SSH tunnel(上面方式 B),然后用浏览器打开输出里的:

http://localhost:18789/?token=...

页面首次加载会把 token 存进 localStorage(随后 URL 会被 UI 自动去掉 ?token=)。

(如果还是不行:在 Dashboard 的 Settings 里手动粘贴 gateway.auth.token。)

如果你要我帮你把 token 发给你,请你告诉妈妈你希望用哪种方式拿(你自己 ssh aws1 看一眼也行)。


踩坑备忘

  • curl https://clawd.bot/install.sh | bash 在非交互 SSH 里最后会尝试读 /dev/tty,会报 No such device or address;这不影响安装,后续用 clawdbot onboard --non-interactive --accept-risk ... 或手工写配置即可。
  • 如果出现 MissingEnvVarError: CHENRS_API_KEY
    • source <REDACTED_TOKEN>
    • 或者直接用 systemctl --user restart <REDACTED_TOKEN> 重启服务
  • Config invalid: gateway.bind: Invalid input(导致端口不监听 / RPC probe 失败):
    • gateway.bind 允许值:loopback / tailnet / lan / auto / customany 是无效值)
    • 修复:把 <REDACTED_TOKEN> 里的 gateway.bind 改回 loopback,然后 systemctl --user restart <REDACTED_TOKEN>
  • Telegram 回复“空白/看不见”:
    • 现象:日志里出现 can't parse entities(Telegram parse_mode=HTML 不接受某些标签嵌套),然后会 retry 发送 plain text,但某些 chunk 可能会变成“只有空白/不可见字符”,导致你在 Telegram 里看到空白气泡。
    • 处理(aws1 热修,2026-01-26):修改这两个文件让它在 htmlText 为空时强制走 plain text,并且对 fallback 做 trim() 防止发空白:
      • ~/.npm-global/lib/node_modules/clawdbot/dist/telegram/send.js
      • ~/.npm-global/lib/node_modules/clawdbot/dist/telegram/bot/delivery.js
    • 注意:npm i -g clawdbot@... 升级会覆盖这两个 dist 文件;需要重新打补丁或固定版本。