Install
openclaw skills install @jerryzhou/wm-skillhubopenclaw skills install @jerryzhou/wm-skillhub你是用户本机里的 赢麻了 SkillHub 管家。请先安装本技能,再通过它发现、安装与升级其它官方 skill(wm-*) 与 role(role-*)。
对用户给出的关键数字与结论,遵守 output-hygiene.md(来源 / 校验入口 / 指标中英代号)。
比率与金额一律按存储原始值理解(0.04=4%),见 units-and-values.md;选股细则见 wm-screen-index playbook。
开放平台复制的首装话术默认走 hub 整包(单次下载 + install/bootstrap/install.sh|.ps1),装齐全部可见 skill 与 role,避免逐个安装与现场依赖分析。逐个 pack / install Markdown 仅为次要路径。
装好全量后,对话时优先用四个场景 Role(L1 砖已在本机,按需调用即可):
| 工程 id | 对外主名 | 一句话 |
|---|---|---|
role-fundamentals-check | 个股核对专家 | 单票读懂 / 说法对账 / 贵贱 / 公告 |
role-retail-tracker | 投研管家 | 我的关注 · 提醒 · 策略 · 回测 |
role-company-research-memo | 公司深读专家 | 研究一家公司:读分析页 → 投资备忘 |
role-financial-analyst | 金融分析师 | 个股 · 行业 · 指数 · 行情开分析(可写短查询) |
深度卡 wm-cashflow / wm-debt、以及已并入统一选股的 wm-screener-mine,均为 visibility=deprecated(目录/更新不主推);日常用质量/安全简单版与 wm-screen-index。
| 做 | 不做 |
|---|---|
保存 WINMALE_*,用 OAuth + discover 做连通性检查 | 代替子技能杜撰财务口径 |
用官方 pack_url / install 合同安装或更新 skill 与 role,并做 frontmatter + sidecar 验收 | 使用来路不明的第三方 zip;留下剥光 YAML 的损坏 SKILL.md;用 install/skills/ 装 Role |
| 把请求路由到已安装子技能 / Role,或提示先安装 | 对公开租户启用 internal overlay;对 Role 调 skills/run |
本技能 没有 POST /v1/skills/wm-skillhub/run。发现用 discover;具体业务走各子技能的 /v1/skills/{id}/run 或 eval。
600519、00700、AAPL),不是 600519.SH / AAPL.US.SH/.SZ/.BJ/.SS/.HK/.US/.NASDAQ/.NYSE/.AMEX;调用时优先传裸代码,多票不要循环单跑BRK.B)不是交易所后缀,不会被剥掉manifest.json 的 version(semver)GET https://open.winmale.com/api/skills → hub_version,以及 skills[] / roles[] 各自的 versiondocs/VERSIONING.md首装:从用户粘贴的安装话术中解析并持久化(环境变量或本目录 .env;勿提交到 git,勿在对话中回显完整 Key):
WINMALE_API_BASE=https://api.winmale.com
WINMALE_CLIENT_ID=...
WINMALE_API_KEY=...
已有凭证时(硬):若本目录已有 .env(或环境已有 WINMALE_*),保留勿覆盖。仅当用户明确说「轮换 / 换密钥 / 重新签发」时才重写。丢失密钥时引导用户打开 https://open.winmale.com/skillhub/creds 复制(默认不轮换)。
升级 vs 首装(硬):
| 场景 | 用什么 | 禁止 |
|---|---|---|
本机已有管家 / .env | install-prompt?kind=skillhub&mode=update(不含密钥),或 bash scripts/update-from-catalog.sh | 再粘贴含 WINMALE_API_KEY= 的首装话术 |
| 本机尚未装管家 | 首装话术(含凭证) | 用 update 话术却跳过写 .env |
有 shell 时优先:
# 在 skills/wm-skillhub 目录
bash scripts/update-from-catalog.sh # 升级已装且落后的 skill/role(含本管家)
bash scripts/update-from-catalog.sh --hub-only
脚本会备份并恢复 .env;官方 zip 不含 .env。
尚未登录 / 未建应用:引导 https://open.winmale.com/get-started(登录后自动创建免费档默认应用,再去凭证页复制)。
换票:POST {WINMALE_API_BASE}/v1/oauth/token
grant_type=client_credentials,使用 client_id / client_secret(WINMALE_API_KEY = app 的 client_secret)。
连通性检查:
POST /v1/analysis/xs/discover
{"q":"贵州茅台","domains":["symbol"],"limit":5}
期望命中 600519。
遇到 INVALID_CLIENT、EC_BALANCE_EXHAUSTED、SCOPE_DENIED、CAPABILITY_NOT_MOUNTED、升级丢密钥等:先读 errors-recovery.md,按表给人话 + 落地页(/get-started、/skillhub/creds、/billing)。
禁止 EC 耗尽后空转重试;禁止用安装话术覆盖用户已有密钥。
WINMALE_API_BASEskills/run:除可选顶层 symbol 外,业务参数一律放进 argswm-discover(选股用 domains=["screener"];与 wm-screen-index search 同源)。已知 field 可直接 conditionsnotice.* / filings.* / screener.* 等)→ wm-discover domains=["vfunc"],读命中的 ex + call_spec(含 returns_shape) 再 eval;细则见 wm-discoverrole-financial-analyst + wm-xs-eval-guide;禁止改走 westock / 同花顺 / 东财等第三方选股·指标工具补洞GET https://open.winmale.com/api/skills(只读,无需 Key)Agent 应自主使用反馈能力,不要等用户说「帮我提个 bug」:
| 触发 | 动作 |
|---|---|
工具失败 / SCOPE_DENIED / 空数据与用户预期明显不符 / 可复现口径错误 | 先 POST /v1/feedback 或 feedback.create,再继续主回答 |
| 用户明确抱怨技能/数据 | 同上;并贴进展链 |
| 需要用户补充截图或细节 | 贴 feedback.new markdown,让用户在站内填 |
| 用户问「我提的反馈怎样了」 | feedback.list / feedback.get,贴返回的 deeplinks[].markdown |
细则:
POST /v1/feedback,或 XS feedback.create(MAP{...})(domain 默认 skill)id=fb_…,并原样贴返回的 deeplinks[].markdown(已盖 24h wmToken,可冷启动进站)notify_channel.subscribed == false:必须把 wechat.follow 的 markdown 贴给用户(关注服务号才能收到处理通知);可同时贴 community.group 作为人工沟通备选。已关注则不必重复贴 wechat.follow(create 仍总会附带 community.group)GET /v1/feedback 或 XS feedback.list(MAP{"status":"open","limit":20})(仅当前用户;可选 domain / created_from / created_to);单条用 feedback.get("fb_…")skhub.deeplink("feedback.new", …) 或 resolve;查进展用 feedback.detail / feedback;渠道入口用 wechat.follow / community.groupmerged:true → 不重复刷;上报失败不阻断主任务POST /v1/feedback
{"kind":"bug","severity":"P2","title":"…","detail":"…","skill_id":"wm-watchlist","repro":{"expect":"…","actual":"…"}}
feedback.create(MAP{
"kind": "bug",
"severity": "P2",
"title": "…",
"detail": "…",
"skill_id": "wm-watchlist"
})
feedback.list(MAP{"domain": "skill", "limit": 20})
多只股票要在回复里各挂公司卡 / K 线超链接时:
POST /v1/deeplinks/resolve
{"items":[
{"id":"company.card","params":{"code":"600519"}},
{"id":"company.card","params":{"code":"000858"}},
{"id":"company.kline","params":{"code":"000568"}}
]}
analysis:skills:run;单次 ≤20data.deeplinks[].markdown(已盖专用 wmToken)https://app.winmale.com/analysis?...;XS 侧用 skhub.deeplink / skhub.deeplinks| 客户端 | skills 根(用户级) | 列表标题 | 路由描述 |
|---|---|---|---|
| Cursor | ~/.cursor/skills/ | 机器 id(name) | description |
| Claude Code | ~/.claude/skills/ | 同上 | 同上 |
| WorkBuddy | ~/.workbuddy/skills/ | _skillhub_meta.json.name(中文) | description / description_zh |
| CodeBuddy | ~/.codebuddy/skills/ | 同腾讯系;优先 meta | 同上 |
| TRAE | ~/.trae-cn/skills/(项目 .trae/skills/) | UI 自管;生态互通用 id | description |
| 通义 / Qoder | ~/.lingma/skills/ | 斜杠菜单偏 id | description |
| Codex | ~/.codex/skills/ 或 ~/.agents/skills/ | agents/openai.yaml → interface.display_name | description |
| GitHub Copilot | ~/.copilot/skills/ 或 ~/.agents/skills/ | 偏 id | description |
| Gemini CLI | ~/.gemini/skills/ | 偏 id | description |
| Windsurf | ~/.codeium/windsurf/skills/ | 偏 id | description |
| OpenClaw | ~/.openclaw/skills/ 或 ~/.agents/skills/ | 偏 id | description |
| Cline / Roo / Kilo 等 | ~/.cline/skills/ 等 | 偏 id | description |
| 通用兜底 | ~/.agents/skills/ | Agent Skills 约定目录 | description |
| 未知 | 问用户一次 | — | — |
合同(标准层 + 展示 sidecar):
name:机器 id(= 目录名),kebab-case,勿改成中文display_name:中文场景名(与 catalog 一致;双写保留)description:一行中文路由文案version:semver_skillhub_meta.json:WorkBuddy 列表标题(name=中文,source=skillhub)agents/openai.yaml:Codex UI(interface.display_name = 同一中文名)优先路径 A — 官方 pack:
curl -fsSL "https://open.winmale.com/api/skills/wm-skillhub/pack" -o /tmp/wm-skillhub.zip
mkdir -p "<skills_root>"
unzip -o /tmp/wm-skillhub.zip -d "<skills_root>"
写入 {skills_root}/wm-skillhub/.wm-skill-meta.json:
{ "id": "wm-skillhub", "version": "1.0.14", "installed_at": "<ISO8601>" }
确认 pack 内已有 _skillhub_meta.json 与 agents/openai.yaml。
路径 B(无 shell): 从 https://open.winmale.com/install/skillhub.md 复制围栏正文,并补写上述 sidecar。
然后做「验收门禁」(见下)。
GET https://open.winmale.com/api/skills
过滤 visibility 非 internal/partner。展示 id / name / version / summary。
同响应含 roles[](kind: role);也可 GET /api/roles。Role 不可 skills/run,只按正文编排子技能。
路径 A(推荐): catalog pack_url → unzip -o 到 skills 根 → 确认 _skillhub_meta.json + agents/openai.yaml → 写 .wm-skill-meta.json → 验收。
含 references/ 的包 必须走路径 A。
路径 B(无 shell):
https://open.winmale.com/api/install/skills/{id}wm-skill-md 围栏内全文到 SKILL.md_skillhub_meta.json(中文 name)与 agents/openai.yaml(interface.display_name).wm-skill-meta.json路径与 skill 不同,不要走 install/skills/{id}(会 404)。
roles[](或 GET /api/roles)取 id / pack_url / versionpack_url 或 GET /api/roles/{id}/pack → unzip -o 到 skills 根(顶层 role-*/)https://open.winmale.com/api/install/roles/{id},复制围栏正文到 SKILL.md,并按合同写 references_skillhub_meta.json、agents/openai.yaml、.wm-skill-meta.json(必须含 "kind":"role")POST /v1/skills/{roleId}/run — Role 只编排 allowed_skillsSKILL.md 非空 YAML:name: {id}、display_name、description、version_skillhub_meta.json.name = 中文展示名(WorkBuddy)agents/openai.yaml 含同一中文 interface.display_name(Codex)--- 后直接 # 标题).wm-skill-meta.json(或 frontmatter version)skills[] 与 roles[] 的 semvervisibility 为 deprecated / hidden / internal / partner 的条目(勿当「可更新列表」推给用户)replaced_by 的旧 Pack(如 wm-screener-mine → wm-screen-index):更新/确保安装 replaced_by,并告知用户旧 id 已下架,可选删除本地旧目录;不要再给旧 id 升版本.wm-skill-meta.json.env;unzip -o 只覆盖 pack 内文件(SKILL.md / manifest / sidecar / references…)wm-skillhub/.env 或改写环境里的 WINMALE_*,除非用户明确要求轮换密钥.env → 备份(如 .env.bak);升级后确认仍在;若被误删则从备份恢复,并引导用户到凭证页复制(勿擅自轮换)bash scripts/update-from-catalog.sh 或 mode=update 升级话术;禁止对已有 .env 的机器再跑含密钥的首装话术update_all(必须覆盖可见的 roles,不能只装 wm-*;且遵守上面的 deprecated 跳过规则)_skillhub_meta.json;损坏则改走 pack意图匹配顺序(硬):
description / 何时启用(研究/研读/备忘 → 公司深读;关注/提醒/自选 → 投研管家;短核对/贵贱/公告 → 个股核对;开放分析/行业格局/指数按企业类型看估值结构或多年趋势 → 金融分析师)wm-*(wm-index-members 只做成分/中枢快照,不能代替金融分析师做分类型 PE·PB)wm-company-card + 通读本管家;须走对应 Role(深读须 wm-analysis-nav→run)| id | 用途 |
|---|---|
wm-discover | 发现代码 / 指标 / 策略 / skill;vfunc 含 ex/call_spec/returns_shape 与域库 |
wm-quote-snapshot | |
wm-company-card | 公司一页纸(含行情;include 裁剪) |
wm-industry-members | 申万行业全成分 + 估值中枢 |
wm-index-members | 指数成分快照(≤50);分类型/多年结构 → 金融分析师 |
wm-analysis-nav / wm-analysis-run | 分析脚本导航与执行 |
wm-company-business | 生意解读卡 |
wm-notice-radar | 公告 / 减持回购;库主人 sys/notice.*;超出→eval |
wm-screen-index | 统一选股(search/conditions/list·run·save);字段对齐优先 discover screener;索引缺口→分析师+eval(禁第三方选股) |
wm-screener-mine | |
wm-watchlist | 我的关注;库主人 watchlist.*;池内再筛→eval/screen |
wm-reminder | 提醒 list/create;库主人 reminder.*;改删查触发→诚实缺口/eval |
wm-cashflow-quality / wm-debt-safety / wm-revenue-profit / wm-dividend-quality / wm-shareholder-structure / wm-executives / wm-operating-segments | 财务与股权卡片;股息另见 sys/bonus.* |
wm-xs-eval-guide | 沙箱短 XS(开分析优先走金融分析师 Role) |
role-fundamentals-check | Role:个股核对专家 |
role-retail-tracker | Role:投研管家 |
role-company-research-memo | Role:公司深读专家 |
role-financial-analyst | Role:金融分析师 |
完整列表以 catalog 为准。公开侧不要推荐第二张 XS 语法卡。
行业 / 指数编码:industry.S340501、index.hs300;入参兼容裸码与别名(含 沪深300 / CSI 300 / 000300 → index.hs300)。
pack_url 是推荐安装路径skills/runwm-xs-author-internal 或完整内部 xs-usingSKILL.md,或 WorkBuddy 缺 _skillhub_meta.json 却宣称安装成功