A Field Guide to Fable Finding Your Unknowns 《寓言实地指南:找到你的未知领域》
我之前从未涉足该方向的内容,且对该方向一无所知
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提出问题时,我倾向于将问题分解为四种方式:
- 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?未知的未知:我完全没有考虑过什么?哪些知识是我尚未意识到的?我是否了解事物能有多美好?
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.但他们也会预设未知区域。从很多方面来看,减少未知区域并为其制定计划,正是智能体编程的技能所在。幸运的是,通过使用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.我曾撰文探讨如何在Claude中使用HTML,在几乎所有场景中,使用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帮你发现这些“未知的未知”并向你解释。我习惯直接使用“盲区扫描”和“未知的未知”这类直白表述。通常还需要告知它你的身份背景和已知信息范围。
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. 几乎每次编写代码前,我都会先进行探索或头脑风暴。这能帮助我带着明确意图来界定项目范围。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.” “我希望有一个展示这些数据的数据面板,但我缺乏视觉审美,也不清楚有哪些可能性。请为我制作一个包含4种截然不同设计方向的HTML页面,这样我才能对它们做出反馈。”
- “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.” “在接入任何实际功能之前,先用虚拟数据创建一个模拟新版编辑器工具栏的独立HTML文件。我想在接触真实应用之前先对布局方案进行反馈。”
- “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.” “我面临一个棘手问题:用户在使用引导流程后流失率很高。请搜索代码库,从成本最低到最宏大的方案,列出10个可优化的介入点。我会告诉你哪些方案值得推进。“
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.” “每次只问一个模棱两可的问题,优先选择那些我的答案会改变架构的问题。“
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. 这个位于 vendor/rate-limiter 中的 Rust crate 实现了我们所需的精确退避行为。请读取它,然后在我们的 TypeScript API 客户端中重新实现相同的语义。
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为我整理一份实施方案,重点聚焦最可能变动的部分,例如需要审核数据模型、类型接口或用户体验流程。这样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.” 请用HTML编写一份实施方案,但优先展示我最可能需要调整的决策内容:数据模型变更、新增类型接口以及所有面向用户的功能。将机械性的重构工作放在末尾,这部分我信任你的判断。
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.我让 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.”“维护一份 implementation-notes.md 文件。如果遇到迫使你偏离原计划的边缘案例,选择保守方案,在‘偏差’部分记录该情况,然后继续推进。”
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.” “将原型、规格说明和实施记录打包成一个文档,方便我直接发布到Slack上争取支持。开篇就用演示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. 经过长时间的工作会话后,Claude可能比我意识到的成就更多。阅读代码差异只能让我对发生的情况有粗略了解,因为许多行为将取决于现有的代码路径。
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.” “为确保我完全理解此次变更的所有内容,请为我生成一份HTML格式的变更报告,其中包含上下文说明、直观理解、具体操作等维度的解读,并在报告底部附上一份关于此次变更的测试题,我必须通过该测试。“
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帮你找出你的未知领域。