异动哨兵 + Telegram 播报 · 设计文档

日期:2026-08-06 · 状态:已上线(GitHub Actions 报警版,2026-08-07 实测推送成功) 不进发布网站(build.py 白名单外),纯内部工程文档。

当前生效的部署(2026-08-07)

不依赖用户任何设备,Mac 关机照跑。

GitHub 定时可能晚 10-30 分钟,属正常。

分析层待用户注册 DeepSeek API 后加(key 走 Secrets,同 TG_TOKEN 的注入方式)。

~/.异动哨兵.env 写入,加密存储。

⚠️ 先读这段:云端方案已验证死亡(带证据)

最终定位(2026-08-06 深夜,探针 B 的沙箱日志原话):

——沙箱的网络代理策略性封锁对外部服务的直连,不是故障,是设计,无法从内部绕开。

排查过程中还撞出第三个独立障碍,记下来防止后人再踩:

(谁的 bot、谁的群、谁授权),被当成数据外传直接拒绝,且拒绝得无声无息—— 从外面看与网络故障一模一样。第二版补了授权说明后 agent 愿意执行了,才撞到上面的 代理 403。教训:给云端 agent 的指令要自带授权上下文;但就算过了这关,网络也不通。

排除项:token 经 getMe 验证有效(@reaichainbot),同一 token 本地推送成功。

结论:Claude 云端 routine 推 Telegram 此路不通,别再试。 三个 routine 全部停用, token 已从云端配置中抹除。

剩下的可选路(未决)

分析那段做不了(需要付费 API key)。适合"报警秒到、分析等 Mac"的拆分。

一句话

观察名单里的股票单日涨跌超过 8% 时,自动分析原因推送到 Telegram 群;群里还能 @bot 拿知识库内容问答。

拍板记录(2026-08-06 与用户逐项确认)

决策点结论备选与否决原因
通道Telegram 群WhatsApp 官方 API 不支持发群,群 bot 只能走非官方途径,有封号风险
范围推送 + 问答 bot 一步到位
频率开盘后每 4 小时一次(实际=盘中一次+收盘后一次)原提议 15 分钟一次,用户降频
部署推送跑云端定时任务,问答 bot 跑 Mac全 VPS(月费+需单独 API key)、全 Mac(睡眠即停摆)均否决
前提知识库推私有 GitHub 仓库云端 agent 要读公司卡/台账;顺带解决"正本只有 Mac 一份、无备份"的风险

架构:两个独立的半边

半边 A:云端定时推送(不依赖 Mac)

Claude 云端定时任务(scheduled cloud agent),每个交易日跑两次:

去重状态存在仓库里:异动写入根目录 异动台账.md(带日期+触发价),下次跑先读它,同一标的同一天不重复报;从 8% 恶化到 15% 这类算"加剧",再报一次。台账由云端 agent 直接 commit 回 GitHub——符合"判断留痕"的宪法要求。

半边 B:Mac 常驻问答 bot

Python 进程(python-telegram-bot 库),launchd 开机自启、崩溃自动拉起:

新增纪律(GitHub 化带来的)

仓库有远程之后:本地 commit 完要 push;云端会 commit 异动台账,本地下次干活前 pull。冲突概率极低(云端只碰 异动台账.md),但交接说明里要写这条。

2026-08-06 决策变更:砍掉留痕

原设计要求异动分析追加进 异动台账.md 并提交进版本库。已取消,用户拍板: 「群里需要的是当日异动,知识库里是基本面」。

这是一条职责边界,不是妥协:群回答"今天发生了什么",知识库回答"我们怎么判断这家公司"。 把每日异动往台账里灌,只会用噪音撑坏一个本来该沉淀判断的地方。

连带影响:云沙箱推不回仓库这个已知缺陷,不再是缺陷——本来就不需要它写回。 routine 的工具白名单已去掉 Write/Edit,想写也写不了。

实际部署记录(边做边补)

私有仓库jiabinzeit-lab/ai-chain-research(2026-08-06 建,已验证 isPrivate)
bot@reaichainbot
群 id-5583599280(负数=群;正数是私聊,填错会变成只发给自己且看着完全正常)
本地凭据~/.异动哨兵.env,权限 600,在仓库外,不进 git
盘中 routinetrig_01Tq9hpRyECSuXWjYTgZi9GV — https://claude.ai/code/routines/trig_01Tq9hpRyECSuXWjYTgZi9GV
收盘 routine待盘中那只验通后再建
探针 routinetrig_01HKVAxjPQQzNJnd6f3z9xmU,已停用(跑一个多小时未回报,结论不明)

云端 token 的存放:云沙箱读不到家目录的凭据文件,所以 token 写在 routine 提示词里(存于用户自己的 Anthropic 账号,不进 GitHub)。由用户本人粘贴——助手被权限分类器拦住读取凭据,这个拦截是对的,没有绕过。 真泄漏时 BotFather 发 /revoke 十秒作废。

用户要亲手做的(无法代办)

  1. GitHub 账号 + 授权(建私有仓库、让 Claude 云端能访问)。
  2. Telegram 找 @BotFather 发 /newbot 建 bot,拿 token(约 2 分钟)。
  3. 建群、把 bot 拉进群。
  4. (可选)Mac 插电 + 设置防睡眠,只影响问答 bot 在线时长。

已知限制,明说

测试方案

分期施工

  1. GitHub 化:建私有仓库、推送现有历史、写进交接说明。(半小时,当天可完)
  2. 云端推送:哨兵脚本 + 定时任务 + 测试群跑通。(半天)
  3. Mac 问答 bot:bot 进程 + launchd + 测试。(半天)

每期独立可用:只做完第 1 期也白赚一个异地备份;只做完第 2 期推送就已上线。