1. 项目概述当你的AI助手不再“失忆”如果你和我一样每天花大量时间在 Cursor 或 Claude Code 里写代码、重构、调试那你一定经历过这种挫败感昨天花了整整一下午和AI一起敲定了项目的整体架构讨论了十几个技术选型否决了三种方案最终选定了最优雅的那个。今天早上你信心满满地打开一个新聊天窗口准备继续推进结果AI的第一句话就是“你好看起来你有一个新项目我们来聊聊你的需求吧”——那一刻你恨不得把电脑扔出窗外。这就是典型的“AI失忆症”。每次新开一个聊天会话AI都像一张白纸你不得不把昨天的上下文、讨论过的决策、甚至刚刚才复制粘贴过的代码片段再重新喂给它。这不仅浪费时间更打断了深度工作的心流。为了解决这个问题我花了近两周时间从零开始构建了Aether。Aether 是一个纯粹的、零依赖的本地工具它的目标只有一个让 Cursor 拥有跨会话的记忆能力。它不改变AI模型本身不收集你的任何数据也不依赖任何云端服务。它只是在你和AI之间悄悄地架起一座记忆的桥梁确保每一次新的对话都能无缝衔接上一次的终点。2. 核心设计思路如何让AI“记住”在深入代码之前我们先聊聊Aether背后的设计哲学。市面上的AI记忆方案不少有的基于向量数据库做长期记忆有的通过复杂的提示词工程来引导上下文。但我的设计原则是极简、本地、无侵入。2.1 记忆的粒度会话级而非全局级很多工具试图为AI建立一个庞大的、项目级的“知识库”每次对话都从中检索相关信息。这听起来很美好但实践起来问题重重检索可能不准确无关信息可能被引入维护成本也高。Aether反其道而行之它只关心上一次会话的终点。想象一下你和一个真人同事交接工作。你不会把过去一年的所有会议纪要都塞给他你只会给他一份简明的“交接备忘录”告诉他“昨天我们做到了这里遇到了这几个问题决定这么解决今天我们从这里继续。” Aether 做的就是这件事。它在你结束一天工作或一个会话时帮你生成这份“交接备忘录”我们称之为handover。当新会话开始时它自动将这份备忘录注入AI的上下文。2.2 记忆的载体文件系统即数据库为了实现零依赖和绝对的数据本地化Aether 没有引入任何外部数据库。它直接利用项目根目录下的.aether/文件夹作为记忆仓库。所有数据都以纯文本文件如.md,.jsonl的形式存储。my-project/ ├── .aether/ │ ├── handover/ # 存放每日交接文件 │ │ └── day-1-handover.md │ ├── events.jsonl # 记录所有IDE事件如会话开始、工具调用 │ ├── collapse/ # 存放重要决策的“坍缩”日志 │ └── config.yaml # 项目级配置 ├── src/ └── ...这种设计有几个好处完全透明你可以随时用任何文本编辑器查看、编辑、甚至删除这些记忆文件。项目隔离项目A的记忆永远不会泄露到项目B。每个项目拥有独立的.aether/目录。易于备份和迁移整个记忆仓库就是一个文件夹直接复制即可。2.3 记忆的触发无缝的IDE集成记忆的写入和读取必须是无感的不能打断你的工作流。Aether 通过 Cursor 的Hooks钩子和Rules规则系统来实现这一点。Hooks当特定事件发生时如sessionStart新会话开始postToolUse工具使用后Aether 的脚本会被自动调用记录事件或执行逻辑。Rules这是一组MDCMarkdown Context文件定义了在何种条件下向AI的上下文中注入哪些额外内容。通过这两者的结合Aether 实现了“开箱即用”。你安装后只需正常使用 Cursor记忆的保存和加载都在后台自动完成。3. 核心组件与工作流程拆解理解了设计思路我们来看看Aether具体由哪些部分组成以及它们是如何协同工作的。3.1 核心文件与目录结构一个典型的Aether工作目录包含以下核心部分aether/bin/aether_install.py安装脚本。负责将Aether的钩子和规则写入你的 Cursor 全局配置目录~/.cursor/。aether/core/核心逻辑模块。包含记忆管理、事件处理、配置加载等。aether/hooks/具体的钩子实现。例如session_start.py负责在新会话开始时加载记忆。rules/aether.mdc核心的 Cursor 规则文件。它定义了如何将.aether/目录下的记忆内容结构化地注入到AI的additional_context中。.aether/(运行时生成)每个项目的记忆仓库。3.2 完整工作流程从安装到日常使用安装与注册 你通过git clone和运行安装脚本将Aether的钩子注册到 Cursor。这步只需做一次。之后你可以为任何一个项目运行aether project init来初始化该项目的记忆仓库。日常开发循环开始工作你在项目A中打开 Cursor新建一个聊天。sessionStart钩子触发Aether 自动读取项目A的.aether/handover/目录下最新的交接文件以及最近几条重要的决策日志collapse。注入记忆aether.mdc规则生效将上述读取到的记忆内容打包成一个格式良好的文本块附加到AI的初始系统提示词之后。因此AI在回复第一条消息时就已经“知道”了你上次的工作进度。交互与记录在聊天过程中postToolUse等钩子可能会被触发将一些关键操作如AI生成了代码、运行了命令以事件形式追加到events.jsonl文件中。你也可以手动触发命令来记录一个重要的技术决策aether collapse log “决定使用React Query替代Redux进行服务端状态管理”。结束工作一天工作结束时运行aether daily write。这个命令会分析当天的events.jsonl结合当前的聊天记录如果可能自动或半自动地生成一份给“明天的你”看的交接备忘录day-N-handover.md总结进度、待办和关键决策。跨项目切换 当你切换到项目B时由于每个项目有独立的.aether/目录Aether 会自动加载项目B的记忆实现了完美的上下文隔离。3.3 关键技术实现解析1. 钩子Hooks的注册与调用Cursor 允许在~/.cursor/hooks.json中定义事件与脚本的映射。Aether 的安装脚本会修改这个文件添加类似下面的条目{ “hooks”: { “sessionStart”: { “command”: “python”, “args”: [“/path/to/aether/hooks/session_start.py”, “{projectRoot}”], “cwd”: “{projectRoot}” } // ... 其他钩子 } }当sessionStart事件发生时Cursor 就会在项目根目录下执行我们指定的Python脚本并将项目路径作为参数传入。2. 规则Rules的上下文注入aether.mdc文件是Aether记忆注入的核心。它本质上是一个模板告诉Cursor如何组织要注入的额外上下文。其内容结构大致如下## Aether Context ### Project Handover {{ readFile “.aether/handover/latest.md” }} ### Recent Decisions (Collapsed) {{#each (getRecentCollapses 3)}} - **{{this.timestamp}}**: {{this.summary}} {{/each}} ### Active Field Current field is: {{ getActiveField }}Cursor 会在每次生成AI回复前动态渲染这个模板将{{}}中的变量替换为实际内容如读取最新的交接文件然后将整个渲染结果作为additional_context发送给AI模型。这是实现“记忆”传递的技术基础。3. 5-Mode 自动场域激活这是一个提升体验的细节功能。Aether 预定义了几种“场域”Field如dev普通开发、code-review代码审查、debug调试等。你无需在提问时加上“请以代码审查模式回答”这样的前缀。Aether 会分析你的问题开头例如如果你说“Review this code: …”它会自动将当前场域切换到code-review并相应地调整注入上下文的侧重点例如多注入一些代码规范或历史bug记录。4. 手把手安装与配置实战理论说再多不如动手装一遍。以下是基于最新代码的详细安装指南包含了我踩过坑的注意事项。4.1 环境准备与前置检查在开始之前请确保你的环境符合要求Cursor必须是 Cursor Desktop 版本。网页版不支持钩子和规则系统。Python版本 3.9。这是为了使用海象运算符:等现代语法。检查命令python --version或python3 --version。Git用于克隆仓库。注意如果你的系统同时有python和python3命令请确认哪个指向的是3.9版本。在后续命令中可能需要将python替换为python3。4.2 分步安装指南第一步克隆仓库建议克隆到一个固定的、路径中不含空格和特殊字符的目录比如用户主目录。# 打开终端Mac/Linux或 PowerShellWindows cd ~ # 切换到用户主目录 git clone https://github.com/497810wsl/aether-kit.git aether cd aether第二步执行全局安装这是最关键的一步安装脚本会修改你的 Cursor 配置。# 在 aether 目录下执行 python aether/bin/aether_install.py --global --apply这个命令做了以下几件事备份你现有的~/.cursor/hooks.json文件为hooks.json.bak。将 Aether 所需的钩子定义写入hooks.json。将rules/aether.mdc文件复制到~/.cursor/rules/目录下。在~/.cursor/rules/目录下生成或更新一个README.md说明规则加载顺序如果Aether规则与其他规则冲突可能需要调整。第三步验证安装完全关闭并重新启动 Cursor。这一点非常重要因为 Cursor 只在启动时读取钩子配置。打开任何一个项目可以是新项目也可以是你常用的项目。在项目中打开 Cursor 的聊天面板创建一个全新的聊天New Chat。在输入框里简单地输入你好或hi并发送。如果安装成功你将在AI回复的最顶部看到一行以⟁ Aether开头的状态行类似于⟁ Aether · Day 1/30 · 0/0 · scope: unregistered · handover: none这行状态是Aether的“心跳”表明它已经成功介入并注入了上下文即使当前项目还未初始化记忆为空。4.3 项目初始化与个性化配置看到状态行只代表Aether框架在工作但要让它为当前这个特定项目服务你需要初始化项目的记忆仓库。初始化当前项目在终端中确保你的当前目录是目标项目的根目录然后运行# 假设你现在在 ~/my-awesome-project 目录下 aether project init --apply这个命令会在~/my-awesome-project/.aether/下创建必要的目录和文件并将该项目注册到Aether的系统里。之后你再在这个项目里开新聊天状态行就会变成⟁ Aether · Day 1/30 · 15/100 (10 ok · 1 warn · 0 fail) · scope: dev my-awesome-project · handover: nonescope: dev my-awesome-project表示你正在“开发模式”下使用Aether作用于my-awesome-project项目。可选每日工作流初始化Aether 有一个“30天实验”的叙事框架它会鼓励你每天写交接备忘录。如果你想使用这个功能可以初始化每日日志aether daily init --apply这会在.aether/下创建chronicle/目录用于存放按日期组织的日志。如果你觉得这套叙事太复杂完全可以跳过这一步只使用核心的记忆功能。4.4 安装过程常见问题与排查问题1运行安装脚本时提示“Python找不到”或“模块错误”。原因系统可能默认的Python版本过低或者python命令不存在。解决使用python3命令尝试python3 aether/bin/aether_install.py --global --apply如果还不行检查Python版本python3 --version。确保是3.9。对于Windows用户如果从微软商店安装了Python可能需要以管理员身份运行PowerShell或确保Python在系统PATH中。问题2重启Cursor后新聊天没有出现⟁ Aether状态行。原因1Cursor 没有正确加载钩子。可能是hooks.json格式错误或路径不对。排查检查~/.cursor/hooks.json文件是否存在内容是否包含aether相关的条目。检查~/.cursor/rules/目录下是否存在aether.mdc文件。彻底重启Cursor完全退出包括系统托盘图标再重新打开。原因2项目路径包含特殊字符或空格导致钩子脚本执行失败。排查尝试在一个路径简单如~/test的新项目中测试。问题3状态行显示scope: unregistered。原因当前项目没有运行aether project init --apply。解决这很正常。这表示Aether框架在运行但尚未为该项目激活记忆功能。按照上述“项目初始化”步骤操作即可。问题4我想卸载Aether。恢复全局配置运行python aether/bin/aether_install.py --global --revert。这会将hooks.json恢复为备份版本。删除项目记忆在项目根目录运行aether project uninstall --apply这会删除该项目的.aether/文件夹。完全删除直接删除你克隆的~/aether目录即可。5. 高级功能与深度使用技巧安装只是第一步真正发挥Aether的威力需要理解并运用其高级功能。5.1 场域Field系统让AI切换角色场域是Aether的一个核心概念它定义了AI在当前会话中的“角色”或“工作模式”。Aether内置了5种场域并支持自动和手动切换。内置场域dev通用开发模式。默认场域。code-review代码审查模式。会自动在上下文中强调代码风格、潜在bug和安全问题。debug调试模式。会倾向于注入更多的日志、堆栈跟踪和假设验证思路。plan规划与设计模式。适合讨论架构、API设计、任务拆分。dev-selfAether自我开发模式。当你在aether-kit项目本身工作时使用上下文会包含项目自身的开发规范。自动场域激活这是Aether的智能之处。你不需要记忆命令。只需像平常一样提问输入“Reviewthis function for potential issues.”Aether检测到“Review”关键词自动将场域切换到code-review。状态行会变为scope: code-review your-project。AI的回复会更具审查视角。手动场域切换你也可以通过命令精确控制aether field set code-review执行后在当前会话的下一次AI交互中就会应用新的场域上下文。5.2 决策坍缩Collapse日志记录关键转折点在长期开发中有些决策至关重要比如“为什么选择MongoDB而不是PostgreSQL”、“为什么重构这个模块”。普通的聊天记录会淹没这些信息。Aether的collapse功能就是用来记录这些“决策点”的。记录一个决策aether collapse log “决定使用WebSocket替代长轮询进行实时通知主要考量是降低服务器负载和实现更低的延迟。”这条记录会被写入.aether/collapse/目录下的一个文件并附带时间戳。在新会话的上下文注入中最近3条collapse日志会被自动包含进去确保AI始终记得项目最重要的几个决策依据。5.3 每日交接Daily Handover工作流这是实现“记忆连续”的关键操作。建议在每天下班或一个深度工作阶段结束时进行。基本使用aether daily write这个命令会做以下几件事扫描当天的events.jsonl记录了会话、工具使用等事件。尝试获取当前聊天窗口的最后几条消息如果Cursor API允许。生成一份Markdown格式的交接文件例如.aether/handover/day-5-handover.md。文件内容通常包括今日完成的工作、遇到的阻塞、明天的待办事项、以及任何重要的临时笔记。高级技巧交互式编辑直接运行aether daily write生成的内容可能比较机械。你可以使用交互式模式aether daily write --interactive这会打开你的默认文本编辑器通过$EDITOR环境变量设置让你在自动生成的内容基础上进行润色、补充细节保存后即生效。5.4 诚实自检与状态监控Aether 自带一个非常实用的自检工具它不仅能检查文件是否存在还能给出一些“健康度”提示。aether selfcheck --honest这个命令会输出一份详细的报告例如[OK] Hook files are present in ~/.cursor/ [WARN] Project ‘my-project’ has no handover file yet. [OK] Rule ‘aether.mdc’ is loaded by Cursor. [INFO] Total events recorded: 127 [INFO] Last handover was 2 days ago.通过自检你可以快速了解Aether的运行状态及时发现配置问题。6. 实战场景与案例演示让我们通过几个具体的场景看看Aether如何改变你的开发体验。场景一中断后无缝继续没有Aether周一你和AI花了1小时设计了一个用户认证模块的API接口讨论了JWT vs Session决定了用OAuth2.0的授权码流程。周二你打开新聊天问“我们昨天定的认证API规格是什么” AI一无所知。使用Aether周一结束时你运行了aether daily write生成了day-1-handover.md里面记录了“认证模块设计完成采用OAuth2.0授权码流程API端点规划如下...”。周二新聊天窗口一打开AI的第一条回复就带着状态行并且在其上下文里已经包含了昨天的交接摘要。你可以直接问“基于昨天的设计开始实现/auth/callback端点吧。” AI会直接基于已有上下文开始工作。场景二多项目并行开发没有Aether你在项目A一个React前端和项目B一个Go后端之间切换。在项目B的聊天中AI可能会混淆引用React的组件概念。使用Aether每个项目有独立的.aether/目录。切换到项目B时Aether加载的是项目B的记忆可能是关于Go结构体、Gin路由的讨论。AI的上下文被完美隔离回复始终紧扣当前项目技术栈。场景三团队知识沉淀间接说明Aether本身是单人工具。但你可以利用它生成的handover和collapse文件。做法将.aether/handover/目录纳入版本控制可以忽略events.jsonl这类日志。这样团队新成员拉取代码后不仅能看代码还能看到一份由AI辅助生成的、按时间线排列的“项目开发日记”和“关键决策日志”极大降低了 onboarding 成本。7. 局限性、边界与未来展望没有任何工具是银弹清楚地认识Aether的边界才能更好地使用它。7.1 当前已知的局限性依赖 Cursor 的 Hook 系统这是最大的风险。如果 Cursor 在未来版本中大幅修改或移除了 Hook 功能Aether 可能需要重写适配层甚至失效。记忆容量与模型上下文限制Aether 注入的记忆是纯文本会占用宝贵的模型上下文窗口Token。虽然它只注入摘要和最近决策但如果你的handover写得非常冗长仍可能挤占当前对话的空间。需要用户有意识地撰写精炼的交接。无图形界面CLI Only所有操作都在终端完成。这对于开发者来说不是问题但对于希望有按钮和界面的用户来说门槛较高。单人工具设计初衷是解决个人开发者的上下文丢失问题没有内置团队同步机制。团队使用需要配合版本控制等外部工具。7.2 与类似工具的比较特性/工具AetherCursor原生Memory其他向量数据库方案核心原理基于会话交接的确定性记忆基于向量检索的语义记忆基于向量检索的长期记忆数据存储本地文件系统可能本地云端本地/云端向量数据库记忆粒度粗粒度会话/日细粒度代码片段/对话可配置的任意粒度上下文关联强基于时间线中基于语义相似度中基于语义相似度配置复杂度低安装即用低内置高需搭建数据库、定义嵌入模型等隐私性极高完全本地取决于Cursor策略取决于部署方式适合场景长期、连续的单人项目通用适合碎片化任务需要海量、跨项目知识检索7.3 我个人的使用体会与建议经过近两周的密集使用和开发Aether 已经成了我 Cursor 工作流中不可或缺的一环。它最大的价值不是“记住了什么”而是“让我和AI都免于重复”。我不再需要做“人类上下文管理器”可以把精力完全集中在问题本身。几点深度使用建议勤写handover不要等到项目巨大变动时才写。每天下班前花5分钟运行aether daily write --interactive整理一下思路这本身就是一次很好的复盘。善用collapse把collapse当作项目的“决策日志”或“架构决策记录ADR”。任何重要的技术选型、推翻重来的决定都记上一笔。三个月后回看价值连城。场域是快捷键有意识地在提问前想一下“我现在需要它扮演什么角色” 如果是审查代码就以“Review this…”开头让自动切换帮你进入状态。保持.aether/的整洁定期查看events.jsonl文件如果过大可以按日期归档或清理。handover文件是宝库但太旧的、无关的可以移出handover/目录到其他位置存档。这个项目目前还非常年轻但它解决了一个真实且高频的痛点。它的未来取决于像你一样的开发者是否觉得它有用。如果你试了无论好坏都欢迎去 GitHub 留下你的声音。毕竟一个真实的“这没用”的反馈远比沉默的安装有价值得多。