# ethanchang.io — full Markdown
Concatenated published essays and project files. Prefer the per-page URL with `Accept: text/markdown` when you only need one document.
---
# 一篇关于博客的博客
为什么我要开这个博客:一块属于我的地盘,一张数字名片。
> 我希望在网上有一片属于我自己的空间。认识我的人,不认识我的人,都可以来这里认识我。——这是我开这个博客的理由。
## 现在,博客对我是什么
我对博客的定义变了。它不只是一个发文章的地方。它是我在数字世界里的一块地盘。
Twitter 上的话会散掉。项目会散在 GitHub、演示站、聊天记录里。笔记在 Heptabase 和 Obsidian 里,别人进不去。
所以我要一个地方,把这些收进来。认识我的人可以来,不认识我的人也可以来。
## 一张数字名片
别人可以通过这个博客认识我、理解我,跟我交流。我可以在这里交朋友,也可以慢慢建立一点自己的影响。
它也许没办法汇总我所有的 context。但至少能把 context 里的 highlights 提出来。
比如一个项目:我为什么起这个念头,中间碰到什么难题,怎么过的,思路是怎么转的,最后做成了什么。别人看完,会有一个感觉:原来他是这样的一个人。
## 这里会放什么
我会把 Twitter 上值得留下的发言汇到这里。我会在这里写文章。我会把做过的几个主要项目写进来。
研究、学习笔记、一篇专题,也会变成博客发进来。别人读完会知道:原来他想做这些事,也做过这些事。他们就能比较好地熟悉我、认识我。
这就是为什么我要做这个博客。它装不下我全部的 context,但它能把 highlights 留在一个别人找得到的地方。
这是我在数字世界里的一张数字名片。
---
# 博客站点的架构与实现
这个站按四条原则做:内容优先、从列表进单页、默认英文的双语、articles 与 projects 可切换。
我想介绍一下这个站点的设计。核心就几条原则。
## 内容优先
内容优先。少做花哨动画和交互,保持简单。整站黑白,内容克制。
读者来是为了读,不是为了看站点自己表演。能少做的交互就少做。
## 从列表点进单页
阅读路径很直:从博客列表点进单页。
看了 PJ 的博客,站点是三栏。我觉得三栏很直,但还是引用了,因为这是读者最快扫完一篇博客的方式。列表扫标题,点进去读正文。不要绕。
## 通用
站点要通用。双语,中英都有,默认英文,让更多人读得进去。
中文是我自己的语言。默认英文,是为了不把读的人先挡住。
## 不只是发文章
这个站的定位不只是发文章,也是把自己介绍给别人。
主内容做成两个可切换的部分:articles 是我分享的博客,projects 是做过的项目时间线。别人来,既能读我写的,也能看到我做过什么,从而知道我是谁。
## Law page
翻 PJ 博客时看到 law page 的概念,觉得酷,想用在自己站上。已经加进去了。
这篇还是草稿。四条原则和 law page 都可以再写细。
---
# 博客要写哪些内容
写什么由定位决定:内容和目标决定读者,不能指望发日常却吸引来想看 how to start a startup 的人。
你写哪些内容,是由你对博客的定位决定的。
不是先写一堆东西,再看谁来读。是先想清楚这个博客是干什么的,再决定写什么。定位一旦定了,内容和目标也就定了;内容和目标会决定读者是谁。你再根据这些读者,输出对应的内容。
这件事是单向的。读者不会凭空对上你。你发什么,就会把什么样的人留下来。
所以不能期待:如果每天分享吃饭和日常,却吸引来一群想要了解 how to start a startup 的读者。Paul Graham 的很多读者,是冲着创业这件事来的。他们来,是因为那几篇文章在谈怎么起步、怎么想产品、怎么做公司。不是因为作者也吃饭、也过日常。
反过来也一样。如果你的定位就是记录生活,那你就该写吃饭和日常。你不能一边发这些,一边奇怪为什么 how to start a startup 那一拨人不过来。他们不过来,不是你写得不够勤,是你根本没在写他们要的东西。
定位决定内容。内容决定读者。读者再反过来要求你继续输出对应的东西。搞反了,就会写成给谁看都不清楚的一堆字。
所以一定要想清楚自己的定位。想清楚之前,不要先问「博客要写哪些内容」。先问这个博客是给谁的、要做成什么。答案清楚了,写哪些内容才会清楚。
这篇还是草稿。后面可以把我自己的定位也写进去。
---
# 我想打造一个让模糊变清晰的工具
手头的工具没有把创造力用出来,所以我想做一个把模糊想法变成可行动对象的软件。
最近有一种很强烈的感受:**我现有的创造力,没有被我手头的这些工具充分发挥出来。**
我感觉自己有蛮多想法,但这些想法总是发挥不出来。有劲,但没地方使。
## 从 Heptabase 说起
举例来说,我在用 Heptabase 记笔记时,会发现没有办法很好地将想法具象化。
它要求你把想法写成笔记卡片——但对我来说,这件事本身就不轻松。因为你必须写标题,而总结标题并不是什么轻量化的操作。很多时候,我更想做的是:先把模糊的想法堆积出来,再去汇总、整理、链接,最后找到想法与想法之间的关联。
更早之前,连"输入想法"本身都是一个问题。但现在,至少通过 Typeless,我只要把想法说出来,就能很好地总结成正文笔记。输入这件事,对我来说不再是障碍了。
## 但光能输入还不够
在任务管理上,有一段时间我可以用 Todoist 很好地把事情创建出来。但随着生产力的提高,我感觉自己有太多零碎的想法,都想往里灌——而它根本跟不上。
我最希望的方式其实很简单:
1. 我说一句话,它可以同时为我创建 5 个甚至 10 个 To-Do 任务
2. AI 可以看见这些任务,并帮我进行整理
但在当前的界面环境里,这些都没法实现。某种程度上,我觉得这是因为我已经习惯了在 Claude Code 等 Agent 环境里协作——习惯了 AI 会帮我自动完成想法。一旦来到一个空的、没有接入 AI 的界面,就会觉得过分低效和无力。
那种繁琐感具体在于:我必须手动完成想法的分组,任务需要手动整理、归纳、维护。我现在想要的体验是:**我说出想法和需求,然后自动获得结果。如果有问题,我可以告诉 Agent 怎么调整,让它跟我 Co-work。**
目前这个时代,大部分软件界面还是不支持很好地与 AI 协作。AI 虽然能提供帮助,但大多数还是像 ChatGPT 那种写作模式——在旁边给你建议,而不是真正参与到你的工作里。
## 将模糊的事情具象化,本身就是一件很有价值的事
> **将一件事情,或者说将一个模糊的概念和想法具象化,会赋予它力量。**
当我们把一个想法具象化以后,我们便能够看见并思考它,去寻找哪些想法与其相关,以及它在一个大的脉络中处于什么样的位置。
具体来说,它的价值体现在这几个方面:
1. **拆解任务难度**
能够帮助我们拆分和肢解任务,使想做的事情变得更具可行性,更容易获得成功。
2. **降低心理负担**
将情绪释放出来,并进行具象化的描述,可以让我们实现自我觉察,从而降低内心的压力。
3. **深度思考与反省**
通过将压力具象化,能让我们清楚地思考与反省内心,审视自己现在正在焦虑什么,以及面临着哪些挑战。
## 但为什么模糊的事情这么难以具象化?
原因主要有两个。
### **第一,输入端的阻力。**
这里说的阻力,不是你描述不清楚——而是你根本缺乏一个趁手的工具。
举例:在 Typeless 出现之前,我必须手动一个字一个字地打字。虽然我打字速度算比较快,但依然无法达到纯粹语音输入那种快速和心流的状态,总还是有一点点阻力在那里。
当语音输入出现以后,你只需要关注当下的表达,全身心地投入到输入这件事上。以前没有工具能做到这一点——现在 Typeless 帮我们解决了这个问题。
### **第二,缺乏认知概念导致的焦虑。**
还有另一种情况:你感觉到有什么东西,但你根本不知道该怎么描述它。当我们不知道某个东西该如何描述时,即使开口去说,也说不清楚。
这时候更好的方式,是提供一些"脚手架"来辅助。比如你想让 AI 把界面上某个按钮从浅灰色改成深灰色——你明明可以看见那个颜色,就是缺乏语言去描述它。截图就是一种脚手架,它帮你绕过了语言的障碍,直接给出具体的实例。
再往深一层,如果你连情绪的名字都不知道——比如你从来没学过 **FOMO(Fear of Missing Out)** 这个概念——你只会模糊地感到:AI 发展太快,总担心自己掉队;但好像又不完全是,因为我每天都在学习前沿内容,可依然时时刻刻有一股焦虑,不知道该怎么描述。一旦有人告诉你:"你这种情绪叫做 FOMO。"你就明白了——你之所以不适,是因为担心有事情在你掌控范围之外发生,而你不知道它是什么。焦虑的根源清晰了,它带来的压力自然大大减少。以后再产生类似情绪时,你会意识到:"原来我又有了 FOMO 的情绪。"然后你可以去查它该怎么处理,你会得到建议,告诉你如何应对——你又拥有了一些**可执行的动作**。
## 具象化带来的最大价值:采取行动的能力
**具象化带来的最大价值,就是它会赋予我们采取下一步行动的能力。** 如果你甚至不知道这个模糊的东西是什么,你就没有办法对它做任何动作。只有将它具象化以后,你才知道自己具体要做哪些事情。
唯有当你采取了行动,这件事带给你的影响才会减小:
- **如果是你渴望的事情**——那种渴望会得到一定的满足。
- **如果是负面的、有压力的情绪**——也会在行动以后得到缓解。
而在积极情绪上,将模糊的概念具象化并付诸行动,还会真实地带来明确的成就感和振奋感。
## 所以,我想打造这样一个产品
我想要打造一个软件,去帮助我们解决这种"模糊"带来的压力、焦虑以及各种负面情绪。
它的核心方式如下:
1. 帮助我们提炼自己模糊的想法
2. 将模糊想法抽象为具体的对象
3. 让用户能够观察这些对象,并去执行具体的行动
我不知道它最终会长什么样,但我知道它要解决的问题是真实的——因为我每天都在经历它。
---
# 占位 2025-06
列表分页用的空占位,不是正式文章。
这是一篇占位文章,用来撑开文章列表的分页。
---
# 占位 2025-11
列表分页用的空占位,不是正式文章。
这是一篇占位文章,用来撑开文章列表的分页。
---
# 占位 2025-01
列表分页用的空占位,不是正式文章。
这是一篇占位文章,用来撑开文章列表的分页。
---
# 占位 2026-01
列表分页用的空占位,不是正式文章。
这是一篇占位文章,用来撑开文章列表的分页。
---
# 占位 2026-03
列表分页用的空占位,不是正式文章。
这是一篇占位文章,用来撑开文章列表的分页。
---
# 占位 2026-02
列表分页用的空占位,不是正式文章。
这是一篇占位文章,用来撑开文章列表的分页。
---
# 占位 2026-04
列表分页用的空占位,不是正式文章。
这是一篇占位文章,用来撑开文章列表的分页。
---
# 占位 2026-05
列表分页用的空占位,不是正式文章。
这是一篇占位文章,用来撑开文章列表的分页。
---
# 引用预览:一条推文和一支视频
同一页里嵌一条 X 帖子和一支 YouTube 视频,核对 TweetEmbed 与 VideoEmbed 的排版。
这页只做一件事:把两种外部引用放在同一篇文章的阅读流里,看它们和正文排版怎么相处。
先是一条 X 上的原帖,用自绘卡片完整展开正文:
再是一支 YouTube 视频,用官方播放器:
---
# 用 GrokBot 和 Cursor 配博客
把配博客的活交给 GrokBot,再由它把任务发给 Cursor 去做,这套协作流程很顺。
今天用 GrokBot 和 Cursor 配博客,流程很顺。
活不是我自己一条条点的。我把活交给 GrokBot,再由 GrokBot 把任务发给 Cursor 去做。我这边主要是把事情说清楚,后面的落地交给它们协作。
这套协作我觉得很酷。GrokBot 接住任务,Cursor 去做。中间我不需要再把同一件事讲两遍。
流程顺,大概就是因为分工清楚:我交代,GrokBot 分发,Cursor 执行。
这篇还是草稿。后面可以把具体怎么交代、任务怎么拆、哪些地方还卡住,再写进去。
---
# 我如何使用 Grokbot 自动化我的日常生活
用 Grokbot 把英文阅读交给 Readwise MCP。
- 使用 readwise MCP 处理所有英文阅读
---
# 我如何使用 Grokbot 跟 Heptabase 联动,进行讨论、更新并让其他 Agent 参与进来
Grokbot 连上 Heptabase、Readwise 和 Todoist,用每天的记录触发讨论。
最近我高频使用 Grokbot 的 agent、ChatGPT,以及 Heptabase 内置的 agent。用得越多我越发现,自己可以在 Heptabase 里记录的内容越来越丰富。我会用 ChatGPT 和 Grokbot 分别去访问 Heptabase。随着用 Grokbot 做的事情变多,我越发觉得需要一个共享的 memory layer,而这个 layer 必然包含大量记录相关信息的笔记。毋庸置疑,我们的笔记软件就是最合适的 context layer 载体,所以我开始让 Grokbot 去访问 Heptabase 相关的 whiteboard 和内容。
这两天我在大规模、高强度地使用 Grokbot 来完成日常生活中的很多工作和讨论,在里面迭代了几个 bot,想把这些实践和体验分享给大家。
首先,我清楚 Grokbot 是一个常驻机器人,而不是像 ChatGPT 那样基于单次会话的单一聊天窗口。刚接触它时我就在思考:自己到底需要什么样的常驻机器人来辅助日常工作和生活,带来足够多的帮助?
我最先尝试的是一个“目标导师”。我人生中有一些想要实现的目标和愿望,比如坚持运动跑步、管理好个人健康等。于是我开始跟 Grokbot 聊,把智能手表里的睡眠数据、心率数据以及各种个人健康情况等 context 喂给它,让它担任健康顾问。它的功能就是每天跟我聊,了解我的健康数据并提供指导。但我发现这并没有太大帮助,创建之后并没真正用起来。
接着我让它做我的博客助手。是的,在发布第一篇博客之前,我就尝试建一个博客机器人来帮我管理博客,简直是脱裤子放屁。这个尝试同样失败了,这也是为什么我到现在才写这篇内容,如果博客机器人真的有效,文章早就发出来了。不成功的原因在于,用 Grokbot 管理博客只能帮你讨论和构思,却不能解决实际的创作过程。
回到前面的核心主题:普通对话聊完一个就会开新会话,而在 Grokbot 里可以做到持续不间断地聊天,所以它能积累越来越多对你的记忆和了解。
基于这种认识,我开始把 Grokbot 当作一些小助手。比如针对我做的一些项目,我尝试让它追踪和管理,把它连到 GitHub 上的一个 project,让它跟我一起讨论项目的演进与更新。但我发现 no, it's not easy:我提供的信息它虽然能读到,但可能是初代版本的缘故,设定一些 automation 太啰嗦,整体表现比较呆,没什么实际意义。
我在使用 Grokbot 的第一代 use case 里,主要是把它当成一个有 long-term memory、能长期对话的 ChatGPT。
我会把公司 ERP 系统的账号和密码发给它,让它帮我做一些查询操作。当我需要了解客户订单和欠款金额等数据时,直接跟它聊天查询就行,不用自己打开 ERP。做 PPT 时,我也会把需求丢给它去搜索调研。我甚至为它录制了几个 skill,教它怎么查询系统。因为它有 long-term memory,可以总结这几个 skill 并替我干活。但除此之外就没别的了,我用得比较少,也找不到更多 use case,总觉得它挺厉害但没太多强需求。
转机发生在刚过去的周末,我开始了第二代迭代,接触到了它的 automation 功能。这个功能可以用 Grokbot 设定定时任务,我以前虽然知道,但一直没打开这方面的脑洞。
上周日,我在聊天中创建了一个 mission tracker,相当于我的“使命导师”。我现在所处的阶段比较迷茫,希望它能推动我找到使命,定期发消息跟我聊聊:“昨天你都干了什么?朝你的 mission 前进了没有?做没做什么有意义的事,还是放假在家什么都没干?”
这是我 automation 的第一版:让 mission tracker 每天晚上发消息骚扰我、逼我反省。
但说实话效果很一般。它虽然抛出了问题,但我往往不想回答。因为如果它只发一个空泛的问题,我就必须输入一大段话来回应,这种体验很不爽,人家找你聊天都是自带话题的,凭什么要我单方面输出?
基于这个痛点,我迭代了第二版(V2):
我让 Grokbot 去抓取我前一天在 X(Twitter)上存的 bookmarks。说来惭愧,我已经很长时间没打开 Readwise Reader 认真阅读了,但在 Twitter 上每天会存很多书签,这些内容非常容易统计。
于是我让 Grokbot 每天早上 6 点半登录我的 X 账户,去 profile 扒一下过去 24 小时存了哪些 bookmarks,阅读并整理一下,了解我最近在关注什么;然后在每天早上 8 点把它们整理成一个带有适当分组的 list 发给我。
因为我在 X 上存的内容,有时偏鸡汤,有时是 how-to,有时是故事,它们经常会触发我的一些感想。但我不可能一边刷 Twitter 一边复制粘贴到笔记软件里写 annotation,我比较懒。而如果它第二天早上主动把这些内容发给我,我就有话可聊了,可以顺手把想法丢给它,让它陪我一起梳理。
设定好这个之后,我又想到:除了回顾原文,我还可以让 Grokbot 把我在 Readwise Reader 里收藏的文章直接翻译好发给我。很多时候我收藏了文章却“已存不读”,就直接跳过了。现在我希望它把内容发到对话窗里,方便我快速扫一遍,然后直接用语音输入回复它,生成自己的 annotation 和心得感想,进一步丰富内容。
我把 Grokbot 搜集的这些数据称为 trigger(触发器),专门用来触发我的回答和表达灵感。通过不断优化 trigger,Grokbot 拥有了越来越丰富的 context。
很快我就达成了一个相对稳定的状态:它拥有访问我的 Todoist、Heptabase 和 Readwise Reader 这三个工具的权限和能力(通过 CLI、API 和 MCP 等)。
它会在 Readwise Reader 中帮我搞定英文内容的翻译。比如我遇到一篇想读的英文原文并存进 Reader,以前它只能存网页,想看中文就得在电脑端打开沉浸式翻译、等待翻译完成、再用插件存进 Reader。但我大部分时间都是用手机刷 Twitter,不可能专门开电脑去折腾沉浸式翻译,所以很长一段时间里,我的 documents 和 articles 变得非常鸡肋。虽然我有读英文的能力,但读起来真的很累,我就是不想读。
我想了一个新方法,开始让 Grokbot 去调研 Readwise Reader API / CLI 有哪些能力,发现它可以完整实现 document 的获取和导入。
于是我创建了一个 automation:每当我导入一篇文章到 Readwise Reader 时,它就会通过 Webhook 发一条消息给 Grokbot。Grokbot 收到提醒后,会调用 API 获取该 document 的元数据和原文,按照我指定的翻译 prompt 进行翻译,在本地整理好新内容,删除远端的英文原文,再将翻译好的内容重新导入 Readwise Reader。这样我平时刷 Twitter 时只需要随手保存,任何时候打开 Reader 都能直接阅读翻译好的中文版本。
接着,我通过 Readwise Reader 中的 highlights 作为 trigger 来进一步丰富流程。每天早上让它把昨天创建的 highlights 按 document 分组汇总发给我汇报。我要求它针对每个 document 发一条消息,并将其做成一个 thread,里面包含多条 highlights。我在 thread 里进行深入回复和探讨,它就可以基于指定内容去创建相关笔记并回答。
这只是一个草稿版。更进一步,考虑到 Readwise Reader 的内容都会同步到 Heptabase 中,我又做了一番调整:直接让它调用 Heptabase CLI 抓取同步进来的 highlight elements,包括我们在前一天创建和编辑过的卡片,全部作为 trigger 的一部分来进行探讨。
结合这几次迭代,我们目前的最终版本包含以下几个部分:
1. Todo 机器人(Grokbot):每天早上和晚上分别汇报前一天的 Inbox 和 Today 中有哪些任务,陪我一起讨论整理,早上明确当天要做的任务,晚上清空 Inbox 和 Today 中的任务。
2. Read Agent:接收 Webhook 提示,将 Readwise Reader 中导入的英文内容自动翻译成中文。要求专业名词保留原文格式,且中英文之间保留空格。处理完成后打上 grokbot 的 tag 并导回 Readwise Reader。另外在每天中午我相对空闲的时候,它会发消息告诉我 Reader 的 Inbox 和 Feed 中有哪些值得读的内容,附上带跳转链接的文档标题以及中文 summarization,方便我快速筛选并点击跳转阅读,这极大地促进了我的阅读量。
3. Research Agent:任何时候我跟它聊完天,它都会按照指令调用 Heptabase CLI,在指定位置创建一个 whiteboard,把我们讨论内容的脉络整理进去。
4. Chief of Staff:每天早上发送前一天的内容总结作为 trigger,列出我前一天收藏的 Twitter、标注的 highlights、新建及编辑过的卡片。我会快速浏览并挑选有感触的内容进行回复,它则基于我的回复进一步编辑和调整对应卡片。
目前唯一的短板在于 Heptabase CLI 缺失了对 highlight 的操作能力,特别是编辑 highlight element 以及将 highlight element 放到 whiteboard 上这两个核心功能。否则,当 Grokbot 把内容发给我后,我完全可以直接回复做 annotate,由它更新调整 highlights、将我的感想转成卡片并连接到 whiteboard 上,在对应的 space 中归档脉络。
虽然现在还没办法实现这种完美的闭环,只能每天给我发汇报,但我中间尝试过一个更进阶的方案:让它每天早上生成一个以日期为标题的 Heptabase whiteboard,用名为 "X" 的 section 框住所有推特内容,若为文档 highlights 则以该文档标题作为 section 框住全部高亮。我点击链接即可跳转到 Heptabase 的 whiteboard 查看并调整。
现在唯一的痛点就是等待 Heptabase 团队完善 CLI 能力,届时整个工作流就能真正实现闭环了。
最后再分享两个我自己平时打造的 Grokbot 实现:
第一个是我们的 Health Agent。
从一开始我就给它创建并设定了一个更丰富的架构。Grokbot 的架构是不暴露给用户的,相对来说会追求减少你折腾工具所花的时间,让你沉浸在享受它提供的服务中。这带来的一个缺点是无法频繁微操,或者说微操的成本很高、很麻烦。所以我一般只查到架构级:让它把自己的架构分析汇报给我,说明有几个 automations、几个 ops 以及它自己的 [profile.md](profile.md)。如果觉得某几个标注为 suspended 的 automation 没用了,我就直接让它把相关文件删掉。对于 ops,我会提醒它在 [profile.md](profile.md) 里梳理清楚有哪些能力可供调用和整理,具体内容全部写进 ops,不要冗余重复,主要就是希望它能稍微节约 context,避免浪费。效果虽然不确定,但说了总比没说强。
目前我的健康顾问 Agent 配置分为四个模块:运动、睡眠、体检结果,以及目标追踪。上一次的体检结果我会交给它,让它按照我设定的目标去持续追踪和优化。它在 profile 里能看到这几个部分,但具体内容的讨论是分流的:跟我聊运动时,它就去查运动相关的 .md;聊睡眠就去查睡眠相关的 .md,不会全部混在一起,同时它也清楚自己整体负责这几个板块。
另外是我们的工作 Agent,我也给它分成了几个部分:
1. 日常经常要做的表格工作,单独分了一个 op
2. 读取公司 ERP 系统的数据,分了一个 op
3. PPT 制作:我每个月要做两次月度会议报告的 PPT,我把相关格式和模板提供给它后,它已经学会并创建了对应的 skill
然后再分享一个我自己实现的 Grokbot 玩法:博主 Don't be silent 刚发布了一系列开源 skills,其中像 "don't be silent goal" 这种用福格行为模型来实现的 skill 挺有意思,能帮人把目标精细化。于是我把他的 skills 仓库链接直接丢给 Grokbot,单独创建了一个 Agent 去盯着该仓库,并把这一系列 skills 全部安装下来。
我把这个 Agent 直接命名为 Don't be silent,假设它就是这位博主,放在我的 growth bot team 里。遇到我觉得适合他回答的问题,我就去向他提问,看他能给出什么反馈。
Skill 本质上就是对人的抽象与蒸馏。既然大家都在蒸馏自己、开源自己,那不妨把你觉得很厉害的人也蒸馏出来,加入到自己的团队里,让他为你打工。
---
# Heptabase As a context Layer
我用 Heptabase 做 Agent 的 context,不用 Notion。
> 很多人都使用 Notion 去作为 Agent 的一个 Context 核心,但是我不一样,我使用 Heptabase。
- 使用 Heptabase 的 tag 管理博客
- 使用 Heptabase 的 whiteboard 作为一个主题的 folder,用来收录我们的研究笔记
- 使用 TOC 卡片和 Memory Card 实现 whiteboard 中 context 的持久化同步
- Heptabase Skill Sharing
---
# 我是如何使用 Heptabase 进行深度学习的
分享我使用 Heptabase 进行知识管理、深度学习和研究的方法与实践
> "将笔记视觉化的目的,是对你所学的知识建立深度理解。"——这是我在使用 Heptabase 过程中最深的体会。
如果你熟悉我的 [PKM 实践](/articles/pkm-method),可能会好奇:有了 Obsidian,为什么还需要 Heptabase?答案在于**它们解决不同层次的问题**。
Obsidian 适合处理**线性、结构化的笔记**,而 Heptabase 擅长**视觉化、概念间的关联与整合**。今天分享我是如何将两者结合使用的。
## 我与 Heptabase 的相遇
第一次了解到 Heptabase,是因为看到创始人 Alan Chan 的采访。他提到的一个观点击中了我:
> 真正的深度理解不存在于「两本书之间的关联性」里头,而是存在于「两本书中的所有概念之间的关联性」里头。
这正是我之前的困惑——我在 Obsidian 里建立了密密麻麻的双链,但始终感觉缺少一个「全局视角」。Heptabase 的白板(Whiteboard)正好填补了这个空白。
## 我的卡片体系
我在 Heptabase 中使用三种核心卡片类型:
### 1. 文献卡片(Literature Cards)
原始的学习资料——书籍、论文、课程、播客的摘录。
特点:
- 保留原文出处和上下文
- 按章节或主题组织
- 是原材料,不是最终产品
### 2. 概念卡片(Concept Cards)
这是核心。每个概念卡片:
- 只表达一个核心想法
- 用一句话作为标题
- 用自己的话重写,引用原文支撑
### 3. 索引卡片
相当于白板的「目录」,汇总相关概念,方便回顾。
```
文献卡片 → 提取 → 概念卡片 → 整合 → 索引卡片
```
## 核心方法:五步学习法
我遵循 Heptabase 官方 Wiki 推荐的深度学习方法,包含五个步骤:
### 第一步:记录
将阅读过程中看到的重要段落记录下来,按章节整理成文献卡片。
### 第二步:拆解
创建白板,将文献卡片导入。从中识别核心概念,拖曳出来变成概念卡片。
关键点:**用一句话总结概念,作为卡片标题**。这样一眼就能知道它在讲什么。
### 第三步:建立关联
在概念卡片之间画箭头,标记它们的关系。是因果?是包含?还是对比?
### 第四步:分组
用 Section 将相关概念卡片群组起来,给每个 Section 命名。
### 第五步:整合
将新学到的概念与过去所学的概念整合。让知识真正形成网络。
## 原子化的力量
> 只有当你将笔记原子化时,你才能通过笔记视觉化对你在乎的主题获得深度理解。
这是最核心的领悟。
如果笔记很长、包含很多要点,视觉化带来的价值就很有限。因为你关联的是「两本书」,而不是「两个概念」。
举一个具体的例子。我之前阅读 *Mindstorms* 和 *The Early History of Smalltalk* 这两本书,它们都与「动态媒介」研究相关。我创建了一个白板,将两本书中与动态媒介有关的概念卡片都放进来,用心智图组织它们。
正是因为之前阅读时已经将知识原子化,我现在才能在做新研究时轻松复用过去的所学。
## 颜色标记系统
我使用颜色来标记卡片属性:
| 颜色 | 含义 |
|------|------|
| 🟢 绿色 | 已完成的卡片 |
| 🟡 黄色 | 资料类型的白板 |
| 🔵 蓝色 | 知识型的白板 |
这样在 Map 视图下一目了然。
## P.A.R.A. 空间组织
我的 Spaces 分为两类:
- **P.A.R.A.**: Projects(项目)、Areas(领域)、Resources(资源)、Archives(归档)
- **主题白板**: 根据个人兴趣和研究方向设立
项目类和知识类的白板分开管理,更清晰。
## 什么时候用 Heptabase?
我给自己定了几个规则:
1. **只有深度思考时才创建白板**
- 不是随便什么想法都要开白板
- 思考完后如果不需要就删除
2. **白板是思考的地图**
- 每次思考的结果都添加到白板上
- 方便以后回顾和复用
3. **区分研究型白板 vs 知识型白板**
- 研究型:存放项目资料、文献、想法
- 知识型:存放可复用的知识
## 与 Obsidian 的配合
我现在的 workflow 是:
1. **快速想法 → Flomo**
2. **需要深度整理 → Obsidian**(原子笔记、双链)
3. **需要视觉化理解 → Heptabase**(白板、概念关联)
三个工具各司其职,互相补充。
## 总结
Heptabase 让我真正理解了什么是「知识网络」:
1. **原子化**:一个概念,一张卡片
2. **视觉化**:用白板看到知识的全貌
3. **可复用**:过去的知识可以指导新的研究
4. **可积累**:每次学习都在充实这个网络
工具不是目的,让自己成为擅长学习的人才是。
---
*如果你想了解更多关于 Heptabase 的使用技巧,可以参考 [官方 Wiki](https://wiki.heptabase.com)。*
---
# 如何获得人生最大程度的幸福
把满意度、金钱、复利和探索这几条笔记收在同一篇里。
1. 满意度 = 对一件事儿的渴望程度 ✖️ 获得的数量
2. 钱可以推动大多数曲线向右移动
3. 钱能推动的是人人可见的通用曲线,成就感、爱好与影响力属于要自己发现的隐藏曲线
4. 年轻时执迷于钱会把通用曲线拉满,却困在局部最优,错过本可属于自己的隐藏曲线
5. 叔本华说人生的智慧是规避痛苦而非追求幸福,因为存量积分会让人麻木,幸福只来自增量
6. 赚钱的核心是复利:在单一领域深耕,让前期积累支撑后续产出
7. 发散探索是反赚钱的,每次换赛道都会产生巨大的转换损耗
8. 不能因为发散反赚钱就不探索,发散的核心意义是打破单一闭环、开辟人生第二第三曲线
9. 单条曲线必然边际递减,到阈值后更高效的路径是开新曲线或找一条永不停止的长期曲线
10. 人生要兼顾探索与专注:用复利积累资源推动基础曲线,用发散打破闭环寻找热爱的大曲线
---
# My Toolset
我把日常放在中间的工具、Agent 和顺手的小工具记在这里。
## Key
> Tools that are more important and middle of my life.
1. Heptabase
2. Readwise Reader
3. Todoist
4. Cloudflare
## Agent
1. Grokbot
2. ChatGPT/Claude
## Tools Recomendes
> small tools, easy to use and convinent your life.
1. 小鹤音形输入法
2. Typeless
3. Raycast
4. Bitwarden
5. Dia
---
# 页面即房间:一篇你读着读着就动手改写了的文章
把 Realtalk 的 Claim/When/Wish 搬进一张网页:规则可读、可改、可组合。这篇文章讲动态媒介,而它本身就是一个动态媒介——读到最后,你会发现自己已经编了程。
{/* TODO: 全文散文段落均为骨架草稿,请用你自己的声音改写。结构与组件编排可保留。 */}
## 第一幕:你现在是读者
{/* TODO: 用你自己的话讲"应用与媒介的区别"。骨架论点如下: */}
大多数网页是**应用**:功能被开发者密封好,你只能沿着预设的路径点击。
而**媒介**不同——纸可以折,黏土可以捏,粉笔字可以擦了重写。
Bret Victor 的 Dynamicland 实验室把整栋建筑变成了计算机:纸张既是程序又是界面,
放上桌子就运行,谁都可以当场改写。他们管这叫 Realtalk。
Realtalk 的空间性看起来无法搬进屏幕——我们没有那张桌子。
但有一个诚实的对应物:**页面即房间,视口即桌面,滚动即走动**。
你往下读的每一步,都是在房间里移动。
比如:这句话就是房间里的第一个物件——
它有名字,别的规则可以指认它。这正是 Realtalk 的 Claim:宣称"我在这里,我叫这个名字"。
## 第二幕:你现在是操作者
下面是这个房间的规则清单。它们**正在运行**——试着勾选、取消勾选第一条,
然后把页面往回滚一点再滚下来,看看
有什么反应。
{/* TODO: 一段过渡:指出读者刚才做的事(开关一条规则)在传统 app 里叫"设置",
但接下来要做的事在传统 app 里根本不存在。 */}
## 第三幕:你现在是修理者
{/* TODO: 设计一条"写坏的"规则,请读者改一个词让它工作。
骨架示例:下面这条规则的目标选错了,把词槽里的目标改成"计数徽标",它就活了。 */}
房间里还有一个物件:一枚等着被点击的徽标。
下面这条规则本想数它被点击的次数,但目标槽选错了对象。
展开词槽,把它修好——然后点几下徽标试试。
修理即编程:你刚才改的不是设置,是程序的语义。
## 第四幕:你现在是作者
{/* TODO: 邀请读者用"+ 添加一条规则"写一条全新的规则,
并给出一两个建议组合(比如:每过 2 秒,让方块挪动一下)。 */}
上面任何一个规则清单里都有一个"+ 添加一条规则"。
写一条你自己的——让某个物件在你滚动到页面一半时变色,或者每两秒挪动一下。
没有语法错误这回事:词槽里的每个选项都是合法的。
这是从 Ink & Switch 的 Embark 学的取舍:用表达力换可预测性。
你永远不会写出一条"解析失败"的规则,因为规则根本不需要解析。
## 第五幕:刚才发生了什么
{/* TODO: 收束。骨架论点: */}
你在读一篇文章的过程中,不知不觉做了四件事:读、操作、修理、创作。
每一步的门槛都只比上一步高一点点——这就是 Ink & Switch 说的 gentle slope,
从消费者到创造者之间不该有悬崖。
"开发"与"使用"的分离是制度,不是必然。
这个网站的每个组件下面都有一个「⌥ 源码」,
这篇文章讲的道理,就是你刚刚亲身经历的事。
{/* TODO: 文末加一段你个人的邀请——为什么你在意这件事,想和什么样的人聊。 */}
---
# Persuasion
我想在重点掌握说服的能力,因此我会将自己阅读学习的笔记写到这篇 article 里来。
在这里用 Markdown 写中文正文。
我希望增进自己的 Persuasion 的能力,所以我创建了这篇 article,在里面汇集整理我关于 Persuasion 相关的学习笔记。
## 视频
## 读书笔记
## 思考
---
# 我的 PKM 实践:从笔记到知识网络
分享我在 Obsidian 中实践的个人知识管理系统,包含三层架构、命名规范和链接原则
> "你的笔记系统不是存储信息的仓库,而是思考的工具。"——这是我实践 PKM 多年来最深的体会。
在信息爆炸的时代,我们不缺信息,缺的是将信息转化为真正属于自己知识的能力。这篇文章分享我在 Obsidian 中建立的个人知识管理系统,核心方法论来自 Andy Matuschak 的常青笔记(Evergreen Notes)理念。
## 为什么需要系统化的知识管理
每天我们都会接触大量信息:公众号文章、播客、书籍、论文……但大多数信息读过即忘,真正能被记住并随时调用的少之又少。
传统笔记的问题在于:
- **碎片化**:笔记之间孤立存在,无法形成网络
- **难以复用**:记过的笔记,下次想用时找不到或看不懂
- **维护困难**:笔记越来越多,但质量参差不齐
一个好的 PKM 系统应该让笔记**越积越多,而不是越积越乱**。
## 三层架构:资料 → 原子 → 索引
我的笔记系统采用三层架构,每层有明确的职责:
### 第一层:资料笔记(Material Notes)
这是信息的原始来源——读过的文章、书籍笔记、会议记录、灵感随想。
特点:
- 保留原始出处和上下文
- 可能比较长、比较杂
- 是原材料,不是最终产品
### 第二层:原子笔记(Atom Notes)
这是系统的核心。常青笔记应当是**原子化的**——每个笔记只表达一个核心想法,便于独立使用和组合。
特点:
- 一个笔记,一个想法
- 用自己的话重写,不是简单摘录
- 可以被其他笔记引用和链接
### 第三层:索引笔记(Index Notes)
相当于笔记的「目录」和「地图」,将相关原子笔记组织起来。
常见形式:
- 主题索引:汇总某个主题下的所有笔记
- 概念索引:解释一个复杂概念及其关联
- 项目索引:特定项目相关的笔记集合
```
资料笔记 ──提取──> 原子笔记 ──组织──> 索引笔记
↓ ↑
└────────── 双向链接 ←─────────┘
```
## 命名方法论:陈述句标题
命名是我笔记系统中非常重要的一环。一个好的标题应该:
### 用陈述句,而不是短语
| ❌ 避免 | ✅ 推荐 |
|---------|---------|
| 写作技巧 | 写作时先完成再完善 |
| 复利效应 | 复利效应让小的优势不断累积 |
| 深度工作 | 深度工作需要刻意练习 |
### 以概念为导向
标题应该指向一个**概念**或**观点**,而不是一个任务或项目。
### 便于未来检索
当你三个月后搜索时,输入什么能最快找到这篇笔记?标题应该能回答这个问题。
## 链接的艺术:密集链接原则
> "笔记之间的链接比笔记本身更重要。"
这是我最常跟别人分享的一句话。单个笔记的价值有限,但当笔记形成网络,就会产生 **1+1>2** 的效果。
### 为什么要密集链接
- **触发联想**:看到一篇笔记,能想到相关的其他笔记
- **发现洞见**:通过链接发现意想不到的连接
- **构建视角**:不同的索引方式呈现不同的知识结构
### 链接的实践技巧
1. **看到任何相关就链接**:不要等"完美"时机,现在就链接
2. **双向思考**:链接到 A 时,想一想 A 会链接到什么
3. **用链接代替分类**:与其把笔记放在某个文件夹,不如用链接连接它
## 笔记的生命周期:种子 → 萌芽 → 常青
不是所有笔记生来平等。我的笔记有三种状态:
### 🌱 种子笔记(Seed Notes)
初级的、想法萌芽状态的笔记。
- 零碎的想法、待验证的信息
- 需要进一步加工
- 可能是资料笔记的摘录
### 🌿 萌芽笔记(Sprout Notes)
已经整理过但还不够成熟的笔记。
- 用自己的话写过
- 有基本的结构
- 但还需要更多链接和补充
### 🌲 常青笔记(Evergreen Notes)
成熟的、可以独立存在的笔记。
- 原子化的:一个笔记,一个核心想法
- 可复用的:可以被多个上下文引用
- 链接充分的:与相关笔记形成网络
```
🌱 种子 → 🌿 萌芽 → 🌲 常青
↓ ↓ ↓
需加工 整理中 可复用
```
笔记应该在这个生命周期中流动,而不是静止在某个状态。
## 实践工作流:从阅读到输出
最后分享我的完整工作流:
### 1. 收集阶段
遇到有价值的内容,先快速保存。可以使用:
- 稍后读工具(Pocket、Instapaper)
- 微信/Flomo 快捷输入
- 直接保存到笔记库的收件箱
### 2. 处理阶段
定期(建议每天或每周)处理收集的内容:
- 提取核心想法
- 用自己的话重写
- 归类到相关主题
### 3. 链接阶段
这是最容易被忽视但最重要的步骤:
- 思考这篇笔记与哪些已有笔记相关
- 主动建立双向链接
- 更新相关索引笔记
### 4. 输出阶段
当你积累到一定程度,写作就变得自然:
- 笔记网络本身就是写作素材
- 索引笔记就是文章大纲
- 常青笔记就是文章段落
## 总结
我的 PKM 核心原则:
1. **原子化**:一个笔记,一个想法
2. **链接优先**:笔记之间的连接比笔记本身重要
3. **持续演进**:笔记有生命周期,要不断迭代
4. **命名即思考**:好的标题是思考的开始
工具永远不是重点,重点是**建立思考的习惯**。当你开始认真对待每一篇笔记,你会发现知识真的会「生长」。
---
# 这是我们 blog 发布一篇合集的样子
这是我们写的一篇用来展示 a collection 会看起来什么样子的 demo
我在测试,写一篇 collection 文章会是什么样的?我期待的是我们可以在 Blog 里创建一个很深的,层层深入的合集文去探索和分享我们关心的一些深度的内容。
---
# Agentic 时代,软件不再稀缺
Agentic 时代软件创作廉价且极大丰富。过去软件短缺,现在最稀缺的是软件能解决的现实问题。
Agentic 时代,软件创作变得简单、轻松、廉价。极低的人力物力就能创建、更新、迭代,甚至做到极高质量。软件极大丰富,正面临范式转移。
过去几十年门槛高,软件供小于求。切中痛点的软件是短缺的。原因有两个。一是写软件难。二是懂技术的人缺行业经验:会写的不懂产品,懂产品和行业的不会写代码。两边对不上,好软件就少。
现在难点收敛到做产品。懂产品的人可以通过交互快速吸收行业经验;有行业经验的人也能以极低成本和敏捷迭代,把业务认知沉淀为产品。这会促进对各行各业的赋能。靠提供 SaaS 轻松获取超额利润的时代,已经过去。
未来软件会像汽车一样重塑协作。汽车出现前,跨省协作可能要数周数月。交通网络把各地的经济、资源、工厂连成供应链。过去缺软件,个体生产力的天花板低,像没有盔甲的步兵,只能堆人力。未来个体被软件武装,作战效能巨大,分发的边际成本几乎为零。
核心是这一句:以前做软件,是为了解决软件本身的稀缺。新时代软件不再稀缺。最稀缺的,是借助软件能解决的现实问题——医学研究、新材料与下一代电池、外太空、前沿物理与数学、更强芯片。计算机和软件从被追求的目标,回归并升格为真正的超级工具。
这篇还是草稿。论点在,展开可以再补。
---
# vibe to automate your life instead of vibe big project
做能帮上生活的小自动化,比闷头做一个大项目更值。
> It is ok to vibe big project, but vibe small projects are more sweet and give actual help to your life.
---
# 在 Agent 时代,我们要做什么
智力与执行力都变得充沛之后,工作还剩下什么。
> 智力是充沛的,执行力也可以交给 AI。一个人的能力会被放大,短板会被补齐。——然后呢,what are we going to do?
## 前提已经变了
现在的 AI,几乎能做数字世界里你能想到的事。它不只是帮你写一段话、改一个函数。它可以很快帮你建立对一个领域的认识,把你不会的那一块补上。
以前,短板会挡住你。现在,短板还可以被补齐。一个人能做的事,被放到了一个以前不像是「一个人」的尺度。
How are we going to do it,这个问题也变轻了。方法、资料、实现,都可以找 AI 一起做。
真正还在的问题是:What are we going to do? What is the meaning of our work?
## 能力不再是瓶颈
当「能不能做」变得便宜,稀缺的就换成了另一面:你选择做什么,你为什么做,中间你怎么想。
AI 可以帮你快速认识一个领域。它不能替你决定,这个领域值不值得你把名字放上去。
它也不能替你留下:这个念头是怎么来的,你在哪一次转了向,你最后做成的那个东西,为什么是这个而不是另一个。
这些东西,还是得你自己做,也还是得你自己写下来。
## 所以工作还剩下什么
我自己的答案还在想。眼下比较清楚的只有这一层:
工作的意义,从「我能做」变成「我选择做」。
选择本身,就是工作。把选择做成一个别人能看见的东西,也是工作。把过程里的想法留下来,让别人知道你是怎样一个人,也是工作。
这就是我还要写博客、还要把项目写下来的原因。Agent 可以放大我,但它放大的,应该是我真正要做的那件事。
---
# 说服力的目标是改变他人的行为。
草稿摘要,发布前改成可检验的陈述句。
在这里用 Markdown 写这一页。
---
# Aletheia
英文阅读时的语境查词与复习
Aletheia,意思是「照亮」——像灯一样点亮阅读时的困惑和迷茫。希腊语词根也常被译作「去蔽」。这是我做的第二个项目,核心是在英文阅读时进行查词;它也是我对「研究与分析工具」的早期实验——在长文里划词、高亮,把生词摘出来生成可复习的卡片。
## 非侵略性的查词
查词的交互没有侵略性,做得相对简洁,不会剧烈改变阅读样式,不会搞出五六种颜色标注把注意力全吸走。传统词典可能给出 5 到 10 种含义,用户需要自行匹配,这对阅读过程是巨大的阻力。
我们调用 LLM,将查词所在的上下文发送给 AI Agent,让其返回相关的语境含义——结合 context 查询单词在语境中的含义,而不是调用传统词典。
## 查词后的复习
查词后如果不复习,效率很低。因此又做了一个简单的复习模块,复习交互直接引用了第一个项目(创客计划)中使用的左滑、右滑、上滑、下滑等手势,实现了复用。
这条 **highlight → 结构化 → 卡片** 流水线没有留在草稿里,而是在 [Trace](/projects/trace) 中被收敛成独立产品。Aletheia 是实验室,Trace 是产品。
---
# Chunk
面向海量笔记的内容组织系统
Chunk 是一个内容组织系统的实验,探索当笔记数量增长到数千条之后,如何依然保持「越积越多,而不是越积越乱」。
它在数据模型上继承了 [Networks](/projects/network) 的卡片范式,在入口上吸收了 [Robert](/projects/robert) 的低摩擦捕获——当卡片涨到数千条,结构还能撑住吗?
它与我在 [PKM 实践](/articles/pkm-method) 中写到的三层架构一脉相承。Chunk 不是从零发明组织方式,而是把已经在 Network 里跑通的卡片单元,推到更大的规模。
---
# Craft Space
工作空间管理与生产力工具集
Craft Space 是一组围绕「工作空间」展开的生产力工具实验——如何让一次深度工作所需的一切(资料、工具、上下文)一键就位。
---
# Deeptalk
AI 驱动的对话与学习助手
Deeptalk 是一个 AI 对话与学习助手的原型,探索「对话」作为深度学习媒介的可能性。
---
# ethanchang.io
你正在体验的这个超媒体容器
这个网站本身就是一件作品——不是列表里的又一张卡片,而是展示所有实验的容器:把文字、演示、规则玩具和**软件级交互**组织在同一套媒介引擎里。
它不是博客:文章只是它承载的媒介档位之一。它更像一个可以持续加功能的软件产品。
## 技术架构
- **框架**:Astro 5(islands 架构 + MDX 内容集合)
- **交互岛屿**:Svelte 5(runes)
- **滚动叙事**:GSAP ScrollTrigger
- **样式**:Tailwind CSS v4 设计 token
- **部署**:Cloudflare Pages。D1 和 KV 已经在跑。账户那一层接过,导航上不再放登录。
想知道它是怎么工作的?到 [/lab](/lab) 看全部媒介组件的现场演示。
---
# 创客计划
极简、易用的复习卡片编写与复习软件
我的第一个软件项目。动机很直接:市面上流行的复习软件要么噪音很多、界面不干净,要么功能实现得很糟。
所谓「不干净」,指的是 UI 非常凌乱,复习功能不是一等公民,而是被隐藏在二级入口。复习时常常要求你先选择要复习的 deck,而不是直接开启一天的复习——这会产生很多阻力和噪音。编辑卡片的编辑器也做得很拧巴,功能不够强大和完善。
## 我想做好的事
**卡片编辑器**应支持:
- QA 卡片的闭合挖空
- 图片支招挖空
- 遮罩文本挖空:将不同的支招块合并为同一个复习内容,合并成同一个复习的遮罩块后进行回忆;每一次回忆时将其他支招块隐藏——即「hide one, test all」与「merge different clozes」。这种能力在很多编辑器中都没有实现
**批量导入**:做好单一输入后,能够一次性导入大量 flashcard,像写笔记一样编写复习卡片,并将它们合适地归类到内容中。
我想把它做成一个极简、易用的小软件。
---
# Robert
带 robert agent 的个人上下文管理器
我的第四个项目。名称来自「管家」——我想让它做我们的 personal context manager。
与桌面端的 [Networks](/projects/network) 并行,Robert 把**语音**放在第一入口——受 flomo 启发,但记录的摩擦力更低:语音进来,Whisper 转写,再落成块级卡片。记录越容易,捕获的想法越多。
它和 Network 一个管口袋、一个管桌面,却在同一条线上:都在问怎样让知识以**块**的形式流入系统,而不是以文档的形式堆在文件夹里。这条低摩擦捕获,后来被 [Chunk](/projects/chunk) 吸收。
## 结构设计
笔记结构沿用 Networks 中的设计:一条笔记可以有多个 parent card,每一条笔记既是一个 folder 也是一个 document。它既可以用来存储笔记内容,也可以用来导航、探索并找到笔记。
## robert agent
多个 parent card 过分灵活:如果由用户手动匹配这些 parent,就相当于原来只需要给一条笔记找一个 folder,现在需要找多个 folder——会带来非常大的阻力和使用疲惫。
因此我们引入了 robert agent,尝试创建一种异步 agent 确认机制,跟用户达成哪些内容需要保留和不保留的共识。设计的思路是:每天晚上 agent 会获取一部分用户给定的 context,结合它已知的信息进行结构探索。比如用户原来就有一些编程笔记的 card,今天写了 5 条编程心得,agent 读完后会想到以前创建的「编程笔记」,然后发送一条确认:是否要将这 5 张卡片连接为「编程笔记」的子卡片。
---
# Networks
卡片既是文件夹也是文档的笔记工具
我的第三个项目。简单来说,我希望把它做成一个 Heptabase,但每一张卡片的能力都被强化——既可以作为文件夹,也可以作为文档。规划中有 5、6 种不同类型的卡片,包括 Excalidraw、Whiteboard、普通卡片等。
这也是我第一个认真**发布**的桌面笔记工具。核心赌注很简单:重度写作者愿意为了速度,把双手永远放在键盘上。整款产品围绕**卡片**组织——每张卡片是一个独立的 Markdown 单元,方向键在卡片间跳转,Enter 进入编辑,Esc 保存退出。这不是装饰性的「卡片 UI」,而是内容的数据模型:笔记天然被切成可搬运、可链接、可重组的块。
它验证了两件事:卡片作为内容单元是成立的;键盘导航可以覆盖从浏览到编辑的完整闭环。后者后来被 [Chunk](/projects/chunk) 直接继承。
## 为什么停下来了
我发现自己的开发过分发散,直接做崩溃了。以当时的精力与时间,只能支持做好一个单一的 card + folder 机制;而完整愿景的难度要大得多,必须将多种卡片类型与 folder/card 机制统一协调——这超出了我当时的承载能力。
项目暂停,但「一条笔记既是 folder 也是 document」的结构设计,延续到了后来的 Robert。
---
# Trace
带学习能力的 agent 阅读聊天器
我的第五个项目。功能与定位是一个 agent 阅读聊天器,但又结合了学习能力。
## 三个核心能力
**1. 子 thread 聊天**
它是一个 AI chat 软件,但支持子 thread 能力——允许你在聊天中开启新的分支,保留清晰的 context,轻松深入任何你好奇的领域。
**2. highlight → flashcard**
它是 agent 辅助的 flashcard 软件。当你阅读了好奇的内容,将想要学习与记忆的内容进行 highlight,agent 会为你的 highlight 生成 flashcards。
**3. 语境生词卡片**
因为我想阅读英文内容、直接学习原文,所以引入了 Aletheia 中做过的生词卡片能力:它能结合 context 查询生词的语境义,并且允许收藏生成单词卡片复习。
Aletheia 是实验室;Trace 把那条 highlight → 结构化 → 卡片流水线,打磨成专注阅读场景的独立产品。
Trace 把前面几个项目的脉络收拢在一起:创客计划的复习交互、Aletheia 的语境查词、以及 agent 驱动的阅读与学习流程。