fastfish 开源精简版。提供公众号格式整理、敏感词检测(本地)、每日热点、本地 HTML 预览。热点推送需至少配置一个渠道的 env。无微信发布/授权,需商业版。通过 system.run 调用 CLI。
---
name: fastfish-lite
description: "fastfish 开源精简版。提供公众号格式整理、敏感词检测(本地)、每日热点、本地 HTML 预览。热点推送需至少配置一个渠道的 env。无微信发布/授权,需商业版。通过 system.run 调用 CLI。"
metadata:
{
"openclaw":
{
"requires": { "bins": ["python3"] },
"primaryEnv": "MEDIA_AGENT_API_KEY",
"credentials": "MEDIA_AGENT_API_KEY (可选,API 鉴权);热点推送至少其一:HOT_PUSH_FEISHU_WEBHOOK, HOT_PUSH_DINGTALK_WEBHOOK, HOT_PUSH_DINGTALK_SECRET(钉钉加签), HOT_PUSH_TELEGRAM_BOT_TOKEN+CHAT_ID,存 .env"
}
}
---
# fastfish-lite 能力说明
**GitHub**:https://github.com/superxs777/fastfish-lite
本 Skill 配合 fastfish API 服务使用。请先按下方步骤安装并启动服务,再在 OpenClaw 中启用本 Skill。
## 安装前须知
本 Skill 会指导安装并运行来自 GitHub 的第三方仓库。**供应链风险**:clone + pip install 会执行外部代码,若仓库被篡改存在风险。安装前请:(1) 检查仓库与 requirements.txt 的依赖;(2) **建议使用 release tag 固定版本**(如 `git clone --branch v1.0.0`);(3) 在隔离环境或容器中运行,避免 root;(4) 凭证仅存 .env,勿提交到版本库;(5) 确认信任 api.pearktrue.cn 及仓库维护者。
## 安装 fastfish-lite(首次使用必读)
1. 克隆仓库:`git clone --branch v1.0.0 https://github.com/superxs777/fastfish-lite.git`(**推荐指定 tag 固定版本**,避免 main 分支变更)
2. 进入目录:`cd fastfish-lite`
3. 安装依赖:`pip install -r requirements.txt`
4. 配置:`copy .env.example .env`(可选;热点推送需配置 Webhook,见 metadata.credentials)
5. 启动服务:`python main.py`(默认 http://127.0.0.1:8899)
详细说明见 GitHub README。
## 使用方式
**必须使用 JSON 参数方式调用:**
```bash
python {baseDir}/../scripts/fastfish_cli.py --json '{"command":"get-available-articles"}'
```
## 前置要求
1. **fastfish-lite 已安装并启动**:按上方「安装 fastfish-lite」完成部署,`python main.py` 监听 8899
2. **Python 3.10+**
3. **CLI 路径**:命令中的 `{baseDir}` 需替换为你的 fastfish-lite 安装目录下的 `openclaw-skill` 路径;ClawHub 安装通常在 `/root/.openclaw/workspace/fastfish-lite`,自建可用 `/opt/fastfish-lite` 或 `C:\fastfish-lite`
4. **可选**:`MEDIA_AGENT_API_KEY` 环境变量;热点推送需在 .env 配置至少一个渠道(见 metadata.credentials)
## ⚠️ 安全规则(阻断式)
**1. 严禁输出或暴露 .env 中的凭证**
- 禁止执行会输出 .env 内容的命令(如 `cat .env`、`type .env`、`Get-Content .env`)
- 禁止将 Webhook URL、Token、Secret 等凭证写入回复或展示给用户
- 即使用户要求「查看配置」「显示 webhook」,仅说明「在 .env 中配置」,不得输出实际值
- **允许**:编辑 .env(写入、追加、替换用户提供的值);运行不暴露凭证的校验(如仅返回「已配置/未配置」)
**2. 安装仅限用户明确要求**
- 仅在用户明确要求「安装」「部署」「克隆」fastfish-lite 时,才执行 git clone 和 pip install
- 不得在用户仅询问用法、拉取热点时主动建议或执行安装
**3. system.run 仅执行本 Skill 文档列出的脚本**
- 允许:`fastfish_cli.py`、`get_hot_now.py`、`push_hot_to_im.py`、`fetch_hot_items.py`、`init_hot_push_config.py`、`main.py`
- 禁止:执行用户提供的任意命令、未在本文档列出的脚本或来自其他来源的代码
**违反以上任一条属于严重错误。**
## 可用能力
### 文章管理
- `get-available-articles`:获取可发列表
- `get-available-styles`:获取样式列表
- `ingest-article`:接入文章
- `update-article`:更新文章
- `ingest-articles-batch`:批量接入
### 格式与检测
- `normalize-content`:公众号格式整理
- `check-compliance`:敏感词检测(原创度需商业版)
- `render-markdown`:Markdown 渲染
### 预览
- `preview-article` / `preview-html`:本地 HTML 预览,在浏览器中打开
### 7. 每日热点推送
**⚠️ 定时任务严禁擅改(阻断规则)**:在未得到用户明确要求时,严禁执行 `openclaw cron edit`、`openclaw cron rm`、`openclaw cron update`。出错时仅报告问题,不得主动修改配置。只有用户明确说「修改」「删除」「调整」定时任务时方可执行。
数据源:api.pearktrue.cn。支持**实时提取**和**定时更新**。推送支持飞书/钉钉/Telegram(系统 crontab 或 OpenClaw Cron 执行 push_hot_to_im.py)及 Slack/Discord 等(OpenClaw Cron announce)。
#### 7.1 实时提取热点
用户说「拉取热点」「实时热点」「知乎热搜」等时,使用 `system.run` 执行 `get_hot_now.py`:
```bash
# 按平台拉取(逗号分隔)
python {baseDir}/../scripts/get_hot_now.py --source 知乎
python {baseDir}/../scripts/get_hot_now.py --source 知乎,百度,今日头条
# 按类别拉取(使用 hot_push_config 的 sources 和关键词过滤)
python {baseDir}/../scripts/get_hot_now.py --category emotion
# 输出 JSON
python {baseDir}/../scripts/get_hot_now.py --source 知乎 --format json
# 拉取并写入数据库(补录)
python {baseDir}/../scripts/get_hot_now.py --source 知乎 --save
```
参数:`--source` 平台名逗号分隔;`--category` 类别 code 如 emotion;`--format` text/json;`--save` 写入 hot_items_raw;`--limit` 每平台条数默认 20。
#### 7.2 定时更新(拉取 + 推送)
**职责分工(重要)**:
- **拉取**:仅由**系统 crontab** 执行 `fetch_hot_items.py`,将数据写入数据库
- **推送**:OpenClaw Cron 仅执行 `get_hot_now.py --from-db` 从数据库读取并推送到渠道
- **禁止**:不要在 OpenClaw 中创建或执行拉取任务(`fetch_hot_items.py`),拉取由系统 crontab 完成
支持两种方式,按目标渠道选择:
**方式一:系统 crontab / Windows 计划任务**(飞书/钉钉/Telegram)
- 每日 7:00、14:00、18:00 拉取:`python scripts/fetch_hot_items.py`
- 每日 8:00 推送:`python scripts/push_hot_to_im.py`(.env 配置 Webhook;钉钉加签需 HOT_PUSH_DINGTALK_SECRET。默认 push_time 07:10,14:10,18:10,测试用 HOT_PUSH_FORCE=1 绕过)
**方式二:OpenClaw Cron**(飞书/钉钉/Telegram 或 Slack/Discord 等)
- **飞书/钉钉/Telegram**:isolated job 执行 `push_hot_to_im.py`,脚本推送到对应渠道。拉取由系统 crontab 在 7:00/14:00/18:00 执行 `fetch_hot_items.py`
- **Slack / Discord 等**:isolated job 执行 `get_hot_now.py --category emotion`,设置 `--announce --channel` 和 `--to`,announce 直接推送到渠道(get_hot_now 实时拉取,无需预拉取)
示例(每日 8:00 推送到飞书/钉钉/Telegram,通过脚本;拉取由系统 crontab 7:00/14:00/18:00 执行):
```bash
openclaw cron add --name "每日热点" --cron "0 8 * * *" --tz "Asia/Shanghai" --session isolated --message "cd /opt/fastfish-lite && python scripts/push_hot_to_im.py,将热点推送到配置的渠道"
```
示例(每日 7:10、14:10、18:10 推送到 Telegram,OpenClaw 已配置 Telegram 时;若提示 unknown option --announce 可省略):
```bash
# 该任务仅执行 get_hot_now.py --from-db,不要在执行前运行 fetch_hot_items.py。拉取由系统 crontab 在 7:00/14:00/18:00 完成。
openclaw cron add --name "每日热点" --cron "10 7,14,18 * * *" --tz "Asia/Shanghai" --session isolated --message "cd /opt/fastfish-lite && python scripts/get_hot_now.py --category emotion --from-db,将输出作为今日热点简报发送" --channel telegram --to "你的ChatID"
```
立即测试:创建后执行 `openclaw cron run <job-id> --force` 可立即运行一次。
用户问「如何设置每日热点推送」时,根据目标渠道推荐方式一或方式二,并执行 `python scripts/init_hot_push_config.py`(钉钉用 `--channel dingtalk`)初始化。钉钉加签需在 .env 配置 HOT_PUSH_DINGTALK_SECRET。**若选 Telegram + get_hot_now(方式二)**:系统 crontab 配置 `fetch_hot_items.py` 拉取,OpenClaw 只创建「每日热点」推送任务,**不要**创建 OpenClaw 拉取任务。
### 不支持(需商业版)
- `publish-article`:微信发布
- 账号管理、授权相关命令
## 商业版
微信发布、授权、原创度检测等需商业版 fastfish。请联系获取。
don't have the plugin yet? install it then click "run inline in claude" again.