Files
nexus/openclaw/Agents/TOOLS标准模板.md
2026-04-10 10:00:11 +08:00

794 lines
19 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: TOOLS管理
source:
author: shenwei
published:
created:
description:
tags: []
---
```table-of-contents
```
# TOOLS管理
## 1.统一SSH管理
- **所有服务器**: 包括macmini、ubuntu1、ubuntu2、NAS
- **管理方式**: 通过SSH统一管理不存储sudo密码
- **权限原则**: 遵循最小权限原则
## 2.管理流程
1. 所有服务器操作都通过SSH进行
2. 不存储任何服务器的sudo密码
3. 需要sudo权限的操作通过SSH执行
4. 保持所有服务器的管理方式一致
## 3.文件编辑注意事项
- **所有重要文件**: 使用 `exec + echo` 追加内容,避免 edit 工具在文件末尾无换行时失败
- **edit工具使用准则**: edit依赖精确文本匹配任何空白字符差异都会导致失败。建议先 read 文件确认内容,用 write 重写整个文件更可靠(特别是 memory、SOUL、IDENTITY 等重要文件)
## 4.FRP (frpc 客户端) 管理
### 安装目录
| 服务器     | FRP目录                             |
| ------- | --------------------------------- |
| macmini | /opt/frp/frp_0.65.0_darwin_arm64 |
| ubuntu1 | /opt/frp/frp_0.65.0_linux_amd64   |
| ubuntu2 | /opt/frp/frp_0.65.0_linux_amd64   |
### 配置文件
- **文件名**: `frpc.toml`在FRP目录下
- **作用**: 定义所有通过frp反向代理的应用及端口映射 (localPort ↔ remotePort)
### Mac Mini 管理方式launchd
**启动方式**: launchd plist`KeepAlive: true`,崩溃自动重启)
**plist 位置**: `~/Library/LaunchAgents/com.homebrew.frpc.plist`
**管理命令**:
```bash
# 重启
launchctl unload ~/Library/LaunchAgents/com.homebrew.frpc.plist && launchctl load ~/Library/LaunchAgents/com.homebrew.frpc.plist
# 停止KeepAlive 会自动重启,需先 unload
launchctl unload ~/Library/LaunchAgents/com.homebrew.frpc.plist
# 查看状态
launchctl list | grep frpc
# 查看日志
tail -f /opt/frp/frp_0.65.0_darwin_arm64/frpc.log
```
**正常状态标志**: 日志中显示 `[name] start proxy success`
### Ubuntu1/2 管理方式systemd --user
```bash
ssh ubuntu1 'systemctl --user restart frpc'
ssh ubuntu2 'systemctl --user restart frpc'
ssh ubuntu1 'systemctl --user status frpc'
ssh ubuntu2 'systemctl --user status frpc'
```
不需要密码开机自启linger 已启用)
### 查看配置
```bash
# 读取frpc.toml了解端口映射
cat /opt/frp/frp_0.65.0_xxx/frpc.toml
```
## 5.FRP端口映射查询格式 (2026-03-14)
用户会这样提问:
- "ubuntu1上frp的列表"
- "macmini的frp配置"
- "查看ubuntu2的frpc.toml"
格式: 扫描frpc.toml文件列出proxies相关配置
输出格式: 表格 (名称 | 类型 | localPort | remotePort)
查询示例: ssh到对应服务器 -> cat /opt/frp/frp_0.65.0_xxx/frpc.toml
## 6.FRP状态检查 (2026-04-04)
用户可能说: "检查frp状态"
**检查方法**:
1. 如果是macmini服务器
   - `launchctl list | grep frpc` 查看进程状态
   - `tail /opt/frp/frp_0.65.0_darwin_arm64/frpc.log` 查看代理启动情况
2. 如果是ubuntu服务器
   - `systemctl --user status frpc`
**正常状态标志**:
- 所有 proxy 启动成功时会显示: `[xxx] [name] start proxy success`
- 例如: `2026-04-04 16:43:01.276 [I] [client/control.go:172] [1a254958e6553119] [macmini-ssh] start proxy success`
**重启命令** (如果需要):
1. 如果是macmini服务器
```bash
launchctl unload ~/Library/LaunchAgents/com.homebrew.frpc.plist && launchctl load ~/Library/LaunchAgents/com.homebrew.frpc.plist
```
2. 如果是ubuntu服务器
```bash
systemctl --user restart frpc
```
## 7.VPS2 (x-UI 科学上网)
- **IP**: 104.194.92.188
- **SSH**: `ssh vps2`
- **管理命令**: `x-ui`
- **用途**: x-UI 面板管理,用于科学上网
- 结果展示用列表方式,方便阅读
## 8.网络测试策略 (2026-03-15)
用户可能说: "网络测试"、"检查服务器科学上网"
**测试项目**:
1. 国内直连baidu (https://www.baidu.com)
2. 国外直连 Google (https://www.google.com)
3. 国外通过代理访问 Google (socks5://127.0.0.1:10808)
**测试命令模板**:
**国内访问直连**
```
curl -v https://www.baidu.com
```
**国外访问直连**
```
curl -v https://www.google.com
```
**国外访问通过代理连**
这是最快、最直接的方法。我们可以强制 `curl` 使用 SOCKS5 代理去访问 Google 的状态页。
**执行命令:**
```
curl -x socks5h://127.0.0.1:10808 -v https://www.google.com
```
- **参数解释:**
    - `-x socks5h://`:指定使用 SOCKS5 代理。注意加个 `h`,这表示让代理服务器去解析域名(防止本地 DNS 污染导致测试失败)。
    - `-v`(Verbose) 显示详细连接过程。
- **判断标准:**    
    - 如果看到 `HTTP/2 200` 或者大量的 HTML 文本,说明**代理成功**。
    - 如果显示 `Connection refused` 或 `Timeout`,说明**端口未开放或 V2Ray 未运行**。
**服务器列表与代理端口**:
| 服务器 | IP | 代理端口 | 备注 |
| ------- | --------------- | ----- | ------------ |
| MacMini | 192.168.3.189 | 10808 | V2RayN |
| Ubuntu1 | 192.168.3.47 | 10808 | 需SSH后测试 |
| Ubuntu2 | 192.168.3.45 | 10808 | 需SSH后测试 |
| NAS | 192.168.3.17 | 20170 | 仅监听127.0.0.1 |
| VPS1 | 192.227.222.142 | - | 直连正常 |
| VPS2 | 104.194.92.188 | - | 直连正常 |
**输出格式**: 列表方式,方便阅读
**网络测试输出格式**
用户要求格式示例:
• 服务器名
  • 国内访问直连: ✅/❌
  • 国外访问直连: ✅/❌
  • 国外访问通过代理XXX连: ✅/❌
## 9.OpenClaw 命令路径 (2026-03-27)
| 服务器      | OpenClaw 路径                              |
| -------- | ---------------------------------------- |
| Mac mini | `/opt/homebrew/bin/openclaw`             |
| Ubuntu1  | `/home/shenwei/.npm-global/bin/openclaw` |
| Ubuntu2  | `/home/shenwei/.npm-global/bin/openclaw` |
## 10.NAS Docker 代理配置 (2026-03-27)
- **配置文件**: `/etc/systemd/system/pkg-ContainerManager-dockerd.service.d/http-proxy.conf`
- **用途**: Synology NAS 上 Docker 守护进程的代理设置
- **修改后需执行**: `sudo systemctl daemon-reload && sudo systemctl restart docker`
## 11.sag (TTS 语音生成) (2026-03-27)
### 安装
```bash
brew install steipete/tap/sag
```
### API Key 配置
- 位置: `~/.openclaw/.env`
- 环境变量: `ELEVENLABS_API_KEY`
### 生成语音并发送到 Telegram
```bash
# 1. 生成 MP3 文件
source ~/.openclaw/.env
sag --api-key "$ELEVENLABS_API_KEY" -o /tmp/voice.mp3 "要转换的文字"
# 2. 发送到 Telegram (voice note)
message --account <telegram bot> --chatId <user_id> --filePath /tmp/voice.mp3 --message "文字" --buttons []
```
### 使用规则
- 所有用 sag 生成的语音都必须通过 Telegram voice note 发送给我
- 使用 当前agent对应的telegram bot 账号发送
- 文件临时保存在 /tmp/ 目录
### OpenCode
- **路径**: `/Users/weishen/.opencode/bin/opencode`
- **版本**: 1.2.27
- **用法**: 开发任务必须通过它执行
## 12.OpenClaw Gateway 重启步骤
### Mac Mini (2026-03-30 新方法)
使用 `launchctl` 管理 OpenClaw Gateway 服务:
`launchctl unload ~/Library/LaunchAgents/ai.openclaw.gateway.plist && launchctl load ~/Library/LaunchAgents/ai.openclaw.gateway.plist`
### Ubuntu1/2 服务器 (2026-03-28)
#### 完整操作流程
**1. SSH 登录并重启**
```bash
ssh ubuntu1 'systemctl --user restart openclaw-gateway'
ssh ubuntu2 'systemctl --user restart openclaw-gateway'
```
**2. 查看启动状态**
```bash
ssh ubuntu1 'systemctl --user status openclaw-gateway'
ssh ubuntu2 'systemctl --user status openclaw-gateway'
```
**3. 检查 OpenClaw 健康状态**
```bash
ssh ubuntu1 '/home/shenwei/.npm-global/bin/openclaw status'
ssh ubuntu2 '/home/shenwei/.npm-global/bin/openclaw status'
```
### 快捷命令组合 (单行执行)
```bash
# Ubuntu1
ssh ubuntu1 'systemctl --user restart openclaw-gateway && systemctl --user status openclaw-gateway && /home/shenwei/.npm-global/bin/openclaw status'
# Ubuntu2
ssh ubuntu2 'systemctl --user restart openclaw-gateway && systemctl --user status openclaw-gateway && /home/shenwei/.npm-global/bin/openclaw status'
```
## 13.AgentMail (邮件收发与自动化) (2026-04-04 更新)
### 📂 技能目录
```
~/.openclaw/skills/agentmail/
├── scripts/           # 可直接使用的 Python 脚本
  ├── check_inbox.py   # 查看收件箱
  ├── send_email.py    # 发送邮件
  └── setup_webhook.py # 配置 Webhook
└── references/       # 参考文档
    ├── API.md         # API 完整文档
    ├── EXAMPLES.md    # 使用示例
    └── WEBHOOKS.md   # Webhook 配置指南
```
### 快速使用
#### 查看收件箱
```bash
unset HTTP_PROXY && unset HTTPS_PROXY && unset http_proxy && unset https_proxy
python3 ~/.openclaw/skills/agentmail/scripts/check_inbox.py --inbox star-agent@agentmail.to --limit 10
```
#### 发送邮件
```bash
python3 ~/.openclaw/skills/agentmail/scripts/send_email.py \
  --inbox star-agent@agentmail.to \
  --to "recipient@example.com" \
  --subject "主题" \
  --text "正文内容"
```
### API Key 配置
- 位置: `~/.openclaw/.env`
- 环境变量: `AGENTMAIL_API_KEY=your_key_here`
### 附件处理
附件需要用 Python 代码下载,参考:
```bash
cat ~/.openclaw/skills/agentmail/references/API.md
cat ~/.openclaw/skills/agentmail/references/EXAMPLES.md
```
### ⚠️ 注意事项
- **代理问题**:遇到 SOCKS 代理错误时,先 `unset HTTP_PROXY && unset HTTPS_PROXY`
- **临时文件存放**:下载的附件和临时脚本请放在 `~/.openclaw/temp/<agentId>/` 目录,不要放在 workspace 下
- **参考文档**:详细用法见 `references/API.md` 和 `references/EXAMPLES.md`
## 14.Docker命令路径 (2026-04-04)
| 服务器 | 命令 | 说明 |
| ------------- | -------------------------------------------------------- | ------------- |
| macmini | `docker` | 直接可用(已在 PATH |
| macmini (SSH) | `/Applications/Docker.app/Contents/Resources/bin/docker` | SSH 时用完整路径 |
| ubuntu1/2 | `docker` | 直接可用 |
**使用方式**:
```bash
# macmini 本地
docker ps
# macmini SSH
ssh macmini '/Applications/Docker.app/Contents/Resources/bin/docker ps'
# ubuntu1/2 SSH
ssh ubuntu1 'docker ps'
ssh ubuntu2 'docker ps'
```
## 15.定时任务创建注意事项 (2026-03-29)
### 预防措施
1. 在远程服务器(Ubuntu1/Ubuntu2)创建定时任务后,**手动运行一次**确认能正常发送 Telegram 通知
2. 如果遇到 "Outbound not configured for channel: telegram" 错误,重启 Gateway
   ```bash
   # Ubuntu1/Ubuntu2 重启 Gateway
   systemctl --user restart openclaw-gateway
   systemctl --user status openclaw-gateway
   ```
### 常见错误处理
| 错误信息 | 原因 | 解决方案 |
| ----------------------------------------------- | --------------------- | ---------- |
| "Outbound not configured for channel: telegram" | Gateway Telegram 连接异常 | 重启 Gateway |
| "Message failed" | Telegram API 限流或连接问题 | 分散任务执行时间 |
## 16. Last30Days 技能 (2026-03-29)
### 功能概述
搜索过去 30 天内 Reddit、X、YouTube、TikTok、Instagram、Hacker News、Polymarket 和网页上的热门内容,生成研究报告。
### 调用方式
```bash
python3 ~/.openclaw/skills/last30days-official/scripts/last30days.py "<话题>" --emit=compact --no-native-web --save-dir=~/Documents/Last30Days
```
### 常用参数
| 参数 | 说明 | 示例 |
|------|------|------|
| `--days=N` | 回溯 N 天默认30天 | `--days=7` |
| `--quick` | 快速模式8-12条/来源) | |
| `--deep` | 深度模式50-70条Reddit | |
| `--x-handle=HANDLE` | 指定 X 账号搜索 | `--x-handle=elonmusk` |
### 对比模式
```bash
# 比较两个话题
python3 ~/.openclaw/skills/last30days-official/scripts/last30days.py "cursor vs windsurf" --emit=compact --no-native-web --save-dir=~/Documents/Last30Days
```
### 输出说明
- **What I Learned** — 研究发现摘要
- **Key Patterns** — 关键模式3-5条
- **Stats** — 统计数据(各平台帖子数、点赞数等)
- **Invitation** — 根据类型推荐下一步
### 数据来源权重
| 来源 | 权重 | 说明 |
|------|------|------|
| Reddit/X | 高 | 有互动数据(点赞、评论) |
| YouTube | 高 | 有观看数和字幕 |
| TikTok/Instagram | 中 | 有观看数和标题 |
| Polymarket | 高 | 真实钱币投注,数据真实 |
| Web | 低 | 无互动数据 |
### API Keys 配置
在 `~/.openclaw/.env` 中配置:
```bash
SCRAPECREATORS_API_KEY=...   # Reddit + TikTok + Instagram必填
AUTH_TOKEN=...                 # X 搜索(推荐)
CT0=...                        # X 搜索(推荐)
XAI_API_KEY=xai-...           # X 搜索备选
```
### 保存位置
- 研究数据自动保存到:`~/Documents/Last30Days/`
- 文件名格式:`{话题}-YYYY-MM-DD.md`
### 使用场景
1. **热点追踪** — 搜索"AI一人公司"了解最新趋势
2. **工具对比** — "cursor vs windsurf" 对比两个工具
3. **人物研究** — 搜索某人的 X 账号帖子
4. **竞品分析** — 搜索竞品最新动态
5. **话题深挖** — 发现新工具、新技术
### 注意事项
- 深度研究需要 2-8 分钟
- TikTok/Instagram 需要 ScrapeCreators API key前 100 次免费)
- 建议先用 `--quick` 测试话题
## 17. gog (Google Workspace CLI) 代理配置 (2026-03-30)
### 必须走代理
gog CLI 在 Mac Mini 上直连 Google API 会超时,**必须设置代理**
```bash
HTTPS_PROXY=socks5h://127.0.0.1:10808 HTTP_PROXY=socks5h://127.0.0.1:10808 gog <command>
```
### 常用命令示例
```bash
# 日历列表(带代理)
HTTPS_PROXY=socks5h://127.0.0.1:10808 HTTP_PROXY=socks5h://127.0.0.1:10808 gog calendar list --account ishenwei@gmail.com
# 查看日历事件(带代理)
HTTPS_PROXY=socks5h://127.0.0.1:10808 HTTP_PROXY=socks5h://127.0.0.1:10808 gog calendar events --account ishenwei@gmail.com "OpenClaw" --from 2026-03-30T00:00:00+08:00 --to 2026-04-05T23:59:59+08:00 --max 50
# 删除日历事件(带代理)
HTTPS_PROXY=socks5h://127.0.0.1:10808 HTTP_PROXY=socks5h://127.0.0.1:10808 gog calendar delete --account ishenwei@gmail.com "OpenClaw" <eventId> -y
```
### 认证状态
- 已完成 OAuth 授权ishenwei@gmail.com
- Google Calendar: OpenClaw 日历cfd0ba26...@group.calendar.google.com
## 18.n8n工作流标准执行步骤
> ⚠️ n8n 已迁移到 Ubuntu2 服务器2026-03-30 更新)
> 用户可能说:"请用n8n内容转换工作流帮我转化这篇文章<文件名>"
### N8N 配置信息
- **N8N_BASE_URL**: `https://n8n.ishenwei.online`(从 Ubuntu2 `~/.openclaw/.env` 读取)
- **Webhook URL**: `https://n8n.ishenwei.online/webhook/<Webhook Path>`
### ⚠️ 执行时间与等待规范
- **执行时间**: 每次触发 webhook 后,需要等待 **4-5 分钟** 才能得到结果
- **禁止频繁请求**: 触发 webhook 后,**不要**连续发送多个请求或频繁轮询
- **正确做法**: 触发一次 → 等待 4-5 分钟 → 再检查 content-out 目录结果
- **失败标志**: 如果等了 5+ 分钟还没结果,再检查是否有问题
### 目录结构
| 用途 | MacMini 路径 | Ubuntu2 路径 |
| -------- | -------------------------------------------------------- | ------------------------------------------ |
| 源文件目录 | `/Users/weishen/Workspace/nexus/openclaw/content-queue/` | — |
| n8n 文件目录 | — | `/home/shenwei/docker/n8n/n8n_data/files/` |
| 输出目录 | `/Users/weishen/Workspace/nexus/openclaw/content-out/` | — |
### 执行步骤
#### 步骤 1复制源文件到 Ubuntu2
```bash
scp /Users/weishen/Workspace/nexus/openclaw/content-queue/<文件名> ubuntu2:/home/shenwei/docker/n8n/n8n_data/files/<文件名>
```
#### 步骤 2触发 Webhook
```bash
curl -X POST "<N8N_BASE_URL>/webhook/content-translation-v6" \
  -H "Content-Type: application/json" \
  -d '{
    "note_name": "<文件名>",
    "source_path": "/Users/weishen/Workspace/nexus/openclaw/content-queue/<文件名>",
    "output_name": "<文件名去掉后缀>"
  }'
```
#### 步骤 3等待执行完成
- 成功标志:返回 `{"ok":true}` 且 HTTP 200
- N8N 会通过 Telegram bot 发送完成通知
#### 步骤 4复制输出文件到 MacMini
```bash
scp ubuntu2:/home/shenwei/docker/n8n/n8n_data/files/<输出文件名> /Users/weishen/Workspace/nexus/openclaw/content-out/<输出文件名>
```
#### 步骤 5清理 Ubuntu2 临时文件
```bash
ssh ubuntu2 "rm /home/shenwei/docker/n8n/n8n_data/files/<输入文件名>"
ssh ubuntu2 "rm /home/shenwei/docker/n8n/n8n_data/files/<输出文件名>"
```
### n8n 工作流速查表
| 工作流 | Webhook Path | 输入文件规则 | 输出文件规则 | 通知方式 |
| ---- | ------------------------ | -------------------- | ------------------------- | -------- |
| 内容转化 | `content-translation-v6` | `content-queue/*.md` | `content-out/*_output.md` | Telegram |
## 19.Ubuntu Docker 通过 proxychains4 走代理拉取镜像 (2026-04-05)
### 问题背景
Ubuntu1/2 服务器直连 Docker Hub 的 443 端口被封,导致 `docker pull/build` 超时。Ubuntu1/2 上已安装 `proxychains4`,可用于将 Docker 的 TCP 连接通过 SOCKS5 代理转发。
### 验证 proxychains4 是否可用
```bash
ssh ubuntu1 'proxychains4 curl -s -o /dev/null -w "HTTP %{http_code}" --max-time 8 https://registry-1.docker.io/v2/'
ssh ubuntu2 'proxychains4 curl -s -o /dev/null -w "HTTP %{http_code}" --max-time 8 https://registry-1.docker.io/v2/'
# 预期输出: HTTP 401 (TCP 接通,认证失败表示通道打通)
```
### Docker pull 走代理
```bash
ssh ubuntu1 'proxychains4 docker pull <image>:<tag>'
ssh ubuntu2 'proxychains4 docker pull <image>:<tag>'
```
### Docker build 走代理
```bash
ssh ubuntu1 'proxychains4 docker build --pull=false -t <image>:<tag> <dockerfile-path>'
ssh ubuntu2 'proxychains4 docker build --pull=false -t <image>:<tag> <dockerfile-path>'
```
### 注意事项
- **SOCKS5 vs HTTP**: Xray/V2Ray 通常提供 SOCKS5 代理proxychains4 在 TCP 层转发流量,不依赖 HTTP 代理设置
- **--pull=false**: 在已有本地镜像时使用,避免 build 过程中再次拉取基础镜像(耗时且仍可能失败)
- **apt-get 不走代理**: Docker build 过程中 apt-get install 走的是直连 Debian 源,不受影响
- **Docker daemon vs client**: proxychains4 包裹的是 docker 命令,而非 dockerd 守护进程