实际上迁移了什么
您的引导文件,转换为 CLAUDE.md 加上路径范围规则。 Kiro 为工作区加载 .kiro/steering/,并在全局加载 ~/.kiro/steering/,在冲突时优先考虑工作区。Claude Code 的等效项是用于“项目团队共享指令”的 ./CLAUDE.md 和用于“所有项目的个人偏好”的 ~/.claude/CLAUDE.md —— 但请注意,解析方式有所不同:Claude Code 按加载顺序进行拼接,而不是覆盖,并警告说“如果两条规则相互矛盾,Claude 可能会任意选择一条”。
Kiro 的包含模式找到了部分归宿。.claude/rules/ 文件接受 globs 的 paths: frontmatter 字段,并且“仅在 Claude 处理与指定模式匹配的文件时适用”,这与 Kiro 的 fileMatch 非常接近。Kiro 的 always 变成了一个普通的、始终加载的文件。Kiro 的 manual 和 auto 模式(通过 #name 调用或由智能体根据描述选择)没有直接的规则等效项,因此这些文件要么变成技能(skills),要么变成您应该修剪的始终开启的文本。
您的 AGENTS.md,但有一个警告。 Kiro 会读取它并指出“AGENTS.md 文件不支持包含模式,并且始终包含在内”。Claude Code 则“读取 CLAUDE.md,而不读取 AGENTS.md”。文档中记载的桥接方法是在 CLAUDE.md 顶部添加一行 @AGENTS.md 导入,之后导入的文件将在会话启动时加载。请保持一个文件具有权威性;导入解析的“最大深度为四跳”,并且每个导入的文件都会在启动时进入上下文。
您的技能(Skills),作为目录移动。 两者都基于相同的开放标准。Kiro 的技能目录在个人技能中变为 ~/.claude/skills/<name>/SKILL.md,在项目技能中变为 .claude/skills/<name>/SKILL.md。注意优先级,它反转了 Kiro 的引导行为:Claude Code 的规则是企业覆盖个人,个人覆盖项目,因此同名的个人技能会胜过项目技能。
您的规范(specs),作为可读文件。 .kiro/specs/<name>/ 包含 requirements.md、design.md 和 tasks.md —— 它们是您仓库中的 markdown 文件,在迁移后仍然可读。围绕它们的三阶段工作流则不会随之迁移。
您学到的记忆,进入一个真实但更简单的容器。 这是全新的部分,值得单独用一个章节来介绍。
其他内容都无法干净地迁移,并且有四件事的表现有所不同。
六个层级折叠为四个类别。 Claude Code 的自动记忆记录了一个 type 字段,包括 user(“您的角色、专业知识和工作偏好”)、feedback(“您给 Claude 的纠正以及您确认的方法”)、project(“进行中的工作、截止日期以及 Claude 无法从代码或 git 历史中推导出的决策”)和 reference(“在项目之外哪里可以找到信息”)。Kiro 的 preferences.md 映射到 user;其教训(lessons)映射到 feedback;projects.md 和历史记录大致映射到 project。它的语义和情景存储(带有向量搜索、单条目重要性和每次查询前 8 个检索结果的 SQLite 表)则没有对应项。Claude Code 保留了一个 MEMORY.md 索引以及每个记忆一个主题文件,并且“在启动时不会加载诸如 user_role.md 之类的主题文件...”。
您的教训失去了保证。 这是需要提前规划的损失。Kiro 将教训作为置信度为 1.0 的语义条目存储,通过子字符串和主题重叠对其进行去重,上限为 50 个,并将其“作为一个独特的 [Learned corrections](学到的纠正)块”注入 —— 该块自身的文本写着“始终遵守这些。它们会覆盖默认行为。”其冲突解决顺序将教训放在第一位,高于其他一切。Claude Code 的 feedback 类型是文件中的一个笔记,与所有其他内容一起加载,其文档明确指出指令内容是“上下文而非强制配置”。相同的信息,承诺却弱得多。
衰减被断崖式限制所取代。 Kiro 优雅地淡出:历史记录在 14 天时降为“每天第一条记录 + 计数”,在 61 天时降为“仅日期 + 记录计数”,在 181 天时停止加载,并在 365 天时“从磁盘中删除”;情景条目按照明确的曲线衰减 —— “~23 天时衰减 50%,~77 天时衰减 10%” —— 并且在达到 10,000 条记录时,存储会首先修剪“重要性最低、最旧”的记录。Claude Code 没有衰减。它的文件“会一直保留,直到您或 Claude 编辑或删除它们”,并且被刻意排除在会话转录保留清理之外。相反,它有一个读取限制:“MEMORY.md 的前 200 行,或前 25KB,以先到者为准”,如果索引超限,“写入仍然成功”,但“在下次加载时,超出限制的所有内容都会被丢弃”。优雅的淡出变成了硬性的截断。
置信度门控消失了。 Kiro 要求 LLM 写入语义记忆的“置信度 ≥ 0.8”,且“无论置信度如何,用户显式写入总是胜出”。Claude Code 的决定则不同:“Claude 不会每个会话都保存内容。它根据信息在未来的对话中是否有用来决定什么值得记住。”这是一种主观判断,而不是一个阈值 —— 谈不上更好或更坏,但它不是一个您可以推理的调节旋钮。
手动迁移
步骤 1:在停止使用 Kiro 之前,读取没有迁移目标的层级
首先进行快照:kirocrew snapshot 将记忆、工作区、定时任务(crons)、配置、技能和通知打包成一个 tar 包。只有 Kiro 能读取它,因此请将其视为备份,而不是导入文件 —— 并且 Kiro 内置的每日任务“保留最近 7 个快照”,所以不要以为上周的快照还在。来自 Kiro 自身文档的一个警告:“快照包含敏感数据(用于审计日志完整性的安全密钥)。”
然后按此顺序读取四样东西。
您的教训。 上限 50 个,置信度 1.0,是 Kiro 中优先级最高的层级。这些是您直接指出或 Kiro 从您纠正它的模式中提取的纠正。您的仓库中没有任何内容暗示它们,而它们即将变成普通的笔记。
preferences.md 和 projects.md。 两者都是“每 30 条消息由整合器整体替换 —— 而非仅追加”,这意味着您正在阅读的是 Kiro 当前对您的模型,而不是日志。它们的上限也分别为 4,250 和 6,400 个字符,因此这是一次简短的阅读,但信噪比异常高。
您的情景条目。 简短的片段,每个 10–2,000 个字符,最多 10,000 个。您不需要阅读全部内容;查询您仍在进行的项目的条目并略读,因为每次查询检索只会返回前 8 个结果。
Kiro Web 的学到记忆(如果您使用过它)。 在“设置”下的“记忆”中。Kiro 自己的表格划定了一条值得内化的界线:记忆是“智能体在您工作和提供反馈时自动学习的内容”,用户控制“删除”;引导是“您显式编写的内容”,用户控制“所有编辑”。这里只有前半部分面临风险。
步骤 2:落地手动编写的一半,然后对为您自动编写的一半设定预期
首先是指令。 将 .kiro/steering/ 转换为 CLAUDE.md 加上 .claude/rules/ 文件,在引导文件具有 fileMatch 模式的任何地方使用 paths: globs。如果您想要一个生成的起点,可以运行 /init;它“会建议改进,而不是覆盖”现有文件。
然后进行修剪。Claude Code 的指导建议是“每个 CLAUDE.md 文件的目标行数在 200 行以下”,因为“较长的文件会消耗更多上下文并降低遵循度”。一个发展到十几个始终开启的文件的引导目录在这样的预算下是无法完好无损地保留下来的,坦率的做法是决定放弃什么,而不是让读取限制替您做决定。
使用 /context 确认实际加载的内容,并检查 Memory files 下的列表。这是权威的答案,也是文档中记载的第一步调试步骤。
然后是自动记忆,给它一周的时间。 它默认是开启的。它的存储路径是 ~/.claude/projects/<project>/memory/,其中 <project> “派生自 git 仓库,因此同一仓库内的所有工作树和子目录共享一个自动记忆目录。”
现在需要内化而不是以后才发现的两个属性。它与您的指令文件是刻意互补的 —— Claude “会跳过任何它可以从代码库中推导出的内容”并“跳过您的 CLAUDE.md 文件中已经说明的内容” —— 因此记忆目录中保存的恰好是您转换后的引导文件所没有的内容。而且它不可移植:“自动记忆是机器本地的”且“文件不会在机器或云环境之间共享”。
因此,这次迁移的可移植性故事的真实总结是,您从一个家目录移动到了另一个家目录。Kiro Crew 的记忆保存在 ~/.kiro/ 下;Claude Code 的记忆保存在 ~/.claude/ 下。两者都无法迁移 —— 该问题的普遍情况在为什么 Claude Code 会丢失项目上下文中有所介绍。
一周后运行 /memory 并阅读它写入的内容。然后将您的 Kiro 教训重新输入为显式内容,因为 Claude 为自己编写的 feedback 笔记与您坚持要求的规则并不相同。
更好的方法:将学到的那一半保存在家目录无法困住的地方
看看这次迁移实际上包含了什么。引导文件干净地转换了。技能需要移动目录。规范保持可读。而真正需要费功夫的部分 —— 那个没有干净迁移目标的部分 —— 是存放在一台机器上一个用户家目录下的六层学到的知识,您必须手动读取并重新输入。
这不是 Kiro 的问题,也不是 Claude Code 的问题。两者都构建了学习记忆系统,设计上都将其保持在本地,这都是合理的工程选择。这只是意味着,关于您为什么拒绝某种方法的唯一副本不应该存在于这两者中的任何一个中。
这正是 MemoryLake 所保存的:您项目的持久知识保存在您的工具可以查询的层中,这样下一次切换就只是一个偏好选择,而不是一次抄写练习。设置分为三个步骤。
步骤 1:创建 API 密钥
登录并创建 API 密钥。在您连接的工具中使用同一个凭据。

步骤 2:上传您的第一批记忆
简短的条目,每条包含一个断言。在步骤 1 的阅读记忆犹新时,直接写下这些内容:

您的 50 个教训,每个条目一个。 Kiro 中优先级最高的层级,也是您拥有的最难重建的东西。
preferences.md 和 projects.md 当前的内容。 整体替换的文件在结构上很短。将它们拆分为断言,而不是直接粘贴。
附带原因的决策。 “我们对写入进行排队,因为副本在负载下存在延迟。”规则规定了策略;但只有原因才能阻止替代方案再次出现。
在此处已经尝试并拒绝的方法。 引导中没有,提交信息中没有,但每次会话都会被重新提出。
步骤 3:连接您的 AI 和智能体
MemoryLake 可通过 MCP 和 API 访问,并且 Kiro 和 Claude Code 都支持 MCP 服务器 —— 因此您可以在过渡期间并排运行它们,而无需维护同一套推理的两份副本,其他助手也可以通过 API 读取相同的记忆。

三个坦率的限制。MemoryLake 无法读取 Crew 快照、导入 Kiro Web 的记忆,或写入您的 CLAUDE.md 和自动记忆文件 —— 这些是每个产品自己的界面,上述加载器行为属于它们自己。它只保存您或您的智能体放入其中的内容,因此步骤 2 是手动的。而且指令是上下文,而不是强制配置;对于每次都必须遵守的内容,Claude Code 自己的解决方案是钩子(hook),而不是文件。
这在实践中改变了什么
引导转换大部分是机械性的。 fileMatch 变为 paths: glob;始终开启保持始终开启。
技能需要移动目录和优先级检查。 个人胜过项目。
您的纠正失去了覆盖块。 将重要的纠正重新表述为显式指令,而不是笔记。
自动修剪停止。 不再有分层淡出 —— 但 MEMORY.md 在超过 200 行或 25KB 时会进行硬性截断。
可移植性没有改善。 从一个家目录到另一个家目录 —— 该问题的普遍情况在持久记忆实际上意味着什么中有所介绍。
从 Kiro 切换到 Claude Code 的最佳实践
首先进行快照,并让 tar 包远离共享驱动器。 Kiro 标记了它包含敏感密钥。
在做其他事情之前,先读取您的教训。 50 个条目,最高优先级,另一端没有等效的保证。
将教训重新表述为指令,而不是记忆。 feedback 笔记是上下文;而您编写的 CLAUDE.md 行则是意图。
将 fileMatch 引导转换为 paths: 规则,并修剪其余部分。 200 行的目标是您应该视为预算的指导。
使用 /context 进行验证,而不是 memory。 Memory files 列表才是实际加载的内容。
注意 MEMORY.md 的长度。 超过读取限制后,“在下次加载时,超出限制的所有内容都会被丢弃”。
不要将代码库粘贴到 CLAUDE.md 中。 两家厂商都建议不要重复阐述仓库中已经存在的内容 —— 成本方面在如何阻止 Claude Code 重新读取您的代码库中有所介绍。
将推理保留在这两个工具之外。 这里的每一层都有上限,而推理是首先被削减的内容 —— 普遍版本在为什么长上下文窗口不是记忆中有所介绍。
结论
从 Kiro 到 Claude Code 是该系列中第一次学到的那一半有去处的迁移,这使得它在变得更容易的同时也更具欺骗性。引导转换为 CLAUDE.md 加上 paths: 范围的规则,AGENTS.md 通过单行导入进行桥接,技能逐个文件夹移动,规范保持可读。自动记忆默认开启,并在一个星期内开始记录您的纠正。
损失是具体的。六个层级变成了四种笔记类型,而 Kiro 的语义和情景存储(置信度门控写入、向量检索、单条目重要性、明确的衰减曲线)则没有对应项。您的教训失去了任何一个系统所能提供的最强保证:在冲突解决顺序顶部的一个独特的注入块,告诉智能体这些内容会覆盖默认行为。自动衰减被硬性读取限制所取代,该限制会默默丢弃超过 200 行或 25KB 的任何内容。而且可移植性并没有改善,因为这两个系统都将学到的记忆保存在一台机器上的家目录中。
因此,进行快照,读取您的 50 个教训和两个整合文件,使用 glob 映射转换引导,并将重要的纠正重新表述为指令,而不是寄希望于它们被重新学习。然后将决策和被拒绝的方法放在一个既不属于 ~/.kiro/ 也不属于 ~/.claude/ 的层中,这样下一次切换只会花费您一个下午,而不是一个季度。