show-me-your-work

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Show me your work

展示你的工作过程

Keep one canonical log.
只维护一份权威日志。

The format

格式

A single TSV file, one row per decision. Cells stay single-line. Evidence is a pointer, not prose.
Copy
references/decision-log-template.tsv
(the header row) to start a clean log. Columns:
  • ts. ISO8601 timestamp.
  • phase. The phase or workstream.
  • decision. What was chosen or done, one line.
  • why. The reason in plain words. If a principle drove it, say it plainly, not as a jargon tag.
  • evidence. A link or path that proves it: commit SHA, PR number,
    file:line
    , or an artifact, trace, or screenshot path. Never a paragraph.
  • result. The outcome or predicate state:
    tests green
    ,
    reverted
    ,
    pixel-diff 0
    ,
    INCONCLUSIVE
    ,
    open
    .
An example, plain-spoken so a reviewer reads it at a glance.
ts	phase	decision	why	evidence	result
2026-05-24T09:02:00Z	frame	counted the work first, about 100 components and roughly 75 hours	wanted to know the size before starting a long run	commit 3a9f1c2	found 5 things to sort out before starting
2026-05-24T09:40:00Z	harness	took screenshots of the old version before changing anything	so we can compare old against new and catch any visual change	scripts/snapshot.sh, baseline/	saved 120 reference screenshots
2026-05-24T11:15:00Z	widget	moved the widget styles over without changing how it looks	keep the change small and the result identical	commit 7c21e0a, pixel-diff 0	looks identical, tests pass
2026-05-24T12:30:00Z	widget	threw out a helper's work because its screenshots were blank	checked the real files instead of trusting its summary	worktree reset	reverted, tightened the instructions for next time
使用单个 TSV 文件,每个决策占一行。各单元格保持单行。证据应是指向具体内容的指针,而不是段落式说明。
复制
references/decision-log-template.tsv
(仅表头行),以创建一份干净的新日志。列包括:
  • ts. ISO8601 时间戳。
  • phase. 阶段或工作流。
  • decision. 选择或执行了什么,保持为一行。
  • why. 用直白语言说明原因。如果某项原则驱动了决策,就直说,不要写成术语标签。
  • evidence. 能够证明该决策的链接或路径:commit SHA、PR 编号、
    file:line
    ,或 artifact、trace、screenshot 路径。绝不能写成长段落。
  • result. 结果或判定状态:
    tests green
    、
    reverted
    、
    pixel-diff 0
    、
    INCONCLUSIVE
    、
    open
    。
下面是一个采用直白语言的示例,便于审阅者一眼看懂。
ts	phase	decision	why	evidence	result
2026-05-24T09:02:00Z	frame	counted the work first, about 100 components and roughly 75 hours	wanted to know the size before starting a long run	commit 3a9f1c2	found 5 things to sort out before starting
2026-05-24T09:40:00Z	harness	took screenshots of the old version before changing anything	so we can compare old against new and catch any visual change	scripts/snapshot.sh, baseline/	saved 120 reference screenshots
2026-05-24T11:15:00Z	widget	moved the widget styles over without changing how it looks	keep the change small and the result identical	commit 7c21e0a, pixel-diff 0	looks identical, tests pass
2026-05-24T12:30:00Z	widget	threw out a helper's work because its screenshots were blank	checked the real files instead of trusting its summary	worktree reset	reverted, tightened the instructions for next time

Logging a row

写入一行日志

Write each entry the way you'd tell a teammate what you did. Plain words, concrete actions, no AI speak or abstract jargon (the unslop skill applies to log text too).
Use the helper
scripts/log.sh <logfile> <phase> <decision> <why> <evidence> <result>
. It stamps
ts
, writes the header on first use, strips stray tabs/newlines, and prefixes any cell starting with
=
,
+
,
-
, or
@
with a single quote. A bare
printf
appending a row works too, but mind those same bytes if cells come from generated or user-supplied text.
Log decision points and checkpoints, not every action: a fork chosen, a unit completed with its verification result, a pivot or revert with its trigger, a blocker surfaced, a gate fixed. For loop runs, one row per iteration. Skip the trivial and self-evident.
A run is one agent conversation, including its later turns and any summary of it. A pickup, a replacement agent, or a new chat starts a new run. When a run adds to a log that already has rows, its first row has phase
start
, and so does its first row after another run's
start
row. So a run that comes back to a log in a later turn first reads the log's last rows to see whether another run wrote since. A
start
row names the
ts
range of the rows before it that this run did not write, and its evidence names this run, such as its agent id. Use phase
start
for nothing else.
像向同事说明你做了什么那样撰写每条记录。使用朴素直白的措辞和具体行动,不要使用 AI 腔调或抽象术语(日志文本同样适用 unslop skill)。
使用辅助脚本
scripts/log.sh <logfile> <phase> <decision> <why> <evidence> <result>
。它会自动填入
ts
时间戳,在首次使用时添加表头,移除多余的制表符和换行符,并为任何以
=
、
+
、
-
或
@
开头的单元格添加单引号前缀。也可以使用单纯的
printf
追加一行,但如果单元格内容来自生成文本或用户输入文本,也要注意采用相同的字节处理方式。
记录决策节点和检查点,而不是每个动作:选择了某个分支、连同验证结果完成一个工作单元、发生方向调整或回退及其触发原因、发现阻塞项、修复某个关卡。对于循环运行,每次迭代记录一行。跳过琐碎且显而易见的内容。
一次 run 指一段 agent 对话,包括后续 turn 及其摘要。接续执行、替换 agent 或开启新 chat,都会开始一次新的 run。当某次 run 向已有日志追加内容时,其第一行必须使用 phase
start
;同理,在另一次 run 的
start
行之后,本次 run 的第一行也必须使用 phase
start
。因此,如果某次 run 在后续 turn 中回到已有日志,应先读取日志末尾若干行,确认自那以后是否有另一次 run 写入。
start
行需要说明其前面那些并非由本次 run 写入的行所对应的
ts
范围,并在 evidence 中注明本次 run 的标识,例如 agent id。phase
start
不得用于其他用途。

Where it lives

日志的存放位置

By default the log is a working artifact, not committed. Keep it at
decisions.tsv
in the work dir, or
.audit/<task-slug>.tsv
when several efforts run at once, and leave it out of git.
Commit it only when the work is ambitious enough that a reviewer needs the trail to trust the result.
默认情况下,该日志是工作产物,不提交至版本库。将其放在工作目录下的
decisions.tsv
,或同时开展多项工作时放在
.audit/<task-slug>.tsv
,并将其排除在 git 之外。
只有当工作足够复杂、以至于审阅者需要借助该轨迹才能信任结果时,才将日志提交至版本库。

Rules

规则

  • Append-only. A wrong call gets a new row that supersedes it. Never edit or delete history.
  • Prefer evidence produced by committed scripts over hand-made one-offs (the encode-lessons-in-structure principle skill).
  • 仅追加。错误决策也要新增一行来取代它。绝不编辑或删除历史记录。
  • 优先使用已提交脚本生成的证据,而不是临时手工制作的一次性证据(这遵循 encode-lessons-in-structure 原则 skill)。

Audit the log against the transcript

根据 transcript 审计日志

At the end of the run, before handing back, check the log told the truth. Read this run's transcript under the active workspace's
agent-transcripts/
directory (the system prompt names the path). Don't glob across
~/.cursor/projects/*/
. That reads unrelated private chats. Walk this run's rows against what actually happened. Each stretch of them begins at one of this run's
start
rows, or at the first row if this run created the log, and ends at the next
start
row of another run:
  • Check that every row maps to a real decision or action.
  • Check that each row's evidence resolves and shows what the row claims.
  • A fork, pivot, or abandoned approach that shaped the work but isn't logged is a gap. Add it.
Correct the log, not the story. The audit never edits or removes a row, even an invented one. When a row records neither a real decision nor a real action, or its claim or evidence is wrong, add a row that supersedes it with what actually happened and a pointer that resolves. This audit does not check rows outside this run's stretches. If this run's own work shows one of them is wrong, supersede it like any wrong call.
在 run 结束、交付结果之前,检查日志是否如实记录了过程。读取当前工作区
agent-transcripts/
目录下本次 run 的 transcript(具体路径由 system prompt 给出)。不要在
~/.cursor/projects/*/
目录下使用 glob 搜索,否则会读取无关的私人聊天。将本次 run 的各行与实际发生的事情逐项核对。每段记录都始于本次 run 的某个
start
行;如果本次 run 创建了日志,则从第一行开始。每段记录止于另一次 run 的下一个
start
行:
  • 检查每一行是否都对应真实的决策或行动。
  • 检查每一行的证据是否都能解析,并支持该行所做的陈述。
  • 对工作产生影响但未记录的分支、方向调整或被放弃的方案属于缺口。将其补充记录。
修正日志,而不是修正叙述。审计过程绝不编辑或删除任何行,即使是虚构的行也不例外。当某一行既未记录真实决策或行动,或其陈述、证据存在错误时,应新增一行,用实际发生的情况和能够解析的证据指针取代它。本次审计不检查这些区段之外的行。如果本次 run 自身的工作表明其中某行有误,则像处理任何错误决策一样,新增一行来取代它。

Cross-model review of the trail

对轨迹进行跨模型审查

Before handing back, spawn a subagent on a different model family from the one that did the work. Self-review is not a substitute. The subagent reads the audit trail and the run's transcript, then flags what the user should pay attention to. Not a redo of the work, a scan for what's suboptimal or risky.
  • Decisions logged with weak or absent evidence.
  • Verification steps skipped or claimed without proof in the transcript.
  • Choices that look risky in hindsight (premature, scope-creeping, papering over a symptom).
  • Gaps the user would otherwise miss on a casual skim.
Every reply for a run that produced a trail ends with an "Attention" section. Lead with the reviewer's model on its own line (
reviewed by <model>
), then list each flag pointing to specific rows or moments. "No flags" is a valid value. The model name is not.
交付结果之前,启动一个采用不同模型家族的 subagent 来审查该轨迹。自审不能替代跨模型审查。subagent 读取审计轨迹和本次 run 的 transcript,然后标记用户应当关注的内容。其目的不是重做工作,而是扫描次优或存在风险之处:
  • 决策记录所依据的证据薄弱或缺失。
  • transcript 中跳过了验证步骤,或在没有证明的情况下声称已经验证。
  • 事后看来存在风险的选择,例如过早实施、范围蔓延或掩盖症状。
  • 用户在粗略浏览时容易错过的缺口。
对于产生了轨迹的 run,每次回复都必须以一个“Attention”部分结束。第一行单独写明审阅者的模型(
reviewed by <model>
),然后列出每个需要关注的问题,并指向具体的日志行或关键时刻。“No flags”是有效值;仅给出模型名不是有效值。

Reviewing the trail

审查轨迹

Read top to bottom, follow the evidence pointers, spot-check. GitHub renders a committed TSV as a table.
column -s$'\t' -t decisions.tsv
renders it in a terminal.
自上而下阅读,循着证据指针逐一核验并抽查。GitHub 会将已提交的 TSV 渲染为表格。
column -s$'\t' -t decisions.tsv
可在终端中将其渲染出来。

Composing this skill

编写此 skill

Other skills route their audit trail here instead of inventing one. Reference it by name and let it own the format. Don't restate the columns.
其他 skill 应将各自的审计轨迹汇入这里,而不是另建一套。请按名称引用它,并由它统一维护格式。不要重复列出各列。