用 Jules 写了 Jules Bot,而它成了意外之喜
Jules 好用,但是前端有点奇奇怪怪。
不过最近乱七八糟事情太多 + 疯狂拖延,这篇写出来可能就赶不上了。
What
Jules 是 Google 推出的一个 Coding Agent,熟悉我的朋友们大概都知道我最近非常喜欢用这个「轮椅」。虽然推出的时间挺早,但是我真正高强度用起来其实已经差不多是 OpenClaw 火起来的时候了。
于是就眼馋隔壁 OpenClaw 的 bot,看着真好用啊 => 一时兴起拿 Jules 给它自己写了一个。因此依然的质量不保证。
How
Jules 有一套 REST API,可以在自己生成 token 之后使用 http 调用,这就简单了。
我首先做的第一件事情是:让 Jules 自己爬 API 并且复制到仓库的文档当中,这样后面实现具体功能过程中就可以直接引用仓库中的文档了。
根据文档来看,Jules 的核心就是 Session,也就是在 Jules 前端中的 “Task”。
A session represents a unit of work where Jules executes a coding task on your repository.
于是功能就是围绕如何管理 Session,某种程度上也就是「增删改查」:
- 增:新建 Session,也就是在 Jules 前端选 Repo 敲需求。使用
/new新建/cancel取消。 - 删:删除 Session 事实上不是我们关心的问题,这里没有实现。
- 改:和数据库中的不同,这里的「改」是在 Session 中进行多轮对话,有了 Session ID 之后,使用 Send a Message 的 API 就能追加对话,直接依靠 IM 的引用或者说回复功能来实现。
- 查:这里没有实现很复杂的功能,也就是列出所有的 Session。直接通过
/sessions来实现。
在这些功能之外,需要 /check 来检查权限、密钥等设置是否正确,/status 用来检查跟踪中的任务的进度。
以上是大致上的核心功能,当然不完全局限于这些,比如还有跟随在信息中的 Button 实现其他功能,比如 Approve Plan,查看消息,追踪 Session 等功能。
KV
我是打算搞 Severless 那一套的,倒不是我多支持,答案是我没有服务器。
但是 Jules 的交互完全的没有状态也很难受,比如 /new 要多步骤的流程、跟踪 Session 进度等功能没有状态就太痛苦了,于是在 LLM 的建议下用了 Cloudflare Worker + KV 的方式。所谓 KV 也就是 Key-Value 键值对,免费版的额度已经够我单人使用。
KV 主要用在了这样几个地方:
- 用户偏好。持久化时区设置。
- 长 Callback Data 的压缩和映射。某些服务会有 64 bytes 的回调数据长度限制,于是用 KV 作为中转站。
- 状态记录。不管是用户
/new的多步向导还是追踪正在运行的 Session 都需要在 KV 中进行记录方便追踪或者查询。 - 长消息合并。太长的消息会出现物理截断,导致一条变两条。这里通过碎片池、锁存器等机制实现合并被截断的长消息。
预设键盘
我其实是想使用一些 IM 花里胡哨的预设键盘功能的,但是用了之后发现这个更多是个快捷输入,做起来非常麻烦,不如直接 / 命令来的爽快,于是放弃了这个思路。
问题
- 通过 API 新建 Session 缺少 Interactive Plan。
这是一个非常大的问题:Interactive Plan 是个非常好的功能,通过多轮的对话来确定需求再确定最后的实施计划。但是 Jules 的 API 当中并没有这个选项,虽然可以通过一些 prompt 来在其他模式中模拟 Interactive 的方式,但还是没有直接在网页上来的方便。 - 中文 Markdown 带来的消息渲染问题。 这个就很无奈了,我也不知道到底是哪个环节的问题,没有进行那么详细的测试,总之差不多能看懂就算了。
意外之喜
但是 Jules(至少曾经)有一个问题:前端会「吞消息」。其实 Jules 给我发了两条消息,但是前端只显示了最后一条,导致整个沟通流程断掉。而 Jules bot 通过 API 可以查看到两个消息的具体内容。可以说完全的意外之喜,而且帮大忙了。
![]() |
![]() |
现在 Jules 又有了一个另外的问题:疯狂自动刷新。似乎隔几分钟就要自己刷新一次,导致在网页上 prompt 还没打完网页自动刷新全丢了,于是直接切换到 bot 里聊天,你前端爱咋刷新咋刷新吧。

