TradeEye开发杂谈01丨论grill-me.skill对我的帮助

前言

这才是我真正意义上的第一个自己尝试自己玩所做的项目。之前的开发过程很杂碎,而且当时还没有自己的blog,于是就没有记录。今天开发了之前没做的、搁置了很久的内容。在这个过程中,我发现了一个事情——就像上司要和下属对接一样,在vibecoding的过程中,与ai对接也很重要。

本文将讲述我的部分开发心得,是随记所以也许没什么主旨。

正文

https://github.com/mattpocock/skills
如你所见,这是一个很厉害的项目,是一个大神把自己炼成skill的结果。我使用了其中的grill-me的内容,它可以让ai在了解我的需求之后 向我提出尖锐的问题,与我对接。
第一次使用的时候我真的感觉有点紧张,因为我真的感觉被一个严厉的前辈拷打了TwT

引用我们的对话。
*虽然这里对话的目的是完善另外一个项目(Chronos,我后续的文章会讲):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
我:"我需要制作一个能记录项目投入时间的vsc插件 我称之为chronos。要达到的目标是完善其功能 让其可以显示待机时长、活跃时长、agent运行时长。"

codex:"1. 定义先卡死:
你说的三个时长,精确定义是什么?
- `待机时长`:是“VS Code窗口打开但无键鼠输入”还是“系统级无输入”?
- `活跃时长`:是“有编辑行为”还是“窗口聚焦+有操作”?
- `agent运行时长`:是“发起到完成的墙钟时间”还是“真正执行中的时间(排队不算)”?

2. 事件来源要落地:
你现在能稳定拿到哪些事件?分别来自哪里?
- VS Code API(window focus、文本编辑、命令执行)
- 终端事件
- 你自己扩展里对 agent 的调用链 hook
没有事件来源就不要谈统计精度。

3. 状态机先设计,不然统计一定错:
请给出状态转移图(最少这几态):`Idle / Active / AgentRunning`。
我要你回答:
- AgentRunning 是否覆盖 Active(互斥)?还是并行维度?
- 从 Active 到 Idle 的超时阈值多少秒?为什么?
- 锁屏、最小化、切工作区、睡眠唤醒怎么处理?

4. 时间模型:
你打算用哪种计时策略?
- `tick累加`(每秒+1)还是`事件边界差值`(推荐)?
- 如何避免机器休眠后出现巨额脏时长?
- 时区和夏令时变化是否影响日汇总?

5. 持久化与口径:
- 数据存哪里:`globalState`、本地文件、sqlite?
- 统计按“自然日”还是“会话”切分?
- 跨窗口/多工作区是否去重?
如果同时开两个窗口,你会不会把活跃时长重复记两份?

6. UI目标别模糊:
你说“显示”,具体在哪显示?
- status bar(实时)
- webview/dashboard(明细)
- command palette(查询)
每个位置展示哪些字段、刷新频率多少?

7. Agent运行时长的真问题:
你的 `agent` 指的是哪个体系?
- 仅 Chronos 内置调用
- 还是要覆盖外部插件/CLI agent
如果不是你自己发起的 agent,你凭什么拿到准确开始/结束信号?

8. 验证方案必须可自动化:
给我最小可执行验证:
- 用假时钟/可控事件流回放
- 3个关键用例:持续活跃、长时间无操作、agent中途失败
- 断言输出精确到秒,允许误差范围是多少?

9. 失败与回滚:
- 统计错了怎么修复历史数据?
- 插件升级后数据结构变更怎么迁移?
- 一旦采集逻辑异常,是否降级为“只显示不写入”?

10. 现在给你硬约束:
请你先交一版“V1范围”回答,仅包含:
1) 单窗口
2) 本地统计
3) 三时长实时显示+当天累计
4) 不做跨设备同步
你按这个范围重写你的方案(不超过12行)。"

这一下解决了我之前所说“对自己的程序不熟悉”的问题。本来是我这个不懂程序的人“外行指导内行”,现在是ai反过来拷打我逼着我熟悉我的代码,这反而更让我有存在感了,写码更有动力了。还是蛮开心的。

在TradeEye的rss订阅开发过程中我也用到了这个办法。我通过这个方法与codex对接,不是单纯的一个指令“帮我实现什么功能”,而是按照一个格式:“已经做了什么-没有做什么-要改动什么-希望能达到什么目标”,这样我的返工就少了很多。
同时 我顺便解决了一个冗余:将dify的工作流直接集成进了项目。(我很喜欢奥卡姆剃刀的理论“如无必要勿增实体。”)当然,奥卡姆剃刀我在日后会展开谈谈——又给自己挖坑了。

很简短的一个心得。
是为结。
26/5/19深夜