关键词:Telegram Bot、Codex CLI、远程执行、长会话、定时任务、文件/补丁、skills 闭环、记忆体压缩
背景:OpenClaw 很火,但安装部署调试不理想
- 安装部署链路复杂,环境依赖多,调试不顺手
- 状态不可见,出错定位困难
- 能力本质上来自后端的 CLI/Agent(比如 codex cli),OpenClaw 只是“多了一个外部交互渠道”
- 我更想要一个“轻量、可控、可扩展、我自己能维护”的版本于是我们做了一个最小可用但可迭代的方案:mybot。
目标
- 一个“24 小时在线为你打工”的智能体壳
- 像 OpenClaw 一样好上手:配置简单、快速启动、调试友好。
- 长期可用:会话续聊、自动压缩、沉淀技能、定时任务自动产出。 一句话:把 Codex CLI 的能力“远程化 + 常驻化 + 产品化”。
设计思路:通道、会话、适配器三层解耦
我们把系统拆成 3 层:
- 通道层(Telegram):只管收消息、发消息、文件上传、菜单命令。
- 会话层(Session):按 chat_id 管理“一个人一个会话”,串行输入,支持 cancel、status、new。
- 适配器层(Adapter):对接具体 CLI(默认 codex),把输入输出统一成事件流。
为什么默认不用 Codex 的 TUI(interactive)
最早我们尝试 PTY 启动 codex TUI,但很快踩到真实世界的坑:
macOS/环境限制导致
pty.Start报operation not permittedcodex TUI 会发光标位置查询(DSR),PTY 不会自动响应,报
cursor position could not be read输出包含大量控制字符、alternate screen、光标移动,Telegram 不适合承载 解决路线有两条:
继续模拟终端能力(实现更多 VT/xterm 协议)——复杂且脆弱
最终我们选择第二条:默认 exec(JSONL) 模式。
实现要点:从 “能跑” 到 “像产品”
下面按功能演进讲关键实现点。
1) .env 一键配置 + 覆盖开关
为了“快速上手”,我们做了:
程序启动自动加载
.env- 但提供
DOTENV_OVERRIDE=1强制.env覆盖,解决“旧 token 覆盖导致 Unauthorized”的经典坑 配置示例(节选): CODEX_CMD=codexCODEX_DRIVER=execCODEX_ENABLE_SEARCH=1(资讯类任务需要)
并提供
TELEGRAM_LOG_UNKNOWN=1用于首次获取 chat_id。- 但提供
3) Codex exec(JSONL) 适配:稳定输出 + 可解析事件
exec 模式典型输出:
| |
- 解析 turn.completed.usage 用于后续“记忆体压缩”的触发
- 将噪声 stderr(如内部 rollout 报错)过滤掉,保持 Telegram 输出干净
4) 会话续聊:thread_id 持久化
为了让你“像和一个人聊天一样”续聊,我们把 thread_id 持久化:
- 保存到 LOG_DIR/state.json
- 下次启动自动 codex exec resume <thread_id> …
- /new 会清掉 thread_id,开始新对话
5) 文件/patch:上传即上下文(并且可安全删除)
你把文件丢给 bot:
bot 回显相对路径 uploads/xxx.txt
对 .patch/.diff:先让 codex 总结改动,不自动 apply(防止破坏性操作)
/uploads 列出最近上传
支持自然语言删除“删除这个 xxx.txt”(仍然走同一安全约束)
6) Telegram 菜单命令:像 OpenClaw 一样可发现
为了让“能力可发现”,我们在启动时调用 Telegram 的 setMyCommands:
- /new /status /cancel
- /skills
- /schedule
- 存储到 LOG_DIR/schedules.json
- 支持 /schedule ls/add/rm/on/off/run 资讯类任务通常需要搜索,我们加了 CODEX_ENABLE_SEARCH=1 自动为 codex 加 –search。
8) 记忆体:对话自动压缩(摘要 + 长期规则 + 偏好)
长期使用必然遇到“上下文膨胀”:
- 你聊得越多,token 越大
我们的策略:
- 通过 JSONL 的 turn.completed.usage 累计 tokens/turns
- summary(对话摘要)
- durable_rules(用户反复强调的长期规则)
- 落盘到 LOG_DIR/memory.json
这一步让 bot 从“能聊”变成“能长期为你工作”。
9) skills 升级闭环:从经验到可复用资产
最后一步是“把经验沉淀成可复用能力”。
- 自动压缩后生成 skill_ideas
- 你在 Telegram 输入:/memory ideas 查看 idea 列表
- 你执行:/skillify
功能演示(真实对话流)
1) 每天 9 点 AI 资讯
用户:
scheduled: id=… daily 09:00
2) 上传文件作为上下文
用户上传 23131.txt
bot:
saved: uploads/20260209_131717_23131.txt
随后 codex 会基于文件内容回应或总结。
3) 安全删除上传文件
用户:
/delete 23131.txt 用户:
- …
- … 用户: /skillify ai-news 1 bot: installed/updated skill: ai-news (SKILL.md)
为什么这个形态值得做
- Telegram 是最强的外部入口之一:低门槛、跨平台、随时随地。
- Codex CLI 是强执行器:能写代码、改文件、跑命令、做工程任务。
- 两者结合,等于你有了一个“随时可召唤的远程工作搭子”。
而且它比很多“套壳产品”更可控:
- 所有数据、日志、文件都在你机器上
- 适配器可扩展,可替换为其他 CLI
- 安全策略(allowlist、删除限制、危险操作)可以按你偏好收紧
未来规划(下一阶段)
我接下来想把它从 “MVP+” 进化到 “稳定可长期运行”的版本,优先级大致如下:
- 调度能力增强
- 支持时区配置(而不是默认 time.Local)
- 支持工作日/周末、每周/每月、一次性任务
- 任务失败重试、指数退避、告警
- 更强的“文件工作流”
- 上传 patch 提供 /apply:预览 diff、确认后再 apply
- 文件摘要缓存(避免每次都读同一文件)
- 更严格的安全模型
- 将“破坏性操作”变成必须二次确认的指令
- 对 codex 输出的“建议执行命令”做拦截/审批
- skills 市场化/版本化
- CHANGELOG.md 自动维护
- /skillify –preview 先预览再落盘
- skill 的依赖/适用范围描述更结构化
- 多适配器支持
- cloudcode / qoder cli 适配器
- 统一 exec/event 协议
总结
这个项目的本质不是“再造一个 AI Bot”,而是:
- 用 Telegram 解决“随时随地交互”
- 用 Codex CLI 解决“强执行能力”
- 用记忆体 + skills 闭环解决“长期可用与可进化”
最终得到一个真正能 24 小时在线为你打工的智能体。
如果你也在用 codex cli 或类似工具,强烈建议你做一层“外部入口 + 会话 + 资产沉淀”的壳:你会发现生产力不是线性提升,而是直接换了工作方式。
