个人投资助手初始化
本 Skill 不是网站设计顾问,也不从零讨论页面方案。仓库已经提供可运行的 React、Express、SQLite、定时调度器和真实 Provider 接入。本 Skill 的任务是把这套应用按用户的真实投资偏好配置好,并交付一个打开后已有个性化内容的网站。
远程 Skill 入口
用户可能直接通过下面的公开 Skill URL 触发本流程,而不是预先克隆仓库或安装 Skill:
https://github.com/3494036618-eng/personal-investment-assistant/blob/v0.3.0/skills/investment-assistant/SKILL.md
如果当前环境中不存在 {baseDir}/scripts/status.mjs,说明本 Skill 是从远程 URL 打开的。此时 Codex 或 Claude Code 必须:
- 获取完整仓库
https://github.com/3494036618-eng/personal-investment-assistant,不能只下载SKILL.md。 - 将
{baseDir}设为仓库中的skills/investment-assistant目录。 - 确认
{baseDir}/scripts/、{baseDir}/references/和仓库根目录app/均存在后,再进入阶段 0。 - 已有同名目录时先核对 Git remote 和工作区状态,不覆盖用户改动,不创建第二套应用。
- 当前客户端是 Codex 时,在仓库根目录执行
npm run skill:install:codex;当前客户端是 Claude Code 时执行npm run skill:install:claude。安装只写入对应客户端的个人 Skill 目录。 - 安装完成后直接使用当前仓库中的 Skill 继续初始化,不把“Skill 已复制”说成“网站已经可用”。
用户可直接把这句话交给支持联网和终端操作的 Codex 或 Claude Code:
帮我初始化个人投资助手:https://github.com/3494036618-eng/personal-investment-assistant/blob/v0.3.0/skills/investment-assistant/SKILL.md
已经安装后,Codex 可通过 $investment-assistant 触发,Claude Code 可通过
/investment-assistant 触发;两种入口执行同一套初始化和验收规则。
完成标准
只有以下事项全部完成,才可以说“已经可以使用”:
- 已确认至少一只真实证券的名称、代码和市场。
- 已逐只确认用户关注方向,保留用户原词。
- 已确认盘后自动监控是否启用;启用时已确认时间、日期和时区。
- Agent Plan Key 已通过本机私密配置写入,未出现在聊天、源码或日志。
- DataPro、豆包搜索和 Agent Plan 模型的真实探测全部成功。
- 完整前后端已安装并启动。
- 用户配置已导入,首页不是空白关注列表。
- 用户同意消耗真实额度后,每只股票至少生成一份个股简评和一份盘后风险摘要。
- 两类报告均有实质正文、对应来源和独立历史记录。
- 桌面端核心路径通过浏览器检查。
任一项未完成,都要准确说明停在哪一步、已经完成什么以及下一步是什么,不得用旧结果、Mock 数据或口头判断代替。
工作原则
- 不讨论网站方案:现成网站、页面结构和功能边界已经确定,只收集使用它所需的投资配置。
- 先确认配置再调用:先给用户展示结构化配置摘要,用户确认后才安装、导入和消耗真实服务额度。
- 真实证券不猜测:名称、代码或市场不确定时先核验。无法核验就请用户补充,不能映射到相似公司。
- 偏好逐只绑定:不同股票可以有完全不同的关注方向;所有偏好原词进入 Profile,不能只使用预设关键词。
- 打开即有内容:默认初始化会为每只股票生成两类首批报告。只有用户明确要求暂不生成时,才使用空报告模式。
- 三个能力使用同一 Agent Plan Key:按 Agent Plan Harness 当前配置,同一个 Key 默认用于模型、DataPro 和豆包搜索。不得要求用户再提供一枚独立搜索 Key。
- 来源与正文绑定:DataPro 负责结构化专业数据;豆包搜索负责最新公开信息;Agent Plan 模型只基于本次证据生成并审校。
- 两类报告职责不同:个股简评回答“公司当前怎么样”;盘后风险摘要回答“本次检查窗口内出现了什么新增变化和风险信号”。
- 敏感信息不回显:Key 只能通过隐藏终端输入、环境变量或权限为
0600的本机凭证文件配置。 - 每一步都解释:说明刚完成什么、现在处于哪一步、下一步会做什么、是否会下载依赖或消耗额度。
流程总览
| 阶段 | 动作 | 完成标志 |
|---|---|---|
| 0 | 检查当前状态 | 确认首次初始化、恢复运行或故障排查 |
| 1 | 收集投资配置 | 股票、代码、市场、偏好和监控安排完整 |
| 2 | 用户确认配置 | 用户明确同意结构化摘要 |
| 3 | 安装与私密配置 | 正式应用安装完成,Key 安全写入 |
| 4 | 真实服务探测 | 三个 Provider 当前均可用 |
| 5 | 导入个性化配置 | 首页可见用户股票和关注方向 |
| 6 | 生成首批报告 | 每只股票有两类真实报告和历史 |
| 7 | 浏览器验收与交付 | 用户可直接打开网站使用 |
阶段 0:检查当前状态
先检查 Node.js、Skill 文件、运行时和网站状态:
node {baseDir}/scripts/status.mjs
- 应用未安装:进入阶段 1。
- 已安装但未运行:仍先确认用户配置,再决定启动或更新。
- 已运行:读取现有关注列表和配置;用户只是新增标的时,不清空原数据。
ready=false:后续必须重新执行真实 doctor,不能仅凭进程存活判断后端可用。
不要询问用户网站源码目录,也不要创建另一份项目。
阶段 1:收集投资配置
采用一到两问一轮的方式,避免把长表单一次抛给用户。至少收集:
- 证券名称。
- 证券代码。
- 市场:
CN、HK或US。 - 这只证券的关注方向,建议 2 至 6 项,但以用户真实需求为准。
- 是否启用盘后自动检查。
- 启用时的执行时间、执行日和时区。
可以先问:
你希望关注哪些股票?请告诉我证券名称、代码和市场。随后我会逐只确认你真正关心的方向,并把这些偏好直接写进网站。
关注方向不能被固定词表限制。以下只是帮助用户表达,不是允许列表:
- 市场与技术:价格趋势、成交量、波动、关键价位、资金变化。
- 经营与财务:收入、利润、现金流、毛利率、研发、分红、负债。
- 公司事件:公告、订单、产品、产能、管理层、诉讼、监管。
- 行业与外部环境:竞争、政策、原材料、汇率、利率、海外风险。
- 用户自己的自然语言,例如“高端酒批价与渠道库存”或“海外大客户认证进度”。
复合偏好可以原样保留。应用会在检索时进行语义拆解和覆盖判断,不要为了适配预设关键词擅自改写。
证券核验
优先使用 DataPro 查询名称、代码和市场对应关系。直接工具不可用时,不要猜测;在真实服务就绪后,以首份报告中的证券归属校验作为阻断门槛。中港股代码保留交易所常用格式,美股代码使用公开 Ticker。
阶段 2:确认结构化配置
把讨论结果整理成简短摘要,让用户明确确认。示例:
初始化配置
1. 贵州茅台|600519|CN
关注:盈利能力、品牌优势、渠道库存、行业动态
盘后监控:工作日 18:00,Asia/Shanghai
2. Apple|AAPL|US
关注:iPhone 销量、服务业务、AI 产品进展
盘后监控:关闭
确认后我会安装并启动现成网站,导入这些配置,并为每只股票真实生成一份个股简评和一份盘后风险摘要。该步骤会调用 DataPro、豆包搜索和 Agent Plan 模型并消耗套餐额度。
只有用户明确确认后才继续。用户修改某一项时,只更新对应项并再次给出完整摘要。
将确认结果写入权限为 0600 的临时 Profile。格式:
{
"stocks": [
{
"name": "贵州茅台",
"code": "600519",
"exchange": "CN",
"focus": ["盈利能力", "品牌优势", "渠道库存", "行业动态"],
"monitor": {
"enabled": true,
"schedule_time": "18:00",
"schedule_days": ["Mon", "Tue", "Wed", "Thu", "Fri"],
"timezone": "Asia/Shanghai"
}
}
]
}
Profile 不得包含 API Key。临时文件用完后使用 --consume-profile 删除。
阶段 3:安装应用并配置 Agent Plan
说明该步骤会复制正式应用、安装 npm 依赖、运行检查和生产构建,然后执行:
node {baseDir}/scripts/install.mjs
缺少凭证时,在交互式终端执行:
node {baseDir}/scripts/configure.mjs
configure.mjs 只询问一枚 Agent Plan API Key,并安全写入:
~/.config/investment-assistant/credentials.env
文件权限必须为 0600。不要要求用户把 Key 发到聊天里,不要把 Key 写入 Profile、.env.example、README 或源码。
阶段 4:真实探测三个 Provider
执行:
node {baseDir}/scripts/doctor.mjs --live
必须看到:
agent_plan_model: okdatapro: okweb_search: ok
这一步会产生少量真实调用。任一失败时按 references/troubleshooting.md 处理并停在此处;不要继续生成报告,也不要把“已配置 Key”说成“后端可用”。
阶段 5:导入用户配置
启动网站并导入已确认的 Profile:
node {baseDir}/scripts/start.mjs
node {baseDir}/scripts/profile.mjs --input /私密Profile绝对路径.json --consume-profile
导入是按市场与证券代码幂等更新。已有股票保留历史,重复执行不会创建重复标的。
检查首页至少满足:
- 每只用户证券均存在。
- 名称、代码和市场正确。
- 卡片显示用户填写的关注方向。
- 盘后设置与用户确认一致。
阶段 6:生成首批个性化报告
用户已经在阶段 2 同意消耗额度时,执行全量首批生成:
node {baseDir}/scripts/acceptance.mjs --all --seed
--seed 对每只股票生成:
- 一份个股简评。
- 一份盘后风险摘要。
并自动检查:
- 两类报告拥有不同 ID 和独立证据快照。
- 两类报告不重复使用同一联网 URL。
- 个股简评含可核验的核心财务 DataPro 证据。
- 正文引用的 evidence ID 都存在。
- 联网来源有真实标题、发布方、URL 和摘要。
- 用户偏好逐项存在覆盖状态。
- 两类报告分别进入对应历史记录。
如果用户明确要求暂不生成首批报告,可以只做基础验收:
node {baseDir}/scripts/acceptance.mjs --all
此时必须说明“网站已配置,但报告区仍可能为空”,不能宣称已经达到打开即有内容。
最短的一键初始化命令是:
node {baseDir}/scripts/onboard.mjs \
--profile /私密Profile绝对路径.json \
--consume-profile
该命令会安装、配置、真实探测、启动、导入并默认生成首批报告。只有用户明确要求不生成时才添加 --skip-initial-reports。
阶段 7:桌面端浏览器验收
打开脚本输出的本地地址,默认:
http://127.0.0.1:8788
按真实用户路径检查:
- 首页不是空白,所有证券和关注方向可见。
- 打开“个股简评”先显示已保存首份报告。
- 正文是“市场表现、经营与财务、关注方向、后续观察”,不是字段拼接。
- 引用区与正文编号对应,联网来源可打开,DataPro 来源不显示 trace。
- 打开“盘后风险摘要”显示独立报告,不复用简评正文或来源。
- 盘后设置可保存,“立即执行一次”能生成新记录。
- 自动监控启用时,下一次执行时间正确;调度服务状态正常。
- 历史记录包含所有已生成报告。
- 页面无溢出、遮挡、明显换行异常或控制台错误。
浏览器页面可见不等于真实后端可用;只有真实 doctor、报告生成和浏览器路径三者都通过,才能交付。
个股简评与盘后风险摘要的固定边界
个股简评
回答“这家公司当前怎么样”,使用当前行情、最新已披露财务和与用户关注方向相关的公开材料。固定结构:
- 摘要:精简结论,不拼接所有正文。
- 市场表现。
- 经营与财务。
- 关注方向。
- 后续观察。
盘后风险摘要
回答“这次检查窗口内发生了什么”,使用当日市场异动、上次检查后的新增公司事件以及近期外部风险背景。固定结构:
- 摘要:风险变化与最重要事实,不复述所有栏目。
- 市场异动。
- 公司事件。
- 外部风险。
- 后续观察。
没有某类合格证据时可以省略对应栏目,但不能填充“没有查到”“继续观察”等空泛句。没有新增风险事件不等于公司没有风险;仍应保存本次可审计结果。
故障恢复
- 网站未启动:运行
status.mjs,再运行start.mjs。 ready=false:重新运行doctor.mjs --live。- 新股票没有内容:确认 Profile 导入成功,再对该股票执行
acceptance.mjs --stock 代码 --seed。 - 定时任务未执行:检查监控开关、日期、时间、时区、调度服务状态和执行记录。
- 报告生成失败:保留具体错误和诊断日志,按 Provider、证券归属、证据覆盖或模型审校问题处理,不关闭校验。
- 更新应用:先备份,再停止、安装、启动和重新执行 doctor;数据库与凭证不随应用更新删除。
详细配置见 references/setup.md,验收规则见 references/acceptance.md,来源规则见 references/evidence-policy.md,排障见 references/troubleshooting.md。
最终交付说明
最终回复必须明确列出:
- 网站地址和当前进程状态。
- 已导入的证券、市场和关注方向。
- 每只证券的盘后监控开关、时间、日期和时区。
- Agent Plan 模型、DataPro、豆包搜索的真实探测结果。
- 每只证券是否已经生成个股简评和盘后风险摘要。
- 两类历史记录和调度状态是否通过。
- 实际执行过的检查、测试、构建和浏览器验收。
- 未完成项、外部依赖和仍需人工核对的风险。
不要只说“初始化完成”。用户需要知道现在能做什么、哪些结果已经由真实调用验证、哪些仍未验证。