快速开始

从意图开始。其余一切都是选择。

1

选择状态

选择与现实匹配的状态。

选择一个

seed        "我有一个想法,但没有具体的东西"
exploring   "我有一个方向,但需要验证"
clarified   "我完全清楚要构建什么"
提示:从 seed 或 exploring 开始。过早标为 clarified 只会让你构建错误的东西。
2

创建 INTENT.md

将 INTENT.md 放在项目根目录。填写对应的模板。

用于 seed 或 exploring:

# INTENT — [Project Name]

> status: seed

## Why

Problem: [Who is suffering, and how?]
Hypothesis: [What do you think will fix it? It's OK to be wrong.]
Validation: [How will you know if the hypothesis is right?]

## What

[Leave empty if seed. Write what you want to verify if exploring.]

- [ ] [Feature 1 — one line]
- [ ] [Feature 2 — one line]

## Not

[Write whatever comes to mind. Add (?) if unsure.]

- [e.g., No mobile app for now]
- [e.g., Never send user data to third parties]

用于 clarified:

# INTENT — [Project Name]

> status: clarified

## Why

Problem: [Who is suffering, and how?]
Goal: [What does success look like?]
Metric: [How do you measure it? Use numbers.]
Customer quote: [What would a happy user tell a friend? One sentence.]

## What

- [ ] [Feature 1 — one line]
- [ ] [Feature 2 — one line]
- [ ] [Feature 3 — one line]

User flow:
1. User does [A]
2. System does [B]
3. Result: [C]

Edge cases:
- [Case 1]
- [Case 2]

## Not

- Forbidden: [Hard security/ethical lines]
- Tech constraints: [e.g., no `any` types, TypeScript only]
- Out of scope: [What we're explicitly not building]
- Quality bar: [e.g., response time under 200ms]
3

探索,然后改写

Intent 不是静态的。实验,然后改写 Why / What / Not,让它们陈述你现在所相信的内容。不要在 INTENT.md 中追加结果日志;这个文件应当始终读起来就是当前的 Intent。

每个结果都变成一次编辑。假设一次访谈表明,真正的痛点是发票追踪,而不是数据分析:

 ## Why

-Problem: SMB owners can't see where their revenue comes from.
+Problem: SMB owners lose track of unpaid invoices.

 ## What

-- [ ] Revenue analytics dashboard
+- [ ] Overdue invoice list with one-click reminder

 ## Not

+- Out of scope: analytics dashboards (interviews: nobody opened them)

提交这次修改,并把你学到的东西写进 commit 消息。文件保存现在;git log 保存路径。

git commit -m "Why: pivot from analytics to invoice tracking

Interviewed 5 SMBs. All five named unpaid invoices as the top pain;
none asked for analytics."
提示:如果一条 learning 没有改变 Why / What / Not 中的任何内容,它可能还不重要。
4

变更状态

当证据支持时推进。当证据不支持时终止。

状态转换

seed → exploring
  当:你开始第一个实验时。

exploring → clarified
  当:Why/What/Not 都已确信地填写完毕。没有 (?) 标记。

any state → dropped
  当:证据表明这不值得构建,
        或者现有方案已经覆盖了它。
  操作:将状态设为 dropped。在 commit 消息中说明原因。
        这是宝贵的知识。
5

交给 AI

一旦意图达到 clarified,INTENT.md 就是 AI 所需的全部上下文。

如果你使用 Claude Code,将 Not 中的约束移入 CLAUDE.md:

# CLAUDE.md

## Intent Constraints
- TypeScript only, no `any` types
- Never modify user data without explicit confirmation
- Response time under 200ms for all API endpoints

让 AI 派生任务、编写代码、审查和部署。当现实发生变化时更新意图。

就是这样。保持 INTENT.md 最新。其余一切都是选择。
English 한국어 日本語