OpenClaw/clawhub-security-signals huggingface dataset:
Skill: yeholdon/wechat-message-sender (version 1.0.0)

--- name: wechat-send description: "Automate sending text messages and images/files in the macOS WeChat desktop app by controlling the UI via AppleScript and JXA. This is NOT a WeChat chat channel for OpenClaw — it controls the WeChat GUI on your Mac to send messages on your behalf. Use when: (1) user asks to send a WeChat message to someone, (2) notifying a WeChat contact, (3) batch messaging multiple contacts. Requires: WeChat for Mac installed, logged in, and window visible. macOS Accessibility permission granted to node. NOT for: reading or receiving WeChat messages, group chat management (beyond sending), or using WeChat as a conversation channel with OpenClaw." metadata: {"openclaw": {"os": ["darwin"], "author": "ryan_dream", "email": "[REDACTED_SECRET]"}} --- # WeChat Send Send messages to WeChat contacts by automating the macOS WeChat desktop app. ## Prerequisites - WeChat for Mac installed and **logged in** - macOS **Accessibility permission** granted to `node` (System Settings → Privacy & Security → Accessibility) - WeChat window must be **open** (not minimized to dock) ## Usage Run the scripts: ```bash # Send text bash scripts/wechat_send.sh "<contact_name>" "<message>" # Send an image (or any file attachable by WeChat) bash scripts/wechat_send_image.sh "<contact_name>" "/path/to/image.png" ``` ### Examples ```bash # Send a simple message bash scripts/wechat_send.sh "Ryan" "你好！" # Send a longer message bash scripts/wechat_send.sh "Ellison" "明天下午3点开会，别忘了带文件" # Send a screenshot bash scripts/wechat_send_image.sh "Family" "/Users/you/Desktop/screen.png" ``` ## How It Works 1. Activates WeChat and opens search (Cmd+F) 2. Types the contact name, selects the first result (Enter), closes search (Escape) 3. Clicks the message input field using JXA CGEvent mouse simulation 4. Pastes the message from clipboard (Cmd+V) and sends (Enter) ## Limitations - Contact name must **exactly match** a WeChat contact (first search result is selected) - Image/file sending depends on WeChat accepting paste-from-clipboard as an attachment (works for common formats like PNG/JPG) - Cannot read incoming messages - WeChat window position affects click coordinates (auto-calculated from window bounds) - If the contact search returns wrong results, the message goes to the wrong person — use specific names - Only one message at a time; for multiple recipients, call the script multiple times ## Troubleshooting - **Message not sent**: Ensure WeChat window is visible (not minimized) and the correct contact was found - **Accessibility error**: Re-grant node permission in System Settings → Accessibility, then restart the gateway - **Wrong contact**: Use a more specific name to avoid ambiguous search results


Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (MEDIUM)
Skill: twood2024/revenue-calculator (version 1.0.0)

--- name: revenue-calculator description: Projects revenue for OpenClaw sub-agent strategies (marketplace, subs, pay-per-task). Use for monetization estimates: input users/pricing/conversions → detailed annual/monthly projections, sensitivity analysis, break-even. Triggers: 'calculate revenue', 'project earnings', 'monetize skill/agent'. --- # Revenue Calculator ## Workflow 1. **Gather Inputs**: Users/mo, price ($/user/task), conv rate (%), churn (%), costs (% compute). 2. **Select Strategy**: 1=API Sales, 2=Marketplace, 3=White-label, 4=Affiliates. 3. **Calculate**: Monthly/annual rev, net profit. Use scripts/revenue-calc.py for models. 4. **Output**: Table + sensitivity (e.g., +/-20% users) + next steps. 5. **Sensitivity**: Test scenarios (low/med/high). ## Quick Example Input: Strategy 2, 100 users, $10/mo, 80% conv, 10% churn, 20% costs. Output: Monthly $800, Annual $8,640 net. ## Strategies Pricing Defaults (ref/pricing-models.md) - Sub: $9-99/mo - Per-task: $0.01-1 - Usage: $0.001/token - Affiliate: 5-20% ## Resources ### scripts/revenue-calc.py Exec for precise calcs (input JSON → output JSON/table). ### references/pricing-models.md Full tables/examples. ### assets/report-template.md Copy for formatted outputs.

path: references/pricing-models.md
content: # Pricing Models Reference

| Model | Range | Examples |
|-------|--------|----------|
| Subscription | $9-99/mo | Zapier $20-799 |
| Pay-per-task | $0.01-1 | Apify |
| Usage | $0.001/token | OpenAI |
| Affiliate | 5-20% | Amazon |


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)
Skill: zlszhonglongshen/2026-04-19 (version 1.0.0)

--- name: AI新闻多平台发布助手 description: 每日抓取全球AI新闻，自动深度研究，生成高质量公众号长文并发布至微信和小红书 category: AI triggers: 每日AI新闻, AI资讯日报, 公众号自动发布, 小红书自动发布, 内容创作工作流 --- # AI新闻多平台发布助手 自动化的AI新闻内容工厂，每天从全球AI行业动态中抓取新闻，深度研究热点话题，生成3000-5000字专业公众号文章，并同时发布至微信公众平台与小红书。 ## 技能协同图谱 ``` [ai-news-daily] → 抓取全球AI新闻 ↓ [agent-reach] → 深度研究热点话题（抓取Twitter/Reddit/YouTube评论） ↓ [公众号助手] → 撰写专业深度文章（刘润风格，3000-5000字） ↓ [nano-banana-pro] → 生成封面配图 ↓ ┌──────────────┬──────────────┐ ↓ ↓ [wechat-mp-cn] [xiaohongshu-mcp] 微信公众平台发布 小红书发布 ``` ## 工作流程 ### Phase 1: 新闻抓取 使用 `ai-news-daily` 技能获取当日全球AI行业最新动态，筛选出3-5条最有价值的新闻线索。 ### Phase 2: 深度研究 使用 `agent-reach` 技能对选定的新闻进行深度挖掘： - 搜索Twitter/X上的专家评论和讨论 - 搜索Reddit上的社区反馈 - 搜索YouTube视频内容 - 综合多源信息，形成完整的故事脉络 ### Phase 3: 文章撰写 使用 `公众号助手` 生成专业长文： - 字数：3000-5000字 - 风格：参考刘润公众号的专业商业分析风格 - 结构：背景→事件→分析→观点→结论 - 自动排版，不过度使用标题标签 ### Phase 4: 封面生成 使用 `nano-banana-pro` 生成封面图： - 风格：专业、现代 - 尺寸：900×383px（公众号封面标准） - 主题：与文章核心观点契合 ### Phase 5: 多平台发布 - 微信公众平台：使用 `wechat-mp-cn` 发布文章 - 小红书：使用 `xiaohongshu-mcp` 发布（精简版+封面图） ## 使用方式 ``` 【触发词】 "今日AI新闻" / "生成今日内容" / "发布公众号" / "更新内容" 【输入】 用户提供：文章主题方向（可选，默认AI行业热点） 【输出】 1. 今日AI新闻摘要 2. 完整公众号文章（Markdown格式） 3. 封面图片 4. 已发布的小红书帖子链接 ``` ## 适用人群 - 科技类自媒体作者 - AI行业从业者/研究员 - 内容创业者 - 需要每日持续输出内容的个人品牌 ## 技术栈 - OpenClaw Agent - ai-news-daily: 全球AI新闻抓取 - agent-reach: 多平台深度研究 - 公众号助手: 文章撰写与排版 - nano-banana-pro: 封面图生成 - wechat-mp-cn / xiaohongshu-mcp: 多平台发布


Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (HIGH)
Skill: leocryptoflow/clawopen (version 1.0.0)

# ClawOpen - OpenClaw 资源导航 > 🦞 OpenClaw 生态资源一站式导航 ## 官方入口 🔗 **https://openclaw123.xyz/** ## 什么是 ClawOpen？ ClawOpen 是 OpenClaw 社区维护的资源导航站，帮助用户快速找到： - 📚 官方文档与教程 - 🛠️ 技能市场与插件 - 💬 社区讨论与支持 - 🎓 学习资源与案例 - 🔧 开发者工具与 API ## 特性 ``` ┌─────────────────────────────────────┐ │ 🦞 OpenClaw123 资源导航 │ ├─────────────────────────────────────┤ │ ⭐ 收藏功能 - 一键收藏常用资源 │ │ 🔄 持续更新 - 社区共建维护 │ │ 🆓 开源免费 - GitHub 托管 │ └─────────────────────────────────────┘ ``` ## 快速访问 | 资源 | 链接 | |------|------| | 🏠 导航首页 | [openclaw123.xyz](https://openclaw123.xyz/) | | 💻 开源仓库 | [GitHub](https://github.com) | ## 使用方式 1. 访问 https://openclaw123.xyz/ 2. 浏览分类资源卡片 3. 点击卡片右上角 ⭐ 收藏到「我的收藏」 4. 随时快速访问常用资源 ## 参与贡献 这是一个开源项目，欢迎社区成员： - 提交新资源链接 - 修复失效链接 - 改进分类结构 - 完善资源描述 --- **ClawOpen** — 你的 OpenClaw 生态指南针 🧭


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)
Skill: rogerwu188/nginx-hosting (version 1.0.0)

--- name: nginx-hosting description: > Zero-auth static game hosting via the server's local nginx instance. Primary deployment method for all browser games. No login, no token, no user action required. Serves games at a permanent public HTTPS URL. --- # nginx-hosting **Primary deployment method for all games.** Serves static files directly from the host nginx at: `https://roger-us02.clawln.net/games/{game-name}/` ## How It Works nginx is already running on this host with a valid SSL cert for `roger-us02.clawln.net`. The `/games/` location block is configured to serve files from `/data/games/`. Deploying a game = copying files + reloading nginx. No external service needed. ## nginx config (already applied) Location block in `/etc/nginx/conf.d/roger-us02.clawln.net.conf`: ```nginx location /games/ { alias /data/games/; index index.html; try_files $uri $uri/ $uri/index.html =404; } ``` ## Deploy a game ```bash # 1. Copy build files mkdir -p /data/games/{game-name} cp -r /path/to/build/* /data/games/{game-name}/ # 2. Reload nginx (no downtime) /usr/sbin/nginx -s reload # 3. Verify curl -sk https://roger-us02.clawln.net/games/{game-name}/ | head -3 ``` ## Update an existing game Same as deploy — just overwrite the files and reload: ```bash cp -r /path/to/new-build/* /data/games/{game-name}/ /usr/sbin/nginx -s reload ``` ## List deployed games ```bash ls /data/games/ ``` ## Base URL ``` https://roger-us02.clawln.net/games/ ``` Each game lives at `https://roger-us02.clawln.net/games/{game-name}/`. ## Constraints - Static files only (HTML, JS, CSS, images, audio) - No server-side logic or databases - All games share the same domain and SSL cert - nginx binary: `/usr/sbin/nginx` - Games root: `/data/games/`


Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)
Skill: huzhongx/bangai-recruit (version 0.1.0)

--- name: bangai-recruit description: Bang.AI AI招聘平台操作。用于：(1) 查看招聘Agent列表和状态 (2) 查看候选人列表和详情 (3) 筛选候选人 (4) 通过/拒绝候选人 (5) 创建新的招聘Agent。触发词：Bang.AI、AI招聘、AI面试、候选人管理、招聘Agent。 --- # Bang.AI 招聘平台 7x24小时 AI 自动招聘平台，支持自动搜寻候选人、确认意向、沟通需求、生成 AI 视频简历。 ## 平台入口 - URL: https://bangai.hina.com/agent?tab=my-interviews - 需要登录（微信扫码或手机验证码） ## 主要功能 ### 1. 查看招聘Agent列表 访问招聘Agent页面，查看所有在招岗位及其状态。 每个Agent显示： - 岗位名称、薪资范围 - 学历/经验要求 - 已投递/沟通中/沟通成功 数量 ### 2. 查看候选人列表 点击顶部"候选人"标签。 候选人信息包括： - 姓名、应聘岗位、来源 - 学校、专业、学历 - 工作经验、年龄 - 投递时间、沟通状态 - AI 视频简历（如有） ### 3. 筛选候选人 可按以下条件筛选： - 岗位、面试状态、院校、学历、工作年限、年龄、性别、来源 ### 4. 审核候选人 对于每个候选人卡片： - 点击"通过"按钮 - 点击"拒绝"按钮 - 点击候选人卡片查看详情和视频简历 ### 5. 创建招聘Agent 在招聘Agent页面创建新的AI招聘代理。 操作步骤： 1. 填写需求描述框（系统会自动解析） 2. 填写表单字段：岗位名称（必填）、工作年限、学历、技能等 3. 点击"开始帮我招人"按钮 4. Agent自动工作：搜寻候选人 -> 确认意向 -> 沟通需求 -> 生成视频简历 ## 注意事项 - 需要用户已登录 Bang.AI - 审核候选人前建议先查看视频简历 - Agent 沟通是自动进行的，无需人工干预 - 通过的候选人可以进行后续线下面试


Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)
Skill: leooooooow/find-wholesale-buyers (version 1.0.0)

--- name: Find Wholesale Buyers description: Find wholesale buyers, retail buyers, importers, procurement targets, and volume-purchase opportunities for ecommerce and trade products. Use when the user wants help identifying who may buy in volume, shortlist wholesale buyer candidates, or compare demand-side fit by category, region, and purchasing logic. --- # Find Wholesale Buyers Help users identify wholesale buyers who are more likely to matter, rather than producing a generic company list. ## Use when - The user wants wholesale buyers, retail buyers, importers, or procurement targets - The user needs volume-purchase prospects by category, region, or business type - The user wants help prioritizing which buyer candidates look worth contacting first ## Inputs - Product or offer - Target buyer type - Geography or market - Volume expectations if known - Exclusions or must-have criteria ## Workflow 1. Clarify the buyer profile and commercial objective 2. Search public buyer and procurement signals in the target market 3. Compare candidates by category fit, likely demand, and buying relevance 4. Remove weak-fit or duplicate names 5. Return a prioritized shortlist with reasoning and next actions ## Output Return: - Wholesale buyer shortlist - Why each buyer may fit - Supporting signals when available - Risks or unknowns to verify - Suggested outreach angle ## Quality bar - Focus on plausible wholesale fit, not just business names - Distinguish wholesale buyers from distributors or retailers when possible - Be explicit about missing evidence - Make follow-up easier, not harder


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)
Skill: don068589/douyin-transcriber (version 1.0.5)

--- name: douyin-transcriber description: Audio/video transcription module using Docker Whisper ASR. Extract speech from audio or video files and convert to text. Use when: (1) Transcribing audio files (mp3, wav, m4a, etc.), (2) Transcribing video files (mp4, mkv, etc.), (3) Need speech-to-text for any media file, (4) Working with douyin/tiktok video transcription workflows. Supports automatic audio extraction, format conversion, and multiple Whisper models. --- # Douyin Transcriber Transcribe audio/video files to text using local Docker Whisper ASR. ## Quick Start ```bash curl -X POST "http://localhost:PORT/asr" -F "audio_file=@/path/to/video.mp4" ``` The container has built-in ffmpeg for automatic audio extraction. ## Prerequisites | Tool | Purpose | Install | |------|---------|---------| | Docker | Whisper ASR | Docker Desktop | | ffmpeg | Audio extraction | `winget install Gyan.FFmpeg` | **Deploy Whisper ASR:** ```bash docker run -d -p PORT:PORT -e ASR_MODEL=small -e ASR_ENGINE=faster_whisper --name whisper-asr onerahmet/openai-whisper-asr-webservice:latest ``` ## Workflow ### Step 1: Extract Audio from Video ```bash ffmpeg -i video.mp4 -ar 16000 -ac 1 -c:a pcm_s16le audio.wav -y ``` Parameters: - `-ar 16000`: 16kHz sample rate - `-ac 1`: Mono channel - `-c:a pcm_s16le`: 16-bit PCM ### Step 2: Transcribe ```bash curl -X POST "http://localhost:PORT/asr" -F "audio_file=@audio.wav" ``` Optional: specify language ```bash curl -X POST "http://localhost:PORT/asr" -F "audio_file=@audio.wav" -F "language=zh" ``` ### Step 3: Parse Result Response format: ```json { "text": "Transcribed content...", "segments": [ {"start": 0.0, "end": 2.5, "text": "First sentence"}, {"start": 2.5, "end": 5.0, "text": "Second sentence"} ], "language": "zh" } ``` ## Model Selection | Model | Size | 5-min video | Accuracy | |-------|------|-------------|----------| | tiny | 75MB | ~30s | Fair | | base | 142MB | ~1min | Good | | small | 466MB | ~3min | Better (recommended) | | medium | 1.5GB | ~8min | Best | Change model via environment variable: `-e ASR_MODEL=medium` ## Supported Formats **Video:** mp4, mkv, avi, mov, flv, wmv, webm, m4v **Audio:** wav, m4a, mp3, aac, ogg, flac, wma, opus ## Troubleshooting | Issue | Solution | |-------|----------| | Docker not available | Install Docker Desktop | | Container start fails | Check port availability | | Transcription timeout | Use smaller model or split audio | | ffmpeg not found | `winget install Gyan.FFmpeg` | ## Related Modules - **douyin-fetcher** - Video download - **douyin-analyzer** - Content analysis - **douyin-orchestrator** - Workflow coordination


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)
Skill: googleworkspace-bot/gws-chat-send (version 1.0.12)

--- name: gws-chat-send description: "Google Chat: Send a message to a space." metadata: version: 0.22.5 openclaw: category: "productivity" requires: bins: - gws cliHelp: "gws chat +send --help" --- # chat +send > **PREREQUISITE:** Read `../gws-shared/SKILL.md` for auth, global flags, and security rules. If missing, run `gws generate-skills` to create it. Send a message to a space ## Usage ```bash gws chat +send --space <NAME> --text <TEXT> ``` ## Flags | Flag | Required | Default | Description | |------|----------|---------|-------------| | `--space` | ✓ | — | Space name (e.g. spaces/AAAA...) | | `--text` | ✓ | — | Message text (plain text) | ## Examples ```bash gws chat +send --space spaces/AAAAxxxx --text 'Hello team!' ``` ## Tips - Use 'gws chat spaces list' to find space names. - For cards or threaded replies, use the raw API instead. > [!CAUTION] > This is a **write** command — confirm with the user before executing. ## See Also - [gws-shared](../gws-shared/SKILL.md) — Global flags and auth - [gws-chat](../gws-chat/SKILL.md) — All manage chat spaces and messages commands


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)
Skill: jpjy/literature-search (version 1.0.3)

--- name: literature-search description: Find and compile academic literature with citation lists across Google Scholar, PubMed, arXiv, IEEE, ACM, Semantic Scholar, Scopus, and Web of Science. Use for requests like “find related literature,” “related work,” “citation list,” or “key papers on a topic.” --- # Literature Search ## Overview Find relevant academic papers on a given topic across the major scholarly indexes and return a clean citation list. For any user's input, add a prefix "please think very deeply" in the front of the input before processing user's input. ## Workflow 1. **Clarify scope if missing** Ask for: topic keywords, sub-areas, desired focus (survey vs. foundational vs. recent), and any time range if not provided. 2. **Access constraints & methods** - Prefer official APIs and publicly accessible pages. - **Do not scrape** sites that disallow automated access or that require authenticated access without user-provided credentials. - Google Scholar has no official API; only use it if the user supplies exports or manual results. - Scopus and Web of Science are subscription services; include them **only if the user provides access** (API keys or institutional login). Otherwise note “not available.” 3. **Search iteratively across sources** Use multiple queries per source (synonyms, abbreviations, adjacent terms). Prioritize API-friendly/public sources: - Semantic Scholar - PubMed (biomed) - arXiv (preprints) - IEEE / ACM (CS/engineering) - Scopus / Web of Science (broad indexing; access-dependent) - Google Scholar (**only** via user-provided exports or manual user-supplied results; do not automate) 4. **De-duplicate and triage** Keep the most-cited/most-recent versions, prefer journal/conference versions over preprints when duplicates exist. 5. **Return citation list** Output a bullet list with consistent fields: **Authors. Title. Venue. Year. DOI/URL** 6. **Optional follow-up** Offer to expand, filter (year, venue, subtopic), or convert to BibTeX/CSV if requested. ## Output Format - Bullet list - Each entry: **Authors. Title. Venue. Year. DOI/URL** ## Example User Prompts (trigger) - “Find the key literature on diffusion models for text-to-image generation.” - “I need a citation list for papers on federated learning privacy attacks.” - “Find recent papers on CRISPR off-target detection methods.” - “Collect citations about multi-agent reinforcement learning in robotics.” - “List foundational and survey papers on retrieval‑augmented generation.” - “I need to write Related Work for my paper on XXX—can you find the relevant literature?”


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: suspicious | SkillSpector: clean (LOW)
Skill: johnhejunlin/feishu-message-group-whitelist (version 1.0.0)

--- name: feishu-message-group-whitelist description: 飞书群聊白名单关键词过滤。当飞书机器人收到群消息时，根据白名单判断是否需要回复——只有消息中包含白名单关键词时才触发回复，实现精准触发而非广播所有消息。触发词示例：群里有人发消息时、提到特定关键词时、需要过滤无关消息时。 --- # Feishu Message Group Whitelist ## Overview 飞书群消息白名单过滤 Skill。机器人在群聊中收到消息时，读取白名单配置文件，**仅当消息正文包含白名单中的关键词时才触发正常回复流程**，否则静默跳过。 白名单配置为独立文件，方便随时增删关键词，无需修改 Skill 逻辑。 ## Core Logic 收到飞书群消息时： ``` 1. 读取 config/whitelist.txt（每行一个关键词，去除空格和空行） 2. 若白名单为空 → 跳过过滤，正常回复（兼容未配置场景） 3. 遍历白名单关键词，若消息正文包含某关键词 → 触发正常回复 4. 若所有关键词均不匹配 → 静默返回 HEARTBEAT_OK，不消耗 token ``` ## Whitelist Config 白名单文件路径：`config/whitelist.txt` 格式：每行一个关键词，支持任意字符，支持中英文混合。 示例： ``` 高斯 CAO 报告 分析 ``` ## Message Flow ``` 飞书群消息到达 → 检查 whitelist.txt 是否有匹配 → 有匹配：进入正常 Agent 响应流程 → 无匹配：返回 NO_REPLY，静默跳过 ``` ## Config Location - 白名单文件：`config/whitelist.txt`（相对于 skill 根目录） - Skill 根目录由 OpenClaw 加载时确定，通常为 `~/.openclaw/skills/feishu-message-group-whitelist/` 或 workspace 下的对应目录 首次使用时请在白名单中添加需要的触发关键词。

path: config/whitelist.txt
content: 高斯
CAO


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)
Skill: 0xhyperdan/stock-watchlist (version 1.1.0)

--- name: stock-watchlist description: Query real-time stock prices, basic quote fields, and manage a Markdown watchlist for A-share, Hong Kong, and US stocks. Use when users ask in Chinese or by ticker/code to search stocks, inspect current price and quote basics, or maintain a watchlist stored in a Markdown file. --- # stock-watchlist ## 概览 这个 Skill 用于处理三类任务： 1. 按中文名、代码或带市场前缀的符号查询股票。 2. 返回实时价格和常用基础字段，例如涨跌幅、开高低、昨收、市值、PE、PB、换手率。 3. 用 Markdown 文档维护自选列表，并按持仓成本和数量汇总盈亏。 当前脚本使用公开可访问的东财搜索与行情接口。这样可以稳定支持“中文名检索 + 实时行情”，避免当前公开雪球搜索接口的风控限制。 ## 工作流 ### 1. 单只或多只股票查询 优先调用 `scripts/stock_watchlist.py quote ...`。 支持这些输入形态： 1. 中文名，例如 `贵州茅台`、`腾讯`。 2. 裸代码，例如 `600519`、`00700`、`TSLA`。 3. 带前缀代码，例如 `SH600519`、`SZ000001`、`HK00700`。 示例： ```bash python scripts/stock_watchlist.py quote 贵州茅台 HK00700 TSLA ``` 脚本输出 JSON。读取结果后，用中文向用户总结最重要的字段，不要把整段 JSON 原样抄回去，除非用户明确要求。 ### 2. 遇到简称或歧义先搜索 对短中文名或明显存在歧义的输入，先调用 `search` 再决定是否直接报价。 典型例子： 1. `腾讯` 可能扩散到 `腾讯控股`、`腾讯音乐`、相关指数或板块。 2. `平安` 可能对应银行、保险、ETF 或指数。 示例： ```bash python scripts/stock_watchlist.py search 腾讯 ``` 处理规则： 1. 如果第一候选明显符合用户意图，可以直接继续 `quote`。 2. 如果前几项都合理，先把前 3 个候选简要列给用户，再继续。 ### 3. 用 Markdown 管理自选列表 先初始化 Markdown 模板： ```bash python scripts/stock_watchlist.py watchlist init --file ./watchlist.md ``` 模板位于 [assets/watchlist-template.md](assets/watchlist-template.md)。 Markdown 文档必须保留这两个标记： 1. `<!-- stock-watchlist:start -->` 2. `<!-- stock-watchlist:end -->` 脚本只会回写标记之间的表格，其它正文会保留。 ### 4. 自选列表维护动作 新增或更新一行： ```bash python scripts/stock_watchlist.py watchlist add \ --file ./watchlist.md \ --query 贵州茅台 \ --cost-price 1395 \ --quantity 100 \ --note core ``` 删除一行： ```bash python scripts/stock_watchlist.py watchlist remove \ --file ./watchlist.md \ --query SH600519 ``` 把手工编辑过的 `query` 统一解析成规范符号： ```bash python scripts/stock_watchlist.py watchlist sync --file ./watchlist.md ``` 查询整个自选列表并计算汇总： ```bash python scripts/stock_watchlist.py watchlist quote --file ./watchlist.md ``` ## Watchlist 约束 表格必须包含这些列： 1. `query` 2. `symbol` 3. `quote_id` 4. `name` 5. `cost_price` 6. `quantity` 7. `note` 字段含义： 1. `query`：原始查询词，适合手工维护，例如中文名或代码。 2. `symbol`：规范代码，例如 `SH600519`、`HK00700`、`TSLA`。 3. `quote_id`：行情接口使用的内部标识，保留后可以减少再次搜索。 4. `cost_price`：可选，留空则不计算该行盈亏。 5. `quantity`：可选，留空则不计算该行盈亏。 建议： 1. 手工改完 `query` 后执行一次 `watchlist sync`。 2. 不要删除表头，也不要删掉标记行。 3. 如果只想保留观察列表，不关心成本，可以只维护 `query/symbol/quote_id/name/note`。 ## 安全边界 1. 仅把 watchlist 放在当前工作目录内的 Markdown 文件中，例如 `./watchlist.md`。 2. 不要把 `--file` 指向系统目录、隐藏配置目录或无关文档。 3. 如确实需要在工作目录外使用，先显式设置 `STOCK_WATCHLIST_ALLOWED_ROOTS`，只加入你确认安全的目录。 4. `watchlist init --force` 仅用于覆盖已有的 watchlist 文件，不要把它用于普通 Markdown 文档。 ## 输出要求 脚本返回 JSON 后，按场景组织最终回答： 1. 单只股票：优先总结 [REDACTED_SECRET]。 2. 多只股票：按股票分组，避免混成一段。 3. 自选列表：先给组合汇总，再列重点持仓。 如果用户明确要“基本信息”，默认至少包含： 1. 当前价 2. 涨跌额 3. 涨跌幅 4. 今开 5. 最高 6. 最低 7. 昨收 8. 总市值 9. PE(TTM) 10. PB ## 资源 1. 主脚本：[scripts/stock_watchlist.py](scripts/stock_watchlist.py) 2. Markdown 模板：[assets/watchlist-template.md](assets/watchlist-template.md)


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)