Getting Started With Claude Code and Managing Context: Install, Writing CLAUDE.md and "Trim Until You Can't", Permission Modes, Plan Mode's "Explore, Then Plan, Then Write", /clear /compact /rewind, Giving Claude a Verifiable Check
Install Claude Code, write the first CLAUDE.md for your own project, learn Plan Mode's explore-then-plan flow, manage context with /clear /compact /rewind, and give Claude a check it can run on its own.
今日目标
- 能装好 Claude Code 并说清 CLAUDE.md 该写什么、不该写什么
- 能用 Plan Mode 走完「探索、计划、实现」并切换合适的权限模式
- 能在会话里用 /clear /compact /rewind 管理上下文,并给 Claude 一个可验证的检查
前两天你在跟搭档「说话」,今天开始它会「动手」:读你的文件、跑你的命令、改你的代码。会动手的搭档更需要交代清楚,也更需要一份入职手册。读完做完实验,回到顶部勾掉三条目标。
小白版讲解
安装与第一次对话:Claude Code 是一个会动手的搭档
聊天窗口里的 Claude 像一个只能隔着玻璃给你出主意的顾问:你把代码贴给它,它把建议贴回来,复制粘贴的活全在你这边。Claude Code 是把这位顾问请进了你的终端——它能自己 ls、自己 cat、自己改文件、自己跑测试、自己看报错再改。你从「复制粘贴的中间人」变成了「交代任务、审核结果的人」。
安装只要一条命令。macOS / Linux / WSL 用官方安装脚本,Windows 用 PowerShell 的对应版本;也可以走 Homebrew 或 npm:
# macOS / Linux / WSL(推荐,会自动更新)
curl -fsSL https://claude.ai/install.sh | bash
# 或者
brew install --cask claude-code
npm install -g @anthropic-ai/claude-code # 需要 Node 22+
# 验证
claude --version
claude doctor # 检查安装与配置健康度然后进到任意一个项目目录敲 claude,第一次会让你登录(需要 Pro / Max / Team 账号,或者设了 ANTHROPIC_API_KEY),之后就进入对话。先别急着让它改东西,问几个你会问新同事的问题:「这个项目的测试怎么跑?」「日志是怎么打的?」「加一个新接口要改哪几个文件?」你会看到它自己去翻文件、读 package.json、grep 关键字,然后给出带文件路径的回答。这就是「会动手」的第一层含义:探索是它自己做的,不用你先喂。
第二层含义要等到它开始改代码——那时候你会立刻面对两个问题:它凭什么知道我们项目的规矩?它每一步都要问我一遍吗?接下来两节分别回答。
CLAUDE.md 是入职手册:写什么、不写什么、删到不能再删
新同事入职第一天,你不会把整个代码库讲一遍,而是给他一页纸:怎么起服务、怎么跑测试、我们不用哪些写法、提交信息用什么格式。这一页纸就是 CLAUDE.md——项目根目录下的一个 Markdown 文件,Claude Code 每次开会话都会先读它。它就是 D1 讲的「名片」在 Claude Code 里的形态,只是发名片的人从「产品」变成了「项目」。
先让 Claude 帮你起个草:在项目里跑 /init,它会扫一遍代码库,生成一份包含构建命令、测试方式、目录约定的初稿。这份初稿是起点,不是终点,因为它会写进很多 Claude 自己读代码就能推出来的东西。接下来才是今天最重要的动作——删到不能再删。对每一行问同一个问题:「删掉这行,Claude 会不会犯错?」不会,就删。判据表:
| 留下 | 删掉 |
|---|---|
Claude 猜不到的命令(pnpm test:db 要先起 docker) | 读 package.json 就能看到的脚本名 |
| 和默认习惯不同的代码风格(我们不用 default export) | 语言本身的常规写法 |
| 测试怎么跑、跑哪一部分(只跑单文件,别跑全量) | 逐个文件的功能说明 |
| 仓库礼仪(分支命名、提交信息格式) | 「写干净、可维护的代码」这类废话 |
| 项目特有的架构决定与原因 | 经常变的东西(当前 sprint 目标) |
| 环境怪癖(必须设某个环境变量) | 大段 API 文档(放链接) |
为什么要这么苛刻?因为 CLAUDE.md 每次会话都完整进入上下文窗口——它是你每次请求都要付的「固定成本」,而且越长越没用:规则一多,真正重要的那几条就被淹没,官方文档的原话是「臃肿的 CLAUDE.md 会让 Claude 忽略你真正的指令」。经验值是 200 行以内。如果某条规则 Claude 老是不遵守,第一反应不是加粗,而是看文件是不是太长了。
还有几个位置上的细节:项目级放 ./CLAUDE.md 或 ./.claude/CLAUDE.md,跟着 git 走,全组共享;个人偏好放 ~/.claude/CLAUDE.md,对你所有项目生效;只属于你、不想提交的放 ./CLAUDE.local.md 并加进 .gitignore。子目录里的 CLAUDE.md 不会一开始就加载,而是 Claude 读到那个目录的文件时才带进来——大仓库靠这个分层。写完用 /context 看一眼「Memory files」列表,确认文件真的被加载了。
权限模式:从每步都问到放手自动,四档怎么选
搭档要改文件、要跑命令了,你希望它每次都举手问一下,还是放手让它干?Claude Code 把这个选择做成了权限模式,按 Shift+Tab 循环切换,状态栏会显示当前是哪一档:
- Manual(配置值
default):改文件、跑命令、调外部工具之前都问你。最安全,也最烦——第十次点「允许」的时候你已经不在审了,只是在点。 - acceptEdits:改文件不问,跑命令仍然问。适合「我信它写代码,但命令我要看一眼」。
- plan:只读。它能读文件、跑只读命令、回答问题、写计划,但不能改任何东西。下一节的主角。
- auto:不问你,改由一个独立的分类器模型审每一步,拦住看起来危险的(范围扩大、碰未知基础设施、被恶意内容驱动的动作),其余放行。Pro / Max / Team 计划的交互式会话默认就是它。
还有两档主要给自动化用:dontAsk(不在白名单里的一律拒绝,适合锁死的 CI)和 bypassPermissions(全部放行,只在隔离的沙箱里用)。这两档 D5 讲进 CI 时再展开。
比「选哪一档」更实用的是两个减少打扰又不放弃控制的工具:用 /permissions 把你信得过的命令加进白名单(比如 pnpm lint、git commit),用 /sandbox 开操作系统级的文件与网络隔离,让 Claude 在围栏里自由跑。白名单的语法值得记住一个例子:Bash(git diff *) 里那个空格很重要,没有空格的 Bash(git diff*) 会把 git diff-index 也放进来。
Plan Mode:先探索再计划再写,用示例任务走一遍
让搭档一上来就写代码,最常见的结果是「代码很漂亮,但解决的是另一个问题」。好的协作是分三步:先看清现状,再商量方案,最后动手。Plan Mode 把这三步做成了一个开关:按 Shift+Tab 切到 plan,或者一开始就 claude --permission-mode plan 启动——在这个模式下 Claude 只能读不能写,你可以放心让它到处翻。
用示例任务走一遍。第一步探索,在 plan 模式下说:
读一下 src/routes/todos.ts 和 test/ 目录,搞清楚现在 POST /todos 是怎么处理请求体的,
测试用的是什么框架、怎么跑。先别改任何东西。第二步计划:
我想给 POST /todos 加输入校验(title 必填 1–200 字,dueAt 可选且必须是 ISO 日期,
不允许客户端传 id 和 done),并补对应的单元测试。要改哪些文件?校验失败的响应格式怎么定?
写一份计划。它会给出一份带文件清单和步骤的计划。这时按 Ctrl+G 可以在你的编辑器里直接改这份计划——多数时候你会删掉一两步、改一个命名。第三步实现:退出 plan 模式(批准计划或再按 Shift+Tab),然后:
按你的计划实现。先写失败的测试,再实现校验,跑 pnpm test 直到全部通过。第四步提交:「用一句描述性的提交信息提交」。四步走完,一个 PR 就出来了。Claude 最终产出的核心改动,两种技术栈大致是这个样子:
import { Router } from 'express'
import { z } from 'zod'
// 只声明客户端可以传的字段;id 与 done 不在 schema 里,传了也会被丢掉
const CreateTodo = z
.object({
title: z.string().trim().min(1).max(200),
dueAt: z.string().datetime().optional(),
})
.strict() // 多余字段直接判 400,而不是静默忽略
export const router = Router()
router.post('/todos', (req, res) => {
const parsed = CreateTodo.safeParse(req.body)
if (!parsed.success) {
// 结构化的 issues 让前端能逐字段提示,也让测试能精确断言
return res.status(400).json({
error: 'invalid body',
issues: parsed.error.issues.map((i) => ({ path: i.path, message: i.message })),
})
}
const todo = { id: crypto.randomUUID(), done: false, ...parsed.data }
store.push(todo)
res.status(201).json(todo)
})from datetime import datetime
from uuid import uuid4
from fastapi import APIRouter
from pydantic import BaseModel, ConfigDict, Field
router = APIRouter()
class CreateTodo(BaseModel):
# 只声明客户端可以传的字段;extra="forbid" 让多余字段(如 id、done)直接判 422
model_config = ConfigDict(extra="forbid", str_strip_whitespace=True)
title: str = Field(min_length=1, max_length=200)
dueAt: datetime | None = None # pydantic 会校验 ISO 8601 格式
@router.post("/todos", status_code=201)
def create(body: CreateTodo):
# FastAPI 在进入函数前就完成校验;失败时自动返回结构化的 detail 列表
todo = {"id": uuid4().hex, "done": False, **body.model_dump(exclude_none=True)}
store.append(todo)
return todo什么时候不要用 Plan Mode?改个拼写、加一行日志、重命名一个变量——这种「一句话就能描述 diff」的活,直接让它做,计划反而是负担。判据很简单:你不确定方案、要改多个文件、或者你不熟这块代码,就先 plan;否则直接上。
上下文是最稀缺的资源:/clear /compact /rewind 各管一件事
D2 说过上下文窗口是最稀缺的资源,在 Claude Code 里这句话会变成每天的切身感受:它读的每个文件、跑的每条命令的输出、你们的每一轮对话,全都堆在同一个窗口里。一次调试可能就消耗几万 token,窗口越满,它越容易「忘掉」早先的指令、越容易出错。官方 best practices 页几乎所有建议都是从这一条约束推出来的。
所以要主动管。三个命令各管一件事,别混用:
/clear——任务之间清零。 做完一件不相关的事就清,让下一件事从干净的窗口开始。最常见的失败模式叫「大杂烩会话」:修完 A 顺手问了 B,又回头改 A,窗口里全是互不相关的东西。另一条经验:同一个问题纠正它两次还不对,就/clear,用一条吸收了教训的更好的提示词重开——失败的尝试留在窗口里只会继续污染。/compact——任务中途压缩。 一件事做了很久、窗口快满但还没做完,用/compact让它把历史总结成一段摘要,腾出空间。可以带指令:/compact 保留 API 改动和测试命令。窗口接近上限时它也会自动压缩,但你主动压能控制留什么。/rewind(或连按两次Esc)——回到某个检查点。 每一条你发出的提示都会自动建一个检查点,文件改动前也会快照。走错了方向,打开 rewind 菜单,可以只恢复对话、只恢复代码,或两个都恢复;还可以从某个点开始「向后总结」——只压缩那一段而保留其余。这让「让它大胆试一个方案,不行就退回来」成为一种正常的工作方式。注意它只追踪 Claude 用编辑工具做的改动,Bash 命令改的文件不在其中——它不是 git 的替代品。
三个之外还有两个省窗口的小工具:/btw 问一个不想留在历史里的旁枝问题,答案不进入上下文;查资料的活交给 subagent,让它在自己的窗口里翻文件、只把结论带回来——这个 D4 展开。
给 Claude 一个可验证的检查:测试通过才算完成
今天最后一节,也是这五天里最重要的一个观念。搭档说「做完了」的时候,你怎么知道它真做完了?如果唯一的判断方式是你自己去看,那你就是它的测试套件,每一个错误都要等到你注意到才会被发现——你在场,它是生产力工具;你不在场,它是风险。
解法是给它一个能自己跑的检查:一套测试、一条构建命令、一个 lint、一个把输出和固定文件比对的脚本、一张对照设计稿的截图。有了这个检查,循环就闭合了:它做、它跑、它读结果、它改,直到检查通过。你从「验证的一环」退到「审核证据的人」——看它贴出来的测试输出,比自己重跑一遍快得多。
写提示词时的差别就一句话。「给 POST /todos 加校验」是没有检查的版本;「给 POST /todos 加校验,测试用例:空 title 返回 400、超长 title 返回 400、合法请求返回 201,实现后跑 pnpm test 直到全过」才是有检查的版本。同样的道理放进 CLAUDE.md 就是那段「完成的判据」:哪条命令通过才算做完。
想让检查更「硬」一点,还有三个阶梯:把它写进 /goal,一个独立的评估器会在每一轮之后重新核对,直到目标达成;写成一条 Stop hook,测试不过就不允许这一轮结束——这是确定性的门禁,D4 的主题;或者让另一个 subagent 用全新的上下文来复核结论,做的人和判的人不是同一个——D5 的对抗式审查。今天先把「有检查」这件事做到,剩下的三天都是在把这个检查越做越硬。
还有一个反直觉的提醒:要让它展示证据而不是宣布成功——贴测试输出、贴跑过的命令和返回值、贴截图。你审的是证据,不是它的自信。
源码导读
动手实验
这是一个文档型实验,产出是一份 CLAUDE.md。最好用你自己正在写的项目做——课程的 TODO API 只是范例;没有合适的项目就用 D4 实验目录里那个演示用的 TODO API。starter/ 里的模板留了空位并附了提示问句,solution/ 是给 TODO API 写好的示范,以及一份「删掉了什么、为什么」的对照记录。
- 装好 Claude Code,进到项目目录跑 claude,先问三个「新同事会问的问题」,看它怎么自己翻文件回答。
- 跑 /init 生成初稿,通读一遍,用 starter 里的自检表逐行标注「留 / 删 / 改」。
- 按四段结构重写:命令、风格、规矩、完成的判据;写完数行数,超过 60 行继续删。
- 跑 /context 确认 Memory files 里有它;切到 Plan Mode,用示例任务的提示词让 Claude 出一份计划。
- 对照计划检查 CLAUDE.md 的规矩是否被遵守;没被遵守的那条,先怀疑写得含糊或文件太长,改完再试一次。
面试题
今天 3 道题在下方题库区,侧重 CLAUDE.md 与 skill 的分工、上下文窗口为什么要主动管、可验证检查为什么是分水岭。展开后先看「分析过程」再看要点——照着推导练,比背要点管用。标注「国内高频 / 海外高频」方便按目标市场取舍。
检查清单与明日预告
- 能装好 Claude Code 并说清 CLAUDE.md 该写什么、不该写什么
- 能用 Plan Mode 走完「探索、计划、实现」并切换合适的权限模式
- 能在会话里用 /clear /compact /rewind 管理上下文,并给 Claude 一个可验证的检查
- 能说出五种常见失败模式里的至少三种,以及各自的解法
- 实验的 5 条验收标准全部通过
- 3 道面试题不看要点也能答出至少 2 道
明天(D4)我们回答今天留下的一个问题:CLAUDE.md 说「提交前要跑测试」,Claude 大多数时候会听,但「大多数」不是「一定」。要把「一定」做出来,得用 hooks——它是门禁,不是建议。同时你会学会用 skill 装可复用的流程、用 subagent 把查资料的活派出去、把别人做好的 MCP server 和 CLI 工具接进来。先学会给搭档写手册,再学会给它装门禁,是因为你得先知道哪些规则它「有时不听」,才知道哪些值得做成硬约束。
Interview questions
How do CLAUDE.md and skills divide responsibilities, what goes where, and what goes wrong when CLAUDE.md grows to 500 lines?CLAUDE.md 和 skill 的分工是什么?什么内容该放哪边?一份 CLAUDE.md 写到 500 行会出什么问题?
Common in ChinaCommon overseasBasic#claude-md#skills#contextHow to reason about it · think before answering
- This tests context-cost awareness. 'CLAUDE.md holds rules, skills hold procedures' is the conclusion; derive it from how each is loaded.
- Start from load timing: CLAUDE.md enters context in full every session — a fixed cost; a skill keeps only its one-line description resident and loads its body on invocation — a variable cost. Hence short facts that always apply go in CLAUDE.md, occasional multi-step procedures go in skills.
- Give the table: commands, non-default style, repo etiquette, environment quirks, and the definition of done belong in CLAUDE.md; deployment runbooks, issue-fixing steps, document generators belong in skills. Multi-step procedures in CLAUDE.md or always-on rules inside a skill are both misplacements.
- At 500 lines the failure is dilution, not capacity: important rules drown, adherence drops, and every turn pays for the bloat. Fixes: prune ruthlessly (would removing this cause a mistake?), move occasional content to skills, split path-scoped rules into .claude/rules/ so they load only when matching files are touched.
- Follow-ups: a rule that keeps being ignored — prune, then disambiguate, then emphasize; anything that must run every time should be a hook, not a sentence.
分析过程 · 先想清楚再作答
- 这题考的是「上下文成本意识」。答成「CLAUDE.md 放规则、skill 放流程」只是结论,面试官想听你从加载方式推出这个结论。
- 拆法从加载时机入手:CLAUDE.md 每次会话整份进入上下文,是固定成本;skill 只有描述那一行常驻,正文在被触发(模型判断相关或用户输入 /name)时才加载,是按需成本。所以「每次都成立的短事实」放 CLAUDE.md,「偶尔才用、一用就是多步」的流程放 skill。
- 给判据表:命令、风格差异、仓库礼仪、环境怪癖、完成的判据进 CLAUDE.md;部署流程、修 issue 的固定步骤、某类文档的生成方法进 skill。反过来,CLAUDE.md 里出现了多步流程,或 skill 里放了「每次都要遵守」的规则,都是放错了。
- 500 行的问题不是「太长跑不动」,而是稀释:重要规则被淹没,模型的遵守度反而下降,还白白吃掉每轮的窗口。对策是「删到不能再删」(删掉会不会让它犯错?不会就删)、把偶尔用的挪进 skill、按路径拆进 .claude/rules/ 只在碰到匹配文件时加载。
- 可预期的追问:「规则它老是不听怎么办」——先删再改再强调;「必须每次执行」的动作根本不该靠 CLAUDE.md,要改成 hook。
Key points
- CLAUDE.md loads in full every session — fixed cost; a skill keeps one line resident and loads on demand
- CLAUDE.md: short always-true facts — commands, style deltas, etiquette, definition of done; skills: occasional multi-step procedures
- Bloat dilutes: key rules drown, adherence drops, every turn pays
- Fixes: prune, move occasional content to skills, split path-scoped rules; must-run actions become hooks
答题要点
- CLAUDE.md 每次会话整份加载,是固定成本;skill 只常驻一行描述,正文按需加载
- CLAUDE.md 放每次都成立的短事实:命令、风格差异、规矩、完成判据;skill 放偶尔用的多步流程
- 写长的后果是稀释:重要规则被淹没、遵守度下降、每轮白付窗口
- 对策:删到不能再删、偶尔用的进 skill、按路径拆进 rules;必须每次做的改成 hook
Why does the context window need active management in Claude Code, and when do you use /clear, /compact, and /rewind respectively?在 Claude Code 里为什么上下文窗口需要主动管理?/clear、/compact、/rewind 分别在什么时候用?
Common in ChinaCommon overseasIntermediate#context-window#claude-codeHow to reason about it · think before answering
- The keyword is active. Waiting for auto-compaction works, but the interviewer wants to hear that performance degrades before the window is full.
- Why: every file read, command output, and turn lands in one window; a single debugging pass can be tens of thousands of tokens; as it fills the model forgets earlier instructions and errs more, so the discipline is controlling what enters from the start.
- Then the three commands, keyed on whether the history is still useful: switching tasks with useless history — /clear; mid-task with useful history but a filling window — /compact, optionally with instructions on what to keep; wrong direction — /rewind (Esc Esc) to restore conversation or code to a checkpoint, or summarize just one span.
- Two rules of thumb: after two failed corrections, /clear and rewrite the prompt — failed attempts keep polluting; use /btw for side questions that shouldn't enter history; delegate research to a subagent with its own window.
- Follow-ups: when should context accumulate? While deep in one problem where history is still referenced. Limits of rewind: it tracks only edits made through Claude's editing tools, not Bash-driven changes, and is no substitute for git.
分析过程 · 先想清楚再作答
- 题眼是「主动」。被动等自动压缩也能用,面试官想知道你是否理解「窗口填满之前性能就已经在下降」。
- 先说为什么:Claude Code 读的每个文件、跑的每条命令输出、每轮对话都进同一个窗口,一次调试就是几万 token;窗口越满模型越容易忘掉早先的指令、越容易出错,所以不是满了才处理,而是从一开始就控制进什么。
- 再分三个命令,判据是「这段历史还有没有用」:任务切换且历史无用——/clear 清零;任务未完但窗口快满、历史有用——/compact 压缩成摘要,可带指令指定保留什么;走错了方向、想回到某个点——/rewind(Esc Esc)恢复对话或代码到检查点,也能只对某一段做摘要。
- 补两条经验规则:同一问题纠正两次还不对就 /clear 重开,失败的尝试留在窗口里只会继续污染;旁枝问题用 /btw,答案不进历史;查资料派给 subagent,让它在自己的窗口里翻。
- 可预期的追问:什么时候应该让上下文积累?深挖一个复杂问题、历史仍在被引用时;判据是下一步还会不会用到这段历史。再追问 rewind 的边界:只追踪 Claude 用编辑工具做的改动,Bash 改的文件不在其中,不替代 git。
Key points
- Every read, output, and turn shares one window; fullness degrades adherence, so control inputs from the start
- /clear between unrelated tasks or after two failed corrections
- /compact mid-task when history matters but space runs low; pass instructions on what to keep
- /rewind to a checkpoint for conversation or code, or summarize a span; not a git replacement
答题要点
- 所有文件读取、命令输出、对话都进同一窗口;越满越容易忘指令、出错,要从一开始控制
- /clear:切换任务、历史无用时清零;两次纠正无效也清
- /compact:任务未完、历史有用但窗口快满;可带指令指定保留内容
- /rewind:回到检查点恢复对话或代码,或只对一段做摘要;不替代 git
Why is 'give Claude a check it can run' the dividing line for using agents well, and what levels of enforcement can that check have?为什么说「给 Claude 一个可验证的检查」是用好 Agent 的分水岭?检查可以有哪几档硬度?
Common in ChinaCommon overseasIntermediate#verification#agent-loopHow to reason about it · think before answering
- This tests understanding of the agent loop. 'Tests matter' is common sense; explain where the loop closes without a check.
- Chain: an agent works in a do–observe–adjust loop and stops on 'looks done'. Without a runnable check, 'looks done' is the only signal and the verification step falls on you — every mistake waits to be noticed; present, it is a tool, absent, it is a risk. With a check (tests, build exit code, lint, diff-against-fixture, screenshot compare) the loop closes inside the machine: it works, runs, reads, and iterates to green while you review evidence.
- Four levels: in the prompt ('run the tests until they pass') — usable today; as a /goal — an independent evaluator re-checks every turn; as a Stop hook — the turn cannot end until the check passes, deterministic; as a reviewer subagent — the one who did the work is not the one grading it. Each step trades setup for attention.
- Production nuance: demand evidence, not claims — test output, commands and return values, screenshots; reviewing evidence beats re-running.
- Follow-up: can the check itself be gamed? Yes — the model might edit tests to pass. Counter with a deny rule on the test directory or a reviewer specifically checking for test tampering.
分析过程 · 先想清楚再作答
- 这题考对 Agent 循环的理解。答成「测试很重要」是常识;要说清没有检查时循环在谁那里闭合。
- 推导:Agent 在「做、看结果、改」的循环里工作,停下来的信号是「看起来做完了」。没有可运行的检查,「看起来做完了」是唯一信号,验证环落在人身上——每个错误都要等你注意到,你在场它是工具,你不在场它是风险。有了检查(测试、构建退出码、lint、比对脚本、截图对照),循环在机器里闭合:它做、它跑、它读结果、它改到通过,你只审证据。
- 硬度分四档:写进提示词(「实现后跑 pnpm test 直到全过」)——今天就能用;设为 /goal——独立评估器每轮复核直到达成;写成 Stop hook——测试不过不允许结束,确定性门禁;交给另一个 subagent 复核——做的人和判的人分开。每升一档多一点配置,换来少一点盯着。
- 生产视角:要求展示证据而不是宣布成功——贴测试输出、贴命令与返回值、贴截图;审证据比自己重跑快。
- 可预期的追问:检查本身会不会被绕过?会——模型可能改测试让它过。对策是把测试目录放进禁改清单,或让 reviewer subagent 专门核对「有没有为了过而改测试」。
Key points
- Without a check the loop closes on you; with one it closes inside the machine
- A check is anything with a pass/fail signal: tests, build, lint, fixture diff, screenshot compare
- Four levels: prompt instruction, /goal re-evaluation, Stop hook gate, independent reviewer subagent
- Demand evidence over claims; guard against test tampering with deny rules or a dedicated reviewer
答题要点
- 没有检查时循环在人身上闭合,每个错误都等你发现;有检查时循环在机器里闭合
- 检查可以是测试、构建、lint、比对脚本、截图对照,任何能产生通过/失败信号的东西
- 四档硬度:提示词里要求、/goal 每轮复核、Stop hook 确定性门禁、subagent 独立复核
- 要证据不要宣言;防止改测试作弊要靠禁改清单或专门的复核
Comments
Sign in to join the discussion
No comments yet — be the first.