# 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 驱动的阅读与学习流程。