{"id":"a6df6f4f-7b4d-4f03-8ee4-f24135d379e5","entityType":"agent","slug":"clawhub-hareluya-secn","name":"StockEarning","canonicalUrl":"https://www.xpersona.co/agent/clawhub-hareluya-secn","canonicalPath":"/agent/clawhub-hareluya-secn","generatedAt":"2026-10-11T11:22:48.290Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T09:18:43.673Z","emptyReason":null},"description":"这是 StockEarningCN 的 技能(Skill)。安装本技能，你将获得将自己的持仓通过习惯的AI助手进行更新和统计的能力。目前支持A股、B股、港股和美股。如果要获得API Key，请访问https://www.mystockearning.cn。","descriptionLabel":"Source description","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.1K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s17fgqjct259919a6mhth0bex985vpzx:secn","sourceUrl":"https://clawhub.ai/hareluya/secn","homepage":"https://clawhub.ai/hareluya/skills/secn","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/hareluya/secn","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/hareluya/skills/secn","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":61,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"StockEarning technical dossier on Xpersona with agent coverage, OPENCLEW support, and live trust metadata."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T09:18:43.673Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T09:18:43.673Z","emptyReason":null},"stars":null,"forks":null,"downloads":1102,"packageName":null,"latestVersion":"1.0.8","tractionLabel":"1.1K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T09:18:43.608Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T09:18:43.673Z","lastCrawledAt":"2026-10-11T09:18:43.608Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T09:18:43.608Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.8","createdAt":"2026-06-21T13:42:09.296Z","changelog":"- Renamed skill from \"stock-earning-cn\" to \"secn\" across documentation. - Updated installation commands and instructions to reflect the new skill name. - Removed sample file \"skill-card.md\".","fileCount":35,"zipByteSize":25089},{"version":"1.0.7","createdAt":"2026-05-08T12:48:52.479Z","changelog":"Version 1.0.7 of stock-earning-cn - Add status code response.","fileCount":37,"zipByteSize":25828},{"version":"1.0.6","createdAt":"2026-05-07T10:56:33.550Z","changelog":"Change the currency","fileCount":36,"zipByteSize":24043},{"version":"1.0.5","createdAt":"2026-05-03T15:39:32.975Z","changelog":"- 新增脚本 stock-master/scripts/edit_position.sh，用于管理或编辑持仓信息。 - 其余文档内容无变化。","fileCount":36,"zipByteSize":23903},{"version":"1.0.4","createdAt":"2026-05-02T16:59:10.331Z","changelog":"- Removed sample files: README.md and test_api.sh - No functional changes to the skill's code or documentation - Housekeeping update to clean up unnecessary files","fileCount":35,"zipByteSize":22896},{"version":"1.0.3","createdAt":"2026-05-02T15:11:40.446Z","changelog":"Significant update with new modular scripts and streamlined configuration. - Added 26 scripts for market data, portfolio management, trade execution, and stock operations, enabling more modular and granular control. - Introduced scripts/setup_api_key.sh for easier and safer API key configuration. - Updated documentation to reflect the new directory structure and setup process. - Removed the old stock-master/run.sh in favor of more modular command scripts.","fileCount":37,"zipByteSize":26143},{"version":"1.0.2","createdAt":"2026-04-30T17:20:39.033Z","changelog":"- Added a metadata block to SKILL.md for improved skill description and user-invocation support. - No functional or behavioral changes to the skill itself.","fileCount":12,"zipByteSize":16732},{"version":"1.0.1","createdAt":"2026-04-30T16:55:10.533Z","changelog":"Version 1.0.1 - Added .gitignore and LICENSE files for better project organization and license clarity. - Updated documentation in SKILL.md: clarified skill name/description, revised usage examples, added a recommended environment variable setup, and included installation commands for Openclaw and Hermes. - Improved instructions for account registration and API key management. - Refined skill entry naming and directory structure in docs for consistency.","fileCount":12,"zipByteSize":15441}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17fgqjct259919a6mhth0bex985vpzx:secn","setupComplexity":"low","setupSteps":["Install using `clawhub skill install s17fgqjct259919a6mhth0bex985vpzx:secn` in an isolated environment before connecting it to live workloads.","No published capability contract is available yet, so validate auth and request/response behavior manually.","Review the upstream CLAWHUB listing at https://clawhub.ai/hareluya/secn before using production credentials."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-hareluya-secn/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-hareluya-secn/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-hareluya-secn/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-hareluya-secn/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-hareluya-secn/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-hareluya-secn/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-11T11:22:48.287Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-hareluya-secn/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-hareluya-secn/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-hareluya-secn/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-hareluya-secn/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T09:18:43.673Z","emptyReason":null},"readme":"Skill: StockEarning\n\nOwner: hareluya\n\nSummary: 这是 StockEarningCN 的 技能(Skill)。安装本技能，你将获得将自己的持仓通过习惯的AI助手进行更新和统计的能力。目前支持A股、B股、港股和美股。如果要获得API Key，请访问https://www.mystockearning.cn。\n\nTags: latest:1.0.8\n\nVersion history:\n\nv1.0.8 | 2026-06-21T13:42:09.296Z | user\n\n- Renamed skill from \"stock-earning-cn\" to \"secn\" across documentation.\n- Updated installation commands and instructions to reflect the new skill name.\n- Removed sample file \"skill-card.md\".\n\nv1.0.7 | 2026-05-08T12:48:52.479Z | user\n\nVersion 1.0.7 of stock-earning-cn\n\n- Add status code response.\n\nv1.0.6 | 2026-05-07T10:56:33.550Z | user\n\nChange the currency\n\nv1.0.5 | 2026-05-03T15:39:32.975Z | user\n\n- 新增脚本 stock-master/scripts/edit_position.sh，用于管理或编辑持仓信息。\n- 其余文档内容无变化。\n\nv1.0.4 | 2026-05-02T16:59:10.331Z | user\n\n- Removed sample files: README.md and test_api.sh\n- No functional changes to the skill's code or documentation\n- Housekeeping update to clean up unnecessary files\n\nv1.0.3 | 2026-05-02T15:11:40.446Z | user\n\nSignificant update with new modular scripts and streamlined configuration.\n\n- Added 26 scripts for market data, portfolio management, trade execution, and stock operations, enabling more modular and granular control.\n- Introduced scripts/setup_api_key.sh for easier and safer API key configuration.\n- Updated documentation to reflect the new directory structure and setup process.\n- Removed the old stock-master/run.sh in favor of more modular command scripts.\n\nv1.0.2 | 2026-04-30T17:20:39.033Z | user\n\n- Added a metadata block to SKILL.md for improved skill description and user-invocation support.\n- No functional or behavioral changes to the skill itself.\n\nv1.0.1 | 2026-04-30T16:55:10.533Z | user\n\nVersion 1.0.1\n\n- Added .gitignore and LICENSE files for better project organization and license clarity.\n- Updated documentation in SKILL.md: clarified skill name/description, revised usage examples, added a recommended environment variable setup, and included installation commands for Openclaw and Hermes.\n- Improved instructions for account registration and API key management.\n- Refined skill entry naming and directory structure in docs for consistency.\n\nv1.0.0 | 2026-04-30T15:25:11.568Z | user\n\n- Initial release of StockEarning Assistant plugin for OpenClaw.\n- Allows querying A-shares market data, managing portfolio, calculating profit/loss, and recording buy/sell transactions.\n- Supports main entry skill `/stock-master` for common tasks like querying, bookkeeping, and refreshing prices.\n- Provides focused skills for portfolio, market data, and trade execution management.\n- Requires registration at mystockearning.cn and API key configuration.\n- Detailed API usage examples and best practices included.\n\nArchive index:\n\nArchive v1.0.8: 35 files, 25089 bytes\n\nFiles: config.sh (125b), install.sh (1330b), market-data/scripts/get_info.sh (350b), market-data/scripts/get_price.sh (351b), market-data/scripts/search_stocks.sh (395b), market-data/SKILL.md (1708b), plugin.json (873b), portfolio-assistant/scripts/get_position_by_symbol.sh (307b), portfolio-assistant/scripts/get_positions_by_market_sorted.sh (346b), portfolio-assistant/scripts/get_summary.sh (223b), portfolio-assistant/scripts/get_trades.sh (422b), portfolio-assistant/SKILL.md (1912b), reference/config.sh (222b), reference/runtime.sh (4913b), scripts/setup_api_key.sh (224b), skill-card.md (2231b), SKILL.md (2013b), stock-master/scripts/calculate_commission.sh (621b), stock-master/scripts/create_trade.sh (1354b), stock-master/scripts/edit_position.sh (752b), stock-master/scripts/get_brokers.sh (225b), stock-master/scripts/get_price.sh (271b), stock-master/scripts/positions_all.sh (135b), stock-master/scripts/positions_by_symbol.sh (227b), stock-master/scripts/run.sh (2473b), stock-master/scripts/search_stocks.sh (315b), stock-master/scripts/seed_defaults.sh (239b), stock-master/scripts/summary.sh (142b), stock-master/SKILL.md (6502b), trade-execution/scripts/calculate_commission.sh (701b), trade-execution/scripts/create_trade.sh (1437b), trade-execution/scripts/get_brokers.sh (305b), trade-execution/scripts/seed_defaults.sh (319b), trade-execution/SKILL.md (3972b), _meta.json (123b)\n\nFile v1.0.8:market-data/SKILL.md\n\n---\nname: market-data\ndescription: 专门用于查询全球股票实时价格、基本信息和搜索股票代码的助手。\nmetadata: {\"openclaw\": {\"requires\": {\"env\": [\"STOCK_API_KEY\"]}}}\nuser-invocable: true\n---\n\n# 市场数据助手 (Market Data)\n\n专门用于查询全球股票实时价格、基本信息和搜索股票代码的助手。\n\n## 认证与基础配置\n- 环境变量: `STOCK_API_KEY`\n- Base URL: 从 `config.sh` 中读取 `$STOCK_BASE_URL`（默认 `https://www.mystockearning.cn`，切换域名只需改 `config.sh`）\n\n## 市场代码 (Market Codes)\n- 美股: `us`\n- 港股: `hk`\n- A股: `cn_a`\n- B股: `cn_b`\n\n## API 指令清单\n\n### 搜索股票\n当用户说 \"查询腾讯的代码\" 或 \"寻找苹果股票\" 时：\n- 执行 `./scripts/search_stocks.sh`（需要设置 `QUERY`，可选 `MARKET`）\n\n### 获取实时价格\n当用户说 \"查看 AAPL 的现价\" 时：\n- 执行 `./scripts/get_price.sh`（需要设置 `SYMBOL`，可选 `MARKET`）\n\n### 获取股票详情\n当用户需要股票的基本面信息时：\n- 执行 `./scripts/get_info.sh`（需要设置 `SYMBOL`，可选 `MARKET`）\n\n## 执行规则\n1. 解析用户指令。\n2. **货币显示规则**：在回复实时价格或任何金额时，必须根据该股票所在的市场显示正确的货币符号或单位：\n   - `cn_a` (A股): `¥` 或 `元` (人民币 CNY)\n   - `hk` (港股): `HK$` 或 `港元` (港币 HKD)\n   - `us` (美股): `$` 或 `美元` (美元 USD)\n3. 构造对应的 `curl` 命令并执行。\n4. 如果返回 404，告知用户未找到该股票，请检查名称或市场代码。\n5. 将 JSON 格式的价格和货币单位转换为易读的自然语言，金额必须带上正确的货币单位。\n\nFile v1.0.8:portfolio-assistant/SKILL.md\n\n---\nname: portfolio-assistant\ndescription: 专门用于查询用户持仓、盈亏情况和历史交易记录的助手。\nmetadata: {\"openclaw\": {\"requires\": {\"env\": [\"STOCK_API_KEY\"]}}}\nuser-invocable: true\n---\n\n# 投资组合助手 (Portfolio Assistant)\n\n专门用于查询用户持仓、盈亏情况和历史交易记录的助手。\n\n## 认证与基础配置\n- 环境变量: `STOCK_API_KEY`\n- Base URL: 从 `config.sh` 中读取 `$STOCK_BASE_URL`（默认 `https://www.mystockearning.cn`，切换域名只需改 `config.sh`）\n\n## API 指令清单\n\n### 获取当前持仓\n当用户问 \"我现在的苹果股票赚了多少钱？\" 或 \"查看我的美股持仓\" 时：\n- 获取特定股票持仓：执行 `./scripts/get_position_by_symbol.sh`（需要设置 `SYMBOL`）\n- 获取某市场的所有持仓（按盈亏比例降序）：执行 `./scripts/get_positions_by_market_sorted.sh`（需要设置 `MARKET`）\n\n### 获取交易记录\n当用户问 \"我最近一个月买过哪些美股？\" 时：\n- 执行 `./scripts/get_trades.sh`（需要设置 `MARKET`、`TRADE_TYPE`）\n\n### 获取投资表现摘要\n当用户问 \"我账户总资产多少？\" 或 \"总盈亏如何？\" 时：\n- 获取收益摘要：执行 `./scripts/get_summary.sh`\n\n## 执行规则\n1. 解析用户指令。\n2. **货币显示规则**：在回复任何持仓市值、成本或盈亏金额时，必须根据该股票或账户所在的市场显示正确的货币符号或单位：\n   - `cn_a` (A股): `¥` 或 `元` (人民币 CNY)\n   - `hk` (港股): `HK$` 或 `港元` (港币 HKD)\n   - `us` (美股): `$` 或 `美元` (美元 USD)\n3. 执行 `curl` 请求。\n4. 从响应中提取关键字段（如 `profit_loss`, `profit_loss_percent`, `market_value`）。\n5. 使用带颜色的 Markdown 格式或表格输出结果（如：盈利标红或绿，根据当地市场习惯），金额必须保留两位小数并带上正确的货币单位。\n\nFile v1.0.8:SKILL.md\n\n---\nname: secn\ndescription: 这是 StockEarningCN 的 OpenClaw 技能/Skill插件入口说明。安装本目录后，你将获得一组可组合使用的技能\nuser-invocable: true\n---\n# StockEarningCN Skills介绍(StockEarning Assistant)\n\n这是 StockEarningCN 的 OpenClaw 技能插件入口说明。安装本目录后，你将获得一组可组合使用的技能，用于：\n\n- 查询A股行情、股票信息、股票搜索\n- 查询与管理持仓、计算盈亏、刷新持仓现价\n- 记录买入/卖出交易\n\n## 开始之前：\n\n您需要去`https://www.mystockearning.cn注册一个账号，并等待审核通过后获取api key。`\n\n## 认证与基础配置\n\n- 环境变量: `STOCK_API_KEY`\n- Base URL: 从 `config.sh` 中读取 `$STOCK_BASE_URL`（默认 `https://www.mystockearning.cn`，也可通过环境变量 `STOCK_BASE_URL` 覆盖）\n\n所有请求均使用 HTTP Header：`X-API-Key: $STOCK_API_KEY`\n\n推荐安全保存（OpenClaw/Hermes 通用）：使用 `./scripts/setup_api_key.sh` 生成本地密钥文件（默认写入 `~/.config/stockearning/stockearning.env`，权限 600）。\n\n## 推荐使用方式\n\n通常直接使用主入口技能：\n\n- `/secn`：主入口，覆盖最常用的查询/记账场景\n\n若你希望更可控、更聚焦的行为，可以按需调用下列技能：\n\n| 技能名称                  | 功能                 | 目录                       |\n| --------------------- | ------------------ | ------------------------ |\n| `secn`               | 主入口：综合查询、记录交易        | `./stock-master/`        |\n| `portfolio-assistant` | 仅查询持仓/收益摘要/历史交易    | `./portfolio-assistant/` |\n| `market-data`         | 仅查询实时价格、股票信息、搜索代码  | `./market-data/`         |\n| `trade-execution`     | 仅用于记录买入/卖出交易       | `./trade-execution/`     |\n\n## 安装方式\n\n### Openclaw:\n\n```\nopenclaw skills install secn\n```\n\n<br />\n\n### Hermes:\n\n```\nhermes skills install clawhub:secn\n```\n\nFile v1.0.8:stock-master/SKILL.md\n\n---\nname: secn\ndescription: 主入口：包含查询持仓、行情、记账所有功能。\nuser-invocable: true\nscript: \"bash scripts/run.sh\"\n---\n\n# StockEarning 主投资助手 (Master Agent)\n\n你是一个专业的股票投资组合助手。你可以通过调用 StockEarning 的 REST API 来帮助用户查询市场数据、管理持仓和记录交易。\n\n## 工具使用方式\n\n你现在拥有一个专门的 `run.sh` 脚本来执行所有的 API 调用。该脚本会自动处理环境变量（API Key）的读取和提示。\n\n### 调用格式\n你需要使用本技能目录下的 `./scripts/*.sh` 脚本完成各类操作（每个操作一个脚本文件）。\n\n### 1. 查询持仓与收益 (Get Positions & Summary)\n获取用户当前的股票持仓信息或整体收益。\n- 获取所有持仓：执行 `./scripts/positions_all.sh`\n- 获取特定股票的持仓：执行 `./scripts/positions_by_symbol.sh`（需要设置 `SYMBOL`）\n- 获取整体收益摘要：执行 `./scripts/summary.sh`\n\n### 2. 市场数据 (Market Data)\n查询实时股价或搜索股票代码。\n- 查询实时价格：执行 `./scripts/get_price.sh`（需要设置 `SYMBOL`，可选 `MARKET`）\n- 搜索股票代码：执行 `./scripts/search_stocks.sh`（需要设置 `QUERY`，可选 `MARKET`）\n\n### 3. 记录交易与券商配置 (Trade & Broker)\n帮用户记录买卖行为及检查/配置券商。\n- 检查某市场是否已配置券商：执行 `./scripts/get_brokers.sh`（需要设置 `MARKET`）\n- 一键导入市场默认券商：执行 `./scripts/seed_defaults.sh`（需要设置 `MARKET`）\n- 预计算手续费：执行 `./scripts/calculate_commission.sh`（需要设置 `BROKER_ID`、`TRADE_TYPE`、`QUANTITY`、`PRICE`）\n- 记录买入/卖出交易：执行 `./scripts/create_trade.sh`（需要设置 `SYMBOL`、`NAME`、`MARKET`、`TRADE_TYPE`、`QUANTITY`、`PRICE`、`TRADE_DATE`；可选 `COMMISSION`、`CURRENCY`、`NOTES`）\n\n### 4. 持仓盘点修正 (Position Adjustment)\n如果因为分红、送转或其他原因导致持仓数量对不上，可以通过此接口直接调整**股数**。\n注意：调整数量**不会修改历史成本价**，系统会自动生成一笔 `trade_type=adjust` 的交易记录用于流水追溯，其价格默认为当天的市价（若无则取原成本价）。\n```bash\n{baseDir}/scripts/edit_position.sh 123 1050 \"分红送转调整\"\n```\n\n## 严格执行规则\n1. 分析用户输入。\n2. **货币显示规则**：在回复任何金额（如价格、手续费、总额、盈亏）时，必须根据该股票所在的市场显示正确的货币符号或单位：\n   - `cn_a` (A股): `¥` 或 `元` (人民币 CNY)\n   - `hk` (港股): `HK$` 或 `港元` (港币 HKD)\n   - `us` (美股): `$` 或 `美元` (美元 USD)\n3. **记录交易的智能补全与券商机制**：当用户想要记录交易时，你必须按照以下逻辑处理：\n   - **(代码补全)**：如果没有代码，先调 `GET /api/positions/` 查持仓；没找到则调用搜索 API (`/api/markets/search/stocks`) 遍历 cn_a, hk, us。\n   - **(清仓智能识别)**：如果用户说“清仓”、“全卖了”，且未提供数量，必须先调用 `GET /api/positions/` 获取该股票的当前持仓数量，并自动填入。\n   - **(防爆仓拦截)**：如果是卖出操作且提供了数量，必须先调用 `GET /api/positions/` 检查余额。如果余额不足，直接拒绝并提示用户当前实际持有量。\n   - **(市价智能获取)**：如果用户未提供**买入价格**，静默调用 `/api/markets/stocks/{symbol}/price` 获取当前市价，并作为默认建议价询问用户。\n   - **(按金额反推数量)**：如果用户提供了总金额和单价但未提供数量，自动计算 `数量 = 向下取整(总金额 / 单价)` 并向用户确认。\n   - **(券商前置拦截与算费)**：在发起最终交易前，必须执行以下步骤：\n     1. 调用 `GET /api/brokers/?market={对应的市场}`。\n     2. 如果返回空列表 `[]`，说明该市场无券商。你必须**拦截交易并暂停**，询问用户：“您在这个市场尚未配置券商。是否需要为您一键导入该市场的默认券商配置？或者您想自定义配置？”\n     3. **等待用户回答**。如果用户回答“一键导入”或“同意导入”，你才调用 `POST /api/brokers/seed-defaults` 传入该市场代码，然后再调用 `GET /api/brokers/` 获取刚创建的 `broker_id`。如果用户要求“自定义”，请引导用户提供券商名称和佣金费率。\n     4. 拿到 `broker_id` 后，调用 `POST /api/brokers/calculate-commission` 计算精确的手续费（commission、stamp_duty 等）。\n4. **交易录入前校验**：在发起 `POST /api/trades/` 之前，必须逐项核对并向用户确认以下字段（缺一不可）：\n   - `symbol`：与用户意图一致，且无多余空格\n   - `market`：与标的所属市场一致（如 us/hk/cn_a 等）\n   - `trade_type`：buy/sell 与用户意图一致\n   - `quantity`：为正数；若用户说“清仓/全卖”，必须先查持仓再填入\n   - `price`：为正数，单位与市场/货币一致\n   - `fees`：在已配置券商时先用 `/api/brokers/calculate-commission` 计算；将 `total_fees` 写入 `commission`，并把明细（commission/stamp_duty/transfer_fee）写入 `notes`\n   - `trade_date`：明确的时间（含时区）；若用户未指定，需询问或使用用户确认的默认时间\n5. **最终确认**：在执行写入前，必须输出一段“逐项确认清单”（symbol、market、trade_type、quantity、price、fees、trade_date），并等待用户明确回复“确认/同意/继续”后才执行写入。\n6. **纠错机制**：\n   - 交易错误：如果交易已写入后用户发现错误，推荐通过新增一笔“反向交易”进行冲销（在 `notes` 写明“冲销/更正原因”），再按正确数据重新录入。\n   - 盘点修正：如果仅仅是当前股数对不上（如送转股），可直接调用 `PUT /api/positions/{position_id}/edit` 进行盘点对齐，此操作**仅调整股数，不影响历史成本价**。\n   - 任何更正后：均需重新查询 `GET /api/positions/` 核对持仓数据是否符合预期。\n7. **工具使用**：使用 `{baseDir}/scripts/run.sh` 执行对应的 API 请求。\n8. **输出格式**：将 API 返回的 JSON 数据解析为对用户友好的 Markdown 表格或自然语言，金额必须保留两位小数并带上正确的货币单位。\n\nFile v1.0.8:trade-execution/SKILL.md\n\n---\nname: trade-execution\ndescription: 专门用于代表用户向系统中记录买入或卖出交易的助手。\nuser-invocable: true\n---\n\n# 交易执行助手 (Trade Execution)\n\n专门用于代表用户向系统中记录买入或卖出交易的助手。\n\n## 认证与基础配置\n- 环境变量: `STOCK_API_KEY`\n- Base URL: 从 `config.sh` 中读取 `$STOCK_BASE_URL`（默认 `https://www.mystockearning.cn`，切换域名只需改 `config.sh`）\n\n## API 指令清单\n\n### 记录新交易与券商配置\n当用户说 \"我今天以 150 美元买入了 100 股苹果\" 时：\n- 1) 检查市场券商：执行 `./scripts/get_brokers.sh`（需要设置 `MARKET`）\n- 2) 如需导入默认券商：执行 `./scripts/seed_defaults.sh`（需要设置 `MARKET`）\n- 3) 计算手续费：执行 `./scripts/calculate_commission.sh`（需要设置 `BROKER_ID`、`TRADE_TYPE`、`QUANTITY`、`PRICE`）\n- 4) 记录交易：执行 `./scripts/create_trade.sh`（需要设置 `SYMBOL`、`NAME`、`MARKET`、`TRADE_TYPE`、`QUANTITY`、`PRICE`、`TRADE_DATE`；可选 `COMMISSION`、`CURRENCY`、`NOTES`）\n\n## 严格执行规则\n1. 分析用户指令。\n2. **货币显示规则**：在回复任何金额（如价格、手续费、总额等）时，必须根据该股票所在的市场显示正确的货币符号或单位：\n   - `cn_a` (A股): `¥` 或 `元` (人民币 CNY)\n   - `hk` (港股): `HK$` 或 `港元` (港币 HKD)\n   - `us` (美股): `$` 或 `美元` (美元 USD)\n3. **智能补全与确认机制**：当用户想要记录交易时，你必须按照以下逻辑处理：\n   - **(代码补全)**：如果没有提供完整的股票代码和市场，先调 `GET /api/positions/` 查持仓；没找到则调用搜索 API (`/api/markets/search/stocks`) 遍历 cn_a, hk, us。\n   - **(清仓智能识别)**：如果用户说“清仓”、“全卖了”，且未提供数量，必须先调用 `GET /api/positions/` 获取该股票的当前持仓数量，并自动填入。\n   - **(防爆仓拦截)**：如果是卖出操作且提供了数量，必须先调用 `GET /api/positions/` 检查余额。如果余额不足，直接拒绝并提示用户当前实际持有量。\n   - **(市价智能获取)**：如果用户未提供**买入价格**，静默调用 `/api/markets/stocks/{symbol}/price` 获取当前市价，并作为默认建议价询问用户。\n   - **(按金额反推数量)**：如果用户提供了总金额和单价但未提供数量，自动计算 `数量 = 向下取整(总金额 / 单价)` 并向用户确认。\n3. **券商前置拦截与算费机制**：在确认了股票代码、数量和价格后，在发起最终交易前，必须执行以下步骤：\n   - 调用 `GET /api/brokers/?market={对应的市场}`。\n   - 如果返回空列表 `[]`，说明该市场无券商。你必须**拦截交易并暂停**，询问用户：“您在这个市场尚未配置券商，无法计算印花税和交易佣金。是否需要为您一键导入该市场的默认券商配置？或者您想自定义配置？”\n   - **等待用户回答**。如果用户回答“一键导入”或“同意导入”，你才调用 `POST /api/brokers/seed-defaults` 传入该市场代码，然后再调用 `GET /api/brokers/` 获取刚创建的 `broker_id`。如果用户要求“自定义”，请引导用户提供券商名称和佣金费率。\n   - 拿到 `broker_id` 后，调用 `POST /api/brokers/calculate-commission` 计算精确的手续费（commission、stamp_duty 等）。\n4. **最终确认**：在发起最终的 `POST /api/trades/` 之前，**必须**向用户输出一段确认信息（包含代码、名称、市场、数量、价格、以及**预估的手续费/印花税总计**）。只有在用户回复确认后，才能执行。\n5. **确认后执行**：执行 `curl -X POST /api/trades/` 记录交易（带上获取到的 broker_id 和费用数据）。\n6. **输出结果**：根据 API 响应，向用户确认交易已成功记录，并展示总金额。\n\nFile v1.0.8:_meta.json\n\n{\n  \"ownerId\": \"kn75wc1b4zt76w9g1d6wgav3f1804jt8\",\n  \"slug\": \"secn\",\n  \"version\": \"1.0.8\",\n  \"publishedAt\": 1782049329296\n}\n\nFile v1.0.8:skill-card.md\n\n## Description:\n\nStockEarning helps agents query stock market data, review portfolio performance, and record stock trades through the StockEarning REST API.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[hareluya](https://clawhub.ai/user/hareluya)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users and developers use StockEarning to connect an AI assistant to mystockearning.cn for stock lookup, portfolio summaries, profit/loss review, broker fee checks, and user-confirmed trade record updates.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill can change financial account records by creating trade records or editing position quantities.\n\nMitigation: Review every trade or position-adjustment confirmation carefully before allowing write actions, and verify portfolio data after corrections.\n\nRisk: The skill handles an API key, portfolio data, and transaction payloads, and the security evidence flags unsafe shell handling around credentials and transaction data.\n\nMitigation: Use a least-privilege API key when available, keep the API-key file private with restrictive permissions, and prefer a version that parses credentials safely and serializes JSON with a proper encoder.\n\n## Reference(s):\n\n- [ClawHub Skill Page](https://clawhub.ai/hareluya/skills/secn)\n- [StockEarning Website](https://www.mystockearning.cn)\n- [Root Skill Instructions](artifact/SKILL.md)\n- [Plugin Manifest](artifact/plugin.json)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown summaries and tables, with shell commands and JSON API responses when scripts are run]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May invoke HTTPS REST API calls requiring STOCK_API_KEY; trade and position changes require explicit user confirmation.]\n\n## Skill Version(s):\n\n1.0.8 (source: server release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nFile v1.0.8:plugin.json\n\n{\n  \"name\": \"secn\",\n  \"version\": \"1.0.0\",\n  \"description\": \"A pure HTTP/REST API plugin for OpenClaw to manage stock portfolios and query global market data.\",\n  \"author\": \"StockEarning\",\n  \"publisher\": \"StockEarning\",\n  \"homepage\": \"https://www.mystockearning.cn\",\n  \"keywords\": [\"finance\", \"stocks\", \"portfolio\", \"trading\", \"openclaw\", \"claude-code\"],\n  \"repository\": \"https://github.com/hareluya/stock-earning-cn-skills\",\n  \"license\": \"MIT-0\",\n  \"releases\": \"https://github.com/hareluya/stock-earning-cn-skills/releases\",\n  \"commands\": {\n    \"secn\": \"./stock-master/SKILL.md\",\n    \"market-data\": \"./market-data/SKILL.md\",\n    \"portfolio-assistant\": \"./portfolio-assistant/SKILL.md\",\n    \"trade-execution\": \"./trade-execution/SKILL.md\"\n  },\n  \"environment\": {\n    \"STOCK_API_KEY\": {\n      \"description\": \"Your StockEarning.cn API Key\",\n      \"required\": true\n    }\n  }\n}\n\nArchive v1.0.7: 37 files, 25828 bytes\n\nFiles: config.sh (125b), install.sh (1339b), market-data/scripts/get_info.sh (350b), market-data/scripts/get_price.sh (351b), market-data/scripts/search_stocks.sh (395b), market-data/SKILL.md (1708b), plugin.json (894b), portfolio-assistant/scripts/get_position_by_symbol.sh (307b), portfolio-assistant/scripts/get_positions_by_market_sorted.sh (346b), portfolio-assistant/scripts/get_summary.sh (223b), portfolio-assistant/scripts/get_trades.sh (422b), portfolio-assistant/scripts/refresh_prices.sh (234b), portfolio-assistant/SKILL.md (2240b), reference/config.sh (222b), reference/runtime.sh (4527b), scripts/setup_api_key.sh (224b), skill-card.md (2262b), SKILL.md (2074b), stock-master/scripts/calculate_commission.sh (621b), stock-master/scripts/create_trade.sh (1354b), stock-master/scripts/edit_position.sh (752b), stock-master/scripts/get_brokers.sh (225b), stock-master/scripts/get_price.sh (271b), stock-master/scripts/positions_all.sh (135b), stock-master/scripts/positions_by_symbol.sh (227b), stock-master/scripts/refresh_prices.sh (153b), stock-master/scripts/run.sh (2631b), stock-master/scripts/search_stocks.sh (315b), stock-master/scripts/seed_defaults.sh (239b), stock-master/scripts/summary.sh (142b), stock-master/SKILL.md (6923b), trade-execution/scripts/calculate_commission.sh (701b), trade-execution/scripts/create_trade.sh (1437b), trade-execution/scripts/get_brokers.sh (305b), trade-execution/scripts/seed_defaults.sh (319b), trade-execution/SKILL.md (3972b), _meta.json (123b)\n\nFile v1.0.7:market-data/SKILL.md\n\n---\nname: market-data\ndescription: 专门用于查询全球股票实时价格、基本信息和搜索股票代码的助手。\nmetadata: {\"openclaw\": {\"requires\": {\"env\": [\"STOCK_API_KEY\"]}}}\nuser-invocable: true\n---\n\n# 市场数据助手 (Market Data)\n\n专门用于查询全球股票实时价格、基本信息和搜索股票代码的助手。\n\n## 认证与基础配置\n- 环境变量: `STOCK_API_KEY`\n- Base URL: 从 `config.sh` 中读取 `$STOCK_BASE_URL`（默认 `https://www.mystockearning.cn`，切换域名只需改 `config.sh`）\n\n## 市场代码 (Market Codes)\n- 美股: `us`\n- 港股: `hk`\n- A股: `cn_a`\n- B股: `cn_b`\n\n## API 指令清单\n\n### 搜索股票\n当用户说 \"查询腾讯的代码\" 或 \"寻找苹果股票\" 时：\n- 执行 `./scripts/search_stocks.sh`（需要设置 `QUERY`，可选 `MARKET`）\n\n### 获取实时价格\n当用户说 \"查看 AAPL 的现价\" 时：\n- 执行 `./scripts/get_price.sh`（需要设置 `SYMBOL`，可选 `MARKET`）\n\n### 获取股票详情\n当用户需要股票的基本面信息时：\n- 执行 `./scripts/get_info.sh`（需要设置 `SYMBOL`，可选 `MARKET`）\n\n## 执行规则\n1. 解析用户指令。\n2. **货币显示规则**：在回复实时价格或任何金额时，必须根据该股票所在的市场显示正确的货币符号或单位：\n   - `cn_a` (A股): `¥` 或 `元` (人民币 CNY)\n   - `hk` (港股): `HK$` 或 `港元` (港币 HKD)\n   - `us` (美股): `$` 或 `美元` (美元 USD)\n3. 构造对应的 `curl` 命令并执行。\n4. 如果返回 404，告知用户未找到该股票，请检查名称或市场代码。\n5. 将 JSON 格式的价格和货币单位转换为易读的自然语言，金额必须带上正确的货币单位。\n\nFile v1.0.7:portfolio-assistant/SKILL.md\n\n---\nname: portfolio-assistant\ndescription: 专门用于查询用户持仓、盈亏情况和历史交易记录的助手。\nmetadata: {\"openclaw\": {\"requires\": {\"env\": [\"STOCK_API_KEY\"]}}}\nuser-invocable: true\n---\n\n# 投资组合助手 (Portfolio Assistant)\n\n专门用于查询用户持仓、盈亏情况和历史交易记录的助手。\n\n## 认证与基础配置\n- 环境变量: `STOCK_API_KEY`\n- Base URL: 从 `config.sh` 中读取 `$STOCK_BASE_URL`（默认 `https://www.mystockearning.cn`，切换域名只需改 `config.sh`）\n\n## API 指令清单\n\n### 获取当前持仓\n当用户问 \"我现在的苹果股票赚了多少钱？\" 或 \"查看我的美股持仓\" 时：\n- 获取特定股票持仓：执行 `./scripts/get_position_by_symbol.sh`（需要设置 `SYMBOL`）\n- 获取某市场的所有持仓（按盈亏比例降序）：执行 `./scripts/get_positions_by_market_sorted.sh`（需要设置 `MARKET`）\n\n### 获取交易记录\n当用户问 \"我最近一个月买过哪些美股？\" 时：\n- 执行 `./scripts/get_trades.sh`（需要设置 `MARKET`、`TRADE_TYPE`）\n\n### 获取投资表现摘要\n当用户问 \"我账户总资产多少？\" 或 \"总盈亏如何？\" 时：\n- 先强制刷新最新市价：执行 `./scripts/refresh_prices.sh`\n- 再获取收益摘要：执行 `./scripts/get_summary.sh`\n\n## 执行规则\n1. 解析用户指令。\n2. **货币显示规则**：在回复任何持仓市值、成本或盈亏金额时，必须根据该股票或账户所在的市场显示正确的货币符号或单位：\n   - `cn_a` (A股): `¥` 或 `元` (人民币 CNY)\n   - `hk` (港股): `HK$` 或 `港元` (港币 HKD)\n   - `us` (美股): `$` 或 `美元` (美元 USD)\n3. **强制刷新机制**：如果用户查询的是“总体盈亏”或“账户表现”，你必须先执行 `update-all-prices` 接口以获取最新市价，再执行 `summary` 接口，并在回复中告知用户“已为您拉取最新行情”。\n4. 执行 `curl` 请求。\n5. 从响应中提取关键字段（如 `profit_loss`, `profit_loss_percent`, `market_value`）。\n6. 使用带颜色的 Markdown 格式或表格输出结果（如：盈利标红或绿，根据当地市场习惯），金额必须保留两位小数并带上正确的货币单位。\n\nFile v1.0.7:SKILL.md\n\n---\nname: stock-earning-cn\ndescription: 这是 StockEarningCN 的 OpenClaw 技能/Skill插件入口说明。安装本目录后，你将获得一组可组合使用的技能\nuser-invocable: true\n---\n# StockEarningCN Skills介绍(StockEarning Assistant)\n\n这是 StockEarningCN 的 OpenClaw 技能插件入口说明。安装本目录后，你将获得一组可组合使用的技能，用于：\n\n- 查询A股行情、股票信息、股票搜索\n- 查询与管理持仓、计算盈亏、刷新持仓现价\n- 记录买入/卖出交易\n\n## 开始之前：\n\n您需要去`https://www.mystockearning.cn注册一个账号，并等待审核通过后获取api key。`\n\n## 认证与基础配置\n\n- 环境变量: `STOCK_API_KEY`\n- Base URL: 从 `config.sh` 中读取 `$STOCK_BASE_URL`（默认 `https://www.mystockearning.cn`，也可通过环境变量 `STOCK_BASE_URL` 覆盖）\n\n所有请求均使用 HTTP Header：`X-API-Key: $STOCK_API_KEY`\n\n推荐安全保存（OpenClaw/Hermes 通用）：使用 `./scripts/setup_api_key.sh` 生成本地密钥文件（默认写入 `~/.config/stockearning/stockearning.env`，权限 600）。\n\n## 推荐使用方式\n\n通常直接使用主入口技能：\n\n- `/stock-earning`：主入口，覆盖最常用的查询/记账/刷新场景\n\n若你希望更可控、更聚焦的行为，可以按需调用下列技能：\n\n| 技能名称                  | 功能                 | 目录                       |\n| --------------------- | ------------------ | ------------------------ |\n| `stock-earning`       | 主入口：综合查询、刷新现价、记录交易 | `./stock-master/`        |\n| `portfolio-assistant` | 仅查询持仓/收益摘要/历史交易    | `./portfolio-assistant/` |\n| `market-data`         | 仅查询实时价格、股票信息、搜索代码  | `./market-data/`         |\n| `trade-execution`     | 仅用于记录买入/卖出交易       | `./trade-execution/`     |\n\n## 安装方式\n\n### Openclaw:\n\n```\nopenclaw skills install stock-earning-cn\n```\n\n<br />\n\n### Hermes:\n\n```\nhermes skills install clawhub:stock-earning-cn\n```\n\nFile v1.0.7:stock-master/SKILL.md\n\n---\nname: stock-earning\ndescription: 主入口：包含查询持仓、行情、记账所有功能。\nuser-invocable: true\nscript: \"bash scripts/run.sh\"\n---\n\n# StockEarning 主投资助手 (Master Agent)\n\n你是一个专业的股票投资组合助手。你可以通过调用 StockEarning 的 REST API 来帮助用户查询市场数据、管理持仓和记录交易。\n\n## 工具使用方式\n\n你现在拥有一个专门的 `run.sh` 脚本来执行所有的 API 调用。该脚本会自动处理环境变量（API Key）的读取和提示。\n\n### 调用格式\n你需要使用本技能目录下的 `./scripts/*.sh` 脚本完成各类操作（每个操作一个脚本文件）。\n\n### 1. 查询持仓与收益 (Get Positions & Summary)\n获取用户当前的股票持仓信息或整体收益。\n- 获取所有持仓：执行 `./scripts/positions_all.sh`\n- 获取特定股票的持仓：执行 `./scripts/positions_by_symbol.sh`（需要设置 `SYMBOL`）\n- 获取整体收益摘要：执行 `./scripts/summary.sh`\n\n### 2. 市场数据 (Market Data)\n查询实时股价或搜索股票代码。\n- 查询实时价格：执行 `./scripts/get_price.sh`（需要设置 `SYMBOL`，可选 `MARKET`）\n- 搜索股票代码：执行 `./scripts/search_stocks.sh`（需要设置 `QUERY`，可选 `MARKET`）\n\n### 3. 记录交易与券商配置 (Trade & Broker)\n帮用户记录买卖行为及检查/配置券商。\n- 检查某市场是否已配置券商：执行 `./scripts/get_brokers.sh`（需要设置 `MARKET`）\n- 一键导入市场默认券商：执行 `./scripts/seed_defaults.sh`（需要设置 `MARKET`）\n- 预计算手续费：执行 `./scripts/calculate_commission.sh`（需要设置 `BROKER_ID`、`TRADE_TYPE`、`QUANTITY`、`PRICE`）\n- 记录买入/卖出交易：执行 `./scripts/create_trade.sh`（需要设置 `SYMBOL`、`NAME`、`MARKET`、`TRADE_TYPE`、`QUANTITY`、`PRICE`、`TRADE_DATE`；可选 `COMMISSION`、`CURRENCY`、`NOTES`）\n\n### 4. 强制刷新与同步\n用于在查询收益前获取最新市价。\n- 执行 `./scripts/refresh_prices.sh`\n\n### 5. 持仓盘点修正 (Position Adjustment)\n如果因为分红、送转或其他原因导致持仓数量对不上，可以通过此接口直接调整**股数**。\n注意：调整数量**不会修改历史成本价**，系统会自动生成一笔 `trade_type=adjust` 的交易记录用于流水追溯，其价格默认为当天的市价（若无则取原成本价）。\n```bash\n{baseDir}/scripts/edit_position.sh 123 1050 \"分红送转调整\"\n```\n\n## 严格执行规则\n1. 分析用户输入。\n2. **货币显示规则**：在回复任何金额（如价格、手续费、总额、盈亏）时，必须根据该股票所在的市场显示正确的货币符号或单位：\n   - `cn_a` (A股): `¥` 或 `元` (人民币 CNY)\n   - `hk` (港股): `HK$` 或 `港元` (港币 HKD)\n   - `us` (美股): `$` 或 `美元` (美元 USD)\n3. **资产查询的强制刷新**：当用户询问“总盈亏”、“账户表现”等涉及整体收益的问题时，你必须**先静默调用** `/api/positions/update-all-prices`，然后再调用 `/api/analytics/summary`，并在回复中说明：“已为您拉取最新行情...”。\n4. **记录交易的智能补全与券商机制**：当用户想要记录交易时，你必须按照以下逻辑处理：\n   - **(代码补全)**：如果没有代码，先调 `GET /api/positions/` 查持仓；没找到则调用搜索 API (`/api/markets/search/stocks`) 遍历 cn_a, hk, us。\n   - **(清仓智能识别)**：如果用户说“清仓”、“全卖了”，且未提供数量，必须先调用 `GET /api/positions/` 获取该股票的当前持仓数量，并自动填入。\n   - **(防爆仓拦截)**：如果是卖出操作且提供了数量，必须先调用 `GET /api/positions/` 检查余额。如果余额不足，直接拒绝并提示用户当前实际持有量。\n   - **(市价智能获取)**：如果用户未提供**买入价格**，静默调用 `/api/markets/stocks/{symbol}/price` 获取当前市价，并作为默认建议价询问用户。\n   - **(按金额反推数量)**：如果用户提供了总金额和单价但未提供数量，自动计算 `数量 = 向下取整(总金额 / 单价)` 并向用户确认。\n   - **(券商前置拦截与算费)**：在发起最终交易前，必须执行以下步骤：\n     1. 调用 `GET /api/brokers/?market={对应的市场}`。\n     2. 如果返回空列表 `[]`，说明该市场无券商。你必须**拦截交易并暂停**，询问用户：“您在这个市场尚未配置券商。是否需要为您一键导入该市场的默认券商配置？或者您想自定义配置？”\n     3. **等待用户回答**。如果用户回答“一键导入”或“同意导入”，你才调用 `POST /api/brokers/seed-defaults` 传入该市场代码，然后再调用 `GET /api/brokers/` 获取刚创建的 `broker_id`。如果用户要求“自定义”，请引导用户提供券商名称和佣金费率。\n     4. 拿到 `broker_id` 后，调用 `POST /api/brokers/calculate-commission` 计算精确的手续费（commission、stamp_duty 等）。\n5. **交易录入前校验**：在发起 `POST /api/trades/` 之前，必须逐项核对并向用户确认以下字段（缺一不可）：\n   - `symbol`：与用户意图一致，且无多余空格\n   - `market`：与标的所属市场一致（如 us/hk/cn_a 等）\n   - `trade_type`：buy/sell 与用户意图一致\n   - `quantity`：为正数；若用户说“清仓/全卖”，必须先查持仓再填入\n   - `price`：为正数，单位与市场/货币一致\n   - `fees`：在已配置券商时先用 `/api/brokers/calculate-commission` 计算；将 `total_fees` 写入 `commission`，并把明细（commission/stamp_duty/transfer_fee）写入 `notes`\n   - `trade_date`：明确的时间（含时区）；若用户未指定，需询问或使用用户确认的默认时间\n6. **最终确认**：在执行写入前，必须输出一段“逐项确认清单”（symbol、market、trade_type、quantity、price、fees、trade_date），并等待用户明确回复“确认/同意/继续”后才执行写入。\n7. **纠错机制**：\n   - 交易错误：如果交易已写入后用户发现错误，推荐通过新增一笔“反向交易”进行冲销（在 `notes` 写明“冲销/更正原因”），再按正确数据重新录入。\n   - 盘点修正：如果仅仅是当前股数对不上（如送转股），可直接调用 `PUT /api/positions/{position_id}/edit` 进行盘点对齐，此操作**仅调整股数，不影响历史成本价**。\n   - 任何更正后：均需重新查询 `GET /api/positions/` 核对持仓数据是否符合预期。\n8. **工具使用**：使用 `{baseDir}/scripts/run.sh` 执行对应的 API 请求。\n9. **输出格式**：将 API 返回的 JSON 数据解析为对用户友好的 Markdown 表格或自然语言，金额必须保留两位小数并带上正确的货币单位。\n\nFile v1.0.7:trade-execution/SKILL.md\n\n---\nname: trade-execution\ndescription: 专门用于代表用户向系统中记录买入或卖出交易的助手。\nuser-invocable: true\n---\n\n# 交易执行助手 (Trade Execution)\n\n专门用于代表用户向系统中记录买入或卖出交易的助手。\n\n## 认证与基础配置\n- 环境变量: `STOCK_API_KEY`\n- Base URL: 从 `config.sh` 中读取 `$STOCK_BASE_URL`（默认 `https://www.mystockearning.cn`，切换域名只需改 `config.sh`）\n\n## API 指令清单\n\n### 记录新交易与券商配置\n当用户说 \"我今天以 150 美元买入了 100 股苹果\" 时：\n- 1) 检查市场券商：执行 `./scripts/get_brokers.sh`（需要设置 `MARKET`）\n- 2) 如需导入默认券商：执行 `./scripts/seed_defaults.sh`（需要设置 `MARKET`）\n- 3) 计算手续费：执行 `./scripts/calculate_commission.sh`（需要设置 `BROKER_ID`、`TRADE_TYPE`、`QUANTITY`、`PRICE`）\n- 4) 记录交易：执行 `./scripts/create_trade.sh`（需要设置 `SYMBOL`、`NAME`、`MARKET`、`TRADE_TYPE`、`QUANTITY`、`PRICE`、`TRADE_DATE`；可选 `COMMISSION`、`CURRENCY`、`NOTES`）\n\n## 严格执行规则\n1. 分析用户指令。\n2. **货币显示规则**：在回复任何金额（如价格、手续费、总额等）时，必须根据该股票所在的市场显示正确的货币符号或单位：\n   - `cn_a` (A股): `¥` 或 `元` (人民币 CNY)\n   - `hk` (港股): `HK$` 或 `港元` (港币 HKD)\n   - `us` (美股): `$` 或 `美元` (美元 USD)\n3. **智能补全与确认机制**：当用户想要记录交易时，你必须按照以下逻辑处理：\n   - **(代码补全)**：如果没有提供完整的股票代码和市场，先调 `GET /api/positions/` 查持仓；没找到则调用搜索 API (`/api/markets/search/stocks`) 遍历 cn_a, hk, us。\n   - **(清仓智能识别)**：如果用户说“清仓”、“全卖了”，且未提供数量，必须先调用 `GET /api/positions/` 获取该股票的当前持仓数量，并自动填入。\n   - **(防爆仓拦截)**：如果是卖出操作且提供了数量，必须先调用 `GET /api/positions/` 检查余额。如果余额不足，直接拒绝并提示用户当前实际持有量。\n   - **(市价智能获取)**：如果用户未提供**买入价格**，静默调用 `/api/markets/stocks/{symbol}/price` 获取当前市价，并作为默认建议价询问用户。\n   - **(按金额反推数量)**：如果用户提供了总金额和单价但未提供数量，自动计算 `数量 = 向下取整(总金额 / 单价)` 并向用户确认。\n3. **券商前置拦截与算费机制**：在确认了股票代码、数量和价格后，在发起最终交易前，必须执行以下步骤：\n   - 调用 `GET /api/brokers/?market={对应的市场}`。\n   - 如果返回空列表 `[]`，说明该市场无券商。你必须**拦截交易并暂停**，询问用户：“您在这个市场尚未配置券商，无法计算印花税和交易佣金。是否需要为您一键导入该市场的默认券商配置？或者您想自定义配置？”\n   - **等待用户回答**。如果用户回答“一键导入”或“同意导入”，你才调用 `POST /api/brokers/seed-defaults` 传入该市场代码，然后再调用 `GET /api/brokers/` 获取刚创建的 `broker_id`。如果用户要求“自定义”，请引导用户提供券商名称和佣金费率。\n   - 拿到 `broker_id` 后，调用 `POST /api/brokers/calculate-commission` 计算精确的手续费（commission、stamp_duty 等）。\n4. **最终确认**：在发起最终的 `POST /api/trades/` 之前，**必须**向用户输出一段确认信息（包含代码、名称、市场、数量、价格、以及**预估的手续费/印花税总计**）。只有在用户回复确认后，才能执行。\n5. **确认后执行**：执行 `curl -X POST /api/trades/` 记录交易（带上获取到的 broker_id 和费用数据）。\n6. **输出结果**：根据 API 响应，向用户确认交易已成功记录，并展示总金额。\n\nFile v1.0.7:_meta.json\n\n{\n  \"ownerId\": \"kn75wc1b4zt76w9g1d6wgav3f1804jt8\",\n  \"slug\": \"secn\",\n  \"version\": \"1.0.7\",\n  \"publishedAt\": 1778244532479\n}\n\nFile v1.0.7:skill-card.md\n\n## Description: <br>\nStockEarning helps agents query stock market data, inspect portfolio holdings and performance, and record buy or sell trades through the StockEarning service. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[hareluya](https://clawhub.ai/user/hareluya) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nExternal users and developers use this skill to connect an agent to StockEarning for market lookups, portfolio summaries, position refreshes, and carefully confirmed trade-record creation. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill requires a StockEarning API key and uses it to access portfolio and trade-record data. <br>\nMitigation: Install only when the StockEarning service is trusted, keep the API key private, and store it with restrictive local permissions. <br>\nRisk: Trade or position-changing actions can affect the user's financial records if the requested details are wrong. <br>\nMitigation: Review the skill's confirmation checklist carefully before approving trade creation or position edits. <br>\nRisk: A custom STOCK_BASE_URL can send API requests and credentials to a non-default endpoint. <br>\nMitigation: Use the default StockEarning endpoint unless the replacement endpoint is fully trusted. <br>\n\n\n## Reference(s): <br>\n- [ClawHub Skill Page](https://clawhub.ai/hareluya/stock-earning-cn) <br>\n- [StockEarning Service](https://www.mystockearning.cn) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance] <br>\n**Output Format:** [Markdown summaries and shell-command-backed API responses] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Requires a StockEarning API key and may return market, portfolio, broker, commission, position, and trade-record data.] <br>\n\n## Skill Version(s): <br>\n1.0.7 (source: server release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nFile v1.0.7:plugin.json\n\n{\n  \"name\": \"stock-earning-cn\",\n  \"version\": \"1.0.0\",\n  \"description\": \"A pure HTTP/REST API plugin for OpenClaw to manage stock portfolios and query global market data.\",\n  \"author\": \"StockEarning\",\n  \"publisher\": \"StockEarning\",\n  \"homepage\": \"https://www.mystockearning.cn\",\n  \"keywords\": [\"finance\", \"stocks\", \"portfolio\", \"trading\", \"openclaw\", \"claude-code\"],\n  \"repository\": \"https://github.com/hareluya/stock-earning-cn-skills\",\n  \"license\": \"MIT-0\",\n  \"releases\": \"https://github.com/hareluya/stock-earning-cn-skills/releases\",\n  \"commands\": {\n    \"stock-earning\": \"./stock-master/SKILL.md\",\n    \"market-data\": \"./market-data/SKILL.md\",\n    \"portfolio-assistant\": \"./portfolio-assistant/SKILL.md\",\n    \"trade-execution\": \"./trade-execution/SKILL.md\"\n  },\n  \"environment\": {\n    \"STOCK_API_KEY\": {\n      \"description\": \"Your StockEarning.cn API Key\",\n      \"required\": true\n    }\n  }\n}\n\nArchive v1.0.6: 36 files, 24043 bytes\n\nFiles: config.sh (125b), install.sh (1339b), market-data/scripts/get_info.sh (350b), market-data/scripts/get_price.sh (351b), market-data/scripts/search_stocks.sh (395b), market-data/SKILL.md (1708b), plugin.json (894b), portfolio-assistant/scripts/get_position_by_symbol.sh (307b), portfolio-assistant/scripts/get_positions_by_market_sorted.sh (346b), portfolio-assistant/scripts/get_summary.sh (223b), portfolio-assistant/scripts/get_trades.sh (422b), portfolio-assistant/scripts/refresh_prices.sh (234b), portfolio-assistant/SKILL.md (2240b), reference/config.sh (222b), reference/runtime.sh (2869b), scripts/setup_api_key.sh (224b), SKILL.md (2074b), stock-master/scripts/calculate_commission.sh (621b), stock-master/scripts/create_trade.sh (1354b), stock-master/scripts/edit_position.sh (752b), stock-master/scripts/get_brokers.sh (225b), stock-master/scripts/get_price.sh (271b), stock-master/scripts/positions_all.sh (135b), stock-master/scripts/positions_by_symbol.sh (227b), stock-master/scripts/refresh_prices.sh (153b), stock-master/scripts/run.sh (2631b), stock-master/scripts/search_stocks.sh (315b), stock-master/scripts/seed_defaults.sh (239b), stock-master/scripts/summary.sh (142b), stock-master/SKILL.md (6923b), trade-execution/scripts/calculate_commission.sh (701b), trade-execution/scripts/create_trade.sh (1437b), trade-execution/scripts/get_brokers.sh (305b), trade-execution/scripts/seed_defaults.sh (319b), trade-execution/SKILL.md (3972b), _meta.json (123b)\n\nFile v1.0.6:market-data/SKILL.md\n\n---\nname: market-data\ndescription: 专门用于查询全球股票实时价格、基本信息和搜索股票代码的助手。\nmetadata: {\"openclaw\": {\"requires\": {\"env\": [\"STOCK_API_KEY\"]}}}\nuser-invocable: true\n---\n\n# 市场数据助手 (Market Data)\n\n专门用于查询全球股票实时价格、基本信息和搜索股票代码的助手。\n\n## 认证与基础配置\n- 环境变量: `STOCK_API_KEY`\n- Base URL: 从 `config.sh` 中读取 `$STOCK_BASE_URL`（默认 `https://www.mystockearning.cn`，切换域名只需改 `config.sh`）\n\n## 市场代码 (Market Codes)\n- 美股: `us`\n- 港股: `hk`\n- A股: `cn_a`\n- B股: `cn_b`\n\n## API 指令清单\n\n### 搜索股票\n当用户说 \"查询腾讯的代码\" 或 \"寻找苹果股票\" 时：\n- 执行 `./scripts/search_stocks.sh`（需要设置 `QUERY`，可选 `MARKET`）\n\n### 获取实时价格\n当用户说 \"查看 AAPL 的现价\" 时：\n- 执行 `./scripts/get_price.sh`（需要设置 `SYMBOL`，可选 `MARKET`）\n\n### 获取股票详情\n当用户需要股票的基本面信息时：\n- 执行 `./scripts/get_info.sh`（需要设置 `SYMBOL`，可选 `MARKET`）\n\n## 执行规则\n1. 解析用户指令。\n2. **货币显示规则**：在回复实时价格或任何金额时，必须根据该股票所在的市场显示正确的货币符号或单位：\n   - `cn_a` (A股): `¥` 或 `元` (人民币 CNY)\n   - `hk` (港股): `HK$` 或 `港元` (港币 HKD)\n   - `us` (美股): `$` 或 `美元` (美元 USD)\n3. 构造对应的 `curl` 命令并执行。\n4. 如果返回 404，告知用户未找到该股票，请检查名称或市场代码。\n5. 将 JSON 格式的价格和货币单位转换为易读的自然语言，金额必须带上正确的货币单位。\n\nFile v1.0.6:portfolio-assistant/SKILL.md\n\n---\nname: portfolio-assistant\ndescription: 专门用于查询用户持仓、盈亏情况和历史交易记录的助手。\nmetadata: {\"openclaw\": {\"requires\": {\"env\": [\"STOCK_API_KEY\"]}}}\nuser-invocable: true\n---\n\n# 投资组合助手 (Portfolio Assistant)\n\n专门用于查询用户持仓、盈亏情况和历史交易记录的助手。\n\n## 认证与基础配置\n- 环境变量: `STOCK_API_KEY`\n- Base URL: 从 `config.sh` 中读取 `$STOCK_BASE_URL`（默认 `https://www.mystockearning.cn`，切换域名只需改 `config.sh`）\n\n## API 指令清单\n\n### 获取当前持仓\n当用户问 \"我现在的苹果股票赚了多少钱？\" 或 \"查看我的美股持仓\" 时：\n- 获取特定股票持仓：执行 `./scripts/get_position_by_symbol.sh`（需要设置 `SYMBOL`）\n- 获取某市场的所有持仓（按盈亏比例降序）：执行 `./scripts/get_positions_by_market_sorted.sh`（需要设置 `MARKET`）\n\n### 获取交易记录\n当用户问 \"我最近一个月买过哪些美股？\" 时：\n- 执行 `./scripts/get_trades.sh`（需要设置 `MARKET`、`TRADE_TYPE`）\n\n### 获取投资表现摘要\n当用户问 \"我账户总资产多少？\" 或 \"总盈亏如何？\" 时：\n- 先强制刷新最新市价：执行 `./scripts/refresh_prices.sh`\n- 再获取收益摘要：执行 `./scripts/get_summary.sh`\n\n## 执行规则\n1. 解析用户指令。\n2. **货币显示规则**：在回复任何持仓市值、成本或盈亏金额时，必须根据该股票或账户所在的市场显示正确的货币符号或单位：\n   - `cn_a` (A股): `¥` 或 `元` (人民币 CNY)\n   - `hk` (港股): `HK$` 或 `港元` (港币 HKD)\n   - `us` (美股): `$` 或 `美元` (美元 USD)\n3. **强制刷新机制**：如果用户查询的是“总体盈亏”或“账户表现”，你必须先执行 `update-all-prices` 接口以获取最新市价，再执行 `summary` 接口，并在回复中告知用户“已为您拉取最新行情”。\n4. 执行 `curl` 请求。\n5. 从响应中提取关键字段（如 `profit_loss`, `profit_loss_percent`, `market_value`）。\n6. 使用带颜色的 Markdown 格式或表格输出结果（如：盈利标红或绿，根据当地市场习惯），金额必须保留两位小数并带上正确的货币单位。\n\nFile v1.0.6:SKILL.md\n\n---\nname: stock-earning-cn\ndescription: 这是 StockEarningCN 的 OpenClaw 技能/Skill插件入口说明。安装本目录后，你将获得一组可组合使用的技能\nuser-invocable: true\n---\n# StockEarningCN Skills介绍(StockEarning Assistant)\n\n这是 StockEarningCN 的 OpenClaw 技能插件入口说明。安装本目录后，你将获得一组可组合使用的技能，用于：\n\n- 查询A股行情、股票信息、股票搜索\n- 查询与管理持仓、计算盈亏、刷新持仓现价\n- 记录买入/卖出交易\n\n## 开始之前：\n\n您需要去`https://www.mystockearning.cn注册一个账号，并等待审核通过后获取api key。`\n\n## 认证与基础配置\n\n- 环境变量: `STOCK_API_KEY`\n- Base URL: 从 `config.sh` 中读取 `$STOCK_BASE_URL`（默认 `https://www.mystockearning.cn`，也可通过环境变量 `STOCK_BASE_URL` 覆盖）\n\n所有请求均使用 HTTP Header：`X-API-Key: $STOCK_API_KEY`\n\n推荐安全保存（OpenClaw/Hermes 通用）：使用 `./scripts/setup_api_key.sh` 生成本地密钥文件（默认写入 `~/.config/stockearning/stockearning.env`，权限 600）。\n\n## 推荐使用方式\n\n通常直接使用主入口技能：\n\n- `/stock-earning`：主入口，覆盖最常用的查询/记账/刷新场景\n\n若你希望更可控、更聚焦的行为，可以按需调用下列技能：\n\n| 技能名称                  | 功能                 | 目录                       |\n| --------------------- | ------------------ | ------------------------ |\n| `stock-earning`       | 主入口：综合查询、刷新现价、记录交易 | `./stock-master/`        |\n| `portfolio-assistant` | 仅查询持仓/收益摘要/历史交易    | `./portfolio-assistant/` |\n| `market-data`         | 仅查询实时价格、股票信息、搜索代码  | `./market-data/`         |\n| `trade-execution`     | 仅用于记录买入/卖出交易       | `./trade-execution/`     |\n\n## 安装方式\n\n### Openclaw:\n\n```\nopenclaw skills install stock-earning-cn\n```\n\n<br />\n\n### Hermes:\n\n```\nhermes skills install clawhub:stock-earning-cn\n```\n\nFile v1.0.6:stock-master/SKILL.md\n\n---\nname: stock-earning\ndescription: 主入口：包含查询持仓、行情、记账所有功能。\nuser-invocable: true\nscript: \"bash scripts/run.sh\"\n---\n\n# StockEarning 主投资助手 (Master Agent)\n\n你是一个专业的股票投资组合助手。你可以通过调用 StockEarning 的 REST API 来帮助用户查询市场数据、管理持仓和记录交易。\n\n## 工具使用方式\n\n你现在拥有一个专门的 `run.sh` 脚本来执行所有的 API 调用。该脚本会自动处理环境变量（API Key）的读取和提示。\n\n### 调用格式\n你需要使用本技能目录下的 `./scripts/*.sh` 脚本完成各类操作（每个操作一个脚本文件）。\n\n### 1. 查询持仓与收益 (Get Positions & Summary)\n获取用户当前的股票持仓信息或整体收益。\n- 获取所有持仓：执行 `./scripts/positions_all.sh`\n- 获取特定股票的持仓：执行 `./scripts/positions_by_symbol.sh`（需要设置 `SYMBOL`）\n- 获取整体收益摘要：执行 `./scripts/summary.sh`\n\n### 2. 市场数据 (Market Data)\n查询实时股价或搜索股票代码。\n- 查询实时价格：执行 `./scripts/get_price.sh`（需要设置 `SYMBOL`，可选 `MARKET`）\n- 搜索股票代码：执行 `./scripts/search_stocks.sh`（需要设置 `QUERY`，可选 `MARKET`）\n\n### 3. 记录交易与券商配置 (Trade & Broker)\n帮用户记录买卖行为及检查/配置券商。\n- 检查某市场是否已配置券商：执行 `./scripts/get_brokers.sh`（需要设置 `MARKET`）\n- 一键导入市场默认券商：执行 `./scripts/seed_defaults.sh`（需要设置 `MARKET`）\n- 预计算手续费：执行 `./scripts/calculate_commission.sh`（需要设置 `BROKER_ID`、`TRADE_TYPE`、`QUANTITY`、`PRICE`）\n- 记录买入/卖出交易：执行 `./scripts/create_trade.sh`（需要设置 `SYMBOL`、`NAME`、`MARKET`、`TRADE_TYPE`、`QUANTITY`、`PRICE`、`TRADE_DATE`；可选 `COMMISSION`、`CURRENCY`、`NOTES`）\n\n### 4. 强制刷新与同步\n用于在查询收益前获取最新市价。\n- 执行 `./scripts/refresh_prices.sh`\n\n### 5. 持仓盘点修正 (Position Adjustment)\n如果因为分红、送转或其他原因导致持仓数量对不上，可以通过此接口直接调整**股数**。\n注意：调整数量**不会修改历史成本价**，系统会自动生成一笔 `trade_type=adjust` 的交易记录用于流水追溯，其价格默认为当天的市价（若无则取原成本价）。\n```bash\n{baseDir}/scripts/edit_position.sh 123 1050 \"分红送转调整\"\n```\n\n## 严格执行规则\n1. 分析用户输入。\n2. **货币显示规则**：在回复任何金额（如价格、手续费、总额、盈亏）时，必须根据该股票所在的市场显示正确的货币符号或单位：\n   - `cn_a` (A股): `¥` 或 `元` (人民币 CNY)\n   - `hk` (港股): `HK$` 或 `港元` (港币 HKD)\n   - `us` (美股): `$` 或 `美元` (美元 USD)\n3. **资产查询的强制刷新**：当用户询问“总盈亏”、“账户表现”等涉及整体收益的问题时，你必须**先静默调用** `/api/positions/update-all-prices`，然后再调用 `/api/analytics/summary`，并在回复中说明：“已为您拉取最新行情...”。\n4. **记录交易的智能补全与券商机制**：当用户想要记录交易时，你必须按照以下逻辑处理：\n   - **(代码补全)**：如果没有代码，先调 `GET /api/positions/` 查持仓；没找到则调用搜索 API (`/api/markets/search/stocks`) 遍历 cn_a, hk, us。\n   - **(清仓智能识别)**：如果用户说“清仓”、“全卖了”，且未提供数量，必须先调用 `GET /api/positions/` 获取该股票的当前持仓数量，并自动填入。\n   - **(防爆仓拦截)**：如果是卖出操作且提供了数量，必须先调用 `GET /api/positions/` 检查余额。如果余额不足，直接拒绝并提示用户当前实际持有量。\n   - **(市价智能获取)**：如果用户未提供**买入价格**，静默调用 `/api/markets/stocks/{symbol}/price` 获取当前市价，并作为默认建议价询问用户。\n   - **(按金额反推数量)**：如果用户提供了总金额和单价但未提供数量，自动计算 `数量 = 向下取整(总金额 / 单价)` 并向用户确认。\n   - **(券商前置拦截与算费)**：在发起最终交易前，必须执行以下步骤：\n     1. 调用 `GET /api/brokers/?market={对应的市场}`。\n     2. 如果返回空列表 `[]`，说明该市场无券商。你必须**拦截交易并暂停**，询问用户：“您在这个市场尚未配置券商。是否需要为您一键导入该市场的默认券商配置？或者您想自定义配置？”\n     3. **等待用户回答**。如果用户回答“一键导入”或“同意导入”，你才调用 `POST /api/brokers/seed-defaults` 传入该市场代码，然后再调用 `GET /api/brokers/` 获取刚创建的 `broker_id`。如果用户要求“自定义”，请引导用户提供券商名称和佣金费率。\n     4. 拿到 `broker_id` 后，调用 `POST /api/brokers/calculate-commission` 计算精确的手续费（commission、stamp_duty 等）。\n5. **交易录入前校验**：在发起 `POST /api/trades/` 之前，必须逐项核对并向用户确认以下字段（缺一不可）：\n   - `symbol`：与用户意图一致，且无多余空格\n   - `market`：与标的所属市场一致（如 us/hk/cn_a 等）\n   - `trade_type`：buy/sell 与用户意图一致\n   - `quantity`：为正数；若用户说“清仓/全卖”，必须先查持仓再填入\n   - `price`：为正数，单位与市场/货币一致\n   - `fees`：在已配置券商时先用 `/api/brokers/calculate-commission` 计算；将 `total_fees` 写入 `commission`，并把明细（commission/stamp_duty/transfer_fee）写入 `notes`\n   - `trade_date`：明确的时间（含时区）；若用户未指定，需询问或使用用户确认的默认时间\n6. **最终确认**：在执行写入前，必须输出一段“逐项确认清单”（symbol、market、trade_type、quantity、price、fees、trade_date），并等待用户明确回复“确认/同意/继续”后才执行写入。\n7. **纠错机制**：\n   - 交易错误：如果交易已写入后用户发现错误，推荐通过新增一笔“反向交易”进行冲销（在 `notes` 写明“冲销/更正原因”），再按正确数据重新录入。\n   - 盘点修正：如果仅仅是当前股数对不上（如送转股），可直接调用 `PUT /api/positions/{position_id}/edit` 进行盘点对齐，此操作**仅调整股数，不影响历史成本价**。\n   - 任何更正后：均需重新查询 `GET /api/positions/` 核对持仓数据是否符合预期。\n8. **工具使用**：使用 `{baseDir}/scripts/run.sh` 执行对应的 API 请求。\n9. **输出格式**：将 API 返回的 JSON 数据解析为对用户友好的 Markdown 表格或自然语言，金额必须保留两位小数并带上正确的货币单位。\n\nFile v1.0.6:trade-execution/SKILL.md\n\n---\nname: trade-execution\ndescription: 专门用于代表用户向系统中记录买入或卖出交易的助手。\nuser-invocable: true\n---\n\n# 交易执行助手 (Trade Execution)\n\n专门用于代表用户向系统中记录买入或卖出交易的助手。\n\n## 认证与基础配置\n- 环境变量: `STOCK_API_KEY`\n- Base URL: 从 `config.sh` 中读取 `$STOCK_BASE_URL`（默认 `https://www.mystockearning.cn`，切换域名只需改 `config.sh`）\n\n## API 指令清单\n\n### 记录新交易与券商配置\n当用户说 \"我今天以 150 美元买入了 100 股苹果\" 时：\n- 1) 检查市场券商：执行 `./scripts/get_brokers.sh`（需要设置 `MARKET`）\n- 2) 如需导入默认券商：执行 `./scripts/seed_defaults.sh`（需要设置 `MARKET`）\n- 3) 计算手续费：执行 `./scripts/calculate_commission.sh`（需要设置 `BROKER_ID`、`TRADE_TYPE`、`QUANTITY`、`PRICE`）\n- 4) 记录交易：执行 `./scripts/create_trade.sh`（需要设置 `SYMBOL`、`NAME`、`MARKET`、`TRADE_TYPE`、`QUANTITY`、`PRICE`、`TRADE_DATE`；可选 `COMMISSION`、`CURRENCY`、`NOTES`）\n\n## 严格执行规则\n1. 分析用户指令。\n2. **货币显示规则**：在回复任何金额（如价格、手续费、总额等）时，必须根据该股票所在的市场显示正确的货币符号或单位：\n   - `cn_a` (A股): `¥` 或 `元` (人民币 CNY)\n   - `hk` (港股): `HK$` 或 `港元` (港币 HKD)\n   - `us` (美股): `$` 或 `美元` (美元 USD)\n3. **智能补全与确认机制**：当用户想要记录交易时，你必须按照以下逻辑处理：\n   - **(代码补全)**：如果没有提供完整的股票代码和市场，先调 `GET /api/positions/` 查持仓；没找到则调用搜索 API (`/api/markets/search/stocks`) 遍历 cn_a, hk, us。\n   - **(清仓智能识别)**：如果用户说“清仓”、“全卖了”，且未提供数量，必须先调用 `GET /api/positions/` 获取该股票的当前持仓数量，并自动填入。\n   - **(防爆仓拦截)**：如果是卖出操作且提供了数量，必须先调用 `GET /api/positions/` 检查余额。如果余额不足，直接拒绝并提示用户当前实际持有量。\n   - **(市价智能获取)**：如果用户未提供**买入价格**，静默调用 `/api/markets/stocks/{symbol}/price` 获取当前市价，并作为默认建议价询问用户。\n   - **(按金额反推数量)**：如果用户提供了总金额和单价但未提供数量，自动计算 `数量 = 向下取整(总金额 / 单价)` 并向用户确认。\n3. **券商前置拦截与算费机制**：在确认了股票代码、数量和价格后，在发起最终交易前，必须执行以下步骤：\n   - 调用 `GET /api/brokers/?market={对应的市场}`。\n   - 如果返回空列表 `[]`，说明该市场无券商。你必须**拦截交易并暂停**，询问用户：“您在这个市场尚未配置券商，无法计算印花税和交易佣金。是否需要为您一键导入该市场的默认券商配置？或者您想自定义配置？”\n   - **等待用户回答**。如果用户回答“一键导入”或“同意导入”，你才调用 `POST /api/brokers/seed-defaults` 传入该市场代码，然后再调用 `GET /api/brokers/` 获取刚创建的 `broker_id`。如果用户要求“自定义”，请引导用户提供券商名称和佣金费率。\n   - 拿到 `broker_id` 后，调用 `POST /api/brokers/calculate-commission` 计算精确的手续费（commission、stamp_duty 等）。\n4. **最终确认**：在发起最终的 `POST /api/trades/` 之前，**必须**向用户输出一段确认信息（包含代码、名称、市场、数量、价格、以及**预估的手续费/印花税总计**）。只有在用户回复确认后，才能执行。\n5. **确认后执行**：执行 `curl -X POST /api/trades/` 记录交易（带上获取到的 broker_id 和费用数据）。\n6. **输出结果**：根据 API 响应，向用户确认交易已成功记录，并展示总金额。\n\nFile v1.0.6:_meta.json\n\n{\n  \"ownerId\": \"kn75wc1b4zt76w9g1d6wgav3f1804jt8\",\n  \"slug\": \"secn\",\n  \"version\": \"1.0.6\",\n  \"publishedAt\": 1778151393550\n}\n\nFile v1.0.6:plugin.json\n\n{\n  \"name\": \"stock-earning-cn\",\n  \"version\": \"1.0.0\",\n  \"description\": \"A pure HTTP/REST API plugin for OpenClaw to manage stock portfolios and query global market data.\",\n  \"author\": \"StockEarning\",\n  \"publisher\": \"StockEarning\",\n  \"homepage\": \"https://www.mystockearning.cn\",\n  \"keywords\": [\"finance\", \"stocks\", \"portfolio\", \"trading\", \"openclaw\", \"claude-code\"],\n  \"repository\": \"https://github.com/hareluya/stock-earning-cn-skills\",\n  \"license\": \"MIT-0\",\n  \"releases\": \"https://github.com/hareluya/stock-earning-cn-skills/releases\",\n  \"commands\": {\n    \"stock-earning\": \"./stock-master/SKILL.md\",\n    \"market-data\": \"./market-data/SKILL.md\",\n    \"portfolio-assistant\": \"./portfolio-assistant/SKILL.md\",\n    \"trade-execution\": \"./trade-execution/SKILL.md\"\n  },\n  \"environment\": {\n    \"STOCK_API_KEY\": {\n      \"description\": \"Your StockEarning.cn API Key\",\n      \"required\": true\n    }\n  }\n}\n\nArchive v1.0.5: 36 files, 23903 bytes\n\nFiles: config.sh (125b), install.sh (1339b), market-data/scripts/get_info.sh (350b), market-data/scripts/get_price.sh (351b), market-data/scripts/search_stocks.sh (395b), market-data/SKILL.md (1708b), plugin.json (894b), portfolio-assistant/scripts/get_position_by_symbol.sh (307b), portfolio-assistant/scripts/get_positions_by_market_sorted.sh (346b), portfolio-assistant/scripts/get_summary.sh (223b), portfolio-assistant/scripts/get_trades.sh (422b), portfolio-assistant/scripts/refresh_prices.sh (234b), portfolio-assistant/SKILL.md (2240b), reference/config.sh (222b), reference/runtime.sh (2869b), scripts/setup_api_key.sh (224b), SKILL.md (2074b), stock-master/scripts/calculate_commission.sh (621b), stock-master/scripts/create_trade.sh (1175b), stock-master/scripts/edit_position.sh (752b), stock-master/scripts/get_brokers.sh (225b), stock-master/scripts/get_price.sh (271b), stock-master/scripts/positions_all.sh (135b), stock-master/scripts/positions_by_symbol.sh (227b), stock-master/scripts/refresh_prices.sh (153b), stock-master/scripts/run.sh (2631b), stock-master/scripts/search_stocks.sh (315b), stock-master/scripts/seed_defaults.sh (239b), stock-master/scripts/summary.sh (142b), stock-master/SKILL.md (6923b), trade-execution/scripts/calculate_commission.sh (701b), trade-execution/scripts/create_trade.sh (1258b), trade-execution/scripts/get_brokers.sh (305b), trade-execution/scripts/seed_defaults.sh (319b), trade-execution/SKILL.md (3972b), _meta.json (123b)\n\nFile v1.0.5:market-data/SKILL.md\n\n---\nname: market-data\ndescription: 专门用于查询全球股票实时价格、基本信息和搜索股票代码的助手。\nmetadata: {\"openclaw\": {\"requires\": {\"env\": [\"STOCK_API_KEY\"]}}}\nuser-invocable: true\n---\n\n# 市场数据助手 (Market Data)\n\n专门用于查询全球股票实时价格、基本信息和搜索股票代码的助手。\n\n## 认证与基础配置\n- 环境变量: `STOCK_API_KEY`\n- Base URL: 从 `config.sh` 中读取 `$STOCK_BASE_URL`（默认 `https://www.mystockearning.cn`，切换域名只需改 `config.sh`）\n\n## 市场代码 (Market Codes)\n- 美股: `us`\n- 港股: `hk`\n- A股: `cn_a`\n- B股: `cn_b`\n\n## API 指令清单\n\n### 搜索股票\n当用户说 \"查询腾讯的代码\" 或 \"寻找苹果股票\" 时：\n- 执行 `./scripts/search_stocks.sh`（需要设置 `QUERY`，可选 `MARKET`）\n\n### 获取实时价格\n当用户说 \"查看 AAPL 的现价\" 时：\n- 执行 `./scripts/get_price.sh`（需要设置 `SYMBOL`，可选 `MARKET`）\n\n### 获取股票详情\n当用户需要股票的基本面信息时：\n- 执行 `./scripts/get_info.sh`（需要设置 `SYMBOL`，可选 `MARKET`）\n\n## 执行规则\n1. 解析用户指令。\n2. **货币显示规则**：在回复实时价格或任何金额时，必须根据该股票所在的市场显示正确的货币符号或单位：\n   - `cn_a` (A股): `¥` 或 `元` (人民币 CNY)\n   - `hk` (港股): `HK$` 或 `港元` (港币 HKD)\n   - `us` (美股): `$` 或 `美元` (美元 USD)\n3. 构造对应的 `curl` 命令并执行。\n4. 如果返回 404，告知用户未找到该股票，请检查名称或市场代码。\n5. 将 JSON 格式的价格和货币单位转换为易读的自然语言，金额必须带上正确的货币单位。\n\nFile v1.0.5:portfolio-assistant/SKILL.md\n\n---\nname: portfolio-assistant\ndescription: 专门用于查询用户持仓、盈亏情况和历史交易记录的助手。\nmetadata: {\"openclaw\": {\"requires\": {\"env\": [\"STOCK_API_KEY\"]}}}\nuser-invocable: true\n---\n\n# 投资组合助手 (Portfolio Assistant)\n\n专门用于查询用户持仓、盈亏情况和历史交易记录的助手。\n\n## 认证与基础配置\n- 环境变量: `STOCK_API_KEY`\n- Base URL: 从 `config.sh` 中读取 `$STOCK_BASE_URL`（默认 `https://www.mystockearning.cn`，切换域名只需改 `config.sh`）\n\n## API 指令清单\n\n### 获取当前持仓\n当用户问 \"我现在的苹果股票赚了多少钱？\" 或 \"查看我的美股持仓\" 时：\n- 获取特定股票持仓：执行 `./scripts/get_position_by_symbol.sh`（需要设置 `SYMBOL`）\n- 获取某市场的所有持仓（按盈亏比例降序）：执行 `./scripts/get_positions_by_market_sorted.sh`（需要设置 `MARKET`）\n\n### 获取交易记录\n当用户问 \"我最近一个月买过哪些美股？\" 时：\n- 执行 `./scripts/get_trades.sh`（需要设置 `MARKET`、`TRADE_TYPE`）\n\n### 获取投资表现摘要\n当用户问 \"我账户总资产多少？\" 或 \"总盈亏如何？\" 时：\n- 先强制刷新最新市价：执行 `./scripts/refresh_prices.sh`\n- 再获取收益摘要：执行 `./scripts/get_summary.sh`\n\n## 执行规则\n1. 解析用户指令。\n2. **货币显示规则**：在回复任何持仓市值、成本或盈亏金额时，必须根据该股票或账户所在的市场显示正确的货币符号或单位：\n   - `cn_a` (A股): `¥` 或 `元` (人民币 CNY)\n   - `hk` (港股): `HK$` 或 `港元` (港币 HKD)\n   - `us` (美股): `$` 或 `美元` (美元 USD)\n3. **强制刷新机制**：如果用户查询的是“总体盈亏”或“账户表现”，你必须先执行 `update-all-prices` 接口以获取最新市价，再执行 `summary` 接口，并在回复中告知用户“已为您拉取最新行情”。\n4. 执行 `curl` 请求。\n5. 从响应中提取关键字段（如 `profit_loss`, `profit_loss_percent`, `market_value`）。\n6. 使用带颜色的 Markdown 格式或表格输出结果（如：盈利标红或绿，根据当地市场习惯），金额必须保留两位小数并带上正确的货币单位。\n\nFile v1.0.5:SKILL.md\n\n---\nname: stock-earning-cn\ndescription: 这是 StockEarningCN 的 OpenClaw 技能/Skill插件入口说明。安装本目录后，你将获得一组可组合使用的技能\nuser-invocable: true\n---\n# StockEarningCN Skills介绍(StockEarning Assistant)\n\n这是 StockEarningCN 的 OpenClaw 技能插件入口说明。安装本目录后，你将获得一组可组合使用的技能，用于：\n\n- 查询A股行情、股票信息、股票搜索\n- 查询与管理持仓、计算盈亏、刷新持仓现价\n- 记录买入/卖出交易\n\n## 开始之前：\n\n您需要去`https://www.mystockearning.cn注册一个账号，并等待审核通过后获取api key。`\n\n## 认证与基础配置\n\n- 环境变量: `STOCK_API_KEY`\n- Base URL: 从 `config.sh` 中读取 `$STOCK_BASE_URL`（默认 `https://www.mystockearning.cn`，也可通过环境变量 `STOCK_BASE_URL` 覆盖）\n\n所有请求均使用 HTTP Header：`X-API-Key: $STOCK_API_KEY`\n\n推荐安全保存（OpenClaw/Hermes 通用）：使用 `./scripts/setup_api_key.sh` 生成本地密钥文件（默认写入 `~/.config/stockearning/stockearning.env`，权限 600）。\n\n## 推荐使用方式\n\n通常直接使用主入口技能：\n\n- `/stock-earning`：主入口，覆盖最常用的查询/记账/刷新场景\n\n若你希望更可控、更聚焦的行为，可以按需调用下列技能：\n\n| 技能名称                  | 功能                 | 目录                       |\n| --------------------- | ------------------ | ------------------------ |\n| `stock-earning`       | 主入口：综合查询、刷新现价、记录交易 | `./stock-master/`        |\n| `portfolio-assistant` | 仅查询持仓/收益摘要/历史交易    | `./portfolio-assistant/` |\n| `market-data`         | 仅查询实时价格、股票信息、搜索代码  | `./market-data/`         |\n| `trade-execution`     | 仅用于记录买入/卖出交易       | `./trade-execution/`     |\n\n## 安装方式\n\n### Openclaw:\n\n```\nopenclaw skills install stock-earning-cn\n```\n\n<br />\n\n### Hermes:\n\n```\nhermes skills install clawhub:stock-earning-cn\n```\n\nFile v1.0.5:stock-master/SKILL.md\n\n---\nname: stock-earning\ndescription: 主入口：包含查询持仓、行情、记账所有功能。\nuser-invocable: true\nscript: \"bash scripts/run.sh\"\n---\n\n# StockEarning 主投资助手 (Master Agent)\n\n你是一个专业的股票投资组合助手。你可以通过调用 StockEarning 的 REST API 来帮助用户查询市场数据、管理持仓和记录交易。\n\n## 工具使用方式\n\n你现在拥有一个专门的 `run.sh` 脚本来执行所有的 API 调用。该脚本会自动处理环境变量（API Key）的读取和提示。\n\n### 调用格式\n你需要使用本技能目录下的 `./scripts/*.sh` 脚本完成各类操作（每个操作一个脚本文件）。\n\n### 1. 查询持仓与收益 (Get Positions & Summary)\n获取用户当前的股票持仓信息或整体收益。\n- 获取所有持仓：执行 `./scripts/positions_all.sh`\n- 获取特定股票的持仓：执行 `./scripts/positions_by_symbol.sh`（需要设置 `SYMBOL`）\n- 获取整体收益摘要：执行 `./scripts/summary.sh`\n\n### 2. 市场数据 (Market Data)\n查询实时股价或搜索股票代码。\n- 查询实时价格：执行 `./scripts/get_price.sh`（需要设置 `SYMBOL`，可选 `MARKET`）\n- 搜索股票代码：执行 `./scripts/search_stocks.sh`（需要设置 `QUERY`，可选 `MARKET`）\n\n### 3. 记录交易与券商配置 (Trade & Broker)\n帮用户记录买卖行为及检查/配置券商。\n- 检查某市场是否已配置券商：执行 `./scripts/get_brokers.sh`（需要设置 `MARKET`）\n- 一键导入市场默认券商：执行 `./scripts/seed_defaults.sh`（需要设置 `MARKET`）\n- 预计算手续费：执行 `./scripts/calculate_commission.sh`（需要设置 `BROKER_ID`、`TRADE_TYPE`、`QUANTITY`、`PRICE`）\n- 记录买入/卖出交易：执行 `./scripts/create_trade.sh`（需要设置 `SYMBOL`、`NAME`、`MARKET`、`TRADE_TYPE`、`QUANTITY`、`PRICE`、`TRADE_DATE`；可选 `COMMISSION`、`CURRENCY`、`NOTES`）\n\n### 4. 强制刷新与同步\n用于在查询收益前获取最新市价。\n- 执行 `./scripts/refresh_prices.sh`\n\n### 5. 持仓盘点修正 (Position Adjustment)\n如果因为分红、送转或其他原因导致持仓数量对不上，可以通过此接口直接调整**股数**。\n注意：调整数量**不会修改历史成本价**，系统会自动生成一笔 `trade_type=adjust` 的交易记录用于流水追溯，其价格默认为当天的市价（若无则取原成本价）。\n```bash\n{baseDir}/scripts/edit_position.sh 123 1050 \"分红送转调整\"\n```\n\n## 严格执行规则\n1. 分析用户输入。\n2. **货币显示规则**：在回复任何金额（如价格、手续费、总额、盈亏）时，必须根据该股票所在的市场显示正确的货币符号或单位：\n   - `cn_a` (A股): `¥` 或 `元` (人民币 CNY)\n   - `hk` (港股): `HK$` 或 `港元` (港币 HKD)\n   - `us` (美股): `$` 或 `美元` (美元 USD)\n3. **资产查询的强制刷新**：当用户询问“总盈亏”、“账户表现”等涉及整体收益的问题时，你必须**先静默调用** `/api/positions/update-all-prices`，然后再调用 `/api/analytics/summary`，并在回复中说明：“已为您拉取最新行情...”。\n4. **记录交易的智能补全与券商机制**：当用户想要记录交易时，你必须按照以下逻辑处理：\n   - **(代码补全)**：如果没有代码，先调 `GET /api/positions/` 查持仓；没找到则调用搜索 API (`/api/markets/search/stocks`) 遍历 cn_a, hk, us。\n   - **(清仓智能识别)**：如果用户说“清仓”、“全卖了”，且未提供数量，必须先调用 `GET /api/positions/` 获取该股票的当前持仓数量，并自动填入。\n   - **(防爆仓拦截)**：如果是卖出操作且提供了数量，必须先调用 `GET /api/positions/` 检查余额。如果余额不足，直接拒绝并提示用户当前实际持有量。\n   - **(市价智能获取)**：如果用户未提供**买入价格**，静默调用 `/api/markets/stocks/{symbol}/price` 获取当前市价，并作为默认建议价询问用户。\n   - **(按金额反推数量)**：如果用户提供了总金额和单价但未提供数量，自动计算 `数量 = 向下取整(总金额 / 单价)` 并向用户确认。\n   - **(券商前置拦截与算费)**：在发起最终交易前，必须执行以下步骤：\n     1. 调用 `GET /api/brokers/?market={对应的市场}`。\n     2. 如果返回空列表 `[]`，说明该市场无券商。你必须**拦截交易并暂停**，询问用户：“您在这个市场尚未配置券商。是否需要为您一键导入该市场的默认券商配置？或者您想自定义配置？”\n     3. **等待用户回答**。如果用户回答“一键导入”或“同意导入”，你才调用 `POST /api/brokers/seed-defaults` 传入该市场代码，然后再调用 `GET /api/brokers/` 获取刚创建的 `broker_id`。如果用户要求“自定义”，请引导用户提供券商名称和佣金费率。\n     4. 拿到 `broker_id` 后，调用 `POST /api/brokers/calculate-commission` 计算精确的手续费（commission、stamp_duty 等）。\n5. **交易录入前校验**：在发起 `POST /api/trades/` 之前，必须逐项核对并向用户确认以下字段（缺一不可）：\n   - `symbol`：与用户意图一致，且无多余空格\n   - `market`：与标的所属市场一致（如 us/hk/cn_a 等）\n   - `trade_type`：buy/sell 与用户意图一致\n   - `quantity`：为正数；若用户说“清仓/全卖”，必须先查持仓再填入\n   - `price`：为正数，单位与市场/货币一致\n   - `fees`：在已配置券商时先用 `/api/brokers/calculate-commission` 计算；将 `total_fees` 写入 `commission`，并把明细（commission/stamp_duty/transfer_fee）写入 `notes`\n   - `trade_date`：明确的时间（含时区）；若用户未指定，需询问或使用用户确认的默认时间\n6. **最终确认**：在执行写入前，必须输出一段“逐项确认清单”（symbol、market、trade_type、quantity、price、fees、trade_date），并等待用户明确回复“确认/同意/继续”后才执行写入。\n7. **纠错机制**：\n   - 交易错误：如果交易已写入后用户发现错误，推荐通过新增一笔“反向交易”进行冲销（在 `notes` 写明“冲销/更正原因”），再按正确数据重新录入。\n   - 盘点修正：如果仅仅是当前股数对不上（如送转股），可直接调用 `PUT /api/positions/{position_id}/edit` 进行盘点对齐，此操作**仅调整股数，不影响历史成本价**。\n   - 任何更正后：均需重新查询 `GET /api/positions/` 核对持仓数据是否符合预期。\n8. **工具使用**：使用 `{baseDir}/scripts/run.sh` 执行对应的 API 请求。\n9. **输出格式**：将 API 返回的 JSON 数据解析为对用户友好的 Markdown 表格或自然语言，金额必须保留两位小数并带上正确的货币单位。\n\nFile v1.0.5:trade-execution/SKILL.md\n\n---\nname: trade-execution\ndescription: 专门用于代表用户向系统中记录买入或卖出交易的助手。\nuser-invocable: true\n---\n\n# 交易执行助手 (Trade Execution)\n\n专门用于代表用户向系统中记录买入或卖出交易的助手。\n\n## 认证与基础配置\n- 环境变量: `STOCK_API_KEY`\n- Base URL: 从 `config.sh` 中读取 `$STOCK_BASE_URL`（默认 `https://www.mystockearning.cn`，切换域名只需改 `config.sh`）\n\n## API 指令清单\n\n### 记录新交易与券商配置\n当用户说 \"我今天以 150 美元买入了 100 股苹果\" 时：\n- 1) 检查市场券商：执行 `./scripts/get_brokers.sh`（需要设置 `MARKET`）\n- 2) 如需导入默认券商：执行 `./scripts/seed_defaults.sh`（需要设置 `MARKET`）\n- 3) 计算手续费：执行 `./scripts/calculate_commission.sh`（需要设置 `BROKER_ID`、`TRADE_TYPE`、`QUANTITY`、`PRICE`）\n- 4) 记录交易：执行 `./scripts/create_trade.sh`（需要设置 `SYMBOL`、`NAME`、`MARKET`、`TRADE_TYPE`、`QUANTITY`、`PRICE`、`TRADE_DATE`；可选 `COMMISSION`、`CURRENCY`、`NOTES`）\n\n## 严格执行规则\n1. 分析用户指令。\n2. **货币显示规则**：在回复任何金额（如价格、手续费、总额等）时，必须根据该股票所在的市场显示正确的货币符号或单位：\n   - `cn_a` (A股): `¥` 或 `元` (人民币 CNY)\n   - `hk` (港股): `HK$` 或 `港元` (港币 HKD)\n   - `us` (美股): `$` 或 `美元` (美元 USD)\n3. **智能补全与确认机制**：当用户想要记录交易时，你必须按照以下逻辑处理：\n   - **(代码补全)**：如果没有提供完整的股票代码和市场，先调 `GET /api/positions/` 查持仓；没找到则调用搜索 API (`/api/markets/search/stocks`) 遍历 cn_a, hk, us。\n   - **(清仓智能识别)**：如果用户说“清仓”、“全卖了”，且未提供数量，必须先调用 `GET /api/positions/` 获取该股票的当前持仓数量，并自动填入。\n   - **(防爆仓拦截)**：如果是卖出操作且提供了数量，必须先调用 `GET /api/positions/` 检查余额。如果余额不足，直接拒绝并提示用户当前实际持有量。\n   - **(市价智能获取)**：如果用户未提供**买入价格**，静默调用 `/api/markets/stocks/{symbol}/price` 获取当前市价，并作为默认建议价询问用户。\n   - **(按金额反推数量)**：如果用户提供了总金额和单价但未提供数量，自动计算 `数量 = 向下取整(总金额 / 单价)` 并向用户确认。\n3. **券商前置拦截与算费机制**：在确认了股票代码、数量和价格后，在发起最终交易前，必须执行以下步骤：\n   - 调用 `GET /api/brokers/?market={对应的市场}`。\n   - 如果返回空列表 `[]`，说明该市场无券商。你必须**拦截交易并暂停**，询问用户：“您在这个市场尚未配置券商，无法计算印花税和交易佣金。是否需要为您一键导入该市场的默认券商配置？或者您想自定义配置？”\n   - **等待用户回答**。如果用户回答“一键导入”或“同意导入”，你才调用 `POST /api/brokers/seed-defaults` 传入该市场代码，然后再调用 `GET /api/brokers/` 获取刚创建的 `broker_id`。如果用户要求“自定义”，请引导用户提供券商名称和佣金费率。\n   - 拿到 `broker_id` 后，调用 `POST /api/brokers/calculate-commission` 计算精确的手续费（commission、stamp_duty 等）。\n4. **最终确认**：在发起最终的 `POST /api/trades/` 之前，**必须**向用户输出一段确认信息（包含代码、名称、市场、数量、价格、以及**预估的手续费/印花税总计**）。只有在用户回复确认后，才能执行。\n5. **确认后执行**：执行 `curl -X POST /api/trades/` 记录交易（带上获取到的 broker_id 和费用数据）。\n6. **输出结果**：根据 API 响应，向用户确认交易已成功记录，并展示总金额。\n\nFile v1.0.5:_meta.json\n\n{\n  \"ownerId\": \"kn75wc1b4zt76w9g1d6wgav3f1804jt8\",\n  \"slug\": \"secn\",\n  \"version\": \"1.0.5\",\n  \"publishedAt\": 1777822772975\n}\n\nFile v1.0.5:plugin.json\n\n{\n  \"name\": \"stock-earning-cn\",\n  \"version\": \"1.0.0\",\n  \"description\": \"A pure HTTP/REST API plugin for OpenClaw to manage stock portfolios and query global market data.\",\n  \"author\": \"StockEarning\",\n  \"publisher\": \"StockEarning\",\n  \"homepage\": \"https://www.mystockearning.cn\",\n  \"keywords\": [\"finance\", \"stocks\", \"portfolio\", \"trading\", \"openclaw\", \"claude-code\"],\n  \"repository\": \"https://github.com/hareluya/stock-earning-cn-skills\",\n  \"license\": \"MIT-0\",\n  \"releases\": \"https://github.com/hareluya/stock-earning-cn-skills/releases\",\n  \"commands\": {\n    \"stock-earning\": \"./stock-master/SKILL.md\",\n    \"market-data\": \"./market-data/SKILL.md\",\n    \"portfolio-assistant\": \"./portfolio-assistant/SKILL.md\",\n    \"trade-execution\": \"./trade-execution/SKILL.md\"\n  },\n  \"environment\": {\n    \"STOCK_API_KEY\": {\n      \"description\": \"Your StockEarning.cn API Key\",\n      \"required\": true\n    }\n  }\n}\n\nArchive v1.0.4: 35 files, 22896 bytes\n\nFiles: config.sh (125b), install.sh (1339b), market-data/scripts/get_info.sh (350b), market-data/scripts/get_price.sh (351b), market-data/scripts/search_stocks.sh (395b), market-data/SKILL.md (1708b), plugin.json (894b), portfolio-assistant/scripts/get_position_by_symbol.sh (307b), portfolio-assistant/scripts/get_positions_by_market_sorted.sh (346b), portfolio-assistant/scripts/get_summary.sh (223b), portfolio-assistant/scripts/get_trades.sh (422b), portfolio-assistant/scripts/refresh_prices.sh (234b), portfolio-assistant/SKILL.md (2240b), reference/config.sh (222b), reference/runtime.sh (2834b), scripts/setup_api_key.sh (224b), SKILL.md (2074b), stock-master/scripts/calculate_commission.sh (621b), stock-master/scripts/create_trade.sh (1175b), stock-master/scripts/get_brokers.sh (225b), stock-master/scripts/get_price.sh (271b), stock-master/scripts/positions_all.sh (135b), stock-master/scripts/positions_by_symbol.sh (227b), stock-master/scripts/refresh_prices.sh (153b), stock-master/scripts/run.sh (2357b), stock-master/scripts/search_stocks.sh (315b), stock-master/scripts/seed_defaults.sh (239b), stock-master/scripts/summary.sh (142b), stock-master/SKILL.md (6280b), trade-execution/scripts/calculate_commission.sh (701b), trade-execution/scripts/create_trade.sh (1258b), trade-execution/scripts/get_brokers.sh (305b), trade-execution/scripts/seed_defaults.sh (319b), trade-execution/SKILL.md (3972b), _meta.json (123b)\n\nFile v1.0.4:market-data/SKILL.md\n\n---\nname: market-data\ndescription: 专门用于查询全球股票实时价格、基本信息和搜索股票代码的助手。\nmetadata: {\"openclaw\": {\"requires\": {\"env\": [\"STOCK_API_KEY\"]}}}\nuser-invocable: true\n---\n\n# 市场数据助手 (Market Data)\n\n专门用于查询全球股票实时价格、基本信息和搜索股票代码的助手。\n\n## 认证与基础配置\n- 环境变量: `STOCK_API_KEY`\n- Base URL: 从 `config.sh` 中读取 `$STOCK_BASE_URL`（默认 `https://www.mystockearning.cn`，切换域名只需改 `config.sh`）\n\n## 市场代码 (Market Codes)\n- 美股: `us`\n- 港股: `hk`\n- A股: `cn_a`\n- B股: `cn_b`\n\n## API 指令清单\n\n### 搜索股票\n当用户说 \"查询腾讯的代码\" 或 \"寻找苹果股票\" 时：\n- 执行 `./scripts/search_stocks.sh`（需要设置 `QUERY`，可选 `MARKET`）\n\n### 获取实时价格\n当用户说 \"查看 AAPL 的现价\" 时：\n- 执行 `./scripts/get_price.sh`（需要设置 `SYMBOL`，可选 `MARKET`）\n\n### 获取股票详情\n当用户需要股票的基本面信息时：\n- 执行 `./scripts/get_info.sh`（需要设置 `SYMBOL`，可选 `MARKET`）\n\n## 执行规则\n1. 解析用户指令。\n2. **货币显示规则**：在回复实时价格或任何金额时，必须根据该股票所在的市场显示正确的货币符号或单位：\n   - `cn_a` (A股): `¥` 或 `元` (人民币 CNY)\n   - `hk` (港股): `HK$` 或 `港元` (港币 HKD)\n   - `us` (美股): `$` 或 `美元` (美元 USD)\n3. 构造对应的 `curl` 命令并执行。\n4. 如果返回 404，告知用户未找到该股票，请检查名称或市场代码。\n5. 将 JSON 格式的价格和货币单位转换为易读的自然语言，金额必须带上正确的货币单位。\n\nFile v1.0.4:portfolio-assistant/SKILL.md\n\n---\nname: portfolio-assistant\ndescription: 专门用于查询用户持仓、盈亏情况和历史交易记录的助手。\nmetadata: {\"openclaw\": {\"requires\": {\"env\": [\"STOCK_API_KEY\"]}}}\nuser-invocable: true\n---\n\n# 投资组合助手 (Portfolio Assistant)\n\n专门用于查询用户持仓、盈亏情况和历史交易记录的助手。\n\n## 认证与基础配置\n- 环境变量: `STOCK_API_KEY`\n- Base URL: 从 `config.sh` 中读取 `$STOCK_BASE_URL`（默认 `https://www.mystockearning.cn`，切换域名只需改 `config.sh`）\n\n## API 指令清单\n\n### 获取当前持仓\n当用户问 \"我现在的苹果股票赚了多少钱？\" 或 \"查看我的美股持仓\" 时：\n- 获取特定股票持仓：执行 `./scripts/get_position_by_symbol.sh`（需要设置 `SYMBOL`）\n- 获取某市场的所有持仓（按盈亏比例降序）：执行 `./scripts/get_positions_by_market_sorted.sh`（需要设置 `MARKET`）\n\n### 获取交易记录\n当用户问 \"我最近一个月买过哪些美股？\" 时：\n- 执行 `./scripts/get_trades.sh`（需要设置 `MARKET`、`TRADE_TYPE`）\n\n### 获取投资表现摘要\n当用户问 \"我账户总资产多少？\" 或 \"总盈亏如何？\" 时：\n- 先强制刷新最新市价：执行 `./scripts/refresh_prices.sh`\n- 再获取收益摘要：执行 `./scripts/get_summary.sh`\n\n## 执行规则\n1. 解析用户指令。\n2. **货币显示规则**：在回复任何持仓市值、成本或盈亏金额时，必须根据该股票或账户所在的市场显示正确的货币符号或单位：\n   - `cn_a` (A股): `¥` 或 `元` (人民币 CNY)\n   - `hk` (港股): `HK$` 或 `港元` (港币 HKD)\n   - `us` (美股): `$` 或 `美元` (美元 USD)\n3. **强制刷新机制**：如果用户查询的是“总体盈亏”或“账户表现”，你必须先执行 `update-all-prices` 接口以获取最新市价，再执行 `summary` 接口，并在回复中告知用户“已为您拉取最新行情”。\n4. 执行 `curl` 请求。\n5. 从响应中提取关键字段（如 `profit_loss`, `profit_loss_percent`, `market_value`）。\n6. 使用带颜色的 Markdown 格式或表格输出结果（如：盈利标红或绿，根据当地市场习惯），金额必须保留两位小数并带上正确的货币单位。\n\nFile v1.0.4:SKILL.md\n\n---\nname: stock-earning-cn\ndescription: 这是 StockEarningCN 的 OpenClaw 技能/Skill插件入口说明。安装本目录后，你将获得一组可组合使用的技能\nuser-invocable: true\n---\n# StockEarningCN Skills介绍(StockEarning Assistant)\n\n这是 StockEarningCN 的 OpenClaw 技能插件入口说明。安装本目录后，你将获得一组可组合使用的技能，用于：\n\n- 查询A股行情、股票信息、股票搜索\n- 查询与管理持仓、计算盈亏、刷新持仓现价\n- 记录买入/卖出交易\n\n## 开始之前：\n\n您需要去`https://www.mystockearning.cn注册一个账号，并等待审核通过后获取api key。`\n\n## 认证与基础配置\n\n- 环境变量: `STOCK_API_KEY`\n- Base URL: 从 `config.sh` 中读取 `$STOCK_BASE_URL`（默认 `https://www.mystockearning.cn`，也可通过环境变量 `STOCK_BASE_URL` 覆盖）\n\n所有请求均使用 HTTP Header：`X-API-Key: $STOCK_API_KEY`\n\n推荐安全保存（OpenClaw/Hermes 通用）：使用 `./scripts/setup_api_key.sh` 生成本地密钥文件（默认写入 `~/.config/stockearning/stockearning.env`，权限 600）。\n\n## 推荐使用方式\n\n通常直接使用主入口技能：\n\n- `/stock-earning`：主入口，覆盖最常用的查询/记账/刷新场景\n\n若你希望更可控、更聚焦的行为，可以按需调用下列技能：\n\n| 技能名称                  | 功能                 | 目录                       |\n| --------------------- | ------------------ | ------------------------ |\n| `stock-earning`       | 主入口：综合查询、刷新现价、记录交易 | `./stock-master/`        |\n| `portfolio-assistant` | 仅查询持仓/收益摘要/历史交易    | `./portfolio-assistant/` |\n| `market-data`         | 仅查询实时价格、股票信息、搜索代码  | `./market-data/`         |\n| `trade-execution`     | 仅用于记录买入/卖出交易       | `./trade-execution/`     |\n\n## 安装方式\n\n### Openclaw:\n\n```\nopenclaw skills install stock-earning-cn\n```\n\n<br />\n\n### Hermes:\n\n```\nhermes skills install clawhub:stock-earning-cn\n```\n\nFile v1.0.4:stock-master/SKILL.md\n\n---\nname: stock-earning\ndescription: 主入口：包含查询持仓、行情、记账所有功能。\nuser-invocable: true\nscript: \"bash scripts/run.sh\"\n---\n\n# StockEarning 主投资助手 (Master Agent)\n\n你是一个专业的股票投资组合助手。你可以通过调用 StockEarning 的 REST API 来帮助用户查询市场数据、管理持仓和记录交易。\n\n## 工具使用方式\n\n你现在拥有一个专门的 `run.sh` 脚本来执行所有的 API 调用。该脚本会自动处理环境变量（API Key）的读取和提示。\n\n### 调用格式\n你需要使用本技能目录下的 `./scripts/*.sh` 脚本完成各类操作（每个操作一个脚本文件）。\n\n### 1. 查询持仓与收益 (Get Positions & Summary)\n获取用户当前的股票持仓信息或整体收益。\n- 获取所有持仓：执行 `./scripts/positions_all.sh`\n- 获取特定股票的持仓：执行 `./scripts/positions_by_symbol.sh`（需要设置 `SYMBOL`）\n- 获取整体收益摘要：执行 `./scripts/summary.sh`\n\n### 2. 市场数据 (Market Data)\n查询实时股价或搜索股票代码。\n- 查询实时价格：执行 `./scripts/get_price.sh`（需要设置 `SYMBOL`，可选 `MARKET`）\n- 搜索股票代码：执行 `./scripts/search_stocks.sh`（需要设置 `QUERY`，可选 `MARKET`）\n\n### 3. 记录交易与券商配置 (Trade & Broker)\n帮用户记录买卖行为及检查/配置券商。\n- 检查某市场是否已配置券商：执行 `./scripts/get_brokers.sh`（需要设置 `MARKET`）\n- 一键导入市场默认券商：执行 `./scripts/seed_defaults.sh`（需要设置 `MARKET`）\n- 预计算手续费：执行 `./scripts/calculate_commission.sh`（需要设置 `BROKER_ID`、`TRADE_TYPE`、`QUANTITY`、`PRICE`）\n- 记录买入/卖出交易：执行 `./scripts/create_trade.sh`（需要设置 `SYMBOL`、`NAME`、`MARKET`、`TRADE_TYPE`、`QUANTITY`、`PRICE`、`TRADE_DATE`；可选 `COMMISSION`、`CURRENCY`、`NOTES`）\n\n### 4. 强制刷新与同步\n用于在查询收益前获取最新市价。\n- 执行 `./scripts/refresh_prices.sh`\n\n## 严格执行规则\n1. 分析用户输入。\n2. **货币显示规则**：在回复任何金额（如价格、手续费、总额、盈亏）时，必须根据该股票所在的市场显示正确的货币符号或单位：\n   - `cn_a` (A股): `¥` 或 `元` (人民币 CNY)\n   - `hk` (港股): `HK$` 或 `港元` (港币 HKD)\n   - `us` (美股): `$` 或 `美元` (美元 USD)\n3. **资产查询的强制刷新**：当用户询问“总盈亏”、“账户表现”等涉及整体收益的问题时，你必须**先静默调用** `/api/positions/update-all-prices`，然后再调用 `/api/analytics/summary`，并在回复中说明：“已为您拉取最新行情...”。\n4. **记录交易的智能补全与券商机制**：当用户想要记录交易时，你必须按照以下逻辑处理：\n   - **(代码补全)**：如果没有代码，先调 `GET /api/positions/` 查持仓；没找到则调用搜索 API (`/api/markets/search/stocks`) 遍历 cn_a, hk, us。\n   - **(清仓智能识别)**：如果用户说“清仓”、“全卖了”，且未提供数量，必须先调用 `GET /api/positions/` 获取该股票的当前持仓数量，并自动填入。\n   - **(防爆仓拦截)**：如果是卖出操作且提供了数量，必须先调用 `GET /api/positions/` 检查余额。如果余额不足，直接拒绝并提示用户当前实际持有量。\n   - **(市价智能获取)**：如果用户未提供**买入价格**，静默调用 `/api/markets/stocks/{symbol}/price` 获取当前市价，并作为默认建议价询问用户。\n   - **(按金额反推数量)**：如果用户提供了总金额和单价但未提供数量，自动计算 `数量 = 向下取整(总金额 / 单价)` 并向用户确认。\n   - **(券商前置拦截与算费)**：在发起最终交易前，必须执行以下步骤：\n     1. 调用 `GET /api/brokers/?market={对应的市场}`。\n     2. 如果返回空列表 `[]`，说明该市场无券商。你必须**拦截交易并暂停**，询问用户：“您在这个市场尚未配置券商。是否需要为您一键导入该市场的默认券商配置？或者您想自定义配置？”\n     3. **等待用户回答**。如果用户回答“一键导入”或“同意导入”，你才调用 `POST /api/brokers/seed-defaults` 传入该市场代码，然后再调用 `GET /api/brokers/` 获取刚创建的 `broker_id`。如果用户要求“自定义”，请引导用户提供券商名称和佣金费率。\n     4. 拿到 `broker_id` 后，调用 `POST /api/brokers/calculate-commission` 计算精确的手续费（commission、stamp_duty 等）。\n5. **交易录入前校验**：在发起 `POST /api/trades/` 之前，必须逐项核对并向用户确认以下字段（缺一不可）：\n   - `symbol`：与用户意图一致，且无多余空格\n   - `market`：与标的所属市场一致（如 us/hk/cn_a 等）\n   - `trade_type`：buy/sell 与用户意图一致\n   - `quantity`：为正数；若用户说“清仓/全卖”，必须先查持仓再填入\n   - `price`：为正数，单位与市场/货币一致\n   - `fees`：在已配置券商时先用 `/api/brokers/calculate-commission` 计算；将 `total_fees` 写入 `commission`，并把明细（commission/stamp_duty/transfer_fee）写入 `notes`\n   - `trade_date`：明确的时间（含时区）；若用户未指定，需询问或使用用户确认的默认时间\n6. **最终确认**：在执行写入前，必须输出一段“逐项确认清单”（symbol、market、trade_type、quantity、price、fees、trade_date），并等待用户明确回复“确认/同意/继续”后才执行写入。\n7. **纠错机制**：如果交易已写入后用户发现错误，必须提供更正路径并提醒核对：\n   - 推荐：通过新增一笔“反向交易”进行冲销（在 `notes` 写明“冲销/更正原因”），再按正确数据重新录入\n   - 更正后：重新查询 `GET /api/positions/` 核对持仓数量与成本是否符合预期\n8. **工具使用**：使用 `{baseDir}/scripts/run.sh` 执行对应的 API 请求。\n9. **输出格式**：将 API 返回的 JSON 数据解析为对用户友好的 Markdown 表格或自然语言，金额必须保留两位小数并带上正确的货币单位。\n\nFile v1.0.4:trade-execution/SKILL.md\n\n---\nname: trade-execution\ndescription: 专门用于代表用户向系统中记录买入或卖出交易的助手。\nuser-invocable: true\n---\n\n# 交易执行助手 (Trade Execution)\n\n专门用于代表用户向系统中记录买入或卖出交易的助手。\n\n## 认证与基础配置\n- 环境变量: `STOCK_API_KEY`\n- Base URL: 从 `config.sh` 中读取 `$STOCK_BASE_URL`（默认 `https://www.mystockearning.cn`，切换域名只需改 `config.sh`）\n\n## API 指令清单\n\n### 记录新交易与券商配置\n当用户说 \"我今天以 150 美元买入了 100 股苹果\" 时：\n- 1) 检查市场券商：执行 `./scripts/get_brokers.sh`（需要设置 `MARKET`）\n- 2) 如需导入默认券商：执行 `./scripts/seed_defaults.sh`（需要设置 `MARKET`）\n- 3) 计算手续费：执行 `./scripts/calculate_commission.sh`（需要设置 `BROKER_ID`、`TRADE_TYPE`、`QUANTITY`、`PRICE`）\n- 4) 记录交易：执行 `./scripts/create_trade.sh`（需要设置 `SYMBOL`、`NAME`、`MARKET`、`TRADE_TYPE`、`QUANTITY`、`PRICE`、`TRADE_DATE`；可选 `COMMISSION`、`CURRENCY`、`NOTES`）\n\n## 严格执行规则\n1. 分析用户指令。\n2. **货币显示规则**：在回复任何金额（如价格、手续费、总额等）时，必须根据该股票所在的市场显示正确的货币符号或单位：\n   - `cn_a` (A股): `¥` 或 `元` (人民币 CNY)\n   - `hk` (港股): `HK$` 或 `港元` (港币 HKD)\n   - `us` (美股): `$` 或 `美元` (美元 USD)\n3. **智能补全与确认机制**：当用户想要记录交易时，你必须按照以下逻辑处理：\n   - **(代码补全)**：如果没有提供完整的股票代码和市场，先调 `GET /api/positions/` 查持仓；没找到则调用搜索 API (`/api/markets/search/stocks`) 遍历 cn_a, hk, us。\n   - **(清仓智能识别)**：如果用户说“清仓”、“全卖了”，且未提供数量，必须先调用 `GET /api/positions/` 获取该股票的当前持仓数量，并自动填入。\n   - **(防爆仓拦截)**：如果是卖出操作且提供了数量，必须先调用 `GET /api/positions/` 检查余额。如果余额不足，直接拒绝并提示用户当前实际持有量。\n   - **(市价智能获取)**：如果用户未提供**买入价格**，静默调用 `/api/markets/stocks/{symbol}/price` 获取当前市价，并作为默认建议价询问用户。\n   - **(按金额反推数量)**：如果用户提供了总金额和单价但未提供数量，自动计算 `数量 = 向下取整(总金额 / 单价)` 并向用户确认。\n3. **券商前置拦截与算费机制**：在确认了股票代码、数量和价格后，在发起最终交易前，必须执行以下步骤：\n   - 调用 `GET /api/brokers/?market={对应的市场}`。\n   - 如果返回空列表 `[]`，说明该市场无券商。你必须**拦截交易并暂停**，询问用户：“您在这个市场尚未配置券商，无法计算印花税和交易佣金。是否需要为您一键导入该市场的默认券商配置？或者您想自定义配置？”\n   - **等待用户回答**。如果用户回答“一键导入”或“同意导入”，你才调用 `POST /api/brokers/seed-defaults` 传入该市场代码，然后再调用 `GET /api/brokers/` 获取刚创建的 `broker_id`。如果用户要求“自定义”，请引导用户提供券商名称和佣金费率。\n   - 拿到 `broker_id` 后，调用 `POST /api/brokers/calculate-commission` 计算精确的手续费（commission、stamp_duty 等）。\n4. **最终确认**：在发起最终的 `POST /api/trades/` 之前，**必须**向用户输出一段确认信息（包含代码、名称、市场、数量、价格、以及**预估的手续费/印花税总计**）。只有在用户回复确认后，才能执行。\n5. **确认后执行**：执行 `curl -X POST /api/trades/` 记录交易（带上获取到的 broker_id 和费用数据）。\n6. **输出结果**：根据 API 响应，向用户确认交易已成功记录，并展示总金额。\n\nFile v1.0.4:_meta.json\n\n{\n  \"ownerId\": \"kn75wc1b4zt76w9g1d6wgav3f1804jt8\",\n  \"slug\": \"secn\",\n  \"version\": \"1.0.4\",\n  \"publishedAt\": 1777741150331\n}\n\nFile v1.0.4:plugin.json\n\n{\n  \"name\": \"stock-earning-cn\",\n  \"version\": \"1.0.0\",\n  \"description\": \"A pure HTTP/REST API plugin for OpenClaw to manage stock portfolios and query global market data.\",\n  \"author\": \"StockEarning\",\n  \"publisher\": \"StockEarning\",\n  \"homepage\": \"https://www.mystockearning.cn\",\n  \"keywords\": [\"finance\", \"stocks\", \"portfolio\", \"trading\", \"openclaw\", \"claude-code\"],\n  \"repository\": \"https://github.com/hareluya/stock-earning-cn-skills\",\n  \"license\": \"MIT-0\",\n  \"releases\": \"https://github.com/hareluya/stock-earning-cn-skills/releases\",\n  \"commands\": {\n    \"stock-earning\": \"./stock-master/SKILL.md\",\n    \"market-data\": \"./market-data/SKILL.md\",\n    \"portfolio-assistant\": \"./portfolio-assistant/SKILL.md\",\n    \"trade-execution\": \"./trade-execution/SKILL.md\"\n  },\n  \"environment\": {\n    \"STOCK_API_KEY\": {\n      \"description\": \"Your StockEarning.cn API Key\",\n      \"required\": true\n    }\n  }\n}\n\nArchive v1.0.3: 37 files, 26143 bytes\n\nFiles: config.sh (125b), install.sh (1339b), market-data/scripts/get_info.sh (350b), market-data/scripts/get_price.sh (351b), market-data/scripts/search_stocks.sh (395b), market-data/SKILL.md (1708b), plugin.json (894b), portfolio-assistant/scripts/get_position_by_symbol.sh (307b), portfolio-assistant/scripts/get_positions_by_market_sorted.sh (346b), portfolio-assistant/scripts/get_summary.sh (223b), portfolio-assistant/scripts/get_trades.sh (422b), portfolio-assistant/scripts/refresh_prices.sh (234b), portfolio-assistant/SKILL.md (2240b), README.md (3214b), reference/config.sh (222b), reference/runtime.sh (2834b), scripts/setup_api_key.sh (224b), SKILL.md (2074b), stock-master/scripts/calculate_commission.sh (621b), stock-master/scripts/create_trade.sh (1175b), stock-master/scripts/get_brokers.sh (225b), stock-master/scripts/get_price.sh (271b), stock-master/scripts/positions_all.sh (135b), stock-master/scripts/positions_by_symbol.sh (227b), stock-master/scripts/refresh_prices.sh (153b), stock-master/scripts/run.sh (2357b), stock-master/scripts/search_stocks.sh (315b), stock-master/scripts/seed_defaults.sh (239b), stock-master/scripts/summary.sh (142b), stock-master/SKILL.md (6280b), test_api.sh (2405b), trade-execution/scripts/calculate_commission.sh (701b), trade-execution/scripts/create_trade.sh (1258b), trade-execution/scripts/get_brokers.sh (305b), trade-execution/scripts/seed_defaults.sh (319b), trade-execution/SKILL.md (3972b), _meta.json (123b)\n\nFile v1.0.3:market-data/SKILL.md\n\n---\nname: market-data\ndescription: 专门用于查询全球股票实时价格、基本信息和搜索股票代码的助手。\nmetadata: {\"openclaw\": {\"requires\": {\"env\": [\"STOCK_API_KEY\"]}}}\nuser-invocable: true\n---\n\n# 市场数据助手 (Market Data)\n\n专门用于查询全球股票实时价格、基本信息和搜索股票代码的助手。\n\n## 认证与基础配置\n- 环境变量: `STOCK_API_KEY`\n- Base URL: 从 `config.sh` 中读取 `$STOCK_BASE_URL`（默认 `https://www.mystockearning.cn`，切换域名只需改 `config.sh`）\n\n## 市场代码 (Market Codes)\n- 美股: `us`\n- 港股: `hk`\n- A股: `cn_a`\n- B股: `cn_b`\n\n## API 指令清单\n\n### 搜索股票\n当用户说 \"查询腾讯的代码\" 或 \"寻找苹果股票\" 时：\n- 执行 `./scripts/search_stocks.sh`（需要设置 `QUERY`，可选 `MARKET`）\n\n### 获取实时价格\n当用户说 \"查看 AAPL 的现价\" 时：\n- 执行 `./scripts/get_price.sh`（需要设置 `SYMBOL`，可选 `MARKET`）\n\n### 获取股票详情\n当用户需要股票的基本面信息时：\n- 执行 `./scripts/get_info.sh`（需要设置 `SYMBOL`，可选 `MARKET`）\n\n## 执行规则\n1. 解析用户指令。\n2. **货币显示规则**：在回复实时价格或任何金额时，必须根据该股票所在的市场显示正确的货币符号或单位：\n   - `cn_a` (A股): `¥` 或 `元` (人民币 CNY)\n   - `hk` (港股): `HK$` 或 `港元` (港币 HKD)\n   - `us` (美股): `$` 或 `美元` (美元 USD)\n3. 构造对应的 `curl` 命令并执行。\n4. 如果返回 404，告知用户未找到该股票，请检查名称或市场代码。\n5. 将 JSON 格式的价格和货币单位转换为易读的自然语言，金额必须带上正确的货币单位。\n\nFile v1.0.3:portfolio-assistant/SKILL.md\n\n---\nname: portfolio-assistant\ndescription: 专门用于查询用户持仓、盈亏情况和历史交易记录的助手。\nmetadata: {\"openclaw\": {\"requires\": {\"env\": [\"STOCK_API_KEY\"]}}}\nuser-invocable: true\n---\n\n# 投资组合助手 (Portfolio Assistant)\n\n专门用于查询用户持仓、盈亏情况和历史交易记录的助手。\n\n## 认证与基础配置\n- 环境变量: `STOCK_API_KEY`\n- Base URL: 从 `config.sh` 中读取 `$STOCK_BASE_URL`（默认 `https://www.mystockearning.cn`，切换域名只需改 `config.sh`）\n\n## API 指令清单\n\n### 获取当前持仓\n当用户问 \"我现在的苹果股票赚了多少钱？\" 或 \"查看我的美股持仓\" 时：\n- 获取特定股票持仓：执行 `./scripts/get_position_by_symbol.sh`（需要设置 `SYMBOL`）\n- 获取某市场的所有持仓（按盈亏比例降序）：执行 `./scripts/get_positions_by_market_sorted.sh`（需要设置 `MARKET`）\n\n### 获取交易记录\n当用户问 \"我最近一个月买过哪些美股？\" 时：\n- 执行 `./scripts/get_trades.sh`（需要设置 `MARKET`、`TRADE_TYPE`）\n\n### 获取投资表现摘要\n当用户问 \"我账户总资产多少？\" 或 \"总盈亏如何？\" 时：\n- 先强制刷新最新市价：执行 `./scripts/refresh_prices.sh`\n- 再获取收益摘要：执行 `./scripts/get_summary.sh`\n\n## 执行规则\n1. 解析用户指令。\n2. **货币显示规则**：在回复任何持仓市值、成本或盈亏金额时，必须根据该股票或账户所在的市场显示正确的货币符号或单位：\n   - `cn_a` (A股): `¥` 或 `元` (人民币 CNY)\n   - `hk` (港股): `HK$` 或 `港元` (港币 HKD)\n   - `us` (美股): `$` 或 `美元` (美元 USD)\n3. **强制刷新机制**：如果用户查询的是“总体盈亏”或“账户表现”，你必须先执行 `update-all-prices` 接口以获取最新市价，再执行 `summary` 接口，并在回复中告知用户“已为您拉取最新行情”。\n4. 执行 `curl` 请求。\n5. 从响应中提取关键字段（如 `profit_loss`, `profit_loss_percent`, `market_value`）。\n6. 使用带颜色的 Markdown 格式或表格输出结果（如：盈利标红或绿，根据当地市场习惯），金额必须保留两位小数并带上正确的货币单位。\n\nFile v1.0.3:SKILL.md\n\n---\nname: stock-earning-cn\ndescription: 这是 StockEarningCN 的 OpenClaw 技能/Skill插件入口说明。安装本目录后，你将获得一组可组合使用的技能\nuser-invocable: true\n---\n# StockEarningCN Skills介绍(StockEarning Assistant)\n\n这是 StockEarningCN 的 OpenClaw 技能插件入口说明。安装本目录后，你将获得一组可组合使用的技能，用于：\n\n- 查询A股行情、股票信息、股票搜索\n- 查询与管理持仓、计算盈亏、刷新持仓现价\n- 记录买入/卖出交易\n\n## 开始之前：\n\n您需要去`https://www.mystockearning.cn注册一个账号，并等待审核通过后获取api key。`\n\n## 认证与基础配置\n\n- 环境变量: `STOCK_API_KEY`\n- Base URL: 从 `config.sh` 中读取 `$STOCK_BASE_URL`（默认 `https://www.mystockearning.cn`，也可通过环境变量 `STOCK_BASE_URL` 覆盖）\n\n所有请求均使用 HTTP Header：`X-API-Key: $STOCK_API_KEY`\n\n推荐安全保存（OpenClaw/Hermes 通用）：使用 `./scripts/setup_api_key.sh` 生成本地密钥文件（默认写入 `~/.config/stockearning/stockearning.env`，权限 600）。\n\n## 推荐使用方式\n\n通常直接使用主入口技能：\n\n- `/stock-earning`：主入口，覆盖最常用的查询/记账/刷新场景\n\n若你希望更可控、更聚焦的行为，可以按需调用下列技能：\n\n| 技能名称                  | 功能                 | 目录                       |\n| --------------------- | ------------------ | ------------------------ |\n| `stock-earning`       | 主入口：综合查询、刷新现价、记录交易 | `./stock-master/`        |\n| `portfolio-assistant` | 仅查询持仓/收益摘要/历史交易    | `./portfolio-assistant/` |\n| `market-data`         | 仅查询实时价格、股票信息、搜索代码  | `./market-data/`         |\n| `trade-execution`     | 仅用于记录买入/卖出交易       | `./trade-execution/`     |\n\n## 安装方式\n\n### Openclaw:\n\n```\nopenclaw skills install stock-earning-cn\n```\n\n<br />\n\n### Hermes:\n\n```\nhermes skills install clawhub:stock-earning-cn\n```\n\nFile v1.0.3:stock-master/SKILL.md\n\n---\nname: stock-earning\ndescription: 主入口：包含查询持仓、行情、记账所有功能。\nuser-invocable: true\nscript: \"bash scripts/run.sh\"\n---\n\n# StockEarning 主投资助手 (Master Agent)\n\n你是一个专业的股票投资组合助手。你可以通过调用 StockEarning 的 REST API 来帮助用户查询市场数据、管理持仓和记录交易。\n\n## 工具使用方式\n\n你现在拥有一个专门的 `run.sh` 脚本来执行所有的 API 调用。该脚本会自动处理环境变量（API Key）的读取和提示。\n\n### 调用格式\n你需要使用本技能目录下的 `./scripts/*.sh` 脚本完成各类操作（每个操作一个脚本文件）。\n\n### 1. 查询持仓与收益 (Get Positions & Summary)\n获取用户当前的股票持仓信息或整体收益。\n- 获取所有持仓：执行 `./scripts/positions_all.sh`\n- 获取特定股票的持仓：执行 `./scripts/positions_by_symbol.sh`（需要设置 `SYMBOL`）\n- 获取整体收益摘要：执行 `./scripts/summary.sh`\n\n### 2. 市场数据 (Market Data)\n查询实时股价或搜索股票代码。\n- 查询实时价格：执行 `./scripts/get_price.sh`（需要设置 `SYMBOL`，可选 `MARKET`）\n- 搜索股票代码：执行 `./scripts/search_stocks.sh`（需要设置 `QUERY`，可选 `MARKET`）\n\n### 3. 记录交易与券商配置 (Trade & Broker)\n帮用户记录买卖行为及检查/配置券商。\n- 检查某市场是否已配置券商：执行 `./scripts/get_brokers.sh`（需要设置 `MARKET`）\n- 一键导入市场默认券商：执行 `./scripts/seed_defaults.sh`（需要设置 `MARKET`）\n- 预计算手续费：执行 `./scripts/calculate_commission.sh`（需要设置 `BROKER_ID`、`TRADE_TYPE`、`QUANTITY`、`PRICE`）\n- 记录买入/卖出交易：执行 `./scripts/create_trade.sh`（需要设置 `SYMBOL`、`NAME`、`MARKET`、`TRADE_TYPE`、`QUANTITY`、`PRICE`、`TRADE_DATE`；可选 `COMMISSION`、`CURRENCY`、`NOTES`）\n\n### 4. 强制刷新与同步\n用于在查询收益前获取最新市价。\n- 执行 `./scripts/refresh_prices.sh`\n\n## 严格执行规则\n1. 分析用户输入。\n2. **货币显示规则**：在回复任何金额（如价格、手续费、总额、盈亏）时，必须根据该股票所在的市场显示正确的货币符号或单位：\n   - `cn_a` (A股): `¥` 或 `元` (人民币 CNY)\n   - `hk` (港股): `HK$` 或 `港元` (港币 HKD)\n   - `us` (美股): `$` 或 `美元` (美元 USD)\n3. **资产查询的强制刷新**：当用户询问“总盈亏”、“账户表现”等涉及整体收益的问题时，你必须**先静默调用** `/api/positions/update-all-prices`，然后再调用 `/api/analytics/summary`，并在回复中说明：“已为您拉取最新行情...”。\n4. **记录交易的智能补全与券商机制**：当用户想要记录交易时，你必须按照以下逻辑处理：\n   - **(代码补全)**：如果没有代码，先调 `GET /api/positions/` 查持仓；没找到则调用搜索 API (`/api/markets/search/stocks`) 遍历 cn_a, hk, us。\n   - **(清仓智能识别)**：如果用户说“清仓”、“全卖了”，且未提供数量，必须先调用 `GET /api/positions/` 获取该股票的当前持仓数量，并自动填入。\n   - **(防爆仓拦截)**：如果是卖出操作且提供了数量，必须先调用 `GET /api/positions/` 检查余额。如果余额不足，直接拒绝并提示用户当前实际持有量。\n   - **(市价智能获取)**：如果用户未提供**买入价格**，静默调用 `/api/markets/stocks/{symbol}/price` 获取当前市价，并作为默认建议价询问用户。\n   - **(按金额反推数量)**：如果用户提供了总金额和单价但未提供数量，自动计算 `数量 = 向下取整(总金额 / 单价)` 并向用户确认。\n   - **(券商前置拦截与算费)**：在发起最终交易前，必须执行以下步骤：\n     1. 调用 `GET /api/brokers/?market={对应的市场}`。\n     2. 如果返回空列表 `[]`，说明该市场无券商。你必须**拦截交易并暂停**，询问用户：“您在这个市场尚未配置券商。是否需要为您一键导入该市场的默认券商配置？或者您想自定义配置？”\n     3. **等待用户回答**。如果用户回答“一键导入”或“同意导入”，你才调用 `POST /api/brokers/seed-defaults` 传入该市场代码，然后再调用 `GET /api/brokers/` 获取刚创建的 `broker_id`。如果用户要求“自定义”，请引导用户提供券商名称和佣金费率。\n     4. 拿到 `broker_id` 后，调用 `POST /api/brokers/calculate-commission` 计算精确的手续费（commission、stamp_duty 等）。\n5. **交易录入前校验**：在发起 `POST /api/trades/` 之前，必须逐项核对并向用户确认以下字段（缺一不可）：\n   - `symbol`：与用户意图一致，且无多余空格\n   - `market`：与标的所属市场一致（如 us/hk/cn_a 等）\n   - `trade_type`：buy/sell 与用户意图一致\n   - `quantity`：为正数；若用户说“清仓/全卖”，必须先查持仓再填入\n   - `price`：为正数，单位与市场/货币一致\n   - `fees`：在已配置券商时先用 `/api/brokers/calculate-commission` 计算；将 `total_fees` 写入 `commission`，并把明细（commission/stamp_duty/transfer_fee）写入 `notes`\n   - `trade_date`：明确的时间（含时区）；若用户未指定，需询问或使用用户确认的默认时间\n6. **最终确认**：在执行写入前，必须输出一段“逐项确认清单”（symbol、market、trade_type、quantity、price、fees、trade_date），并等待用户明确回复“确认/同意/继续”后才执行写入。\n7. **纠错机制**：如果交易已写入后用户发现错误，必须提供更正路径并提醒核对：\n   - 推荐：通过新增一笔“反向交易”进行冲销（在 `notes` 写明“冲销/更正原因”），再按正确数据重新录入\n   - 更正后：重新查询 `GET /api/positions/` 核对持仓数量与成本是否符合预期\n8. **工具使用**：使用 `{baseDir}/scripts/run.sh` 执行对应的 API 请求。\n9. **输出格式**：将 API 返回的 JSON 数据解析为对用户友好的 Markdown 表格或自然语言，金额必须保留两位小数并带上正确的货币单位。\n\nFile v1.0.3:trade-execution/SKILL.md\n\n---\nname: trade-execution\ndescription: 专门用于代表用户向系统中记录买入或卖出交易的助手。\nuser-invocable: true\n---\n\n# 交易执行助手 (Trade Execution)\n\n专门用于代表用户向系统中记录买入或卖出交易的助手。\n\n## 认证与基础配置\n- 环境变量: `STOCK_API_KEY`\n- Base URL: 从 `config.sh` 中读取 `$STOCK_BASE_URL`（默认 `https://www.mystockearning.cn`，切换域名只需改 `config.sh`）\n\n## API 指令清单\n\n### 记录新交易与券商配置\n当用户说 \"我今天以 150 美元买入了 100 股苹果\" 时：\n- 1) 检查市场券商：执行 `./scripts/get_brokers.sh`（需要设置 `MARKET`）\n- 2) 如需导入默认券商：执行 `./scripts/seed_defaults.sh`（需要设置 `MARKET`）\n- 3) 计算手续费：执行 `./scripts/calculate_commission.sh`（需要设置 `BROKER_ID`、`TRADE_TYPE`、`QUANTITY`、`PRICE`）\n- 4) 记录交易：执行 `./scripts/create_trade.sh`（需要设置 `SYMBOL`、`NAME`、`MARKET`、`TRADE_TYPE`、`QUANTITY`、`PRICE`、`TRADE_DATE`；可选 `COMMISSION`、`CURRENCY`、`NOTES`）\n\n## 严格执行规则\n1. 分析用户指令。\n2. **货币显示规则**：在回复任何金额（如价格、手续费、总额等）时，必须根据该股票所在的市场显示正确的货币符号或单位：\n   - `cn_a` (A股): `¥` 或 `元` (人民币 CNY)\n   - `hk` (港股): `HK$` 或 `港元` (港币 HKD)\n   - `us` (美股): `$` 或 `美元` (美元 USD)\n3. **智能补全与确认机制**：当用户想要记录交易时，你必须按照以下逻辑处理：\n   - **(代码补全)**：如果没有提供完整的股票代码和市场，先调 `GET /api/positions/` 查持仓；没找到则调用搜索 API (`/api/markets/search/stocks`) 遍历 cn_a, hk, us。\n   - **(清仓智能识别)**：如果用户说“清仓”、“全卖了”，且未提供数量，必须先调用 `GET /api/positions/` 获取该股票的当前持仓数量，并自动填入。\n   - **(防爆仓拦截)**：如果是卖出操作且提供了数量，必须先调用 `GET /api/positions/` 检查余额。如果余额不足，直接拒绝并提示用户当前实际持有量。\n   - **(市价智能获取)**：如果用户未提供**买入价格**，静默调用 `/api/markets/stocks/{symbol}/price` 获取当前市价，并作为默认建议价询问用户。\n   - **(按金额反推数量)**：如果用户提供了总金额和单价但未提供数量，自动计算 `数量 = 向下取整(总金额 / 单价)` 并向用户确认。\n3. **券商前置拦截与算费机制**：在确认了股票代码、数量和价格后，在发起最终交易前，必须执行以下步骤：\n   - 调用 `GET /api/brokers/?market={对应的市场}`。\n   - 如果返回空列表 `[]`，说明该市场无券商。你必须**拦截交易并暂停**，询问用户：“您在这个市场尚未配置券商，无法计算印花税和交易佣金。是否需要为您一键导入该市场的默认券商配置？或者您想自定义配置？”\n   - **等待用户回答**。如果用户回答“一键导入”或“同意导入”，你才调用 `POST /api/brokers/seed-defaults` 传入该市场代码，然后再调用 `GET /api/brokers/` 获取刚创建的 `broker_id`。如果用户要求“自定义”，请引导用户提供券商名称和佣金费率。\n   - 拿到 `broker_id` 后，调用 `POST /api/brokers/calculate-commission` 计算精确的手续费（commission、stamp_duty 等）。\n4. **最终确认**：在发起最终的 `POST /api/trades/` 之前，**必须**向用户输出一段确认信息（包含代码、名称、市场、数量、价格、以及**预估的手续费/印花税总计**）。只有在用户回复确认后，才能执行。\n5. **确认后执行**：执行 `curl -X POST /api/trades/` 记录交易（带上获取到的 broker_id 和费用数据）。\n6. **输出结果**：根据 API 响应，向用户确认交易已成功记录，并展示总金额。\n\nFile v1.0.3:README.md\n\n# StockEarning OpenClaw Plugin (AgentSkills)\n\n<br />\n\n通过安装这些技能，你的 AI 助手可以获得管理股票持仓、记录交易、查询A股行情的能力。\n\n**核心优势：**\n\n- **纯客户端实现**：完全基于 `curl` 和 HTTP REST API。\n- **零依赖**：无需在本地运行任何 Python 环境或 MCP 服务器。\n- **动态门控**：利用 `metadata.openclaw.requires.env` 确保只有在配置了 `STOCK_API_KEY` 时才激活。\n\n这是一个专为 **OpenClaw** 生态设计的轻量级 HTTP 技能插件。本仓库严格遵循最新的 **AgentSkills 规范**。\n\n## 🚀 快速安装\n\n我们提供了一个一键安装脚本。在你的终端中，进入到你想使用 AI 的工作区根目录，然后运行：\n\n```bash\n# 假设你已经下载/克隆了本仓库\ncd path/to/your/workspace\n/path/to/stockearning-plugin/install.sh\n```\n\n*(这会自动将技能文件夹拷贝到你当前工作区的* *`./skills/`* *目录下，OpenClaw 会自动发现并加载它们)*\n\n## 📦 手动安装 (通过 ClawHub 机制)\n\n如果 OpenClaw 支持标准的 workspace skills 覆盖，你只需将本仓库的子文件夹复制到你工作区的 `skills/` 目录下：\n\n```bash\nmkdir -p ./skills/\ncp -r stock-master ./skills/\ncp -r market-data ./skills/\ncp -r portfolio-assistant ./skills/\ncp -r trade-execution ./skills/\n```\n\n## ⚙️ 配置与使用\n\n### 1. 配置 API Key (仅需一次)\n\n得益于全新的包装脚本，你不需要每次都在终端中 `export`。你只需要在本地终端中执行以下命令，将 API Key 永久保存到本地配置中：\n\n```bash\nmkdir -p ~/.config/stockearning\n(umask 077; printf 'export STOCK_API_KEY=\"sk_your_api_key_here\"\\n' > ~/.config/stockearning/stockearning.env)\n```\n\n*(插件的执行脚本会自动从这个路径读取你的 API Key，保证了安全性与持久性)*\n\n兼容说明：\n\n- 仍兼容从 `~/.openclaw/stockearning.env` 加载（旧版本路径）\n- 也会尝试从 `~/.config/openclaw/stockearning.env`、`~/.config/hermes/stockearning.env` 加载\n\n### 2. 开始聊天\n\n启动 OpenClaw，使用斜杠命令或直接对话：\n\n```text\n> /stock-earning 帮我查一下我在美股的持仓，看看苹果赚了多少钱？\n```\n\n## 📚 包含的指令模块\n\n本插件包含 4 个独立的 AgentSkills，每个都拥有自己的文件夹和 `SKILL.md`：\n\n| 技能名称                  | 功能                        | 目录                       |\n| --------------------- | ------------------------- | ------------------------ |\n| `stock-earning`       | **主入口**：包含所有核心功能，自动判断用户意图 | `./stock-master/`        |\n| `portfolio-assistant` | 仅查询持仓、历史交易、总体收益摘要         | `./portfolio-assistant/` |\n| `market-data`         | 仅查询全球12个市场的实时股价和股票搜索      | `./market-data/`         |\n| `trade-execution`     | 仅用于记录新的买入或卖出交易            | `./trade-execution/`     |\n\n## 注意事项\n\n- Base URL 统一配置在 `config.sh` 的 `STOCK_BASE_URL` 变量中（默认 `https://www.mystockearning.cn`）。切换域名只需修改该文件，也可通过环境变量 `STOCK_BASE_URL` 覆盖。\n\nFile v1.0.3:_meta.json\n\n{\n  \"ownerId\": \"kn75wc1b4zt76w9g1d6wgav3f1804jt8\",\n  \"slug\": \"secn\",\n  \"version\": \"1.0.3\",\n  \"publishedAt\": 1777734700446\n}\n\nFile v1.0.3:plugin.json\n\n{\n  \"name\": \"stock-earning-cn\",\n  \"version\": \"1.0.0\",\n  \"description\": \"A pure HTTP/REST API plugin for OpenClaw to manage stock portfolios and query global market data.\",\n  \"author\": \"StockEarning\",\n  \"publisher\": \"StockEarning\",\n  \"homepage\": \"https://www.mystockearning.cn\",\n  \"keywords\": [\"finance\", \"stocks\", \"portfolio\", \"trading\", \"openclaw\", \"claude-code\"],\n  \"repository\": \"https://github.com/hareluya/stock-earning-cn-skills\",\n  \"license\": \"MIT-0\",\n  \"releases\": \"https://github.com/hareluya/stock-earning-cn-skills/releases\",\n  \"commands\": {\n    \"stock-earning\": \"./stock-master/SKILL.md\",\n    \"market-data\": \"./market-data/SKILL.md\",\n    \"portfolio-assistant\": \"./portfolio-assistant/SKILL.md\",\n    \"trade-execution\": \"./trade-execution/SKILL.md\"\n  },\n  \"environment\": {\n    \"STOCK_API_KEY\": {\n      \"description\": \"Your StockEarning.cn API Key\",\n      \"required\": true\n    }\n  }\n}\n\nArchive v1.0.2: 12 files, 16732 bytes\n\nFiles: config.sh (459b), install.sh (1339b), market-data/SKILL.md (1859b), plugin.json (894b), portfolio-assistant/SKILL.md (2491b), README.md (3214b), SKILL.md (2153b), stock-master/run.sh (5417b), stock-master/SKILL.md (6597b), test_api.sh (2405b), trade-execution/SKILL.md (4524b), _meta.json (123b)\n\nFile v1.0.2:market-data/SKILL.md\n\n---\nname: market-data\ndescription: 专门用于查询全球股票实时价格、基本信息和搜索股票代码的助手。\nmetadata: {\"openclaw\": {\"requires\": {\"env\": [\"STOCK_API_KEY\"]}}}\nuser-invocable: true\n---\n\n# 市场数据助手 (Market Data)\n\n专门用于查询全球股票实时价格、基本信息和搜索股票代码的助手。\n\n## 认证与基础配置\n- 环境变量: `STOCK_API_KEY`\n- Base URL: 从 `config.sh` 中读取 `$STOCK_BASE_URL`（默认 `https://www.mystockearning.cn`，切换域名只需改 `config.sh`）\n\n## 市场代码 (Market Codes)\n- 美股: `us`\n- 港股: `hk`\n- A股: `cn_a`\n- B股: `cn_b`\n\n## API 指令清单\n\n### 搜索股票\n当用户说 \"查询腾讯的代码\" 或 \"寻找苹果股票\" 时：\n```bash\ncurl -s -H \"X-API-Key: $STOCK_API_KEY\" \"${STOCK_BASE_URL}/api/markets/search/stocks?query={搜索词}&market={市场代码}\"\n```\n\n### 获取实时价格\n当用户说 \"查看 AAPL 的现价\" 时：\n```bash\ncurl -s -H \"X-API-Key: $STOCK_API_KEY\" \"${STOCK_BASE_URL}/api/markets/stocks/{symbol}/price?market={市场代码}\"\n```\n\n### 获取股票详情\n当用户需要股票的基本面信息时：\n```bash\ncurl -s -H \"X-API-Key: $STOCK_API_KEY\" \"${STOCK_BASE_URL}/api/markets/stocks/{symbol}/info?market={市场代码}\"\n```\n\n## 执行规则\n1. 解析用户指令。\n2. **货币显示规则**：在回复实时价格或任何金额时，必须根据该股票所在的市场显示正确的货币符号或单位：\n   - `cn_a` (A股): `¥` 或 `元` (人民币 CNY)\n   - `hk` (港股): `HK$` 或 `港元` (港币 HKD)\n   - `us` (美股): `$` 或 `美元` (美元 USD)\n3. 构造对应的 `curl` 命令并执行。\n4. 如果返回 404，告知用户未找到该股票，请检查名称或市场代码。\n5. 将 JSON 格式的价格和货币单位转换为易读的自然语言，金额必须带上正确的货币单位。\n\nFile v1.0.2:portfolio-assistant/SKILL.md\n\n---\nname: portfolio-assistant\ndescription: 专门用于查询用户持仓、盈亏情况和历史交易记录的助手。\nmetadata: {\"openclaw\": {\"requires\": {\"env\": [\"STOCK_API_KEY\"]}}}\nuser-invocable: true\n---\n\n# 投资组合助手 (Portfolio Assistant)\n\n专门用于查询用户持仓、盈亏情况和历史交易记录的助手。\n\n## 认证与基础配置\n- 环境变量: `STOCK_API_KEY`\n- Base URL: 从 `config.sh` 中读取 `$STOCK_BASE_URL`（默认 `https://www.mystockearning.cn`，切换域名只需改 `config.sh`）\n\n## API 指令清单\n\n### 获取当前持仓\n当用户问 \"我现在的苹果股票赚了多少钱？\" 或 \"查看我的美股持仓\" 时：\n```bash\n# 获取特定股票持仓\ncurl -s -H \"X-API-Key: $STOCK_API_KEY\" \"${STOCK_BASE_URL}/api/positions/?symbol={股票代码}\"\n\n# 获取某市场的所有持仓，按盈亏比例降序\ncurl -s -H \"X-API-Key: $STOCK_API_KEY\" \"${STOCK_BASE_URL}/api/positions/?market={市场代码}&sort_by=profit_loss_percent&order=desc\"\n```\n\n### 获取交易记录\n当用户问 \"我最近一个月买过哪些美股？\" 时：\n```bash\ncurl -s -H \"X-API-Key: $STOCK_API_KEY\" \"${STOCK_BASE_URL}/api/trades/?market={市场代码}&trade_type={buy/sell}\"\n```\n\n### 获取投资表现摘要\n当用户问 \"我账户总资产多少？\" 或 \"总盈亏如何？\" 时：\n```bash\n# 1. 先强制刷新最新市价\ncurl -s -H \"X-API-Key: $STOCK_API_KEY\" \"${STOCK_BASE_URL}/api/positions/update-all-prices\"\n\n# 2. 再获取收益摘要\ncurl -s -H \"X-API-Key: $STOCK_API_KEY\" \"${STOCK_BASE_URL}/api/analytics/summary\"\n```\n\n## 执行规则\n1. 解析用户指令。\n2. **货币显示规则**：在回复任何持仓市值、成本或盈亏金额时，必须根据该股票或账户所在的市场显示正确的货币符号或单位：\n   - `cn_a` (A股): `¥` 或 `元` (人民币 CNY)\n   - `hk` (港股): `HK$` 或 `港元` (港币 HKD)\n   - `us` (美股): `$` 或 `美元` (美元 USD)\n3. **强制刷新机制**：如果用户查询的是“总体盈亏”或“账户表现”，你必须先执行 `update-all-prices` 接口以获取最新市价，再执行 `summary` 接口，并在回复中告知用户“已为您拉取最新行情”。\n4. 执行 `curl` 请求。\n5. 从响应中提取关键字段（如 `profit_loss`, `profit_loss_percent`, `market_value`）。\n6. 使用带颜色的 Markdown 格式或表格输出结果（如：盈利标红或绿，根据当地市场习惯），金额必须保留两位小数并带上正确的货币单位。\n\nFile v1.0.2:SKILL.md\n\n---\nname: stock-earning-cn\ndescription: 这是 StockEarningCN 的 OpenClaw 技能/Skill插件入口说明。安装本目录后，你将获得一组可组合使用的技能\nuser-invocable: true\n---\n# StockEarningCN Skills介绍(StockEarning Assistant)\n\n这是 StockEarningCN 的 OpenClaw 技能插件入口说明。安装本目录后，你将获得一组可组合使用的技能，用于：\n\n- 查询A股行情、股票信息、股票搜索\n- 查询与管理持仓、计算盈亏、刷新持仓现价\n- 记录买入/卖出交易\n\n## 开始之前：\n\n您需要去`https://www.mystockearning.cn注册一个账号，并等待审核通过后获取api key。`\n\n## 认证与基础配置\n\n- 环境变量: `STOCK_API_KEY`\n- Base URL: 从 `config.sh` 中读取 `$STOCK_BASE_URL`（默认 `https://www.mystockearning.cn`，也可通过环境变量 `STOCK_BASE_URL` 覆盖）\n\n所有请求均使用 HTTP Header：\n\n```bash\nX-API-Key: $STOCK_API_KEY\n```\n\n推荐安全保存（OpenClaw/Hermes 通用）：\n\n```bash\nmkdir -p ~/.config/stockearning\n(umask 077; printf 'export STOCK_API_KEY=\"sk_your_api_key_here\"\\n' > ~/.config/stockearning/stockearning.env)\nsource ~/.config/stockearning/stockearning.env\n```\n\n## 推荐使用方式\n\n通常直接使用主入口技能：\n\n- `/stock-earning`：主入口，覆盖最常用的查询/记账/刷新场景\n\n若你希望更可控、更聚焦的行为，可以按需调用下列技能：\n\n| 技能名称                  | 功能                 | 目录                       |\n| --------------------- | ------------------ | ------------------------ |\n| `stock-earning`       | 主入口：综合查询、刷新现价、记录交易 | `./stock-master/`        |\n| `portfolio-assistant` | 仅查询持仓/收益摘要/历史交易    | `./portfolio-assistant/` |\n| `market-data`         | 仅查询实时价格、股票信息、搜索代码  | `./market-data/`         |\n| `trade-execution`     | 仅用于记录买入/卖出交易       | `./trade-execution/`     |\n\n## 安装方式\n\n### Openclaw:\n\n```\nopenclaw skills install stock-earning-cn\n```\n\n<br />\n\n### Hermes:\n\n```\nhermes skills install clawhub:stock-earning-cn\n```\n\nFile v1.0.2:stock-master/SKILL.md\n\n---\nname: stock-earning\ndescription: 主入口：包含查询持仓、行情、记账所有功能。\nuser-invocable: true\nscript: \"bash run.sh\"\n---\n\n# StockEarning 主投资助手 (Master Agent)\n\n你是一个专业的股票投资组合助手。你可以通过调用 StockEarning 的 REST API 来帮助用户查询市场数据、管理持仓和记录交易。\n\n## 工具使用方式\n\n你现在拥有一个专门的 `run.sh` 脚本来执行所有的 API 调用。该脚本会自动处理环境变量（API Key）的读取和提示。\n\n### 调用格式\n你需要使用终端执行以下命令：\n```bash\n{baseDir}/run.sh [API路径] [HTTP方法] [可选的JSON数据]\n```\n\n### 1. 查询持仓与收益 (Get Positions & Summary)\n获取用户当前的股票持仓信息或整体收益。\n```bash\n# 获取所有持仓\n{baseDir}/run.sh \"/api/positions/\" \"GET\"\n\n# 获取特定股票的持仓\n{baseDir}/run.sh \"/api/positions/?symbol=AAPL\" \"GET\"\n\n# 获取整体收益摘要\n{baseDir}/run.sh \"/api/analytics/summary\" \"GET\"\n```\n\n### 2. 市场数据 (Market Data)\n查询实时股价或搜索股票代码。\n```bash\n# 查询实时价格\n{baseDir}/run.sh \"/api/markets/stocks/{symbol}/price?market={market}\" \"GET\"\n\n# 搜索股票代码 (当用户说出股票名称但未提供代码时使用)\n{baseDir}/run.sh \"/api/markets/search/stocks?query={keyword}&market={market}\" \"GET\"\n```\n\n### 3. 记录交易与券商配置 (Trade & Broker)\n帮用户记录买卖行为及检查/配置券商。\n```bash\n# 检查某市场是否已配置券商\n{baseDir}/run.sh \"/api/brokers/?market={market}\" \"GET\"\n\n# 一键导入市场默认券商\n{baseDir}/run.sh \"/api/brokers/seed-defaults\" \"POST\" '{\"market\": \"cn_a\"}'\n\n# 预计算手续费（返回 commission/stamp_duty/transfer_fee/total_fees）\n{baseDir}/run.sh \"/api/brokers/calculate-commission\" \"POST\" '{\"broker_id\": 1, \"trade_type\": \"buy\", \"quantity\": 100, \"price\": 150.00}'\n\n# 记录买入/卖出交易\n{baseDir}/run.sh \"/api/trades/\" \"POST\" '{\"symbol\":\"AAPL\",\"name\":\"Apple Inc.\",\"market\":\"us\",\"trade_type\":\"buy\",\"quantity\":100,\"price\":150.00,\"commission\":1.50,\"notes\":\"fees: commission=1.50, stamp_duty=0, transfer_fee=0 (from /api/brokers/calculate-commission)\",\"trade_date\":\"2026-01-01T09:30:00+00:00\"}'\n```\n\n### 4. 强制刷新与同步\n用于在查询收益前获取最新市价。\n```bash\n{baseDir}/run.sh \"/api/positions/update-all-prices\" \"GET\"\n```\n\n## 严格执行规则\n1. 分析用户输入。\n2. **货币显示规则**：在回复任何金额（如价格、手续费、总额、盈亏）时，必须根据该股票所在的市场显示正确的货币符号或单位：\n   - `cn_a` (A股): `¥` 或 `元` (人民币 CNY)\n   - `hk` (港股): `HK$` 或 `港元` (港币 HKD)\n   - `us` (美股): `$` 或 `美元` (美元 USD)\n3. **资产查询的强制刷新**：当用户询问“总盈亏”、“账户表现”等涉及整体收益的问题时，你必须**先静默调用** `/api/positions/update-all-prices`，然后再调用 `/api/analytics/summary`，并在回复中说明：“已为您拉取最新行情...”。\n4. **记录交易的智能补全与券商机制**：当用户想要记录交易时，你必须按照以下逻辑处理：\n   - **(代码补全)**：如果没有代码，先调 `GET /api/positions/` 查持仓；没找到则调用搜索 API (`/api/markets/search/stocks`) 遍历 cn_a, hk, us。\n   - **(清仓智能识别)**：如果用户说“清仓”、“全卖了”，且未提供数量，必须先调用 `GET /api/positions/` 获取该股票的当前持仓数量，并自动填入。\n   - **(防爆仓拦截)**：如果是卖出操作且提供了数量，必须先调用 `GET /api/positions/` 检查余额。如果余额不足，直接拒绝并提示用户当前实际持有量。\n   - **(市价智能获取)**：如果用户未提供**买入价格**，静默调用 `/api/markets/stocks/{symbol}/price` 获取当前市价，并作为默认建议价询问用户。\n   - **(按金额反推数量)**：如果用户提供了总金额和单价但未提供数量，自动计算 `数量 = 向下取整(总金额 / 单价)` 并向用户确认。\n   - **(券商前置拦截与算费)**：在发起最终交易前，必须执行以下步骤：\n     1. 调用 `GET /api/brokers/?market={对应的市场}`。\n     2. 如果返回空列表 `[]`，说明该市场无券商。你必须**拦截交易并暂停**，询问用户：“您在这个市场尚未配置券商。是否需要为您一键导入该市场的默认券商配置？或者您想自定义配置？”\n     3. **等待用户回答**。如果用户回答“一键导入”或“同意导入”，你才调用 `POST /api/brokers/seed-defaults` 传入该市场代码，然后再调用 `GET /api/brokers/` 获取刚创建的 `broker_id`。如果用户要求“自定义”，请引导用户提供券商名称和佣金费率。\n     4. 拿到 `broker_id` 后，调用 `POST /api/brokers/calculate-commission` 计算精确的手续费（commission、stamp_duty 等）。\n5. **交易录入前校验**：在发起 `POST /api/trades/` 之前，必须逐项核对并向用户确认以下字段（缺一不可）：\n   - `symbol`：与用户意图一致，且无多余空格\n   - `market`：与标的所属市场一致（如 us/hk/cn_a 等）\n   - `trade_type`：buy/sell 与用户意图一致\n   - `quantity`：为正数；若用户说“清仓/全卖”，必须先查持仓再填入\n   - `price`：为正数，单位与市场/货币一致\n   - `fees`：在已配置券商时先用 `/api/brokers/calculate-commission` 计算；将 `total_fees` 写入 `commission`，并把明细（commission/stamp_duty/transfer_fee）写入 `notes`\n   - `trade_date`：明确的时间（含时区）；若用户未指定，需询问或使用用户确认的默认时间\n6. **最终确认**：在执行写入前，必须输出一段“逐项确认清单”（symbol、market、trade_type、quantity、price、fees、trade_date），并等待用户明确回复“确认/同意/继续”后才执行写入。\n7. **纠错机制**：如果交易已写入后用户发现错误，必须提供更正路径并提醒核对：\n   - 推荐：通过新增一笔“反向交易”进行冲销（在 `notes` 写明“冲销/更正原因”），再按正确数据重新录入\n   - 更正后：重新查询 `GET /api/positions/` 核对持仓数量与成本是否符合预期\n8. **工具使用**：使用 `{baseDir}/run.sh` 执行对应的 API 请求。\n9. **输出格式**：将 API 返回的 JSON 数据解析为对用户友好的 Markdown 表格或自然语言，金额必须保留两位小数并带上正确的货币单位。\n\nFile v1.0.2:trade-execution/SKILL.md\n\n---\nname: trade-execution\ndescription: 专门用于代表用户向系统中记录买入或卖出交易的助手。\nuser-invocable: true\n---\n\n# 交易执行助手 (Trade Execution)\n\n专门用于代表用户向系统中记录买入或卖出交易的助手。\n\n## 认证与基础配置\n- 环境变量: `STOCK_API_KEY`\n- Base URL: 从 `config.sh` 中读取 `$STOCK_BASE_URL`（默认 `https://www.mystockearning.cn`，切换域名只需改 `config.sh`）\n\n## API 指令清单\n\n### 记录新交易与券商配置\n当用户说 \"我今天以 150 美元买入了 100 股苹果\" 时：\n```bash\n# 1. 检查市场券商\ncurl -s -H \"X-API-Key: $STOCK_API_KEY\" \"${STOCK_BASE_URL}/api/brokers/?market={market}\"\n\n# 2. 如果需要，一键导入默认券商\ncurl -s -X POST -H \"Content-Type: application/json\" -H \"X-API-Key: $STOCK_API_KEY\" -d '{\"market\": \"{market}\"}' \"${STOCK_BASE_URL}/api/brokers/seed-defaults\"\n\n# 3. 计算手续费\ncurl -s -X POST -H \"Content-Type: application/json\" -H \"X-API-Key: $STOCK_API_KEY\" -d '{\n  \"broker_id\": 1,\n  \"trade_type\": \"buy\",\n  \"quantity\": 100,\n  \"price\": 150.00\n}' \"${STOCK_BASE_URL}/api/brokers/calculate-commission\"\n\n# 4. 记录交易\ncurl -s -X POST -H \"Content-Type: application/json\" -H \"X-API-Key: $STOCK_API_KEY\" -d '{\n  \"symbol\": \"{代码}\",\n  \"name\": \"{名称}\",\n  \"market\": \"{市场}\",\n  \"trade_type\": \"{buy或sell}\",\n  \"quantity\": {数量数字},\n  \"price\": {价格数字},\n  \"broker_id\": {从第一步获取的ID},\n  \"commission\": {从第三步获取},\n  \"stamp_duty\": {从第三步获取},\n  \"transfer_fee\": {从第三步获取},\n  \"notes\": \"通过 AI Agent 记录\"\n}' \"${STOCK_BASE_URL}/api/trades/\"\n```\n\n## 严格执行规则\n1. 分析用户指令。\n2. **货币显示规则**：在回复任何金额（如价格、手续费、总额等）时，必须根据该股票所在的市场显示正确的货币符号或单位：\n   - `cn_a` (A股): `¥` 或 `元` (人民币 CNY)\n   - `hk` (港股): `HK$` 或 `港元` (港币 HKD)\n   - `us` (美股): `$` 或 `美元` (美元 USD)\n3. **智能补全与确认机制**：当用户想要记录交易时，你必须按照以下逻辑处理：\n   - **(代码补全)**：如果没有提供完整的股票代码和市场，先调 `GET /api/positions/` 查持仓；没找到则调用搜索 API (`/api/markets/search/stocks`) 遍历 cn_a, hk, us。\n   - **(清仓智能识别)**：如果用户说“清仓”、“全卖了”，且未提供数量，必须先调用 `GET /api/positions/` 获取该股票的当前持仓数量，并自动填入。\n   - **(防爆仓拦截)**：如果是卖出操作且提供了数量，必须先调用 `GET /api/positions/` 检查余额。如果余额不足，直接拒绝并提示用户当前实际持有量。\n   - **(市价智能获取)**：如果用户未提供**买入价格**，静默调用 `/api/markets/stocks/{symbol}/price` 获取当前市价，并作为默认建议价询问用户。\n   - **(按金额反推数量)**：如果用户提供了总金额和单价但未提供数量，自动计算 `数量 = 向下取整(总金额 / 单价)` 并向用户确认。\n3. **券商前置拦截与算费机制**：在确认了股票代码、数量和价格后，在发起最终交易前，必须执行以下步骤：\n   - 调用 `GET /api/brokers/?market={对应的市场}`。\n   - 如果返回空列表 `[]`，说明该市场无券商。你必须**拦截交易并暂停**，询问用户：“您在这个市场尚未配置券商，无法计算印花税和交易佣金。是否需要为您一键导入该市场的默认券商配置？或者您想自定义配置？”\n   - **等待用户回答**。如果用户回答“一键导入”或“同意导入”，你才调用 `POST /api/brokers/seed-defaults` 传入该市场代码，然后再调用 `GET /api/brokers/` 获取刚创建的 `broker_id`。如果用户要求“自定义”，请引导用户提供券商名称和佣金费率。\n   - 拿到 `broker_id` 后，调用 `POST /api/brokers/calculate-commission` 计算精确的手续费（commission、stamp_duty 等）。\n4. **最终确认**：在发起最终的 `POST /api/trades/` 之前，**必须**向用户输出一段确认信息（包含代码、名称、市场、数量、价格、以及**预估的手续费/印花税总计**）。只有在用户回复确认后，才能执行。\n5. **确认后执行**：执行 `curl -X POST /api/trades/` 记录交易（带上获取到的 broker_id 和费用数据）。\n6. **输出结果**：根据 API 响应，向用户确认交易已成功记录，并展示总金额。\n\nFile v1.0.2:README.md\n\n# StockEarning OpenClaw Plugin (AgentSkills)\n\n<br />\n\n通过安装这些技能，你的 AI 助手可以获得管理股票持仓、记录交易、查询A股行情的能力。\n\n**核心优势：**\n\n- **纯客户端实现**：完全基于 `curl` 和 HTTP REST API。\n- **零依赖**：无需在本地运行任何 Python 环境或 MCP 服务器。\n- **动态门控**：利用 `metadata.openclaw.requires.env` 确保只有在配置了 `STOCK_API_KEY` 时才激活。\n\n这是一个专为 **OpenClaw** 生态设计的轻量级 HTTP 技能插件。本仓库严格遵循最新的 **AgentSkills 规范**。\n\n## 🚀 快速安装\n\n我们提供了一个一键安装脚本。在你的终端中，进入到你想使用 AI 的工作区根目录，然后运行：\n\n```bash\n# 假设你已经下载/克隆了本仓库\ncd path/to/your/workspace\n/path/to/stockearning-plugin/install.sh\n```\n\n*(这会自动将技能文件夹拷贝到你当前工作区的* *`./skills/`* *目录下，OpenClaw 会自动发现并加载它们)*\n\n## 📦 手动安装 (通过 ClawHub 机制)\n\n如果 OpenClaw 支持标准的 workspace skills 覆盖，你只需将本仓库的子文件夹复制到你工作区的 `skills/` 目录下：\n\n```bash\nmkdir -p ./skills/\ncp -r stock-master ./skills/\ncp -r market-data ./skills/\ncp -r portfolio-assistant ./skills/\ncp -r trade-execution ./skills/\n```\n\n## ⚙️ 配置与使用\n\n### 1. 配置 API Key (仅需一次)\n\n得益于全新的包装脚本，你不需要每次都在终端中 `export`。你只需要在本地终端中执行以下命令，将 API Key 永久保存到本地配置中：\n\n```bash\nmkdir -p ~/.config/stockearning\n(umask 077; printf 'export STOCK_API_KEY=\"sk_your_api_key_here\"\\n' > ~/.config/stockearning/stockearning.env)\n```\n\n*(插件的执行脚本会自动从这个路径读取你的 API Key，保证了安全性与持久性)*\n\n兼容说明：\n\n- 仍兼容从 `~/.openclaw/stockearning.env` 加载（旧版本路径）\n- 也会尝试从 `~/.config/openclaw/stockearning.env`、`~/.config/hermes/stockearning.env` 加载\n\n### 2. 开始聊天\n\n启动 OpenClaw，使用斜杠命令或直接对话：\n\n```text\n> /stock-earning 帮我查一下我在美股的持仓，看看苹果赚了多少钱？\n```\n\n## 📚 包含的指令模块\n\n本插件包含 4 个独立的 AgentSkills，每个都拥有自己的文件夹和 `SKILL.md`：\n\n| 技能名称                  | 功能                        | 目录                       |\n| --------------------- | ------------------------- | ------------------------ |\n| `stock-earning`       | **主入口**：包含所有核心功能，自动判断用户意图 | `./stock-master/`        |\n| `portfolio-assistant` | 仅查询持仓、历史交易、总体收益摘要         | `./portfolio-assistant/` |\n| `market-data`         | 仅查询全球12个市场的实时股价和股票搜索      | `./market-data/`         |\n| `trade-execution`     | 仅用于记录新的买入或卖出交易            | `./trade-execution/`     |\n\n## 注意事项\n\n- Base URL 统一配置在 `config.sh` 的 `STOCK_BASE_URL` 变量中（默认 `https://www.mystockearning.cn`）。切换域名只需修改该文件，也可通过环境变量 `STOCK_BASE_URL` 覆盖。\n\nFile v1.0.2:_meta.json\n\n{\n  \"ownerId\": \"kn75wc1b4zt76w9g1d6wgav3f1804jt8\",\n  \"slug\": \"secn\",\n  \"version\": \"1.0.2\",\n  \"publishedAt\": 1777569639033\n}\n\nFile v1.0.2:plugin.json\n\n{\n  \"name\": \"stock-earning-cn\",\n  \"version\": \"1.0.0\",\n  \"description\": \"A pure HTTP/REST API plugin for OpenClaw to manage stock portfolios and query global market data.\",\n  \"author\": \"StockEarning\",\n  \"publisher\": \"StockEarning\",\n  \"homepage\": \"https://www.mystockearning.cn\",\n  \"keywords\": [\"finance\", \"stocks\", \"portfolio\", \"trading\", \"openclaw\", \"claude-code\"],\n  \"repository\": \"https://github.com/hareluya/stock-earning-cn-skills\",\n  \"license\": \"MIT-0\",\n  \"releases\": \"https://github.com/hareluya/stock-earning-cn-skills/releases\",\n  \"commands\": {\n    \"stock-earning\": \"./stock-master/SKILL.md\",\n    \"market-data\": \"./market-data/SKILL.md\",\n    \"portfolio-assistant\": \"./portfolio-assistant/SKILL.md\",\n    \"trade-execution\": \"./trade-execution/SKILL.md\"\n  },\n  \"environment\": {\n    \"STOCK_API_KEY\": {\n      \"description\": \"Your StockEarning.cn API Key\",\n      \"required\": true\n    }\n  }\n}\n\nArchive v1.0.1: 12 files, 15441 bytes\n\nFiles: config.sh (410b), install.sh (1339b), market-data/SKILL.md (1859b), plugin.json (716b), portfolio-assistant/SKILL.md (2491b), README.md (3310b), SKILL.md (1956b), stock-master/run.sh (2397b), stock-master/SKILL.md (5396b), test_api.sh (2405b), trade-execution/SKILL.md (4524b), _meta.json (123b)\n\nFile v1.0.1:market-data/SKILL.md\n\n---\nname: market-data\ndescription: 专门用于查询全球股票实时价格、基本信息和搜索股票代码的助手。\nmetadata: {\"openclaw\": {\"requires\": {\"env\": [\"STOCK_API_KEY\"]}}}\nuser-invocable: true\n---\n\n# 市场数据助手 (Market Data)\n\n专门用于查询全球股票实时价格、基本信息和搜索股票代码的助手。\n\n## 认证与基础配置\n- 环境变量: `STOCK_API_KEY`\n- Base URL: 从 `config.sh` 中读取 `$STOCK_BASE_URL`（默认 `https://www.mystockearning.cn`，切换域名只需改 `config.sh`）\n\n## 市场代码 (Market Codes)\n- 美股: `us`\n- 港股: `hk`\n- A股: `cn_a`\n- B股: `cn_b`\n\n## API 指令清单\n\n### 搜索股票\n当用户说 \"查询腾讯的代码\" 或 \"寻找苹果股票\" 时：\n```bash\ncurl -s -H \"X-API-Key: $STOCK_API_KEY\" \"${STOCK_BASE_URL}/api/markets/search/stocks?query={搜索词}&market={市场代码}\"\n```\n\n### 获取实时价格\n当用户说 \"查看 AAPL 的现价\" 时：\n```bash\ncurl -s -H \"X-API-Key: $STOCK_API_KEY\" \"${STOCK_BASE_URL}/api/markets/stocks/{symbol}/price?market={市场代码}\"\n```\n\n### 获取股票详情\n当用户需要股票的基本面信息时：\n```bash\ncurl -s -H \"X-API-Key: $STOCK_API_KEY\" \"${STOCK_BASE_URL}/api/markets/stocks/{symbol}/info?market={市场代码}\"\n```\n\n## 执行规则\n1. 解析用户指令。\n2. **货币显示规则**：在回复实时价格或任何金额时，必须根据该股票所在的市场显示正确的货币符号或单位：\n   - `cn_a` (A股): `¥` 或 `元` (人民币 CNY)\n   - `hk` (港股): `HK$` 或 `港元` (港币 HKD)\n   - `us` (美股): `$` 或 `美元` (美元 USD)\n3. 构造对应的 `curl` 命令并执行。\n4. 如果返回 404，告知用户未找到该股票，请检查名称或市场代码。\n5. 将 JSON 格式的价格和货币单位转换为易读的自然语言，金额必须带上正确的货币单位。\n\nFile v1.0.1:portfolio-assistant/SKILL.md\n\n---\nname: portfolio-assistant\ndescription: 专门用于查询用户持仓、盈亏情况和历史交易记录的助手。\nmetadata: {\"openclaw\": {\"requires\": {\"env\": [\"STOCK_API_KEY\"]}}}\nuser-invocable: true\n---\n\n# 投资组合助手 (Portfolio Assistant)\n\n专门用于查询用户持仓、盈亏情况和历史交易记录的助手。\n\n## 认证与基础配置\n- 环境变量: `STOCK_API_KEY`\n- Base URL: 从 `config.sh` 中读取 `$STOCK_BASE_URL`（默认 `https://www.mystockearning.cn`，切换域名只需改 `config.sh`）\n\n## API 指令清单\n\n### 获取当前持仓\n当用户问 \"我现在的苹果股票赚了多少钱？\" 或 \"查看我的美股持仓\" 时：\n```bash\n# 获取特定股票持仓\ncurl -s -H \"X-API-Key: $STOCK_API_KEY\" \"${STOCK_BASE_URL}/api/positions/?symbol={股票代码}\"\n\n# 获取某市场的所有持仓，按盈亏比例降序\ncurl -s -H \"X-API-Key: $STOCK_API_KEY\" \"${STOCK_BASE_URL}/api/positions/?market={市场代码}&sort_by=profit_loss_percent&order=desc\"\n```\n\n### 获取交易记录\n当用户问 \"我最近一个月买过哪些美股？\" 时：\n```bash\ncurl -s -H \"X-API-Key: $STOCK_API_KEY\" \"${STOCK_BASE_URL}/api/trades/?market={市场代码}&trade_type={buy/sell}\"\n```\n\n### 获取投资表现摘要\n当用户问 \"我账户总资产多少？\" 或 \"总盈亏如何？\" 时：\n```bash\n# 1. 先强制刷新最新市价\ncurl -s -H \"X-API-Key: $STOCK_API_KEY\" \"${STOCK_BASE_URL}/api/positions/update-all-prices\"\n\n# 2. 再获取收益摘要\ncurl -s -H \"X-API-Key: $STOCK_API_KEY\" \"${STOCK_BASE_URL}/api/analytics/summary\"\n```\n\n## 执行规则\n1. 解析用户指令。\n2. **货币显示规则**：在回复任何持仓市值、成本或盈亏金额时，必须根据该股票或账户所在的市场显示正确的货币符号或单位：\n   - `cn_a` (A股): `¥` 或 `元` (人民币 CNY)\n   - `hk` (港股): `HK$` 或 `港元` (港币 HKD)\n   - `us` (美股): `$` 或 `美元` (美元 USD)\n3. **强制刷新机制**：如果用户查询的是“总体盈亏”或“账户表现”，你必须先执行 `update-all-prices` 接口以获取最新市价，再执行 `summary` 接口，并在回复中告知用户“已为您拉取最新行情”。\n4. 执行 `curl` 请求。\n5. 从响应中提取关键字段（如 `profit_loss`, `profit_loss_percent`, `market_value`）。\n6. 使用带颜色的 Markdown 格式或表格输出结果（如：盈利标红或绿，根据当地市场习惯），金额必须保留两位小数并带上正确的货币单位。\n\nFile v1.0.1:SKILL.md\n\n# StockEarningCN Skills介绍(StockEarning Assistant)\n\n这是 StockEarningCN 的 OpenClaw 技能插件入口说明。安装本目录后，你将获得一组可组合使用的技能，用于：\n\n- 查询A股行情、股票信息、股票搜索\n- 查询与管理持仓、计算盈亏、刷新持仓现价\n- 记录买入/卖出交易\n\n## 开始之前：\n\n您需要去`https://www.mystockearning.cn注册一个账号，并等待审核通过后获取api key。`\n\n## 认证与基础配置\n\n- 环境变量: `STOCK_API_KEY`\n- Base URL: 从 `config.sh` 中读取 `$STOCK_BASE_URL`（默认 `https://www.mystockearning.cn`，也可通过环境变量 `STOCK_BASE_URL` 覆盖）\n\n所有请求均使用 HTTP Header：\n\n```bash\nX-API-Key: $STOCK_API_KEY\n```\n\n推荐安全保存（OpenClaw/Hermes 通用）：\n\n```bash\nmkdir -p ~/.config/stockearning\n(umask 077; printf 'export STOCK_API_KEY=\"sk_your_api_key_here\"\\n' > ~/.config/stockearning/stockearning.env)\nsource ~/.config/stockearning/stockearning.env\n```\n\n## 推荐使用方式\n\n通常直接使用主入口技能：\n\n- `/stock-earning`：主入口，覆盖最常用的查询/记账/刷新场景\n\n若你希望更可控、更聚焦的行为，可以按需调用下列技能：\n\n| 技能名称                  | 功能                 | 目录                       |\n| --------------------- | ------------------ | ------------------------ |\n| `stock-earning`       | 主入口：综合查询、刷新现价、记录交易 | `./stock-master/`        |\n| `portfolio-assistant` | 仅查询持仓/收益摘要/历史交易    | `./portfolio-assistant/` |\n| `market-data`         | 仅查询实时价格、股票信息、搜索代码  | `./market-data/`         |\n| `trade-execution`     | 仅用于记录买入/卖出交易       | `./trade-execution/`     |\n\n## 安装方式\n\n### Openclaw:\n\n```\nopenclaw skills install stock-earning-cn\n```\n\n<br />\n\n### Hermes:\n\n```\nhermes skills install clawhub:stock-earning-cn\n```\n\nFile v1.0.1:stock-master/SKILL.md\n\n---\nname: stock-earning\ndescription: 主入口：包含查询持仓、行情、记账所有功能。\nuser-invocable: true\nscript: \"bash run.sh\"\n---\n\n# StockEarning 主投资助手 (Master Agent)\n\n你是一个专业的股票投资组合助手。你可以通过调用 StockEarning 的 REST API 来帮助用户查询市场数据、管理持仓和记录交易。\n\n## 工具使用方式\n\n你现在拥有一个专门的 `run.sh` 脚本来执行所有的 API 调用。该脚本会自动处理环境变量（API Key）的读取和提示。\n\n### 调用格式\n你需要使用终端执行以下命令：\n```bash\n{baseDir}/run.sh [API路径] [HTTP方法] [可选的JSON数据]\n```\n\n### 1. 查询持仓与收益 (Get Positions & Summary)\n获取用户当前的股票持仓信息或整体收益。\n```bash\n# 获取所有持仓\n{baseDir}/run.sh \"/api/positions/\" \"GET\"\n\n# 获取特定股票的持仓\n{baseDir}/run.sh \"/api/positions/?symbol=AAPL\" \"GET\"\n\n# 获取整体收益摘要\n{baseDir}/run.sh \"/api/analytics/summary\" \"GET\"\n```\n\n### 2. 市场数据 (Market Data)\n查询实时股价或搜索股票代码。\n```bash\n# 查询实时价格\n{baseDir}/run.sh \"/api/markets/stocks/{symbol}/price?market={market}\" \"GET\"\n\n# 搜索股票代码 (当用户说出股票名称但未提供代码时使用)\n{baseDir}/run.sh \"/api/markets/search/stocks?query={keyword}&market={market}\" \"GET\"\n```\n\n### 3. 记录交易与券商配置 (Trade & Broker)\n帮用户记录买卖行为及检查/配置券商。\n```bash\n# 检查某市场是否已配置券商\n{baseDir}/run.sh \"/api/brokers/?market={market}\" \"GET\"\n\n# 一键导入市场默认券商\n{baseDir}/run.sh \"/api/brokers/seed-defaults\" \"POST\" '{\"market\": \"cn_a\"}'\n\n# 预计算手续费 (commission, stamp_duty, transfer_fee)\n{baseDir}/run.sh \"/api/brokers/calculate-commission\" \"POST\" '{\"broker_id\": 1, \"trade_type\": \"buy\", \"quantity\": 100, \"price\": 150.00}'\n\n# 记录买入/卖出交易\n{baseDir}/run.sh \"/api/trades/\" \"POST\" '{\"symbol\": \"AAPL\", \"name\": \"Apple Inc.\", \"market\": \"us\", \"trade_type\": \"buy\", \"quantity\": 100, \"price\": 150.00, \"broker_id\": 1, \"commission\": 1.5, \"stamp_duty\": 0, \"transfer_fee\": 0}'\n```\n\n### 4. 强制刷新与同步\n用于在查询收益前获取最新市价。\n```bash\n{baseDir}/run.sh \"/api/positions/update-all-prices\" \"GET\"\n```\n\n## 严格执行规则\n1. 分析用户输入。\n2. **货币显示规则**：在回复任何金额（如价格、手续费、总额、盈亏）时，必须根据该股票所在的市场显示正确的货币符号或单位：\n   - `cn_a` (A股): `¥` 或 `元` (人民币 CNY)\n   - `hk` (港股): `HK$` 或 `港元` (港币 HKD)\n   - `us` (美股): `$` 或 `美元` (美元 USD)\n3. **资产查询的强制刷新**：当用户询问“总盈亏”、“账户表现”等涉及整体收益的问题时，你必须**先静默调用** `/api/positions/update-all-prices`，然后再调用 `/api/analytics/summary`，并在回复中说明：“已为您拉取最新行情...”。\n4. **记录交易的智能补全与券商机制**：当用户想要记录交易时，你必须按照以下逻辑处理：\n   - **(代码补全)**：如果没有代码，先调 `GET /api/positions/` 查持仓；没找到则调用搜索 API (`/api/markets/search/stocks`) 遍历 cn_a, hk, us。\n   - **(清仓智能识别)**：如果用户说“清仓”、“全卖了”，且未提供数量，必须先调用 `GET /api/positions/` 获取该股票的当前持仓数量，并自动填入。\n   - **(防爆仓拦截)**：如果是卖出操作且提供了数量，必须先调用 `GET /api/positions/` 检查余额。如果余额不足，直接拒绝并提示用户当前实际持有量。\n   - **(市价智能获取)**：如果用户未提供**买入价格**，静默调用 `/api/markets/stocks/{symbol}/price` 获取当前市价，并作为默认建议价询问用户。\n   - **(按金额反推数量)**：如果用户提供了总金额和单价但未提供数量，自动计算 `数量 = 向下取整(总金额 / 单价)` 并向用户确认。\n   - **(券商前置拦截与算费)**：在发起最终交易前，必须执行以下步骤：\n     1. 调用 `GET /api/brokers/?market={对应的市场}`。\n     2. 如果返回空列表 `[]`，说明该市场无券商。你必须**拦截交易并暂停**，询问用户：“您在这个市场尚未配置券商。是否需要为您一键导入该市场的默认券商配置？或者您想自定义配置？”\n     3. **等待用户回答**。如果用户回答“一键导入”或“同意导入”，你才调用 `POST /api/brokers/seed-defaults` 传入该市场代码，然后再调用 `GET /api/brokers/` 获取刚创建的 `broker_id`。如果用户要求“自定义”，请引导用户提供券商名称和佣金费率。\n     4. 拿到 `broker_id` 后，调用 `POST /api/brokers/calculate-commission` 计算精确的手续费（commission、stamp_duty 等）。\n5. **最终确认**：在发起最终的 `POST /api/trades/` 之前，**必须**向用户输出一段确认信息（包含代码、名称、市场、数量、价格、以及**预估的手续费/印花税总计**）。只有在用户回复确认后，才能执行。\n6. **工具使用**：使用 `{baseDir}/run.sh` 执行对应的 API 请求。\n7. **输出格式**：将 API 返回的 JSON 数据解析为对用户友好的 Markdown 表格或自然语言，金额必须保留两位小数并带上正确的货币单位。\n\nFile v1.0.1:trade-execution/SKILL.md\n\n---\nname: trade-execution\ndescription: 专门用于代表用户向系统中记录买入或卖出交易的助手。\nuser-invocable: true\n---\n\n# 交易执行助手 (Trade Execution)\n\n专门用于代表用户向系统中记录买入或卖出交易的助手。\n\n## 认证与基础配置\n- 环境变量: `STOCK_API_KEY`\n- Base URL: 从 `config.sh` 中读取 `$STOCK_BASE_URL`（默认 `https://www.mystockearning.cn`，切换域名只需改 `config.sh`）\n\n## API 指令清单\n\n### 记录新交易与券商配置\n当用户说 \"我今天以 150 美元买入了 100 股苹果\" 时：\n```bash\n# 1. 检查市场券商\ncurl -s -H \"X-API-Key: $STOCK_API_KEY\" \"${STOCK_BASE_URL}/api/brokers/?market={market}\"\n\n# 2. 如果需要，一键导入默认券商\ncurl -s -X POST -H \"Content-Type: application/json\" -H \"X-API-Key: $STOCK_API_KEY\" -d '{\"market\": \"{market}\"}' \"${STOCK_BASE_URL}/api/brokers/seed-defaults\"\n\n# 3. 计算手续费\ncurl -s -X POST -H \"Content-Type: application/json\" -H \"X-API-Key: $STOCK_API_KEY\" -d '{\n  \"broker_id\": 1,\n  \"trade_type\": \"buy\",\n  \"quantity\": 100,\n  \"price\": 150.00\n}' \"${STOCK_BASE_URL}/api/brokers/calculate-commission\"\n\n# 4. 记录交易\ncurl -s -X POST -H \"Content-Type: application/json\" -H \"X-API-Key: $STOCK_API_KEY\" -d '{\n  \"symbol\": \"{代码}\",\n  \"name\": \"{名称}\",\n  \"market\": \"{市场}\",\n  \"trade_type\": \"{buy或sell}\",\n  \"quantity\": {数量数字},\n  \"price\": {价格数字},\n  \"broker_id\": {从第一步获取的ID},\n  \"commission\": {从第三步获取},\n  \"stamp_duty\": {从第三步获取},\n  \"transfer_fee\": {从第三步获取},\n  \"notes\": \"通过 AI Agent 记录\"\n}' \"${STOCK_BASE_URL}/api/trades/\"\n```\n\n## 严格执行规则\n1. 分析用户指令。\n2. **货币显示规则**：在回复任何金额（如价格、手续费、总额等）时，必须根据该股票所在的市场显示正确的货币符号或单位：\n   - `cn_a` (A股): `¥` 或 `元` (人民币 CNY)\n   - `hk` (港股): `HK$` 或 `港元` (港币 HKD)\n   - `us` (美股): `$` 或 `美元` (美元 USD)\n3. **智能补全与确认机制**：当用户想要记录交易时，你必须按照以下逻辑处理：\n   - **(代码补全)**：如果没有提供完整的股票代码和市场，先调 `GET /api/positions/` 查持仓；没找到则调用搜索 API (`/api/markets/search/stocks`) 遍历 cn_a, hk, us。\n   - **(清仓智能识别)**：如果用户说“清仓”、“全卖了”，且未提供数量，必须先调用 `GET /api/positions/` 获取该股票的当前持仓数量，并自动填入。\n   - **(防爆仓拦截)**：如果是卖出操作且提供了数量，必须先调用 `GET /api/positions/` 检查余额。如果余额不足，直接拒绝并提示用户当前实际持有量。\n   - **(市价智能获取)**：如果用户未提供**买入价格**，静默调用 `/api/markets/stocks/{symbol}/price` 获取当前市价，并作为默认建议价询问用户。\n   - **(按金额反推数量)**：如果用户提供了总金额和单价但未提供数量，自动计算 `数量 = 向下取整(总金额 / 单价)` 并向用户确认。\n3. **券商前置拦截与算费机制**：在确认了股票代码、数量和价格后，在发起最终交易前，必须执行以下步骤：\n   - 调用 `GET /api/brokers/?market={对应的市场}`。\n   - 如果返回空列表 `[]`，说明该市场无券商。你必须**拦截交易并暂停**，询问用户：“您在这个市场尚未配置券商，无法计算印花税和交易佣金。是否需要为您一键导入该市场的默认券商配置？或者您想自定义配置？”\n   - **等待用户回答**。如果用户回答“一键导入”或“同意导入”，你才调用 `POST /api/brokers/seed-defaults` 传入该市场代码，然后再调用 `GET /api/brokers/` 获取刚创建的 `broker_id`。如果用户要求“自定义”，请引导用户提供券商名称和佣金费率。\n   - 拿到 `broker_id` 后，调用 `POST /api/brokers/calculate-commission` 计算精确的手续费（commission、stamp_duty 等）。\n4. **最终确认**：在发起最终的 `POST /api/trades/` 之前，**必须**向用户输出一段确认信息（包含代码、名称、市场、数量、价格、以及**预估的手续费/印花税总计**）。只有在用户回复确认后，才能执行。\n5. **确认后执行**：执行 `curl -X POST /api/trades/` 记录交易（带上获取到的 broker_id 和费用数据）。\n6. **输出结果**：根据 API 响应，向用户确认交易已成功记录，并展示总金额。\n\nFile v1.0.1:README.md\n\n# StockEarning OpenClaw Plugin (AgentSkills)\n\n<br />\n\n通过安装这些技能，你的 AI 助手可以获得管理股票持仓、记录交易、查询A股行情的能力。\n\n**核心优势：**\n\n- **纯客户端实现**：完全基于 `curl` 和 HTTP REST API。\n- **零依赖**：无需在本地运行任何 Python 环境或 MCP 服务器。\n- **动态门控**：利用 `metadata.openclaw.requires.env` 确保只有在配置了 `STOCK_API_KEY` 时才激活。\n\n这是一个专为 **OpenClaw** 生态设计的轻量级 HTTP 技能插件。本仓库严格遵循最新的 **AgentSkills 规范**。\n\n## 🚀 快速安装\n\n我们提供了一个一键安装脚本。在你的终端中，进入到你想使用 AI 的工作区根目录，然后运行：\n\n```bash\n# 假设你已经下载/克隆了本仓库\ncd path/to/your/workspace\n/path/to/stockearning-plugin/install.sh\n```\n\n*(这会自动将技能文件夹拷贝到你当前工作区的* *`./skills/`* *目录下，OpenClaw 会自动发现并加载它们)*\n\n## 📦 手动安装 (通过 ClawHub 机制)\n\n如果 OpenClaw 支持标准的 workspace skills 覆盖，你只需将本仓库的子文件夹复制到你工作区的 `skills/` 目录下：\n\n```bash\nmkdir -p ./skills/\ncp -r stock-master ./skills/\ncp -r market-data ./skills/\ncp -r portfolio-assistant ./skills/\ncp -r trade-execution ./skills/\n```\n\n## ⚙️ 配置与使用\n\n### 1. 配置 API Key (仅需一次)\n\n得益于全新的包装脚本，你不需要每次都在终端中 `export`。你只需要在本地终端中执行以下命令，将 API Key 永久保存到本地配置中：\n\n```bash\nmkdir -p ~/.config/stockearning\n(umask 077; printf 'export STOCK_API_KEY=\"sk_your_api_key_here\"\\n' > ~/.config/stockearning/stockearning.env)\n```\n\n*(插件的执行脚本会自动从这个路径读取你的 API Key，保证了安全性与持久性)*\n\n兼容说明：\n- 仍兼容从 `~/.openclaw/stockearning.env` 加载（旧版本路径）\n- 也会尝试从 `~/.config/openclaw/stockearning.env`、`~/.config/hermes/stockearning.env` 加载\n\n### 2. 开始聊天\n\n启动 OpenClaw，使用斜杠命令或直接对话：\n\n```text\n> /stock-earning 帮我查一下我在美股的持仓，看看苹果赚了多少钱？\n```\n\n## 📚 包含的指令模块\n\n本插件包含 4 个独立的 AgentSkills，每个都拥有自己的文件夹和 `SKILL.md`：\n\n| 技能名称                  | 功能                        | 目录                       |\n| --------------------- | ------------------------- | ------------------------ |\n| `stock-earning`       | **主入口**：包含所有核心功能，自动判断用户意图 | `./stock-master/`        |\n| `portfolio-assistant` | 仅查询持仓、历史交易、总体收益摘要         | `./portfolio-assistant/` |\n| `market-data`         | 仅查询全球12个市场的实时股价和股票搜索      | `./market-data/`         |\n| `trade-execution`     | 仅用于记录新的买入或卖出交易            | `./trade-execution/`     |\n\n## 注意事项\n\n- Base URL 统一配置在 `config.sh` 的 `STOCK_BASE_URL` 变量中（默认 `https://www.mystockearning.cn`）。切换域名只需修改该文件，也可通过环境变量 `STOCK_BASE_URL` 覆盖。\n- 根据安全规范，API Key 仅存在于进程环境中，不会被写入日志或提示词。\n\nFile v1.0.1:_meta.json\n\n{\n  \"ownerId\": \"kn75wc1b4zt76w9g1d6wgav3f1804jt8\",\n  \"slug\": \"secn\",\n  \"version\": \"1.0.1\",\n  \"publishedAt\": 1777568110533\n}\n\nFile v1.0.1:plugin.json\n\n{\n  \"name\": \"stock-earning-cn\",\n  \"version\": \"1.0.0\",\n  \"description\": \"A pure HTTP/REST API plugin for OpenClaw to manage stock portfolios and query global market data.\",\n  \"author\": \"StockEarning\",\n  \"keywords\": [\"finance\", \"stocks\", \"portfolio\", \"trading\", \"openclaw\", \"claude-code\"],\n  \"repository\": \"https://github.com/hareluya/stock-earning-cn-skills\",\n  \"commands\": {\n    \"stock-earning\": \"./stock-master/SKILL.md\",\n    \"market-data\": \"./market-data/SKILL.md\",\n    \"portfolio-assistant\": \"./portfolio-assistant/SKILL.md\",\n    \"trade-execution\": \"./trade-execution/SKILL.md\"\n  },\n  \"environment\": {\n    \"STOCK_API_KEY\": {\n      \"description\": \"Your StockEarning.cn API Key\",\n      \"required\": true\n    }\n  }\n}\n\nArchive v1.0.0: 12 files, 14807 bytes\n\nFiles: config.sh (316b), install.sh (1177b), market-data/SKILL.md (1859b), plugin.json (728b), portfolio-assistant/SKILL.md (2491b), README.md (3079b), SKILL.md (3005b), stock-master/run.sh (1299b), stock-master/SKILL.md (5395b), test_api.sh (1242b), trade-execution/SKILL.md (4524b), _meta.json (123b)\n\nFile v1.0.0:market-data/SKILL.md\n\n---\nname: market-data\ndescription: 专门用于查询全球股票实时价格、基本信息和搜索股票代码的助手。\nmetadata: {\"openclaw\": {\"requires\": {\"env\": [\"STOCK_API_KEY\"]}}}\nuser-invocable: true\n---\n\n# 市场数据助手 (Market Data)\n\n专门用于查询全球股票实时价格、基本信息和搜索股票代码的助手。\n\n## 认证与基础配置\n- 环境变量: `STOCK_API_KEY`\n- Base URL: 从 `config.sh` 中读取 `$STOCK_BASE_URL`（默认 `https://www.mystockearning.cn`，切换域名只需改 `config.sh`）\n\n## 市场代码 (Market Codes)\n- 美股: `us`\n- 港股: `hk`\n- A股: `cn_a`\n- B股: `cn_b`\n\n## API 指令清单\n\n### 搜索股票\n当用户说 \"查询腾讯的代码\" 或 \"寻找苹果股票\" 时：\n```bash\ncurl -s -H \"X-API-Key: $STOCK_API_KEY\" \"${STOCK_BASE_URL}/api/markets/search/stocks?query={搜索词}&market={市场代码}\"\n```\n\n### 获取实时价格\n当用户说 \"查看 AAPL 的现价\" 时：\n```bash\ncurl -s -H \"X-API-Key: $STOCK_API_KEY\" \"${STOCK_BASE_URL}/api/markets/stocks/{symbol}/price?market={市场代码}\"\n```\n\n### 获取股票详情\n当用户需要股票的基本面信息时：\n```bash\ncurl -s -H \"X-API-Key: $STOCK_API_KEY\" \"${STOCK_BASE_URL}/api/markets/stocks/{symbol}/info?market={市场代码}\"\n```\n\n## 执行规则\n1. 解析用户指令。\n2. **货币显示规则**：在回复实时价格或任何金额时，必须根据该股票所在的市场显示正确的货币符号或单位：\n   - `cn_a` (A股): `¥` 或 `元` (人民币 CNY)\n   - `hk` (港股): `HK$` 或 `港元` (港币 HKD)\n   - `us` (美股): `$` 或 `美元` (美元 USD)\n3. 构造对应的 `curl` 命令并执行。\n4. 如果返回 404，告知用户未找到该股票，请检查名称或市场代码。\n5. 将 JSON 格式的价格和货币单位转换为易读的自然语言，金额必须带上正确的货币单位。\n\nFile v1.0.0:portfolio-assistant/SKILL.md\n\n---\nname: portfolio-assistant\ndescription: 专门用于查询用户持仓、盈亏情况和历史交易记录的助手。\nmetadata: {\"openclaw\": {\"requires\": {\"env\": [\"STOCK_API_KEY\"]}}}\nuser-invocable: true\n---\n\n# 投资组合助手 (Portfolio Assistant)\n\n专门用于查询用户持仓、盈亏情况和历史交易记录的助手。\n\n## 认证与基础配置\n- 环境变量: `STOCK_API_KEY`\n- Base URL: 从 `config.sh` 中读取 `$STOCK_BASE_URL`（默认 `https://www.mystockearning.cn`，切换域名只需改 `config.sh`）\n\n## API 指令清单\n\n### 获取当前持仓\n当用户问 \"我现在的苹果股票赚了多少钱？\" 或 \"查看我的美股持仓\" 时：\n```bash\n# 获取特定股票持仓\ncurl -s -H \"X-API-Key: $STOCK_API_KEY\" \"${STOCK_BASE_URL}/api/positions/?symbol={股票代码}\"\n\n# 获取某市场的所有持仓，按盈亏比例降序\ncurl -s -H \"X-API-Key: $STOCK_API_KEY\" \"${STOCK_BASE_URL}/api/positions/?market={市场代码}&sort_by=profit_loss_percent&order=desc\"\n```\n\n### 获取交易记录\n当用户问 \"我最近一个月买过哪些美股？\" 时：\n```bash\ncurl -s -H \"X-API-Key: $STOCK_API_KEY\" \"${STOCK_BASE_URL}/api/trades/?market={市场代码}&trade_type={buy/sell}\"\n```\n\n### 获取投资表现摘要\n当用户问 \"我账户总资产多少？\" 或 \"总盈亏如何？\" 时：\n```bash\n# 1. 先强制刷新最新市价\ncurl -s -H \"X-API-Key: $STOCK_API_KEY\" \"${STOCK_BASE_URL}/api/positions/update-all-prices\"\n\n# 2. 再获取收益摘要\ncurl -s -H \"X-API-Key: $STOCK_API_KEY\" \"${STOCK_BASE_URL}/api/analytics/summary\"\n```\n\n## 执行规则\n1. 解析用户指令。\n2. **货币显示规则**：在回复任何持仓市值、成本或盈亏金额时，必须根据该股票或账户所在的市场显示正确的货币符号或单位：\n   - `cn_a` (A股): `¥` 或 `元` (人民币 CNY)\n   - `hk` (港股): `HK$` 或 `港元` (港币 HKD)\n   - `us` (美股): `$` 或 `美元` (美元 USD)\n3. **强制刷新机制**：如果用户查询的是“总体盈亏”或“账户表现”，你必须先执行 `update-all-prices` 接口以获取最新市价，再执行 `summary` 接口，并在回复中告知用户“已为您拉取最新行情”。\n4. 执行 `curl` 请求。\n5. 从响应中提取关键字段（如 `profit_loss`, `profit_loss_percent`, `market_value`）。\n6. 使用带颜色的 Markdown 格式或表格输出结果（如：盈利标红或绿，根据当地市场习惯），金额必须保留两位小数并带上正确的货币单位。\n\nFile v1.0.0:SKILL.md\n\n***\n\nname: stockearning-assistant\ndescription: StockEarning OpenClaw 插件入口：安装后可查询行情、管理持仓、记录交易，并支持“一键刷新持仓现价”。\nmetadata: {\"openclaw\": {\"requires\": {\"env\": \\[\"STOCK\\_API\\_KEY\"]}}}\nuser-invocable: true\n--------------------\n\n# StockEarning 插件入口 (StockEarning Assistant)\n\n这是 StockEarning 的 OpenClaw 技能插件入口说明。安装本目录后，你将获得一组可组合使用的技能，用于：\n\n- 查询A股行情、股票信息、股票搜索\n- 查询与管理持仓、计算盈亏、刷新持仓现价\n- 记录买入/卖出交易\n\n## 开始之前：\n\n您需要去`https://www.mystockearning.cn注册一个账号，并等待审核通过后获取api key。`\n\n## 认证与基础配置\n\n- 环境变量: `STOCK_API_KEY`\n- Base URL: 从 `config.sh` 中读取 `$STOCK_BASE_URL`（默认 `https://www.mystockearning.cn`，也可通过环境变量 `STOCK_BASE_URL` 覆盖）\n\n所有请求均使用 HTTP Header：\n\n```bash\nX-API-Key: $STOCK_API_KEY\n```\n\n## 推荐使用方式\n\n通常直接使用主入口技能：\n\n- `/stock-master`：主入口，覆盖最常用的查询/记账/刷新场景\n\n若你希望更可控、更聚焦的行为，可以按需调用下列技能：\n\n| 技能名称                  | 功能                 | 目录                       |\n| --------------------- | ------------------ | ------------------------ |\n| `stock-master`        | 主入口：综合查询、刷新现价、记录交易 | `./stock-master/`        |\n| `portfolio-assistant` | 仅查询持仓/收益摘要/历史交易    | `./portfolio-assistant/` |\n| `market-data`         | 仅查询实时价格、股票信息、搜索代码  | `./market-data/`         |\n| `trade-execution`     | 仅用于记录买入/卖出交易       | `./trade-execution/`     |\n\n## 常用 API 速查\n\n### 刷新持仓现价\n\n用于在查询“总盈亏/账户表现”等问题前，先拉取最新市价：\n\n```bash\ncurl -s -H \"X-API-Key: $STOCK_API_KEY\" \"${STOCK_BASE_URL}/api/positions/update-all-prices\"\n```\n\n说明：\n\n- 该接口兼容 `GET` 与 `POST`，推荐新客户端使用 `POST`，旧客户端可继续使用 `GET`。\n\n### 获取收益摘要\n\n```bash\ncurl -s -H \"X-API-Key: $STOCK_API_KEY\" \"${STOCK_BASE_URL}/api/analytics/summary\"\n```\n\n### 查询持仓\n\n```bash\ncurl -s -H \"X-API-Key: $STOCK_API_KEY\" \"${STOCK_BASE_URL}/api/positions/?market={市场代码}&sort_by=profit_loss_percent&order=desc\"\n```\n\n### 查询实时价格\n\n```bash\ncurl -s -H \"X-API-Key: $STOCK_API_KEY\" \"${STOCK_BASE_URL}/api/markets/stocks/{symbol}/price?market={市场代码}\"\n```\n\n## 执行规则\n\n1. 涉及“总盈亏/账户表现/整体收益”的问题：优先执行 `update-all-prices` 刷新市价，再请求 `analytics/summary`。\n2. 金额展示必须带正确货币单位：\n   - `cn_a` (A股): `¥` 或 `元` (CNY)\n   - `hk` (港股): `HK$` 或 `港元` (HKD)\n   - `us` (美股): `$` 或 `美元` (USD)\n3. 不在输出中泄露 `STOCK_API_KEY`。\n\nFile v1.0.0:stock-master/SKILL.md\n\n---\nname: stock-master\ndescription: 主入口：包含查询持仓、行情、记账所有功能。\nuser-invocable: true\nscript: \"bash run.sh\"\n---\n\n# StockEarning 主投资助手 (Master Agent)\n\n你是一个专业的股票投资组合助手。你可以通过调用 StockEarning 的 REST API 来帮助用户查询市场数据、管理持仓和记录交易。\n\n## 工具使用方式\n\n你现在拥有一个专门的 `run.sh` 脚本来执行所有的 API 调用。该脚本会自动处理环境变量（API Key）的读取和提示。\n\n### 调用格式\n你需要使用终端执行以下命令：\n```bash\n{baseDir}/run.sh [API路径] [HTTP方法] [可选的JSON数据]\n```\n\n### 1. 查询持仓与收益 (Get Positions & Summary)\n获取用户当前的股票持仓信息或整体收益。\n```bash\n# 获取所有持仓\n{baseDir}/run.sh \"/api/positions/\" \"GET\"\n\n# 获取特定股票的持仓\n{baseDir}/run.sh \"/api/positions/?symbol=AAPL\" \"GET\"\n\n# 获取整体收益摘要\n{baseDir}/run.sh \"/api/analytics/summary\" \"GET\"\n```\n\n### 2. 市场数据 (Market Data)\n查询实时股价或搜索股票代码。\n```bash\n# 查询实时价格\n{baseDir}/run.sh \"/api/markets/stocks/{symbol}/price?market={market}\" \"GET\"\n\n# 搜索股票代码 (当用户说出股票名称但未提供代码时使用)\n{baseDir}/run.sh \"/api/markets/search/stocks?query={keyword}&market={market}\" \"GET\"\n```\n\n### 3. 记录交易与券商配置 (Trade & Broker)\n帮用户记录买卖行为及检查/配置券商。\n```bash\n# 检查某市场是否已配置券商\n{baseDir}/run.sh \"/api/brokers/?market={market}\" \"GET\"\n\n# 一键导入市场默认券商\n{baseDir}/run.sh \"/api/brokers/seed-defaults\" \"POST\" '{\"market\": \"cn_a\"}'\n\n# 预计算手续费 (commission, stamp_duty, transfer_fee)\n{baseDir}/run.sh \"/api/brokers/calculate-commission\" \"POST\" '{\"broker_id\": 1, \"trade_type\": \"buy\", \"quantity\": 100, \"price\": 150.00}'\n\n# 记录买入/卖出交易\n{baseDir}/run.sh \"/api/trades/\" \"POST\" '{\"symbol\": \"AAPL\", \"name\": \"Apple Inc.\", \"market\": \"us\", \"trade_type\": \"buy\", \"quantity\": 100, \"price\": 150.00, \"broker_id\": 1, \"commission\": 1.5, \"stamp_duty\": 0, \"transfer_fee\": 0}'\n```\n\n### 4. 强制刷新与同步\n用于在查询收益前获取最新市价。\n```bash\n{baseDir}/run.sh \"/api/positions/update-all-prices\" \"GET\"\n```\n\n## 严格执行规则\n1. 分析用户输入。\n2. **货币显示规则**：在回复任何金额（如价格、手续费、总额、盈亏）时，必须根据该股票所在的市场显示正确的货币符号或单位：\n   - `cn_a` (A股): `¥` 或 `元` (人民币 CNY)\n   - `hk` (港股): `HK$` 或 `港元` (港币 HKD)\n   - `us` (美股): `$` 或 `美元` (美元 USD)\n3. **资产查询的强制刷新**：当用户询问“总盈亏”、“账户表现”等涉及整体收益的问题时，你必须**先静默调用** `/api/positions/update-all-prices`，然后再调用 `/api/analytics/summary`，并在回复中说明：“已为您拉取最新行情...”。\n4. **记录交易的智能补全与券商机制**：当用户想要记录交易时，你必须按照以下逻辑处理：\n   - **(代码补全)**：如果没有代码，先调 `GET /api/positions/` 查持仓；没找到则调用搜索 API (`/api/markets/search/stocks`) 遍历 cn_a, hk, us。\n   - **(清仓智能识别)**：如果用户说“清仓”、“全卖了”，且未提供数量，必须先调用 `GET /api/positions/` 获取该股票的当前持仓数量，并自动填入。\n   - **(防爆仓拦截)**：如果是卖出操作且提供了数量，必须先调用 `GET /api/positions/` 检查余额。如果余额不足，直接拒绝并提示用户当前实际持有量。\n   - **(市价智能获取)**：如果用户未提供**买入价格**，静默调用 `/api/markets/stocks/{symbol}/price` 获取当前市价，并作为默认建议价询问用户。\n   - **(按金额反推数量)**：如果用户提供了总金额和单价但未提供数量，自动计算 `数量 = 向下取整(总金额 / 单价)` 并向用户确认。\n   - **(券商前置拦截与算费)**：在发起最终交易前，必须执行以下步骤：\n     1. 调用 `GET /api/brokers/?market={对应的市场}`。\n     2. 如果返回空列表 `[]`，说明该市场无券商。你必须**拦截交易并暂停**，询问用户：“您在这个市场尚未配置券商。是否需要为您一键导入该市场的默认券商配置？或者您想自定义配置？”\n     3. **等待用户回答**。如果用户回答“一键导入”或“同意导入”，你才调用 `POST /api/brokers/seed-defaults` 传入该市场代码，然后再调用 `GET /api/brokers/` 获取刚创建的 `broker_id`。如果用户要求“自定义”，请引导用户提供券商名称和佣金费率。\n     4. 拿到 `broker_id` 后，调用 `POST /api/brokers/calculate-commission` 计算精确的手续费（commission、stamp_duty 等）。\n5. **最终确认**：在发起最终的 `POST /api/trades/` 之前，**必须**向用户输出一段确认信息（包含代码、名称、市场、数量、价格、以及**预估的手续费/印花税总计**）。只有在用户回复确认后，才能执行。\n6. **工具使用**：使用 `{baseDir}/run.sh` 执行对应的 API 请求。\n7. **输出格式**：将 API 返回的 JSON 数据解析为对用户友好的 Markdown 表格或自然语言，金额必须保留两位小数并带上正确的货币单位。\n\nFile v1.0.0:trade-execution/SKILL.md\n\n---\nname: trade-execution\ndescription: 专门用于代表用户向系统中记录买入或卖出交易的助手。\nuser-invocable: true\n---\n\n# 交易执行助手 (Trade Execution)\n\n专门用于代表用户向系统中记录买入或卖出交易的助手。\n\n## 认证与基础配置\n- 环境变量: `STOCK_API_KEY`\n- Base URL: 从 `config.sh` 中读取 `$STOCK_BASE_URL`（默认 `https://www.mystockearning.cn`，切换域名只需改 `config.sh`）\n\n## API 指令清单\n\n### 记录新交易与券商配置\n当用户说 \"我今天以 150 美元买入了 100 股苹果\" 时：\n```bash\n# 1. 检查市场券商\ncurl -s -H \"X-API-Key: $STOCK_API_KEY\" \"${STOCK_BASE_URL}/api/brokers/?market={market}\"\n\n# 2. 如果需要，一键导入默认券商\ncurl -s -X POST -H \"Content-Type: application/json\" -H \"X-API-Key: $STOCK_API_KEY\" -d '{\"market\": \"{market}\"}' \"${STOCK_BASE_URL}/api/brokers/seed-defaults\"\n\n# 3. 计算手续费\ncurl -s -X POST -H \"Content-Type: application/json\" -H \"X-API-Key: $STOCK_API_KEY\" -d '{\n  \"broker_id\": 1,\n  \"trade_type\": \"buy\",\n  \"quantity\": 100,\n  \"price\": 150.00\n}' \"${STOCK_BASE_URL}/api/brokers/calculate-commission\"\n\n# 4. 记录交易\ncurl -s -X POST -H \"Content-Type: application/json\" -H \"X-API-Key: $STOCK_API_KEY\" -d '{\n  \"symbol\": \"{代码}\",\n  \"name\": \"{名称}\",\n  \"market\": \"{市场}\",\n  \"trade_type\": \"{buy或sell}\",\n  \"quantity\": {数量数字},\n  \"price\": {价格数字},\n  \"broker_id\": {从第一步获取的ID},\n  \"commission\": {从第三步获取},\n  \"stamp_duty\": {从第三步获取},\n  \"transfer_fee\": {从第三步获取},\n  \"notes\": \"通过 AI Agent 记录\"\n}' \"${STOCK_BASE_URL}/api/trades/\"\n```\n\n## 严格执行规则\n1. 分析用户指令。\n2. **货币显示规则**：在回复任何金额（如价格、手续费、总额等）时，必须根据该股票所在的市场显示正确的货币符号或单位：\n   - `cn_a` (A股): `¥` 或 `元` (人民币 CNY)\n   - `hk` (港股): `HK$` 或 `港元` (港币 HKD)\n   - `us` (美股): `$` 或 `美元` (美元 USD)\n3. **智能补全与确认机制**：当用户想要记录交易时，你必须按照以下逻辑处理：\n   - **(代码补全)**：如果没有提供完整的股票代码和市场，先调 `GET /api/positions/` 查持仓；没找到则调用搜索 API (`/api/markets/search/stocks`) 遍历 cn_a, hk, us。\n   - **(清仓智能识别)**：如果用户说“清仓”、“全卖了”，且未提供数量，必须先调用 `GET /api/positions/` 获取该股票的当前持仓数量，并自动填入。\n   - **(防爆仓拦截)**：如果是卖出操作且提供了数量，必须先调用 `GET /api/positions/` 检查余额。如果余额不足，直接拒绝并提示用户当前实际持有量。\n   - **(市价智能获取)**：如果用户未提供**买入价格**，静默调用 `/api/markets/stocks/{symbol}/price` 获取当前市价，并作为默认建议价询问用户。\n   - **(按金额反推数量)**：如果用户提供了总金额和单价但未提供数量，自动计算 `数量 = 向下取整(总金额 / 单价)` 并向用户确认。\n3. **券商前置拦截与算费机制**：在确认了股票代码、数量和价格后，在发起最终交易前，必须执行以下步骤：\n   - 调用 `GET /api/brokers/?market={对应的市场}`。\n   - 如果返回空列表 `[]`，说明该市场无券商。你必须**拦截交易并暂停**，询问用户：“您在这个市场尚未配置券商，无法计算印花税和交易佣金。是否需要为您一键导入该市场的默认券商配置？或者您想自定义配置？”\n   - **等待用户回答**。如果用户回答“一键导入”或“同意导入”，你才调用 `POST /api/brokers/seed-defaults` 传入该市场代码，然后再调用 `GET /api/brokers/` 获取刚创建的 `broker_id`。如果用户要求“自定义”，请引导用户提供券商名称和佣金费率。\n   - 拿到 `broker_id` 后，调用 `POST /api/brokers/calculate-commission` 计算精确的手续费（commission、stamp_duty 等）。\n4. **最终确认**：在发起最终的 `POST /api/trades/` 之前，**必须**向用户输出一段确认信息（包含代码、名称、市场、数量、价格、以及**预估的手续费/印花税总计**）。只有在用户回复确认后，才能执行。\n5. **确认后执行**：执行 `curl -X POST /api/trades/` 记录交易（带上获取到的 broker_id 和费用数据）。\n6. **输出结果**：根据 API 响应，向用户确认交易已成功记录，并展示总金额。\n\nFile v1.0.0:README.md\n\n# StockEarning OpenClaw Plugin (AgentSkills)\n\n<br />\n\n通过安装这些技能，你的 AI 助手可以获得管理股票持仓、记录交易、查询A股行情的能力。\n\n**核心优势：**\n\n- **纯客户端实现**：完全基于 `curl` 和 HTTP REST API。\n- **零依赖**：无需在本地运行任何 Python 环境或 MCP 服务器。\n- **动态门控**：利用 `metadata.openclaw.requires.env` 确保只有在配置了 `STOCK_API_KEY` 时才激活。\n\n这是一个专为 **OpenClaw** 生态设计的轻量级 HTTP 技能插件。本仓库严格遵循最新的 **AgentSkills 规范**。\n\n## 🚀 快速安装\n\n我们提供了一个一键安装脚本。在你的终端中，进入到你想使用 AI 的工作区根目录，然后运行：\n\n```bash\n# 假设你已经下载/克隆了本仓库\ncd path/to/your/workspace\n/path/to/stockearning-plugin/install.sh\n```\n\n*(这会自动将技能文件夹拷贝到你当前工作区的* *`./skills/`* *目录下，OpenClaw 会自动发现并加载它们)*\n\n## 📦 手动安装 (通过 ClawHub 机制)\n\n如果 OpenClaw 支持标准的 workspace skills 覆盖，你只需将本仓库的子文件夹复制到你工作区的 `skills/` 目录下：\n\n```bash\nmkdir -p ./skills/\ncp -r stock-master ./skills/\ncp -r market-data ./skills/\ncp -r portfolio-assistant ./skills/\ncp -r trade-execution ./skills/\n```\n\n## ⚙️ 配置与使用\n\n### 1. 配置 API Key (仅需一次)\n\n得益于全新的包装脚本，你不需要每次都在终端中 `export`。你只需要在本地终端中执行以下命令，将 API Key 永久保存到本地配置中：\n\n```bash\nmkdir -p ~/.openclaw\necho 'export STOCK_API_KEY=\"sk_your_api_key_here\"' > ~/.openclaw/stockearning.env\n```\n\n*(插件的执行脚本会自动从这个路径读取你的 API Key，保证了安全性与持久性)*\n\n### 2. 开始聊天\n\n启动 OpenClaw，使用斜杠命令或直接对话：\n\n```text\n> /stock-master 帮我查一下我在美股的持仓，看看苹果赚了多少钱？\n```\n\n## 📚 包含的指令模块\n\n本插件包含 4 个独立的 AgentSkills，每个都拥有自己的文件夹和 `SKILL.md`：\n\n| 技能名称                  | 功能                        | 目录                       |\n| --------------------- | ------------------------- | ------------------------ |\n| `stock-master`        | **主入口**：包含所有核心功能，自动判断用户意图 | `./stock-master/`        |\n| `portfolio-assistant` | 仅查询持仓、历史交易、总体收益摘要         | `./portfolio-assistant/` |\n| `market-data`         | 仅查询全球12个市场的实时股价和股票搜索      | `./market-data/`         |\n| `trade-execution`     | 仅用于记录新的买入或卖出交易            | `./trade-execution/`     |\n\n## 注意事项\n\n- Base URL 统一配置在 `config.sh` 的 `STOCK_BASE_URL` 变量中（默认 `https://www.mystockearning.cn`）。切换域名只需修改该文件，也可通过环境变量 `STOCK_BASE_URL` 覆盖。\n- 根据安全规范，API Key 仅存在于进程环境中，不会被写入日志或提示词。\n\nFile v1.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn75wc1b4zt76w9g1d6wgav3f1804jt8\",\n  \"slug\": \"secn\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1777562711568\n}\n\nFile v1.0.0:plugin.json\n\n{\n  \"name\": \"stockearning-assistant\",\n  \"version\": \"1.0.0\",\n  \"description\": \"A pure HTTP/REST API plugin for OpenClaw to manage stock portfolios and query global market data.\",\n  \"author\": \"StockEarning\",\n  \"keywords\": [\"finance\", \"stocks\", \"portfolio\", \"trading\", \"openclaw\", \"claude-code\"],\n  \"repository\": \"https://github.com/your-username/stockearning-openclaw-plugin\",\n  \"commands\": {\n    \"stock-master\": \"./stock-master/SKILL.md\",\n    \"market-data\": \"./market-data/SKILL.md\",\n    \"portfolio-assistant\": \"./portfolio-assistant/SKILL.md\",\n    \"trade-execution\": \"./trade-execution/SKILL.md\"\n  },\n  \"environment\": {\n    \"STOCK_API_KEY\": {\n      \"description\": \"Your StockEarning API Key\",\n      \"required\": true\n    }\n  }\n}","readmeExcerpt":"Skill: StockEarning Owner: hareluya Summary: 这是 StockEarningCN 的 技能(Skill)。安装本技能，你将获得将自己的持仓通过习惯的AI助手进行更新和统计的能力。目前支持A股、B股、港股和美股。如果要获得API Key，请访问https://www.mystockearning.cn。 Tags: latest:1.0.8 Version history: v1.0.8 | 2026-06-21T13:42:09.296Z | user - Renamed skill from \"stock-earning-cn\" to \"secn\" across documentation. - Updated installation commands and instructions to reflect the new skill name. - Removed sample ","codeSnippets":[],"executableExamples":[{"language":"text","snippet":"openclaw skills install secn"},{"language":"text","snippet":"hermes skills install clawhub:secn"},{"language":"bash","snippet":"{baseDir}/scripts/edit_position.sh 123 1050 \"分红送转调整\""},{"language":"text","snippet":"openclaw skills install stock-earning-cn"},{"language":"text","snippet":"hermes skills install clawhub:stock-earning-cn"},{"language":"bash","snippet":"{baseDir}/scripts/edit_position.sh 123 1050 \"分红送转调整\""}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"market-data/SKILL.md","content":"---\nname: market-data\ndescription: 专门用于查询全球股票实时价格、基本信息和搜索股票代码的助手。\nmetadata: {\"openclaw\": {\"requires\": {\"env\": [\"STOCK_API_KEY\"]}}}\nuser-invocable: true\n---\n\n# 市场数据助手 (Market Data)\n\n专门用于查询全球股票实时价格、基本信息和搜索股票代码的助手。\n\n## 认证与基础配置\n- 环境变量: `STOCK_API_KEY`\n- Base URL: 从 `config.sh` 中读取 `$STOCK_BASE_URL`（默认 `https://www.mystockearning.cn`，切换域名只需改 `config.sh`）\n\n## 市场代码 (Market Codes)\n- 美股: `us`\n- 港股: `hk`\n- A股: `cn_a`\n- B股: `cn_b`\n\n## API 指令清单\n\n### 搜索股票\n当用户说 \"查询腾讯的代码\" 或 \"寻找苹果股票\" 时：\n- 执行 `./scripts/search_stocks.sh`（需要设置 `QUERY`，可选 `MARKET`）\n\n### 获取实时价格\n当用户说 \"查看 AAPL 的现价\" 时：\n- 执行 `./scripts/get_price.sh`（需要设置 `SYMBOL`，可选 `MARKET`）\n\n### 获取股票详情\n当用户需要股票的基本面信息时：\n- 执行 `./scripts/get_info.sh`（需要设置 `SYMBOL`，可选 `MARKET`）\n\n## 执行规则\n1. 解析用户指令。\n2. **货币显示规则**：在回复实时价格或任何金额时，必须根据该股票所在的市场显示正确的货币符号或单位：\n   - `cn_a` (A股): `¥` 或 `元` (人民币 CNY)\n   - `hk` (港股): `HK$` 或 `港元` (港币 HKD)\n   - `us` (美股): `$` 或 `美元` (美元 USD)\n3. 构造对应的 `curl` 命令并执行。\n4. 如果返回 404，告知用户未找到该股票，请检查名称或市场代码。\n5. 将 JSON 格式的价格和货币单位转换为易读的自然语言，金额必须带上正确的货币单位。"},{"path":"portfolio-assistant/SKILL.md","content":"---\nname: portfolio-assistant\ndescription: 专门用于查询用户持仓、盈亏情况和历史交易记录的助手。\nmetadata: {\"openclaw\": {\"requires\": {\"env\": [\"STOCK_API_KEY\"]}}}\nuser-invocable: true\n---\n\n# 投资组合助手 (Portfolio Assistant)\n\n专门用于查询用户持仓、盈亏情况和历史交易记录的助手。\n\n## 认证与基础配置\n- 环境变量: `STOCK_API_KEY`\n- Base URL: 从 `config.sh` 中读取 `$STOCK_BASE_URL`（默认 `https://www.mystockearning.cn`，切换域名只需改 `config.sh`）\n\n## API 指令清单\n\n### 获取当前持仓\n当用户问 \"我现在的苹果股票赚了多少钱？\" 或 \"查看我的美股持仓\" 时：\n- 获取特定股票持仓：执行 `./scripts/get_position_by_symbol.sh`（需要设置 `SYMBOL`）\n- 获取某市场的所有持仓（按盈亏比例降序）：执行 `./scripts/get_positions_by_market_sorted.sh`（需要设置 `MARKET`）\n\n### 获取交易记录\n当用户问 \"我最近一个月买过哪些美股？\" 时：\n- 执行 `./scripts/get_trades.sh`（需要设置 `MARKET`、`TRADE_TYPE`）\n\n### 获取投资表现摘要\n当用户问 \"我账户总资产多少？\" 或 \"总盈亏如何？\" 时：\n- 获取收益摘要：执行 `./scripts/get_summary.sh`\n\n## 执行规则\n1. 解析用户指令。\n2. **货币显示规则**：在回复任何持仓市值、成本或盈亏金额时，必须根据该股票或账户所在的市场显示正确的货币符号或单位：\n   - `cn_a` (A股): `¥` 或 `元` (人民币 CNY)\n   - `hk` (港股): `HK$` 或 `港元` (港币 HKD)\n   - `us` (美股): `$` 或 `美元` (美元 USD)\n3. 执行 `curl` 请求。\n4. 从响应中提取关键字段（如 `profit_loss`, `profit_loss_percent`, `market_value`）。\n5. 使用带颜色的 Markdown 格式或表格输出结果（如：盈利标红或绿，根据当地市场习惯），金额必须保留两位小数并带上正确的货币单位。"},{"path":"SKILL.md","content":"---\nname: secn\ndescription: 这是 StockEarningCN 的 OpenClaw 技能/Skill插件入口说明。安装本目录后，你将获得一组可组合使用的技能\nuser-invocable: true\n---\n# StockEarningCN Skills介绍(StockEarning Assistant)\n\n这是 StockEarningCN 的 OpenClaw 技能插件入口说明。安装本目录后，你将获得一组可组合使用的技能，用于：\n\n- 查询A股行情、股票信息、股票搜索\n- 查询与管理持仓、计算盈亏、刷新持仓现价\n- 记录买入/卖出交易\n\n## 开始之前：\n\n您需要去`https://www.mystockearning.cn注册一个账号，并等待审核通过后获取api key。`\n\n## 认证与基础配置\n\n- 环境变量: `STOCK_API_KEY`\n- Base URL: 从 `config.sh` 中读取 `$STOCK_BASE_URL`（默认 `https://www.mystockearning.cn`，也可通过环境变量 `STOCK_BASE_URL` 覆盖）\n\n所有请求均使用 HTTP Header：`X-API-Key: $STOCK_API_KEY`\n\n推荐安全保存（OpenClaw/Hermes 通用）：使用 `./scripts/setup_api_key.sh` 生成本地密钥文件（默认写入 `~/.config/stockearning/stockearning.env`，权限 600）。\n\n## 推荐使用方式\n\n通常直接使用主入口技能：\n\n- `/secn`：主入口，覆盖最常用的查询/记账场景\n\n若你希望更可控、更聚焦的行为，可以按需调用下列技能：\n\n| 技能名称                  | 功能                 | 目录                       |\n| --------------------- | ------------------ | ------------------------ |\n| `secn`               | 主入口：综合查询、记录交易        | `./stock-master/`        |\n| `portfolio-assistant` | 仅查询持仓/收益摘要/历史交易    | `./portfolio-assistant/` |\n| `market-data`         | 仅查询实时价格、股票信息、搜索代码  | `./market-data/`         |\n| `trade-execution`     | 仅用于记录买入/卖出交易       | `./trade-execution/`     |\n\n## 安装方式\n\n### Openclaw:\n\n```\nopenclaw skills install secn\n```\n\n<br />\n\n### Hermes:\n\n```\nhermes skills install clawhub:secn\n```"},{"path":"stock-master/SKILL.md","content":"---\nname: secn\ndescription: 主入口：包含查询持仓、行情、记账所有功能。\nuser-invocable: true\nscript: \"bash scripts/run.sh\"\n---\n\n# StockEarning 主投资助手 (Master Agent)\n\n你是一个专业的股票投资组合助手。你可以通过调用 StockEarning 的 REST API 来帮助用户查询市场数据、管理持仓和记录交易。\n\n## 工具使用方式\n\n你现在拥有一个专门的 `run.sh` 脚本来执行所有的 API 调用。该脚本会自动处理环境变量（API Key）的读取和提示。\n\n### 调用格式\n你需要使用本技能目录下的 `./scripts/*.sh` 脚本完成各类操作（每个操作一个脚本文件）。\n\n### 1. 查询持仓与收益 (Get Positions & Summary)\n获取用户当前的股票持仓信息或整体收益。\n- 获取所有持仓：执行 `./scripts/positions_all.sh`\n- 获取特定股票的持仓：执行 `./scripts/positions_by_symbol.sh`（需要设置 `SYMBOL`）\n- 获取整体收益摘要：执行 `./scripts/summary.sh`\n\n### 2. 市场数据 (Market Data)\n查询实时股价或搜索股票代码。\n- 查询实时价格：执行 `./scripts/get_price.sh`（需要设置 `SYMBOL`，可选 `MARKET`）\n- 搜索股票代码：执行 `./scripts/search_stocks.sh`（需要设置 `QUERY`，可选 `MARKET`）\n\n### 3. 记录交易与券商配置 (Trade & Broker)\n帮用户记录买卖行为及检查/配置券商。\n- 检查某市场是否已配置券商：执行 `./scripts/get_brokers.sh`（需要设置 `MARKET`）\n- 一键导入市场默认券商：执行 `./scripts/seed_defaults.sh`（需要设置 `MARKET`）\n- 预计算手续费：执行 `./scripts/calculate_commission.sh`（需要设置 `BROKER_ID`、`TRADE_TYPE`、`QUANTITY`、`PRICE`）\n- 记录买入/卖出交易：执行 `./scripts/create_trade.sh`（需要设置 `SYMBOL`、`NAME`、`MARKET`、`TRADE_TYPE`、`QUANTITY`、`PRICE`、`TRADE_DATE`；可选 `COMMISSION`、`CURRENCY`、`NOTES`）\n\n### 4. 持仓盘点修正 (Position Adjustment)\n如果因为分红、送转或其他原因导致持仓数量对不上，可以通过此接口直接调整**股数**。\n注意：调整数量**不会修改历史成本价**，系统会自动生成一笔 `trade_type=adjust` 的交易记录用于流水追溯，其价格默认为当天的市价（若无则取原成本价）。\n```bash\n{baseDir}/scripts/edit_position.sh 123 1050 \"分红送转调整\"\n```\n\n## 严格执行规则\n1. 分析用户输入。\n2. **货币显示规则**：在回复任何金额（如价格、手续费、总额、盈亏）时，必须根据该股票所在的市场显示正确的货币符号或单位：\n   - `cn_a` (A股): `¥` 或 `元` (人民币 CNY)\n   - `hk` (港股): `HK$` 或 `港元` (港币 HKD)\n   - `us` (美股): `$` 或 `美元` (美元 USD)\n3. **记录交易的智能补全与券商机制**：当用户想要记录交易时，你必须按照以下逻辑处理：\n   - **(代码补全)**：如果没有代码，先调 `GET /api/positions/` 查持仓；没找到则调用搜索 API (`/api/markets/search/stocks`) 遍历 cn_a, hk, us。\n   - **(清仓智能识别)**：如果用户说“清仓”、“全卖了”，且未提供数量，必须先调用 `GET /api/positions/` 获取该股票的当前持仓数量，并自动填入。\n   - **(防爆仓拦截)**：如果是卖出操作且提供了数量，必须先调用 `GET /api/positions/` 检查余额。如果余额不足，直接拒绝并提示用户当前实际持有量。\n   - **(市价智能获取)**：如果用户未提供**买入价格**，静默调用 `/api/markets/stocks/{symbol}/price` 获取当前市价，并作为默认建议价询问用户。\n   - **(按金额反推数量)**：如果用户提供了总金额和单价但未提供数量，自动计算 `数量 = 向下取整(总金额 / 单价)` 并向用户确认。\n   - **(券商前置拦截与算费)**：在发起最终交易前，必须执行以下步骤：\n     1. 调用 `GET /api/brokers/?market={对应的市场}`。\n     2. 如果返回空列表 `[]`，说明该市场无券商。你必须**拦截交易并暂停**，询问用户：“您在这个市场尚未配置券商。是否需要为您一键导入该市场的默认券商配置？或者您想自定义配置？”\n     3. **等待用户回答**。如果用户回答“一键导入”或“同意导入”，你才调用 `POST /api/brokers/seed-defaults` 传入该市场代码，然后再调用 `GET /api/brokers/` 获取刚创建的 `broker_id`。如果用户要求“自定义”，请引导用户提供券商名称和佣金费率。\n     4. 拿到 `broker_id` 后，调用 `POST /api/brokers/calculate-commission` 计算精确的手续费（commission、stamp_duty 等）。\n4. **交易录入前校验**：在发起 `POST /api/trades/` 之前，必须逐项核对并向用户确认以下字段（缺一不可）：\n   - `symbol`：与用户意图一致，且无多余空格\n   - `market`：与标的所属市场一致（如 us/hk/cn_a 等）\n   - `trade_type`：buy/sell 与用户意图一致\n   - `quantity`：为正数；若用户说“清仓/全卖”，必须先查持仓再填入\n   - `price`：为正数，单位与市场/货币一致\n   - `fees`：在已配置券商时先用 `/api/brokers/calculate-commission` 计算；将 `total_fees` 写入 `commission`，并把明细（commission/stamp_duty/transfer_fee）写入 `notes`\n   - `trade_date`：明确的时间（含时区）；若用户未指定，需询问或使用用户确认的默认时间\n5. **最终确认**：在执行写入前，必须输"},{"path":"trade-execution/SKILL.md","content":"---\nname: trade-execution\ndescription: 专门用于代表用户向系统中记录买入或卖出交易的助手。\nuser-invocable: true\n---\n\n# 交易执行助手 (Trade Execution)\n\n专门用于代表用户向系统中记录买入或卖出交易的助手。\n\n## 认证与基础配置\n- 环境变量: `STOCK_API_KEY`\n- Base URL: 从 `config.sh` 中读取 `$STOCK_BASE_URL`（默认 `https://www.mystockearning.cn`，切换域名只需改 `config.sh`）\n\n## API 指令清单\n\n### 记录新交易与券商配置\n当用户说 \"我今天以 150 美元买入了 100 股苹果\" 时：\n- 1) 检查市场券商：执行 `./scripts/get_brokers.sh`（需要设置 `MARKET`）\n- 2) 如需导入默认券商：执行 `./scripts/seed_defaults.sh`（需要设置 `MARKET`）\n- 3) 计算手续费：执行 `./scripts/calculate_commission.sh`（需要设置 `BROKER_ID`、`TRADE_TYPE`、`QUANTITY`、`PRICE`）\n- 4) 记录交易：执行 `./scripts/create_trade.sh`（需要设置 `SYMBOL`、`NAME`、`MARKET`、`TRADE_TYPE`、`QUANTITY`、`PRICE`、`TRADE_DATE`；可选 `COMMISSION`、`CURRENCY`、`NOTES`）\n\n## 严格执行规则\n1. 分析用户指令。\n2. **货币显示规则**：在回复任何金额（如价格、手续费、总额等）时，必须根据该股票所在的市场显示正确的货币符号或单位：\n   - `cn_a` (A股): `¥` 或 `元` (人民币 CNY)\n   - `hk` (港股): `HK$` 或 `港元` (港币 HKD)\n   - `us` (美股): `$` 或 `美元` (美元 USD)\n3. **智能补全与确认机制**：当用户想要记录交易时，你必须按照以下逻辑处理：\n   - **(代码补全)**：如果没有提供完整的股票代码和市场，先调 `GET /api/positions/` 查持仓；没找到则调用搜索 API (`/api/markets/search/stocks`) 遍历 cn_a, hk, us。\n   - **(清仓智能识别)**：如果用户说“清仓”、“全卖了”，且未提供数量，必须先调用 `GET /api/positions/` 获取该股票的当前持仓数量，并自动填入。\n   - **(防爆仓拦截)**：如果是卖出操作且提供了数量，必须先调用 `GET /api/positions/` 检查余额。如果余额不足，直接拒绝并提示用户当前实际持有量。\n   - **(市价智能获取)**：如果用户未提供**买入价格**，静默调用 `/api/markets/stocks/{symbol}/price` 获取当前市价，并作为默认建议价询问用户。\n   - **(按金额反推数量)**：如果用户提供了总金额和单价但未提供数量，自动计算 `数量 = 向下取整(总金额 / 单价)` 并向用户确认。\n3. **券商前置拦截与算费机制**：在确认了股票代码、数量和价格后，在发起最终交易前，必须执行以下步骤：\n   - 调用 `GET /api/brokers/?market={对应的市场}`。\n   - 如果返回空列表 `[]`，说明该市场无券商。你必须**拦截交易并暂停**，询问用户：“您在这个市场尚未配置券商，无法计算印花税和交易佣金。是否需要为您一键导入该市场的默认券商配置？或者您想自定义配置？”\n   - **等待用户回答**。如果用户回答“一键导入”或“同意导入”，你才调用 `POST /api/brokers/seed-defaults` 传入该市场代码，然后再调用 `GET /api/brokers/` 获取刚创建的 `broker_id`。如果用户要求“自定义”，请引导用户提供券商名称和佣金费率。\n   - 拿到 `broker_id` 后，调用 `POST /api/brokers/calculate-commission` 计算精确的手续费（commission、stamp_duty 等）。\n4. **最终确认**：在发起最终的 `POST /api/trades/` 之前，**必须**向用户输出一段确认信息（包含代码、名称、市场、数量、价格、以及**预估的手续费/印花税总计**）。只有在用户回复确认后，才能执行。\n5. **确认后执行**：执行 `curl -X POST /api/trades/` 记录交易（带上获取到的 broker_id 和费用数据）。\n6. **输出结果**：根据 API 响应，向用户确认交易已成功记录，并展示总金额。"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":null,"editorialQuality":{"score":100,"threshold":65,"status":"thin","wordCount":1102,"uniquenessScore":39,"reasons":["uniqueness-below-45"]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T09:18:43.673Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-11T09:18:43.673Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-11T11:22:48.290Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}