关于 bot-process-control
bot-process-control 是面向 Gmail Commander 运维人员的操作技能,说明 Bot 和摘要任务的运行位置、健康检查方式,以及为何不能启动第二个轮询器。
主要功能
- 01说明已部署进程的职责
- 02操作前检查本地轮询器
- 03通过 Telegram /status 检查状态
- 04提示避免重复轮询
- 05列出可用的 Telegram 命令
适用场景
- 01检查已部署 Bot 是否响应
- 02避免启动冲突的本地轮询器
- 03查找适当的升级处理途径
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ terrylica/ cc-skills --skill bot-process-control安装后在 Claude Code 中输入/bot-process-control确认已加载。
附带文件references/evolution-log.md
详细介绍
Bot 进程控制
Gmail Commander bot 和定时摘要运行在哪里、如何确认它们运行正常,以及绝不能在工作站上启动什么。
自我演进技能:此技能会在使用过程中不断改进。如果说明有误、参数发生偏移,或需要采用变通方案,请立即修复此文件,不要拖延。仅针对真实且可复现的问题进行更新。
进程运行位置
这两个进程都不在工作站上运行。它们都运行在一台始终开机的 Mac mini 上的私有 Restate 租户中,并从私有仓库部署:
| 服务 | 角色 |
|---|---|
GmailBot | 管理 Telegram getUpdates 链(一个持久且会自行重新挂起的轮询),并分发每条更新 |
GmailBotChat | 使用此插件的 buildBot() 构建的 grammY bot,按每个聊天的顺序处理一条更新 |
GmailDigest | 每天多次向 Telegram 发送定时邮件摘要(由其自身实现,不属于此插件) |
GmailAuth | 根据部署密钥存储中的刷新令牌,按需生成 Gmail 访问令牌 |
启动、停止、重启、部署、读取日志、轮换密钥和重新进行 OAuth 授权,全部通过该仓库的运行手册完成。 此公开技能有意不包含主机名、部署命令或凭据路径。如果你无法访问该仓库,请停止操作并询问操作员。
笔记本电脑上的 launchd 作业 com.example.gmail-commander-bot 和 com.example.gmail-commander-digest 已于 2026-09-24 停用。不要重新创建它们的 plist、启动脚本或环境文件。
强制预检
步骤 1:确认本地没有进程在运行(只读)
echo "=== Local gmail-commander launchd jobs (expected: none) ==="
launchctl list | grep -F gmail-commander || echo "none"
echo ""
echo "=== Local gmail-commander plists (expected: none) ==="
ls ~/Library/LaunchAgents 2>/dev/null | grep -F gmail-commander || echo "none"
echo ""
echo "=== Local standalone bot process (expected: none) ==="
pgrep -fl "gmail-commander/scripts/bot.ts" || echo "none"
如果其中任何一项发现了相关内容,请报告给操作员,不要自行加载、卸载或终止进程:本地轮询器正在使用同一个 bot 令牌与租户竞争。
步骤 2:从用户侧检查已部署的 bot
唯一无需部署访问权限的检查方式:在 Telegram 聊天中向 bot 发送 /status。如果它回复了运行时间和计数器,就说明 GmailBotChat 正在处理更新。如果一分钟内没有回复,则说明轮询链或租户已停止运行——请通过运行手册升级处理。
绝不要启动第二个轮询器
scripts/bot.ts 仍包含独立的长轮询 main(),并由 import.meta.main 保护,因此导入 buildBot() 时绝不会启动轮询。不要使用生产 bot 令牌运行它。 Telegram 每个令牌只允许一个 getUpdates 消费者;第二个消费者会导致 Telegram 返回 409 Conflict,使两个轮询器都变得不可靠,并且租户检测到此冲突时会通知操作员。
此独立入口供此公开插件的其他安装使用,并使用各自的 bot 令牌。它会在 /tmp/gmail-commander-bot.pid 获取 PID 锁,并读取 插件 CLAUDE.md 中列出的变量。此插件不再附带用于它的进程监督器模板。
Telegram 命令
| 命令 | 说明 |
|---|---|
| /inbox | 显示最近的收件箱邮件 |
| /search | 搜索邮件(Gmail 查询语法) |
| /read | 按 ID 读取邮件 |
| /compose | 撰写新邮件 |
| /reply | 回复邮件 |
| /abort | 取消当前撰写或回复操作 |
| /drafts | 列出草稿邮件 |
| /digest | 立即整理最近 N 小时的邮件(默认为 6 小时) |
| /status | Bot 状态和统计信息 |
| /help | 显示所有命令 |
注意:
/abort会取消任何正在进行的撰写或回复会话。在流程的任何步骤都有效。
部署中的 OAuth 故障
当 Google 拒绝部署的刷新令牌(invalid_grant)时,GmailAuth 会通知运维人员。恢复需要在工作站上通过浏览器授权,并在部署中更新密钥,具体步骤都记录在私有运行手册中。CLI 在工作站上自行恢复 invalid_grant 时涉及的是另一个令牌,相关说明请参阅 gmail-access。
变更后检查清单
- YAML frontmatter 有效(描述中没有冒号)
- 触发关键词是最新的
- 路径模式使用 $HOME,而不是硬编码路径
- 未重新引入 launchd 模板、主机名或凭据路径
- 插件 CLAUDE.md 中的
buildBot()合约仍与scripts/bot.ts一致
执行后复盘
此技能执行完毕后,请在结束任务前进行复盘:
- 确定位置。 — 编辑前,找到此 SKILL.md 的规范路径。
- 哪里失败了? — 修正导致问题的指令。
- 哪些地方比预期更好? — 将其提升为推荐做法。
- 哪些内容偏离了实际情况? — 修正不再符合实际情况的脚本、参考资料或依赖项。
- 记录下来。 — 在演进日志中记录触发原因、修复措施和证据。
不要拖延。下一次调用会继承你留下的一切。