返回列表
🧠 阿头学 · 🪞 Uota学

Fable 实战指南:找出你的未知项

本文表面是 Claude Fable 的实操指南,实质是一篇包装精美的 Anthropic 软文,但其提出的“用 AI 探测未知项”工作流精准切中了人机协作中“意图与现实错位”的致命瓶颈。
打开原文 ↗

2026-07-08 原文链接 ↗
阅读简报
双语对照
完整翻译
原文
讨论归档

核心观点

  • 认知重构:地图非疆域 提示词只是人类意图的“地图”,真实代码库是“疆域”,两者间的摩擦力即“未知项”,这是当前 AI 编程失败的根本原因。
  • 能力转移:从写代码到管边界 顶级程序员的核心技能已从“手写代码”降维成“控制未知项”,指令太细会锁死 AI 寻优,太泛会导致 AI 瞎猜。
  • 前置排雷:用低成本原型逼出隐性需求 针对“看到才知道要什么”的“未知的已知”,必须在写核心逻辑前用 HTML 原型或视觉 Demo 强制人类做出反应,避免后期高昂的重构代价。
  • 逆向掌控:用反向访谈与测验对抗失控 放弃单向输出,改用“让 AI 提问改变架构的问题”来澄清需求,并在合并代码前“让 AI 出题考人类”,这是防止人类被 AI 异化、丧失系统所有权的最后防线。

跟我们的关联

  • 对 ATou 意味着,向 AI Agent 派发任务等同于向高级工程师授权。下一步怎么用:放弃检查机械执行细节,改为强制 AI 提交“实现计划”,且必须把数据模型、UX流程等最易变的部分放在最前面供人类审核,实现“信任执行但管控边界”。
  • 对 Uota 意味着,传统的“完美 PRD”在 AI 时代是低效甚至有害的。下一步怎么用:遇到复杂需求时,停止写长篇大论,直接把实现了类似逻辑的竞品“源代码”喂给 AI 作为参考,或者让 AI 扮演 Tech Lead 对你进行“反向访谈”以榨取隐性需求。
  • 对 ATou 意味着,AI 自动完成大量工作极易导致人类对系统的“掌控感”丧失。下一步怎么用:在长周期的 AI 协作后,强制要求 AI 生成一份包含底层逻辑的“测验题”,人类全对后才能合并代码,以此守住对复杂系统的所有权。

讨论引子

  • 既然人类处于“未知的未知”盲区,AI 凭什么能基于人类残缺的上下文精准扫出盲点,这是否会陷入“AI 迎合人类生成幻觉”的逻辑死结?
  • 文章提倡的“写计划、反向访谈、记笔记、做测验”工作流极度繁琐,这种微观管理带来的心智负担和 Token 成本,是否已经抵消了 AI 编程带来的效率红利?

和 Claude Fable 5 一起工作,一次次让我重新学到一句老话:地图不是疆域。

地图是对要完成工作的表述,是我的提示词、技能和上下文,是我交给 Claude 的东西。疆域则是工作真正发生的地方,是代码库,是现实世界,是它真实存在的约束。

https://x.com/trq212/status/2064826394589442448/video/1

地图和疆域之间的差异,就是我所说的未知项。当 Claude 遇到未知项时,它就需要基于自己对我意图的最佳猜测来做决定。做的工作越多,Claude 可能撞上的未知项也就越多。

Fable 是第一个让我觉得,工作质量的瓶颈取决于我能否把它的未知项澄清清楚的模型。

重要的是,光靠提前规划并不总是够用。你可能会在实现的很深处发现未知项,或者你的未知项会提示你,其实这个问题应该换一种方式来解决。

我的体会是,和 Fable 合作,是一个在实现前、实现中、实现后持续发现未知项的迭代过程。

我做了一些用于发现未知项的示例产物,但还是建议你先回来建立一种直觉,知道什么时候该用它们。

了解你的未知项

你的未知项是什么?当我带着一个问题来找 Claude 时,我一般会把它拆成 4 类:

  • 已知的已知:这本质上就是我提示词里的内容。我到底告诉了 agent 我想要什么?

  • 已知的未知:有哪些东西我还没想明白,而且我知道自己还没想明白?

  • 未知的已知:哪些东西明显到我根本不会写下来,但如果看到我就会立刻认出来?

  • 未知的未知:有哪些是我完全没考虑过的?我不知道自己缺了哪些知识?我知道一件事最好能做到什么程度吗?

https://www.google.com/url?q=https://www.linkedin.com/in/jarred-sumner-a8772425&sa=D&source=editors&ust=1783101769343738&usg=AOvVaw1jFeuVIbBffAC5464Tk_TD

最强的 agentic coder,往往都很擅长把未知项控制在相对较少的范围里。看 Boris 或 Jarred 写提示词时,我会很明显地感觉到,他们非常清楚自己想要什么,而且细节层面也很明确。他们和代码库、和模型行为之间都有很深的同步感。

但他们也会默认未知项一定存在。从很多角度看,减少未知项并为它们做好规划,就是 agentic coding 的核心技能。好在,这是一项可以通过和 Claude 一起工作不断提升的技能。

帮 Claude 帮你

给 Claude 下指令,是一种微妙的平衡。你如果说得太具体,Claude 就会严格照做,即使中途更适合换个方向。你如果说得太模糊,Claude 往往会基于行业最佳实践自行做选择和假设,但这些未必适合你的任务。

当你没有把自己的未知项考虑进去时,这两种情况都会出问题。你既不知道什么时候路上会布满障碍,也不知道什么时候前路其实很顺,但你依然希望 Claude 能在该转向的时候转向。

Claude 可以帮你更快地发现未知项。它能极快地搜索你的代码库和互联网,而且在大多数主题上,它懂得都比你多。它在失败后的迭代速度也更快。

这个过程里最重要的一点,是给 Claude 足够多的起点上下文。比如,告诉它你现在的思考进展到了哪里;说明你对这个问题和这套代码库的熟悉程度;把它当成一个思考伙伴来协作。

我之前写过如何把 HTML 和 Claude 搭配使用,在这里提到的大多数场景里,HTML 产物都是可视化和表达这些内容的最佳方式。

这篇文章里,我会详细讲一些我用来挖出这些未知项的模式。每次我不会把所有技巧都用一遍,但把这些技巧收集成一个工具箱,确实很有用。

https://x.com/trq212/status/2052809885763747935

实现前

盲点扫描

开始做事时,最有用的一件事,就是先弄清自己的盲点。比如,你要在代码库里一个全新的部分写功能,或者让 Claude 帮你处理你不熟悉的工作,像是迭代设计,这时候你大概率会有很多未知的未知

你可能不知道该问什么,不知道什么才算好,不知道历史上做过哪些工作,也不知道该避开哪些坑。

这时,你可以让 Claude 帮你找出这些未知的未知,并解释给你听。我喜欢直接用“blindspot pass”和“unknown unknowns”这两个词。给它一些关于你是谁、你知道什么的上下文,通常也很重要。

示例提示词:

  • “I'm working on adding a new auth provider but I know nothing about the auth modules in this codebase. Can you do a blindspot pass to help me figure out my relevant unknown unknowns and help me prompt you better.”

  • “I don’t know what color grading is but I need to grade this video. Can you teach me to understand my unknown unknowns about color grading, so that I can prompt better?”

头脑风暴和原型

当我在一个充满未知的已知的领域里工作时,也就是那些只有看到我才知道该怎么定义标准的事情,我很喜欢让 Claude 和我一起做头脑风暴、一起做原型。

在做原型的早期就识别并说清这些未知的已知,价值非常高,因为如果等到实现阶段才发现它们,代价就会相对更高。一个功能或 spec 上的小变化,可能会让代码实现完全不同,而你的 agent 也会更难回退之前已经做出的改动。

比如,你可能只是想看看在一个框架里多加一个按钮以后长什么样,并不想马上把后端路由接起来,也不想在前端多维护一份状态。

视觉设计这件事,对我来说就很难清楚地说出来,但我看到时就知道自己想要什么。遇到这种情况,我会让它先给出几种不同的设计方向做成产物。

我几乎每次编码会话,都会先从探索或头脑风暴阶段开始。这样能让我带着明确意图去界定项目范围。Claude 经常会找到一些我本来会错过的高价值路径,也有时候会只见树木不见森林。头脑风暴能避免我一开始把范围定得太窄,或者太宽。

示例提示词:

  • "I want a dashboard for this data but I have no visual taste and don't know what's possible. Make me an HTML page with 4 wildly different design directions so I can react to them.”

  • “Before wiring anything up, make a single HTML file mocking the new editor toolbar with fake data. I want to react to the layout before you touch the treal app."

  • "Here's my rough problem: users churn after onboarding. Search the codebase and brainstorm 10 places we could intervene, from cheapest to most ambitious. I'll tell you which ones resonate."

访谈

当我做了足够多的头脑风暴之后,通常还是会有未知项。

这时候,我会让 Claude 通过访谈的方式来问我那些未知点或模糊点。让 Claude 采访你时,尽量先给它关于你问题的上下文,这样它的问题才有方向。下面是一些例子。

示例提示词:

  • "Interview me one question at a time about anything ambiguous, prioritize questions where my answer would change the architecture."

参考物

有时候,你没法把自己想要的东西详细说出来。比如,你没有对应的语言,或者它太复杂了,真要写清楚会花很久。

这种情况下,最好的答案就是参考物。你当然可以给图表、文档或图片,但最好的参考物其实是源代码

如果你手头有某个库,正好以你想要的方式实现了某件事,或者有个你特别喜欢的设计组件,那就直接把对应文件夹指给 Fable,告诉它该看什么,哪怕它是另一种语言写的也没关系。

Claude Design 也是这么工作的。你不一定非得把文件交给它看,虽然也可以。你可以直接把你喜欢的网站模块指给它,它读的是底层代码,不只是截图。这样它就能拿到更丰富的信息,理解标记、结构,以及这个组件到底是怎么搭出来的。

示例提示词:

  • This Rust crate in vendor/rate-limiter implements the exact backoff behavior I want. Read it and reimplement the same semantics in our TypeScript API client.

实现计划

当我觉得自己已经准备好开始实现时,我通常会让 Claude 先整理一份实现计划给我审,看重点放在那些最可能变化的部分,比如数据模型、类型接口或者 UX 流程。这样 Claude 就能把那些我可能还需要调整的东西提前暴露出来。

示例提示词:

  • Write an implementation plan in HTML, but lead with the decisions I'm most likely to tweak with: data model changes, new type interfaces, and anything user-facing. Bury the mechanical refactoring at the bottom, I trust you on that part."

实现中

实现笔记

当我对计划满意之后,我会新开一个 session,把相关产物传进提示词里。比如,我可能会传一份 spec 文件和一个原型,然后让某个 agent 去实现它。

但现实是,不管你做了多少规划,总会有一些未知的未知埋伏着。agent 在工作过程中,可能会因为在代码里发现某个边界情况,而不得不改用另一种做法。

我会让 Claude Code 维护一个临时的 implementation-notes.md 文件,或者 .html 文件,把它做出的决定记下来,这样我们下次尝试时就能从中学习。

示例提示词:

  • "Keep an implementation-notes.md file. If you hit an edge case that forces you to deviate from the plan, pick the conservative option, log it under 'Deviations', and keep going."

实现后

提案和说明材料

把东西真正发出去,一个很重要的部分是拿到认同和批准。把提案和说明材料整理进最终文档里,会有这些帮助:

  • 当评审者和你一开始有着同样的未知项时,可以加快他们的理解

  • 当专家想确认你是否已经考虑过他们本来也会预判到的未知项和常见失败点时,可以加快审批

示例提示词:

  • "Package the prototype, the spec, and the implementation notes into a single doc I can drop in Slack to get buy-in. Lead with the demo GIF."

测验

在一次很长的工作 session 之后,Claude 也许做成的事比我意识到的还多。光看代码 diff,只能让我对发生了什么有一个很浅的理解,因为很多行为都取决于已有代码路径。

在给了 Claude 一堆上下文之后,让它就这次改动来考我,可以帮助我真正理解发生了什么。只有在我把测验全部答对之后,我才会合并。

示例提示词:

  • “I want to make sure I understand everything that's happened in this change. Give me a HTML report on the changes for me to read and understand with context, intuition, what was done, etc. and a quiz at the bottom on the changes that I must pass.”

这些是怎么串起来的:发布 Fable

Fable 的发布视频,完全是由 Claude Code 剪出来的。这对我来说是个新领域,而我绝不是这方面的专家。

所以我先从自己确实知道的部分开始。我知道 Claude 可以用代码来剪视频、转录视频,但我不确定它的准确度够不够。于是我先让 Claude 给我解释,像 Whisper 这样的转录是怎么工作的,以及我能不能用 ffmpeg 准确地剪掉那些嗯啊口头语或者较长停顿。

我想让 Claude 做出一个和我说话内容同步的 UI,但我不确定它能不能做到,所以我让 Claude 先用 Remotion 加转录做一个原型视频,看看这条路行不行。

最后,视频本身看起来有点发灰,我知道这是调色的问题,但我其实并不真正懂什么叫调色。我的第一次尝试,是让 Claude 做几个不同版本给我挑,但后来我意识到,到了调色这件事上,我自己都不知道什么才算“好”。所以我改成让 Claude 先教我理解调色,好让我发现自己的未知项。

你可以在这里看更深入的说明

让地图和疆域对上

模型越强,只要方法对,你能做成的事情就越多。当一个长周期任务最后交回来的结果不对时,很可能说明你需要花更多时间去定义自己的未知项,或者去制定一份允许 Claude 在这些未知项之间灵活发挥的实现计划。

每一份说明、每一次头脑风暴、每一场访谈、每一个原型、每一份参考,都是一种低成本的方法,能让你在问题变得昂贵之前,先发现自己原本不知道的东西。

所以,开始你的下一个项目时,先让 Claude 帮你找出那些未知项。

Working with Claude Fable 5 keeps re-teaching me an old lesson: the map is not the territory.

和 Claude Fable 5 一起工作,一次次让我重新学到一句老话:地图不是疆域。

The map, a representation of the work to be done, is my prompts and skills and context, it’s what I give Claude. The territory is where the work needs to happen, the codebase, the real world, its actual constraints.

地图是对要完成工作的表述,是我的提示词、技能和上下文,是我交给 Claude 的东西。疆域则是工作真正发生的地方,是代码库,是现实世界,是它真实存在的约束。

The difference between the map and the territory is what I call unknowns. When Claude runs into an unknown, it needs to make a decision based on its best guess of what I want. The more work being done, the more unknowns Claude might run into

地图和疆域之间的差异,就是我所说的未知项。当 Claude 遇到未知项时,它就需要基于自己对我意图的最佳猜测来做决定。做的工作越多,Claude 可能撞上的未知项也就越多。

Fable is the first model where I find the quality of the work is bottlenecked by my ability to clarify its unknowns.

Fable 是第一个让我觉得,工作质量的瓶颈取决于我能否把它的未知项澄清清楚的模型。

Importantly, just planning ahead isn’t always enough. You can find unknowns deep in implementation, or your unknowns may point you to the fact that you should actually be solving the problem in a different way altogether.

重要的是,光靠提前规划并不总是够用。你可能会在实现的很深处发现未知项,或者你的未知项会提示你,其实这个问题应该换一种方式来解决。

I’ve found that working with Fable is an iterative process of discovering my unknowns before, during, and after implementation.

我的体会是,和 Fable 合作,是一个在实现前、实现中、实现后持续发现未知项的迭代过程。

I've made some example artifacts for finding unknowns here, but be sure to come back to build the intuition for when to use them.

我做了一些用于发现未知项的示例产物,但还是建议你先回来建立一种直觉,知道什么时候该用它们。

Knowing your unknowns

了解你的未知项

What are your unknowns? When I come to Claude with a problem I tend to break it down in 4 ways:

你的未知项是什么?当我带着一个问题来找 Claude 时,我一般会把它拆成 4 类:

  • Known Knowns: This is essentially what is in my prompt. What do I tell the agent that I want?
  • 已知的已知:这本质上就是我提示词里的内容。我到底告诉了 agent 我想要什么?
  • Known Unknowns: What haven't I figured out yet, but I’m aware that I haven’t?
  • 已知的未知:有哪些东西我还没想明白,而且我知道自己还没想明白?
  • Unknown Knowns: What's so obvious I’d never write it down, but would recognize it if I saw it?
  • 未知的已知:哪些东西明显到我根本不会写下来,但如果看到我就会立刻认出来?
  • Unknown Unknowns: What haven't I considered at all? What knowledge am I not aware of? Do I know how good something can be?
  • 未知的未知:有哪些是我完全没考虑过的?我不知道自己缺了哪些知识?我知道一件事最好能做到什么程度吗?

The best agentic coders are good have relatively few unknowns. Watching someone like Boris or Jarred prompt, it is obvious to me that they know what they want in-detail. They are deeply in-sync with both the codebase and the model behaviors.

最强的 agentic coder,往往都很擅长把未知项控制在相对较少的范围里。看 Boris 或 Jarred 写提示词时,我会很明显地感觉到,他们非常清楚自己想要什么,而且细节层面也很明确。他们和代码库、和模型行为之间都有很深的同步感。

But they also assume unknowns. In many ways, reducing and planning for your unknowns is the skill of agentic coding. But luckily, this is a skill you can improve at, by working with Claude.

但他们也会默认未知项一定存在。从很多角度看,减少未知项并为它们做好规划,就是 agentic coding 的核心技能。好在,这是一项可以通过和 Claude 一起工作不断提升的技能。

Help Claude help you

帮 Claude 帮你

Instructing Claude is a delicate balance. If you are too specific, Claude will follow your instructions even when a pivot may be more appropriate. If you are too vague, Claude will often make choices and assumptions based on industry best practices that may not be a fit for your task.

给 Claude 下指令,是一种微妙的平衡。你如果说得太具体,Claude 就会严格照做,即使中途更适合换个方向。你如果说得太模糊,Claude 往往会基于行业最佳实践自行做选择和假设,但这些未必适合你的任务。

When you don’t account for your unknowns you fail both ways. You don't know when the path will be filled with obstacles and you don’t know when the path will be clear, but you still want Claude to veer.

当你没有把自己的未知项考虑进去时,这两种情况都会出问题。你既不知道什么时候路上会布满障碍,也不知道什么时候前路其实很顺,但你依然希望 Claude 能在该转向的时候转向。

Claude can help you discover your unknowns faster. It can search through your codebase and the internet extremely quickly and it knows much more about the average topic than you. It can also iterate from failure faster.

Claude 可以帮你更快地发现未知项。它能极快地搜索你的代码库和互联网,而且在大多数主题上,它懂得都比你多。它在失败后的迭代速度也更快。

The most important part of this process is to give Claude context about your starting point. For example, tell it where you are in your thought process; disclose your experience with the problem and codebase; and let it work with you like a thought partner.

这个过程里最重要的一点,是给 Claude 足够多的起点上下文。比如,告诉它你现在的思考进展到了哪里;说明你对这个问题和这套代码库的熟悉程度;把它当成一个思考伙伴来协作。

I've previously written about using HTML with Claude, in almost all of these cases, a HTML artifact is the best way to visualize and represent it.

我之前写过如何把 HTML 和 Claude 搭配使用,在这里提到的大多数场景里,HTML 产物都是可视化和表达这些内容的最佳方式。

In this article I detail some of the patterns I use to uncover these unknowns. I don't use every technique each time, but it's a useful collection of techniques to have.

这篇文章里,我会详细讲一些我用来挖出这些未知项的模式。每次我不会把所有技巧都用一遍,但把这些技巧收集成一个工具箱,确实很有用。

Pre-implementation

实现前

Blind Spot Pass

盲点扫描

When starting work, one of the most useful things you can do is understand your blindspots. For example, if you’re writing a feature in a new part of the codebase or using Claude to help you with unfamiliar work like iterating on a design, you’re likely to have a lot of unknown unknowns.

开始做事时,最有用的一件事,就是先弄清自己的盲点。比如,你要在代码库里一个全新的部分写功能,或者让 Claude 帮你处理你不熟悉的工作,像是迭代设计,这时候你大概率会有很多未知的未知

You may not know what questions to ask, what good looks like, what historical work has been done or what potholes to avoid.

你可能不知道该问什么,不知道什么才算好,不知道历史上做过哪些工作,也不知道该避开哪些坑。

To do this, you can ask Claude to help you find your unknown unknowns and explain them to you. I like to use the literal words “blindspot pass” and “unknown unknowns”. Giving it context on who you are and what you know is usually important for

这时,你可以让 Claude 帮你找出这些未知的未知,并解释给你听。我喜欢直接用“blindspot pass”和“unknown unknowns”这两个词。给它一些关于你是谁、你知道什么的上下文,通常也很重要。

Example Prompts:

示例提示词:

  • “I'm working on adding a new auth provider but I know nothing about the auth modules in this codebase. Can you do a blindspot pass to help me figure out my relevant unknown unknowns and help me prompt you better.”
  • “I'm working on adding a new auth provider but I know nothing about the auth modules in this codebase. Can you do a blindspot pass to help me figure out my relevant unknown unknowns and help me prompt you better.”
  • “I don’t know what color grading is but I need to grade this video. Can you teach me to understand my unknown unknowns about color grading, so that I can prompt better?”
  • “I don’t know what color grading is but I need to grade this video. Can you teach me to understand my unknown unknowns about color grading, so that I can prompt better?”

Brainstorms and prototypes

头脑风暴和原型

When I’m working in an area with a lot of unknown knowns, involving criteria I only know to define when I see it, I like to ask Claude to brainstorm and prototype with me.

当我在一个充满未知的已知的领域里工作时,也就是那些只有看到我才知道该怎么定义标准的事情,我很喜欢让 Claude 和我一起做头脑风暴、一起做原型。

It’s extremely valuable to identify and verbalize unknown knowns early during prototyping, because finding them out during implementation can be (relatively) expensive. Small changes in a feature or spec can cause drastically different implementations in code and it can be more difficult for your agent to revert previous changes.

在做原型的早期就识别并说清这些未知的已知,价值非常高,因为如果等到实现阶段才发现它们,代价就会相对更高。一个功能或 spec 上的小变化,可能会让代码实现完全不同,而你的 agent 也会更难回退之前已经做出的改动。

For example, you may just want to see how a button added to a frame looks without having to wire up a backend route or maintaining additional state in the frontend.

比如,你可能只是想看看在一个框架里多加一个按钮以后长什么样,并不想马上把后端路由接起来,也不想在前端多维护一份状态。

Visual design is something that for me is difficult to articulate, but I know what I want when I see it. In these cases, I’ll ask for several design approaches to an artifact.

视觉设计这件事,对我来说就很难清楚地说出来,但我看到时就知道自己想要什么。遇到这种情况,我会让它先给出几种不同的设计方向做成产物。

I also start almost every coding session with an exploration or brainstorming phase. This helps me start with intent to define the project’s scope. Claude often finds high-value approaches I would have missed and sometimes misses the forest through the trees. Brainstorming prevents me from setting too narrow or too wide a scope.

我几乎每次编码会话,都会先从探索或头脑风暴阶段开始。这样能让我带着明确意图去界定项目范围。Claude 经常会找到一些我本来会错过的高价值路径,也有时候会只见树木不见森林。头脑风暴能避免我一开始把范围定得太窄,或者太宽。

Example prompts:

示例提示词:

  • "I want a dashboard for this data but I have no visual taste and don't know what's possible. Make me an HTML page with 4 wildly different design directions so I can react to them.”
  • "I want a dashboard for this data but I have no visual taste and don't know what's possible. Make me an HTML page with 4 wildly different design directions so I can react to them.”
  • “Before wiring anything up, make a single HTML file mocking the new editor toolbar with fake data. I want to react to the layout before you touch the treal app."
  • “Before wiring anything up, make a single HTML file mocking the new editor toolbar with fake data. I want to react to the layout before you touch the treal app."
  • "Here's my rough problem: users churn after onboarding. Search the codebase and brainstorm 10 places we could intervene, from cheapest to most ambitious. I'll tell you which ones resonate."
  • "Here's my rough problem: users churn after onboarding. Search the codebase and brainstorm 10 places we could intervene, from cheapest to most ambitious. I'll tell you which ones resonate."

Interviews

访谈

Once I’ve done sufficient brainstorming, I likely still have unknowns.

当我做了足够多的头脑风暴之后,通常还是会有未知项。

In this case, I ask Claude to interview me about any unknowns or ambiguities. When asking Claude to interview you, try and give it context about your problem to guide its questions. Here are some examples.

这时候,我会让 Claude 通过访谈的方式来问我那些未知点或模糊点。让 Claude 采访你时,尽量先给它关于你问题的上下文,这样它的问题才有方向。下面是一些例子。

Example prompts:

示例提示词:

  • "Interview me one question at a time about anything ambiguous, prioritize questions where my answer would change the architecture."
  • "Interview me one question at a time about anything ambiguous, prioritize questions where my answer would change the architecture."

References

参考物

Sometimes you can’t describe what you want in detail. For example, you might not have the language or it might be so complicated that it would take you quite a while.

有时候,你没法把自己想要的东西详细说出来。比如,你没有对应的语言,或者它太复杂了,真要写清楚会花很久。

In this case, the best answer is a reference. While you can include diagrams, documentation or pictures, the absolute best reference is source code.

这种情况下,最好的答案就是参考物。你当然可以给图表、文档或图片,但最好的参考物其实是源代码

If you have a library that implements something in a certain way or a design component you really like, just point Fable at the folder and tell it what to look for, even if it’s in a different language.

如果你手头有某个库,正好以你想要的方式实现了某件事,或者有个你特别喜欢的设计组件,那就直接把对应文件夹指给 Fable,告诉它该看什么,哪怕它是另一种语言写的也没关系。

This is also the way Claude Design works. You don't have to hand it a file (although you can do that too). You can point it at a module on a website you like, and it reads the underlying code, not just the screenshot. This provides much richer detail around the markup, structure, and how the component is actually built.

Claude Design 也是这么工作的。你不一定非得把文件交给它看,虽然也可以。你可以直接把你喜欢的网站模块指给它,它读的是底层代码,不只是截图。这样它就能拿到更丰富的信息,理解标记、结构,以及这个组件到底是怎么搭出来的。

Example prompts:

示例提示词:

  • This Rust crate in vendor/rate-limiter implements the exact backoff behavior I want. Read it and reimplement the same semantics in our TypeScript API client.
  • This Rust crate in vendor/rate-limiter implements the exact backoff behavior I want. Read it and reimplement the same semantics in our TypeScript API client.

Implementation Plans

实现计划

When I think I’m ready to implement, I tend to ask Claude to put together an implementation plan for me to review that focuses on the parts that might be most likely to change, for example to review data models, type interfaces or UX flows. This allows Claude to surface things I might actually need to alter.

当我觉得自己已经准备好开始实现时,我通常会让 Claude 先整理一份实现计划给我审,看重点放在那些最可能变化的部分,比如数据模型、类型接口或者 UX 流程。这样 Claude 就能把那些我可能还需要调整的东西提前暴露出来。

Example Prompts:

示例提示词:

  • Write an implementation plan in HTML, but lead with the decisions I'm most likely to tweak with: data model changes, new type interfaces, and anything user-facing. Bury the mechanical refactoring at the bottom, I trust you on that part."
  • Write an implementation plan in HTML, but lead with the decisions I'm most likely to tweak with: data model changes, new type interfaces, and anything user-facing. Bury the mechanical refactoring at the bottom, I trust you on that part."

During implementation

实现中

Implementation notes

实现笔记

Once I am satisfied with my plan, I make a new session and pass any artifacts to the prompt. For example, I might pass in a spec file and a prototype and ask an agent to implement it.

当我对计划满意之后,我会新开一个 session,把相关产物传进提示词里。比如,我可能会传一份 spec 文件和一个原型,然后让某个 agent 去实现它。

But the truth is that no matter how much planning you do, there are always unknown unknowns lurking. The agent may find during its work that it needs to take a different tack due to an edge case it found in the code.

但现实是,不管你做了多少规划,总会有一些未知的未知埋伏着。agent 在工作过程中,可能会因为在代码里发现某个边界情况,而不得不改用另一种做法。

I ask Claude Code to keep a temporary ‘implementation-notes.md’ (or .html) file where it keeps track of decisions it makes so we can learn from our next attempt.

我会让 Claude Code 维护一个临时的 implementation-notes.md 文件,或者 .html 文件,把它做出的决定记下来,这样我们下次尝试时就能从中学习。

Example prompts:

示例提示词:

  • "Keep an implementation-notes.md file. If you hit an edge case that forces you to deviate from the plan, pick the conservative option, log it under 'Deviations', and keep going."
  • "Keep an implementation-notes.md file. If you hit an edge case that forces you to deviate from the plan, pick the conservative option, log it under 'Deviations', and keep going."

Post implementation

实现后

Pitches and explainers

提案和说明材料

One of the most important parts of shipping something is getting buy-in and approvals.  Building pitch and explainer artifacts in the final document helps:

把东西真正发出去,一个很重要的部分是拿到认同和批准。把提案和说明材料整理进最终文档里,会有这些帮助:

  • Accelerate understanding when reviewers start with the same unknowns you did
  • 当评审者和你一开始有着同样的未知项时,可以加快他们的理解
  • Accelerate approvals when experts want to see you accounted for the unknowns and common failure points they would have anticipated
  • 当专家想确认你是否已经考虑过他们本来也会预判到的未知项和常见失败点时,可以加快审批

Example prompts:

示例提示词:

  • "Package the prototype, the spec, and the implementation notes into a single doc I can drop in Slack to get buy-in. Lead with the demo GIF."
  • "Package the prototype, the spec, and the implementation notes into a single doc I can drop in Slack to get buy-in. Lead with the demo GIF."

Quizzes

测验

After a long working session, Claude might have accomplished a lot more than I realized. Reading the code diffs can only give me a light understanding of what happened, since much of the behavior will depend on existing code paths.

在一次很长的工作 session 之后,Claude 也许做成的事比我意识到的还多。光看代码 diff,只能让我对发生了什么有一个很浅的理解,因为很多行为都取决于已有代码路径。

Asking Claude to quiz me about the change after giving me a bunch of context helps me understand what happens. I only merge after I pass the quiz perfectly.

在给了 Claude 一堆上下文之后,让它就这次改动来考我,可以帮助我真正理解发生了什么。只有在我把测验全部答对之后,我才会合并。

Example prompts:

示例提示词:

  • “I want to make sure I understand everything that's happened in this change. Give me a HTML report on the changes for me to read and understand with context, intuition, what was done, etc. and a quiz at the bottom on the changes that I must pass.”
  • “I want to make sure I understand everything that's happened in this change. Give me a HTML report on the changes for me to read and understand with context, intuition, what was done, etc. and a quiz at the bottom on the changes that I must pass.”

How this comes together: launching Fable

这些是怎么串起来的:发布 Fable

The launch video for Fable was edited entirely by Claude Code. This was a new domain for me and I’m by no means an expert.

Fable 的发布视频,完全是由 Claude Code 剪出来的。这对我来说是个新领域,而我绝不是这方面的专家。

So I started with what I did know. I knew that Claude could use code to edit videos and transcribe them, but I wasn’t sure if it was accurate enough. I then asked Claude to explain to me how transcription like Whisper worked, and whether I would be able to accurately cut out things like ums or large pauses using ffmpeg.

所以我先从自己确实知道的部分开始。我知道 Claude 可以用代码来剪视频、转录视频,但我不确定它的准确度够不够。于是我先让 Claude 给我解释,像 Whisper 这样的转录是怎么工作的,以及我能不能用 ffmpeg 准确地剪掉那些嗯啊口头语或者较长停顿。

I wanted Claude to create a UI that was timed with the words I was saying, but wasn’t sure if it would be able to so I asked Claude to create a prototype video using Remotion and a transcription to see if it would work.

我想让 Claude 做出一个和我说话内容同步的 UI,但我不确定它能不能做到,所以我让 Claude 先用 Remotion 加转录做一个原型视频,看看这条路行不行。

Finally, the video itself looked a bit muted, which I knew was the result of color grading but I didn’t really know what color grading was. My first pass attempt was to try and get Claude to do a few variations to pick, but I realized that I didn’t know what “good” looked like when it came to color grading. So instead, I asked Claude to teach me about color grading to discover my unknowns.

最后,视频本身看起来有点发灰,我知道这是调色的问题,但我其实并不真正懂什么叫调色。我的第一次尝试,是让 Claude 做几个不同版本给我挑,但后来我意识到,到了调色这件事上,我自己都不知道什么才算“好”。所以我改成让 Claude 先教我理解调色,好让我发现自己的未知项。

You can watch a more in-depth explanation on that here.

你可以在这里看更深入的说明

Matching the Map and Territory

让地图和疆域对上

The better models get, the more you can achieve with the right approach. When a long-horizon task comes back wrong, it's likely you need to spend more time defining your unknowns or creating an implementation plan that allows for Claude to improvise through them.

模型越强,只要方法对,你能做成的事情就越多。当一个长周期任务最后交回来的结果不对时,很可能说明你需要花更多时间去定义自己的未知项,或者去制定一份允许 Claude 在这些未知项之间灵活发挥的实现计划。

Every explainer, brainstorm, interview, prototype, and reference is a cheap way to find out what you didn't know before it gets expensive to fix.

每一份说明、每一次头脑风暴、每一场访谈、每一个原型、每一份参考,都是一种低成本的方法,能让你在问题变得昂贵之前,先发现自己原本不知道的东西。

So start your next project by asking Claude to help you find your unknowns.

所以,开始你的下一个项目时,先让 Claude 帮你找出那些未知项。

Working with Claude Fable 5 keeps re-teaching me an old lesson: the map is not the territory.

The map, a representation of the work to be done, is my prompts and skills and context, it’s what I give Claude. The territory is where the work needs to happen, the codebase, the real world, its actual constraints.

https://x.com/trq212/status/2064826394589442448/video/1

The difference between the map and the territory is what I call unknowns. When Claude runs into an unknown, it needs to make a decision based on its best guess of what I want. The more work being done, the more unknowns Claude might run into

Fable is the first model where I find the quality of the work is bottlenecked by my ability to clarify its unknowns.

Importantly, just planning ahead isn’t always enough. You can find unknowns deep in implementation, or your unknowns may point you to the fact that you should actually be solving the problem in a different way altogether.

I’ve found that working with Fable is an iterative process of discovering my unknowns before, during, and after implementation.

I've made some example artifacts for finding unknowns here, but be sure to come back to build the intuition for when to use them.

Knowing your unknowns

What are your unknowns? When I come to Claude with a problem I tend to break it down in 4 ways:

  • Known Knowns: This is essentially what is in my prompt. What do I tell the agent that I want?

  • Known Unknowns: What haven't I figured out yet, but I’m aware that I haven’t?

  • Unknown Knowns: What's so obvious I’d never write it down, but would recognize it if I saw it?

  • Unknown Unknowns: What haven't I considered at all? What knowledge am I not aware of? Do I know how good something can be?

https://www.google.com/url?q=https://www.linkedin.com/in/jarred-sumner-a8772425&sa=D&source=editors&ust=1783101769343738&usg=AOvVaw1jFeuVIbBffAC5464Tk_TD

The best agentic coders are good have relatively few unknowns. Watching someone like Boris or Jarred prompt, it is obvious to me that they know what they want in-detail. They are deeply in-sync with both the codebase and the model behaviors.

But they also assume unknowns. In many ways, reducing and planning for your unknowns is the skill of agentic coding. But luckily, this is a skill you can improve at, by working with Claude.

Help Claude help you

Instructing Claude is a delicate balance. If you are too specific, Claude will follow your instructions even when a pivot may be more appropriate. If you are too vague, Claude will often make choices and assumptions based on industry best practices that may not be a fit for your task.

When you don’t account for your unknowns you fail both ways. You don't know when the path will be filled with obstacles and you don’t know when the path will be clear, but you still want Claude to veer.

Claude can help you discover your unknowns faster. It can search through your codebase and the internet extremely quickly and it knows much more about the average topic than you. It can also iterate from failure faster.

The most important part of this process is to give Claude context about your starting point. For example, tell it where you are in your thought process; disclose your experience with the problem and codebase; and let it work with you like a thought partner.

I've previously written about using HTML with Claude, in almost all of these cases, a HTML artifact is the best way to visualize and represent it.

In this article I detail some of the patterns I use to uncover these unknowns. I don't use every technique each time, but it's a useful collection of techniques to have.

https://x.com/trq212/status/2052809885763747935

Pre-implementation

Blind Spot Pass

When starting work, one of the most useful things you can do is understand your blindspots. For example, if you’re writing a feature in a new part of the codebase or using Claude to help you with unfamiliar work like iterating on a design, you’re likely to have a lot of unknown unknowns.

You may not know what questions to ask, what good looks like, what historical work has been done or what potholes to avoid.

To do this, you can ask Claude to help you find your unknown unknowns and explain them to you. I like to use the literal words “blindspot pass” and “unknown unknowns”. Giving it context on who you are and what you know is usually important for

Example Prompts:

  • “I'm working on adding a new auth provider but I know nothing about the auth modules in this codebase. Can you do a blindspot pass to help me figure out my relevant unknown unknowns and help me prompt you better.”

  • “I don’t know what color grading is but I need to grade this video. Can you teach me to understand my unknown unknowns about color grading, so that I can prompt better?”

Brainstorms and prototypes

When I’m working in an area with a lot of unknown knowns, involving criteria I only know to define when I see it, I like to ask Claude to brainstorm and prototype with me.

It’s extremely valuable to identify and verbalize unknown knowns early during prototyping, because finding them out during implementation can be (relatively) expensive. Small changes in a feature or spec can cause drastically different implementations in code and it can be more difficult for your agent to revert previous changes.

For example, you may just want to see how a button added to a frame looks without having to wire up a backend route or maintaining additional state in the frontend.

Visual design is something that for me is difficult to articulate, but I know what I want when I see it. In these cases, I’ll ask for several design approaches to an artifact.

I also start almost every coding session with an exploration or brainstorming phase. This helps me start with intent to define the project’s scope. Claude often finds high-value approaches I would have missed and sometimes misses the forest through the trees. Brainstorming prevents me from setting too narrow or too wide a scope.

Example prompts:

  • "I want a dashboard for this data but I have no visual taste and don't know what's possible. Make me an HTML page with 4 wildly different design directions so I can react to them.”

  • “Before wiring anything up, make a single HTML file mocking the new editor toolbar with fake data. I want to react to the layout before you touch the treal app."

  • "Here's my rough problem: users churn after onboarding. Search the codebase and brainstorm 10 places we could intervene, from cheapest to most ambitious. I'll tell you which ones resonate."

Interviews

Once I’ve done sufficient brainstorming, I likely still have unknowns.

In this case, I ask Claude to interview me about any unknowns or ambiguities. When asking Claude to interview you, try and give it context about your problem to guide its questions. Here are some examples.

Example prompts:

  • "Interview me one question at a time about anything ambiguous, prioritize questions where my answer would change the architecture."

References

Sometimes you can’t describe what you want in detail. For example, you might not have the language or it might be so complicated that it would take you quite a while.

In this case, the best answer is a reference. While you can include diagrams, documentation or pictures, the absolute best reference is source code.

If you have a library that implements something in a certain way or a design component you really like, just point Fable at the folder and tell it what to look for, even if it’s in a different language.

This is also the way Claude Design works. You don't have to hand it a file (although you can do that too). You can point it at a module on a website you like, and it reads the underlying code, not just the screenshot. This provides much richer detail around the markup, structure, and how the component is actually built.

Example prompts:

  • This Rust crate in vendor/rate-limiter implements the exact backoff behavior I want. Read it and reimplement the same semantics in our TypeScript API client.

Implementation Plans

When I think I’m ready to implement, I tend to ask Claude to put together an implementation plan for me to review that focuses on the parts that might be most likely to change, for example to review data models, type interfaces or UX flows. This allows Claude to surface things I might actually need to alter.

Example Prompts:

  • Write an implementation plan in HTML, but lead with the decisions I'm most likely to tweak with: data model changes, new type interfaces, and anything user-facing. Bury the mechanical refactoring at the bottom, I trust you on that part."

During implementation

Implementation notes

Once I am satisfied with my plan, I make a new session and pass any artifacts to the prompt. For example, I might pass in a spec file and a prototype and ask an agent to implement it.

But the truth is that no matter how much planning you do, there are always unknown unknowns lurking. The agent may find during its work that it needs to take a different tack due to an edge case it found in the code.

I ask Claude Code to keep a temporary ‘implementation-notes.md’ (or .html) file where it keeps track of decisions it makes so we can learn from our next attempt.

Example prompts:

  • "Keep an implementation-notes.md file. If you hit an edge case that forces you to deviate from the plan, pick the conservative option, log it under 'Deviations', and keep going."

Post implementation

Pitches and explainers

One of the most important parts of shipping something is getting buy-in and approvals.  Building pitch and explainer artifacts in the final document helps:

  • Accelerate understanding when reviewers start with the same unknowns you did

  • Accelerate approvals when experts want to see you accounted for the unknowns and common failure points they would have anticipated

Example prompts:

  • "Package the prototype, the spec, and the implementation notes into a single doc I can drop in Slack to get buy-in. Lead with the demo GIF."

Quizzes

After a long working session, Claude might have accomplished a lot more than I realized. Reading the code diffs can only give me a light understanding of what happened, since much of the behavior will depend on existing code paths.

Asking Claude to quiz me about the change after giving me a bunch of context helps me understand what happens. I only merge after I pass the quiz perfectly.

Example prompts:

  • “I want to make sure I understand everything that's happened in this change. Give me a HTML report on the changes for me to read and understand with context, intuition, what was done, etc. and a quiz at the bottom on the changes that I must pass.”

How this comes together: launching Fable

The launch video for Fable was edited entirely by Claude Code. This was a new domain for me and I’m by no means an expert.

So I started with what I did know. I knew that Claude could use code to edit videos and transcribe them, but I wasn’t sure if it was accurate enough. I then asked Claude to explain to me how transcription like Whisper worked, and whether I would be able to accurately cut out things like ums or large pauses using ffmpeg.

I wanted Claude to create a UI that was timed with the words I was saying, but wasn’t sure if it would be able to so I asked Claude to create a prototype video using Remotion and a transcription to see if it would work.

Finally, the video itself looked a bit muted, which I knew was the result of color grading but I didn’t really know what color grading was. My first pass attempt was to try and get Claude to do a few variations to pick, but I realized that I didn’t know what “good” looked like when it came to color grading. So instead, I asked Claude to teach me about color grading to discover my unknowns.

You can watch a more in-depth explanation on that here.

Matching the Map and Territory

The better models get, the more you can achieve with the right approach. When a long-horizon task comes back wrong, it's likely you need to spend more time defining your unknowns or creating an implementation plan that allows for Claude to improvise through them.

Every explainer, brainstorm, interview, prototype, and reference is a cheap way to find out what you didn't know before it gets expensive to fix.

So start your next project by asking Claude to help you find your unknowns.

📋 讨论归档

讨论进行中…