1. 先说问题
现在的 AI Agent 跑一长串 shell 命令。挂了之后你问它"刚才做了什么"——它能糊弄你,但自己不知道。shell history 只管命令不管输出。git reflog 只管 ref 移动不管为什么。script / asciinema 录制终端但不结构化。
2. 解决方案:JSONL 就够了
解决这个问题不需要 MCP server、不需要 LangChain、不需要 LLM。只需要一个 JSONL 文件。exec-trail 就做这一件事——每条 shell 命令跑完自动记录成一行 JSONL:step_id、时间戳、命令、工作目录、exit_code、stdout、stderr、env_hash。
3. 三条命令搞定
exec-trail record -- make test exec-trail read exec-trail replay <step-id>4. 零依赖 · 纯 stdlib · Python 3.9+
16 个测试全部真实 I/O,零 mock。clean Python,不依赖任何外部库。
5. 关键设计决策
- env 只存 hash 不存值:env 里有 AWS_SECRET_ACCESS_KEY。exec-trail 记录"环境形状变了",但绝不泄漏密钥。测试强制验证。
- replay 不验证 stdout:date 每次不同,curl 返回数据可能变了。只验证 exit_code。要求 stdout 一模一样的 replay 是谎言。
- 文件格式就是 API:JSONL 八个字段是全部契约。不搞插件系统,不预留扩展口。
- 没有 rephrase 选项:没有 --format(JSONL 就一种格式),没有 --verbose(用 jq 自己格式化就行)。
- 单文件核心:__init__.py 是整个库,__main__.py 是 CLI 薄壳。
6. 如果你做 AI Agent、自动化脚本、CI/CD 链路
每次 shell 执行不可追溯就是裸奔。exec-trail 让你闭上眼睛前先写一行记录。
GitHub: https://github.com/Glittering/exec-trail
pip install exec-trail
16 tests, no mocks, zero deps. star 一个,PR 欢迎——但先读 DESIGN.md 的铁律。