Skill: baiye1997/huahua-daily (version 2.0.0)

--- name: huahua-daily description: Use HuahuaDaily MCP to query portfolio, transactions, market data, screenshot imports, and send App-confirmed trade/import requests. version: 2.0.0 --- # 花花日记助手（HuahuaDaily） ## 0. Compatibility This SKILL.md intentionally uses the smallest common Agent Skills format: YAML frontmatter with only `name` and `description`, followed by Markdown instructions. Platform-specific setup for Codex, Codex CLI, Claude Code, Claude Desktop, OpenClaw, Hermes Agent, and other MCP clients belongs in README/configuration, not in this file. ## 1. 核心边界 花花日记 MCP 让 Agent 读取用户授权的云端同步数据、基金行情、交易流水和系统公告，识别截图，并向 App 发送待确认请求。 Agent 不直接写入交易、不直接导入持仓、不覆盖云同步。所有买入、卖出、持仓导入、自选导入、交易记录导入，都必须由用户在 App 确认页最终确认。 ## 2. 会话启动 首次使用或不确定能力时，调用： ```json get_tool_manifest() ``` 用途： - 确认可用工具、认证方式、安全边界。 - 不访问用户数据，不消耗行情请求。 Token 缺失、无效或过期时，提示用户在 App「小窝 / 设置 → Agent 访问令牌」重新生成，并配置环境变量 `HUAHUA_AGENT_TOKEN`。 ## 3. 查询持仓和云同步 ### 3.1 用户问“今天收益/总资产/累计收益” 首选： ```json get_summary() ``` 返回重点： - `totalMarketValue`：总市值。 - `todayProfit`：今日收益。 - `totalHoldingProfit`：持有收益。 - `cumulativeProfit`：累计收益。 - `totalReturnRate`：累计收益率。 - `dataUpdatedAt`：云同步时间。 回答时必须说明 `dataUpdatedAt`。如果时间明显旧，提醒用户在 App 执行「立即同步」。 不要为了资产概况先调用 `get_raw_sync_data()`。 ### 3.2 用户问“完整持仓/自选/分组” 首选： ```json get_records({"include_transactions": false}) ``` 返回重点： - `holdings`：有持仓的基金。 - `watchlist`：自选或清仓观察项。 - `groups`：分组。 - `summary`：汇总。 - `dataUpdatedAt`：云同步时间。 如果用户要求交易流水、成本来源、审计收益，再调用： ```json get_transactions({"code": "", "include_pending": true}) ``` 或： ```json get_records({"include_transactions": true}) ``` ### 3.3 用户问“云端是不是最新/同步是否完整” 先调用： ```json get_sync_meta() ``` 返回重点： - `updated_at`：云端更新时间。 - `etag`：云端快照指纹。 - `size_bytes`：快照大小。 需要完整检查时调用： ```json get_raw_sync_data({"include_json_text": false}) ``` 检查重点： - `data.funds` 是否存在且非空。 - `data.groups`、`data.watchlistGroups` 是否存在。 - `data.globalTags` 是否存在。 - `meta.contains_ledger` 通常为 false，这是正常的。 只有用户明确要求导出原始 JSON 文本时，才设置 `include_json_text=true`。默认不要返回大段 JSON。 ### 3.4 用户问“标签/分组” 分组： ```json get_groups() ``` 标签： ```json get_tags() ``` 使用规则： - `get_groups()` 用于解释持仓账户分组、自选分组。 - `get_tags()` 用于解释全局标签和每只基金绑定标签。 ## 4. 查询基金和市场 ### 4.1 用户提供 6 位基金代码 查询实时估算： ```json get_item_estimate({"codes": ["110022"]}) ``` 用途： - “现在涨多少” - “今天估算净值” - “这只今天收益如何” 注意： - `codes` 最多 50 个。 - 可批量传入，避免逐个调用。 - 结果同一 session 内缓存 60 秒。 ### 4.2 用户只提供基金名称 先搜索： ```json search_item({"query": "易方达消费"}) ``` 处理规则： - 搜索结果只有一个高可信候选时，可继续查询。 - 多个候选或名称相近时，先让用户确认代码。 - 不要凭名字猜代码后直接发交易请求。 ### 4.3 用户要深度分析单只基金 按需调用： ```json get_item_detail({"code": "110022"}) get_item_history({"code": "110022"}) get_fund_fees({"code": "110022"}) get_item_dividends({"code": "110022"}) get_fund_period_rank({"code": "110022"}) get_fund_timeline({"code": "110022"}) ``` 选择规则： - 当前估算/涨跌：`get_item_estimate`。 - 历史走势：`get_item_history`。 - 申购赎回费、确认天数：`get_fund_fees`。 - 分红派息：`get_item_dividends`。 - 近 1/3/6 月、1 年排名：`get_fund_period_rank`（单只）或 `get_batch_fund_period_ranks`（批量，最多 50 只）。 - 今日盘中估值曲线：`get_fund_timeline`。 - 综合详情、胜率表、持仓等深度信息：`get_item_detail`。此工具较重，不要作为日常行情首选。 - QDII 夜盘实时估值：`get_night_estimate`（需会员，美股交易时段有效）；用户在 App 添加的夜盘自选基金列表用 `get_night_watchlist`，通常先调这个再传给 `get_night_estimate`。 ### 4.4 用户问市场整体 概览： ```json get_overview() ``` 主要指数： ```json get_indices() ``` 今日涨跌榜： ```json get_daily_rank() ``` 是否交易日： ```json get_status() ``` ### 4.5 用户问“跑赢大盘/对比沪深300” 默认沪深300： ```json get_benchmark_history({"code": "sh000300"}) ``` 常用代码： - `sh000300`：沪深300。 - `sh000001`：上证指数。 - `sz399001`：深证成指。 - 数字 ETF 代码也可传入，如 `510300`。 需要基金自身走势时，再调用 `get_item_history(code)`。 ### 4.6 用户问 QDII 基金夜盘 QDII 基金投资美股/港股，北京时间夜间才是它们的交易时段。夜盘估值在美股交易时段（21:30–次日04:00 夏令时）提供实时持仓穿透。 **推荐流程（无需用户报代码）**：先用 `get_night_watchlist()` 读用户在 App 添加的夜盘自选列表，再用其结果调 `get_night_estimate()`： ```json get_night_watchlist() // 返回 {"codes": ["016665", "018147", ...], "count": N, "has_customized": true, "dataUpdatedAt": "..."} ``` 若 `has_customized=false`（用户未自定义过），codes 为空，应提示用户先去 App 夜盘页面添加自选基金，或允许用户手动指定一组代码。 ```json get_night_estimate({"codes": ["016665", "018147"]}) ``` 返回每只基金的： - `estimatedChangePercent`：盘后复合涨跌幅（股价×汇率）。 - `estimatedNav`：估算净值。 - `breakdown`：穿透到个股的持仓明细、股价涨跌、汇率变动、贡献度。 - `status`：`ready`（数据就绪）/ `pending`（等待开盘）/ `closed`（休市）。 注意： - 需要 VIP 或 PRO 会员。 - 非美股交易时段返回休市状态，不是错误。 - 不要在 A 股交易时段频繁调用。 - 夜盘自选列表需要 App 至少做过一次云同步才能被 MCP 读到；旧版本 App（未升级到含夜盘同步的版本）的备份里没有 nightWatchCodes 字段，此时 `has_customized` 会是 `false`。 ### 4.7 用户问交易日/T+N 下一个交易日： ```json get_next_trading_day({"date": "2026-05-13"}) ``` 基金确认日期： ```json calculate_trading_dates({ "date": "2026-05-13", "time_mode": "PRE_MARKET", "confirm_days": 2 }) ``` 参数： - `time_mode`: `PRE_MARKET` 表示收盘前，`POST_MARKET` 表示收盘后。 - `confirm_days`: T+1/T+2/T+3 等，未知时先用 `get_fund_fees(code)` 获取 `confirm_days`。 ## 5. 交易请求 ### 5.1 用户想买入/卖出 先确认： - 基金代码。 - 基金名称。 - 买入或卖出。 - 金额。 - 日期，可留空让 App 使用今日。 - 分组名，如果用户指定了账户/分组。 发送请求： ```json request_transaction({ "item_code": "110022", "item_name": "易方达消费行业股票", "record_type": "BUY", "amount": 1000, "date": "2026-05-13", "note": "Agent 发起", "group_name": "我的账户" }) ``` 规则： - `record_type` 只能是 `BUY` 或 `SELL`。 - 如果基金代码来自搜索推断，必须先让用户确认。 - 调用后必须告诉用户：“请求已发送，请打开花花日记 App 确认后才会生效。” - 不要说“已买入”或“已卖出”。 ### 5.2 查看或撤销待处理请求 查看： ```json get_agent_requests() ``` 用户明确要求忽略/撤销时： ```json update_agent_request({ "request_id": "请求 id", "status": "DISMISSED" }) ``` 不要替 App 把请求标记为 `PROCESSED`，除非用户明确要求且你知道这只是状态处理，不代表真实交易执行。 ## 6. 截图导入 ### 6.1 持仓/自选截图识别 持仓截图（本地路径）： ```json import_holding_screenshots({ "image_paths": ["/absolute/path/holding.png"], "import_type": "HOLDINGS" }) ``` 自选截图（务必传 `import_type: "WATCHLIST"`）： ```json import_holding_screenshots({ "image_paths": ["/absolute/path/watchlist.png"], "import_type": "WATCHLIST" }) ``` Base64： ```json import_holding_screenshots({ "images_base64": [ {"filename": "holding.png", "mime": "image/png", "base64": "..."} ], "import_type": "HOLDINGS" }) ``` `import_type` 说明： - `HOLDINGS`（默认）：持仓页面通常不显示基金代码，后端按名称四步匹配（可能出现模糊匹配）。 - `WATCHLIST`：自选页面明确显示 6 位代码，后端用专门 prompt 提取代码并精确匹配；AI 漏识别代码时回退名称匹配。**自选场景务必传此值**，否则会强制走名称模糊匹配。 返回重点： - `items`：识别条目。 - `summary.total`：总条数。 - `summary.unmatched`：未匹配数量。 - `resolution_required`：是否需要轻确认。 - `resolution_reason`：轻确认原因。 用途： - 持仓截图导入（`import_type="HOLDINGS"`）。 - 自选截图导入（`import_type="WATCHLIST"`）。 识别后不要直接声称导入完成。 ### 6.2 交易记录截图识别 本地路径： ```json import_transaction_screenshots({ "image_paths": ["/absolute/path/transactions.png"] }) ``` Base64： ```json import_transaction_screenshots({ "images_base64": [ {"filename": "transactions.png", "mime": "image/png", "base64": "..."} ] }) ``` 返回重点： - `type`: `BUY` 或 `SELL`。 - `fund_name`：截图识别名称。 - `fund_code`：匹配代码。 - `fund_real_name`：标准基金名。 - `matched`：是否匹配。 - `date`、`time_mode`、`amount`、`shares`。 - `skip` / `skip_reason`：应跳过的条目。 - `resolution_required` / `resolution_reason`。 ### 6.3 Agent 轻确认规则 只在对话里确认“识别歧义”，不要让用户在对话里完成大型表格审核。 需要轻确认的情况： - `resolution_required=true`。 - `match_status=unmatched`。 - `matched=false`。 - 多个候选基金。 - 日期缺失或明显不合法。 - 买入缺 `amount`。 - 卖出缺 `shares`。 轻确认完成后，修改 `items` 中对应字段，再发送到 App。 ### 6.4 发送到 App 确认页 持仓导入： ```json request_import_review({ "import_type": "HOLDINGS", "items": [...], "source_note": "Agent 识别持仓截图" }) ``` 自选导入： ```json request_import_review({ "import_type": "WATCHLIST", "items": [...], "source_note": "Agent 识别自选截图" }) ``` 交易记录导入： ```json request_import_review({ "import_type": "TRANSACTIONS", "items": [...], "source_note": "Agent 识别交易记录截图" }) ``` 限制： - `import_type` 只能是 `HOLDINGS`、`WATCHLIST`、`TRANSACTIONS`。 - `items` 最多 300 条。 - 请求体最多 1MB。 调用后必须告诉用户： - “已发送到 App，请打开花花日记批量确认。” - “导入尚未完成，只有 App 确认后才会写入。” ## 7. 社区与公告 查看某基金弹幕： ```json get_danmaku({"code": "110022"}) ``` 发送弹幕： ```json send_danmaku({ "fund_code": "110022", "text": "今天波动有点大", "color": "#ffffff" }) ``` 规则： - 只有用户明确要求发言时才调用 `send_danmaku`。 - `text` 最多 30 字。 系统公告： ```json get_notices({"since": 0}) ``` `since` 是 Unix 秒时间戳；默认 0 表示拉取最近公告。 ## 8. 常见降级 - `401`：Token 无效或过期，要求用户重新生成。 - `403`：权限不足或会员状态不满足，要求用户检查 PRO 状态。 - 云端无数据：要求用户打开 App 执行「立即同步」。 - 行情估算为空：可能是非交易日、盘前或数据源暂不可用，不要当作错误。 - 截图识别为空：提示用户换清晰截图，或分批上传。 - 导入请求发送成功后：不要继续追问大表格细节，等待用户在 App 确认。


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