Skill flagged — suspicious patterns detected

ClawHub Security flagged this skill as suspicious. Review the scan results before using.

WeWe RSS 文章读取

v1.0.0

读取指定微信公众号文章列表或正文,需本地WeWe RSS服务运行并支持文章内容HTML解析为纯文本。

0· 74·0 current·0 all-time
byKai@agasding

Install

OpenClaw Prompt Flow

Install with OpenClaw

Best for remote or guided setup. Copy the exact prompt, then paste it into OpenClaw for agasding/wewe-rss-articles.

Previewing Install & Setup.
Prompt PreviewInstall & Setup
Install the skill "WeWe RSS 文章读取" (agasding/wewe-rss-articles) from ClawHub.
Skill page: https://clawhub.ai/agasding/wewe-rss-articles
Keep the work scoped to this skill only.
After install, inspect the skill metadata and help me finish setup.
Use only the metadata you can verify from ClawHub; do not invent missing requirements.
Ask before making any broader environment changes.

Command Line

CLI Commands

Use the direct CLI path if you want to install manually and keep every step visible.

OpenClaw CLI

Bare skill slug

openclaw skills install wewe-rss-articles

ClawHub CLI

Package manager switcher

npx clawhub@latest install wewe-rss-articles
Security Scan
VirusTotalVirusTotal
Benign
View report →
OpenClawOpenClaw
Suspicious
medium confidence
Purpose & Capability
The skill claims to read WeChat public account article lists and content from a local WeWe RSS service and a local sqlite DB; requiring local service and DB access is coherent with that purpose. However the SKILL.md expects specific project paths under ~/.openclaw/workspace and a tools config file, which the registry metadata did not declare — this assumption about local workspace layout should be confirmed.
!
Instruction Scope
The runtime instructions explicitly tell the agent to inspect local files (tools\wewe-rss-config.txt, ~/.openclaw/workspace paths), open a sqlite DB, run netstat, and call a deploy skill. They also reference reading .env AUTH_CODE if API returns 401. Those file reads and DB queries are beyond simple remote API calls and will access local data; the skill did not declare it would read .env or local DB files. The instructions also mix Windows-style and POSIX paths and use platform-specific commands (PowerShell netstat), which is inconsistent and could cause unexpected behavior on some hosts.
Install Mechanism
This is instruction-only with no install spec or code to download, so it does not perform any automatic installations. That reduces supply-chain risk, though it relies on an external local service (wewe-rss) which may itself require installation (via the separate wewe-rss-deploy skill).
!
Credentials
The skill declares no required environment variables but the documentation references an AUTH_CODE in a .env and uses ~/.openclaw workspace files. Accessing a .env or other local config with credentials is disproportionate without explicit declaration. The skill may read local secrets (AUTH_CODE) and a local sqlite DB; the registry should list any required credentials or config paths.
Persistence & Privilege
always is false and the skill does not request elevated or persistent platform-wide privileges. It does instruct invoking another skill (wewe-rss-deploy) to install the service if missing, which is normal but means you should also review that deploy skill before allowing autonomous actions.
What to consider before installing
This skill is mostly what it says — it expects a local WeWe RSS service and will read local workspace files and a sqlite DB. Before installing: (1) confirm you run/trust the local http://localhost:4000 WeWe RSS service and understand where its DB resides, (2) ensure you have no sensitive secrets (AUTH_CODE or others) in ~/.openclaw/workspace or a .env that you don't want read, (3) review the separate wewe-rss-deploy skill before allowing deployment, and (4) be aware the SKILL.md mixes Windows and POSIX paths and uses netstat; test in a safe environment first. If possible, ask the publisher to declare required config paths and any env vars (like AUTH_CODE) in the registry metadata.

Like a lobster shell, security has layers — review code before you run it.

latestvk976wq8967ttwscax7np6xya1d8434wp
74downloads
0stars
1versions
Updated 3w ago
v1.0.0
MIT-0

SKILL.md - 读取微信公众号文章

触发条件

用户要求读取某个公众号的文章列表,或读取某篇文章的正文内容时激活。

前置条件

WeWe RSS 服务必须已部署并运行在 http://localhost:4000

  • 如果服务未运行或未部署 → 调用 wewe-rss-deploy Skill 进行部署
  • 部署完成后继续执行以下流程

工作流程

Step 1:获取配置路径

读取工作目录下的 tools\wewe-rss-config.txt 获取项目路径:

  • 如果文件不存在,使用默认路径:~/.openclaw/workspace/wewe-rss-main

Step 2:检查服务是否运行

netstat -ano | Select-String ":4000"
  • 如果无响应 → 调用 wewe-rss-deploy Skill

Step 3:获取公众号 mp_id

方式 A:通过公众号名称查询数据库

数据库路径:{WEWE_RSS_PATH}/apps/server/data/wewe-rss.db

import sqlite3
import os

# 读取项目路径配置
config_path = os.path.expanduser("~/.openclaw/workspace/tools/wewe-rss-config.txt")
if os.path.exists(config_path):
    with open(config_path) as f:
        wewe_rss_path = f.read().strip()
else:
    wewe_rss_path = os.path.expanduser("~/.openclaw/workspace/wewe-rss-main")

db_path = os.path.join(wewe_rss_path, "apps/server/data/wewe-rss.db")

conn = sqlite3.connect(db_path)
cursor = conn.cursor()

# 查找公众号 mp_id
cursor.execute("SELECT mp_id, nickname FROM feeds WHERE nickname LIKE ?", (f'%{公众号名称}%',))
result = cursor.fetchone()
mp_id = result[0] if result else None

方式 B:通过文章链接提取 __biz

从微信文章链接提取 __biz 参数,然后查数据库:

文章链接格式:https://mp.weixin.qq.com/s/xxxxxxxxx
__biz 参数:链接中 ?__biz=MTI0OTk2xxx
# 查询数据库获取 mp_id
cursor.execute("SELECT mp_id FROM feeds WHERE mp_id LIKE ?", (f'%{biz_str}%',))

Step 4:调用 API 获取文章列表

GET http://localhost:4000/feeds/{mp_id}.json?limit=10

请求参数:

参数类型说明
mp_idstring公众号 ID,如 MP_WXS_3223096120
limitint返回文章数量,默认 10
updatebool是否强制从微信读书更新

响应格式:

[
  {
    "content": "<article HTML content>",
    "url": "https://mp.weixin.qq.com/s/iBCNkORwkff3PL1EZD3zqw",
    "title": "文章标题",
    "image": "https://mmbiz.qpic.cn/...",
    "date_modified": "2026-04-02T02:20:36.000Z"
  }
]

curl 示例(跨平台):

curl -s "http://localhost:4000/feeds/${mp_id}.json?limit=5" --max-time 15

Step 5:解析正文内容

content 字段是完整 HTML,提取纯文本:

from html.parser import HTMLParser

class TextExtractor(HTMLParser):
    def __init__(self):
        super().__init__()
        self.text = []
        self.skip_tags = {'script', 'style', 'nav', 'footer', 'header', 'aside'}
        self.current_tag = None
    
    def handle_starttag(self, tag, attrs):
        self.current_tag = tag
        if tag in self.skip_tags:
            return
        if tag == 'p':
            self.text.append('\n')
    
    def handle_data(self, data):
        if self.current_tag not in self.skip_tags:
            text = data.strip()
            if text:
                self.text.append(text)
    
    def get_text(self):
        return '\n'.join(self.text)

# 使用
extractor = TextExtractor()
extractor.feed(html_content)
article_text = extractor.get_text()

数据库信息

表名字段说明
feedsmp_id, nickname, description公众号信息
articlesid, mp_id, title, url, publish_time文章元数据

完整调用示例

import sqlite3
import subprocess
import json
import os
from html.parser import HTMLParser

# 1. 检查服务是否运行
result = subprocess.run(['netstat', '-ano'], capture_output=True, text=True)
if ':4000' not in result.stdout:
    # CALL: wewe-rss-deploy
    pass

# 2. 获取项目路径
config_path = os.path.expanduser("~/.openclaw/workspace/tools/wewe-rss-config.txt")
if os.path.exists(config_path):
    with open(config_path) as f:
        wewe_rss_path = f.read().strip()
else:
    wewe_rss_path = os.path.expanduser("~/.openclaw/workspace/wewe-rss-main")

db_path = os.path.join(wewe_rss_path, "apps/server/data/wewe-rss.db")

# 3. 获取 mp_id
conn = sqlite3.connect(db_path)
cursor = conn.cursor()
cursor.execute("SELECT mp_id FROM feeds WHERE nickname LIKE ?", ('%数字生命卡兹克%',))
mp_id = cursor.fetchone()[0]

# 4. 获取文章列表
import urllib.request
url = f"http://localhost:4000/feeds/{mp_id}.json?limit=3"
with urllib.request.urlopen(url, timeout=15) as response:
    articles = json.loads(response.read().decode('utf-8'))

# 5. 提取第一篇文章正文
first = articles[0]
article_title = first['title']
article_url = first['url']
article_content = first['content']

# 6. 解析纯文本
extractor = TextExtractor()
extractor.feed(article_content)
article_text = extractor.get_text()

print(f"标题: {article_title}")
print(f"链接: {article_url}")
print(f"正文(前500字): {article_text[:500]}")

注意事项

  1. 服务地址:默认 http://localhost:4000
  2. 首次使用:需要先在 Web UI 登录微信读书账号并订阅公众号
  3. 更新频率:微信读书有频率限制,频繁更新可能被限流
  4. AUTH_CODE:如果 API 返回 401,检查 .env 中的 AUTH_CODE 配置

错误处理

错误原因处理方式
netstat :4000 无结果服务未运行调用 wewe-rss-deploy Skill
数据库为空未添加账号/订阅提示用户在 Web UI 中配置
API 返回 401需要 AUTH_CODE.env 中获取 AUTH_CODE
content 为空文章未缓存添加 update=true 参数强制更新
mp_id 为空公众号未订阅提示用户先订阅公众号

Comments

Loading comments...