针对 Kimi Code CLI 的新增或变更功能,规划并执行可重复的端到端冒烟测试。从 git diff 推断功能边界,读取相关文档和代码,设计测试 prompt,以 --print 非交互模式运行本地 CLI,检查进程退出码和 session 产物,总结预期与实际行为之间的差异。发现问题时自动启动多路并行探查以定位根因。
冒烟测试是运行时验证,不是写完 prompt 或读完代码就结束。必须实际执行、实际检查产物。
动手之前,先从代码变更推断功能边界:
git diff main --name-only
git diff main --stat
根据变更文件集合,明确写下:
如果功能涉及状态、异步、审批流或时序敏感逻辑,默认认为单条 prompt 不够。
读取定义该功能真实行为的最小文件集合:
不要信任过时的 prompt 示例。先从代码或当前文档重建真实的工具接口。
默认覆盖三个场景:
每个场景记录:
目标前置准备prompt 策略成功信号失败信号需要检查的产物如果功能存在竞态条件,必须显式标注时序。用长时间运行的命令或刻意的等待来制造时序窗口,不要用"快速再跑一个"这种模糊说法。
默认采用多轮流程:
仅对无状态的简单功能使用单轮 prompt。
多轮测试时,每一轮单独调用 CLI,在两轮之间检查上一轮的输出和产物,再决定下一轮的 prompt。不要把多轮 prompt 一次性塞进 stdin——那是盲写,无法根据上一轮结果调整。
测试时,显式要求 agent 先列举当前可用的工具,不要臆造历史工具名。可复用的 prompt 模板见 references/prompt-patterns.md。
使用 /tmp 下的一次性目录作为 --work-dir,实现 session 隔离。CLI 的 session 路径由 ~/.kimi/sessions/<md5(work_dir)>/ 决定,不同的 work-dir 自动产生独立的 session 命名空间,不会污染正常项目的 session。认证状态保留在 ~/.kimi 下,无需额外配置。
SMOKE_DIR="$(mktemp -d /tmp/kimi-smoke-XXXXXX)"
如果功能需要仓库上下文(读取代码、git 信息等),把仓库文件复制或软链到 SMOKE_DIR。如果功能会编辑文件,绝不要用活跃仓库作为 work-dir。
绝大多数场景使用这个模式:
uv run python -m kimi_cli.cli \
--print \
--prompt "你的测试 prompt" \
--work-dir "$SMOKE_DIR"
echo "exit_code=$?"
--print 会自动启用 --yolo(自动批准所有操作),适合无人值守的冒烟测试。
执行后必须先检查退出码:非零表示 CLI 本身崩溃或超时,应优先排查进程级错误,再看 session 产物。
当默认方式不满足需求时,按需选用:
cat <<'PROMPT' | uv run python -m kimi_cli.cli --print --input-format text --work-dir "$SMOKE_DIR"--output-format stream-json,输出逐行 JSON,便于程序化解析--quiet,等价于 --print --output-format text --final-message-onlySMOKE_DIR、最终 session 目录(可通过 inspect_session.py 定位)、功能特定的输出文件。执行过程中维护一份简短的运行日志:
不要仅凭 assistant 的最终文本推断正确性。运行时文件和工具结果才是事实来源。
首先检查:
~/.kimi/sessions/.../context.jsonl~/.kimi/sessions/.../wire.jsonl使用 scripts/inspect_session.py 查找并汇总最新 session:
uv run python .agents/skills/feature-smoke-test/scripts/inspect_session.py --share-dir ~/.kimi
脚本退出码含义:0 = 正常汇总,1 = session 目录缺失或无法解析。
如果功能会创建后台任务、通知或附属文件,直接检查这些文件,不要只依赖模型摘要。
将结果分为三类:
对于每个 bug 或回归,记录:
当发现与预期不符的行为时,不要停在报告层面。启动并行探查流程定位根因:
针对每个发现的问题,同时启动多个独立的探查方向(使用 Agent 工具并行执行)。根据问题的具体表现自行判断最有价值的探查角度,常见方向包括但不限于:
不必机械地覆盖所有方向。根据 session 产物中的具体异常信号,选择最可能命中根因的 2-3 个方向并行展开。
每条探查方向独立汇报:
汇总所有探查结果后,输出: