前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片NEW
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 业务场景题真实业务问题与追问
  • 查漏补缺常见问题解析
  • AI 模拟面试NEW模拟真实面试 + 报告
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
    • AI 定制路线NEW按你的简历现排
    • AI 知识地图NEW串起全站知识点
  • 动态
    • AI 热点NEWAI 每日动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
AI 助手NEW
旧版
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片NEW
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 业务场景题真实业务问题与追问
  • 查漏补缺常见问题解析
  • AI 模拟面试NEW模拟真实面试 + 报告
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
    • AI 定制路线NEW按你的简历现排
    • AI 知识地图NEW串起全站知识点
  • 动态
    • AI 热点NEWAI 每日动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
AI 助手NEW
旧版
返回 AI 情报前线
All News · 全部资讯8485
  • 让 RAG 拒绝使用劣质上下文
  • TypeScript Agent 的四层注入防线
  • 用 LangGraph.js 实现持久化人工审批
  • Node应用如何精确核算LLM成本
  • Token防火墙削减35%上下文成本
  • Qwen3.8 Max性能追近Opus
  • 伪造审查备注绕过AI反诈检测
  • 用 MCP 为纯文本编程智能体补上视觉
  • Cloudflare推出网站智能体就绪度指标
  • Cloudflare构建开放智能体互联网协议
  • Cloudflare推出私有数据AI搜索
  • 一键为现有网站接入WebMCP
  • Kitesurf:运行在Workers上的智能体浏览器
  • 新版MCP转向无状态架构
  • 让过期的 Agent 上下文直接阻断 CI
  • 昇腾适配 Ling-3.0 并推出 PyPTO
  • 让编程 Agent 用你熟悉的语言写脚本
  • 数据库索引提速背后的写入代价
  • Meta低价模型与可恢复编程Agent登场
  • 如何构建 Agent 难以作弊的评测
  • Claude Code 迁移 OpenCode 踩坑实录
  • RAG向量数据库的真实成本陷阱
  • 编码代理缺失的其实是产品定义
  • 用熔断机制约束失控的 AI Agent
  • 别让 AI 任务止步于聊天记录
  • 人类审核仍漏掉三分之一智能体威胁
  • OpenAI智能体曾秘密协同攻击
  • AI 工作流为何会在无改动时失效
  • 开源本地化求职管理平台 FitPilot
  • 在一次性沙箱中测试编程 Agent 越界
  • 别把系统提示词写成规则仓库
  • Agent 审批卡的盲签名陷阱
  • 为真实项目编写AGENTS.md的经验
  • 用固定语料阻止AI审查能力回退
  • 为AI代码变更建立分阶段权限门禁
  • 别让LLM评测工具测到自身拥塞
  • AI自动扫描将放大密钥泄露风险
  • GPT-5.6 Sol能力升级并扩大免费开放
  • 人脸识别的94%匹配为何不可信
  • 如何测试具备工具权限的完整Agent链路
  • 多Agent共享状态为何会静默丢失
  • 一次失控编程Agent如何烧掉138美元
  • 一条命令统一九类触觉传感器数据
  • VS Code 1.132强化智能体开发体验
  • 用对话式设计Agent生成流水线契约
  • 精简智能体规则文件的实用原则
  • LLM 评审为何不能替代确定性校验
  • 用定时 Codex 任务生成可靠日报
  • 六智能体协作生成并部署游戏
  • GitHub 原生堆叠式 PR 改善评审瓶颈
  • Ollama 加速苹果芯片上的 Qwen3.5
  • 已加载 51 / 8485
8.0
热点
AI SCORE
编程提效2026-08-06 20:24

Claude Code 迁移 OpenCode 踩坑实录

dev.to · AI#Claude Code#OpenCode#上下文管理
Editor brief · 编辑速览

作者发现将 Claude Code 的记忆、规则和参考文件直接复制到 OpenCode 后,出现规则未生效和上下文混用等问题。迁移的关键不是复制文件,而是按新工具的加载机制重新声明配置。

文章思维导图
Knowledge map
拖拽缩放
Full translation

完整中文译文

我的 Claude Code 配置很小,正因如此,它出问题时才让我如此意外。根目录下有一个 CLAUDE.md,旁边放着一个 MEMORY.md,还有一个参考文档文件夹,以及另一个充当规则文件的 CLAUDE.md。这套配置安稳运行了几个月。然后,在我完全没有改动任何东西的情况下,它开始泄漏上下文。

Claude 混淆了这些文件——规则被当成了指令,记忆被当成了参考资料——而且我眼看着每次会话的 token 数量不断攀升。我明明什么都没碰。最令人沮丧的正是这一点:它证明了这套配置从第一天起就很脆弱,只是裂缝过了几个月才显现出来。

所以我换了工具。彻底换了。我把所有文件都带到了 OpenCode,然后开始和它对话。它记得我,却无视了我的指令。

下面就是迁移之后出问题的地方——按影响程度排序,并附上每一项的重建方式。简而言之:迁移不是复制文件,而是重新声明。

出了哪些问题,按影响程度排序

下面的排序依据,是每项故障给我造成了多大损失,而不是它闹出了多大动静。最安静的问题,造成的伤害反而最大。

问题 1——我的指令没有一起迁移过来

OpenCode 加载了我的记忆——它能够正确引用 MEMORY.md 里的笔记和约定。但我在 CLAUDE.md 中定义的规则并没有生效。究竟是当时四月份的 OpenCode 版本根本没有加载这个文件,还是加载后又忽略了它,结果都一样:我的指令没有得到遵守。

等我停下来认真想了想,原因就变得很明显:CLAUDE.md 是 Claude 的规则文件,而 OpenCode 读取的是 AGENTS.md。

从纸面上看,这只是改一行文件名。实际操作中,它却第一次证实了这次迁移本质上是一场翻译,而翻译工作落在了我身上,不是工具身上。

重建方式:在 AGENTS.md 中重新声明你的规则。不要直接复制——要重新声明,因为旧规则里一些原本被默认成立的前提,在新环境中已经成了不可或缺的基础。然后验证这些规则是否真的生效。运行 /init(OpenCode 会读取 CLAUDE.md,并以此生成 AGENTS.md——参见文档),再在一个全新会话中询问 Agent:“我的规则是什么?”如果它不能复述这些规则,就说明规则没有被加载。已加载并不等于会遵守。

问题 2——我让 OpenCode 迁移它前任的配置

我把这次迁移理解成:“带上文件,再告诉新 Agent 我原来有什么。”接着我又多走了一步:我让 OpenCode 替我迁移 skills 和 MCP servers。

让一个工具迁移其前任工具链的问题在于:它不知道自己不知道什么。它无法盘点那些自己从未拥有过的东西。它不知道我的哪些 skills 是不可或缺的,哪些 MCP 我只用过一次便忘了,也不知道配置究竟存放在哪里。它告诉了我它所知道的内容,却无法告诉我遗漏了什么,因为那些缺失的东西从未存在于它的世界里。

重建方式:先盘点。接触新工具之前,列出你实际使用的每一个 skill、命令和 MCP server。趁旧工具仍然可用、还能向它询问时,把这些内容全部写下来。然后有意识地决定哪些需要重建,哪些应该舍弃。这份清单就是迁移计划——没有它,你迁移的只会是那些碰巧幸存下来的东西。

问题 3——成功迁移的东西也悄悄降级了

那些确实迁移过来的 skills,行为也和以前不同。OpenCode 能够读取它们,却会忽略 frontmatter 中的部分内容,包括模型分配、允许使用的工具和参数处理方式。它也不会像 Claude Code 那样自动触发这些 skills;在 OpenCode 中,skills 是按需加载的,只有 Agent 决定调用时才会加载。

整个过程没有大声报错。它们只是变得没那么好用了。这是最糟糕的一类故障:悄无声息的故障。因为只有当你信任某个 skill,而它又悄悄做错事情时,问题才会暴露出来。

这一点甚至已经写进了文档:OpenCode 只识别 skill frontmatter 中的 name、description、license、compatibility 和 metadata(参见 skills 文档),其他所有内容都会被静默忽略。

重建方式:在证明效果一致之前,先假设每个移植过来的 skill 都已经降级。重建你真正会用到的 skills,删除其余内容(后文“重建,不要移植”一节会详细说明)。

问题 4——摩擦成本

你需要按 Tab 键手动切换 plan 和 build 模式,而不是像 Claude Code 那样自动过渡。快捷键不同,滚动行为也不同。这些都不是 bug,但在最初几周里,它们会不断带来一种低强度的“哪里不太对劲”的感觉。

迁移指南里从来不会提到这个问题,因为功能对照表中根本看不到它。这是一种成本,而不是缺陷。

重建方式:像评估学习曲线一样,为适应期预留时间——预计会有两到三周无法顺畅进入工作状态,而不是两天。第一天就把 Claude Code 中最常用的三个快捷键映射到 OpenCode 的对应操作。强迫自己适应变化,不要继续依赖旧的肌肉记忆。

问题 5——它没有影响我,但会影响你:没有自动记忆

OpenCode 没有原生的跨会话记忆。它不会像 Claude Code 那样,悄悄“记得你上周说过什么”。相关功能请求(#20322)仍处于开放状态,尚未发布。

我的 MEMORY.md 能够在迁移后保留下来,是因为它本身就是一个文件。你的记忆未必能留下。如果你一直依赖 Agent 自动记住不同会话中的内容,那么切换工具的那一天,这些记忆就会全部蒸发。

重建方式:为 Agent 准备一份会话日志。在 AGENTS.md 中加入一条指令:

## Session log
At the end of every session, append a short summary to `session-log.md`:
what was done, what's pending, and any decisions made. Never lose a decision.

仅这一条指令,就替代了我失去的静默记忆——而且让我的记忆系统变得更好,因为现在它是显式的、可以通过 grep 搜索的,也能移植到我接下来使用的任何工具中。

我得到了什么(另一面的砝码)

只列出四项故障,却不提任何收益,就成了一篇刻意攻击 OpenCode 的文章。下面是另一半真实情况。

默认权限优先。OpenCode 运行在我自己的硬件上——密钥也由我自己提供。它开箱即用的行为是:执行操作前先征求许可。如果它想读取当前目录之外的文件夹,就会停下来询问。我批准之后,它才继续执行。相比任何基准测试表,这种行为都更快地重建了我对工具的信任。它的限制也必须如实说明:在工作目录内部,默认权限比较宽松;而 .env 文件默认禁止访问——这是正确的默认设置。另外,请保持版本更新:2026-22812 和 22813 这两个 CVE 已经修复,而在一套原本强调 local-first 的配置中,使用过时的 harness 才是最大的风险。

一个密钥,多个模型。我的配置刻意保持简单:内置模型,再加上一枚 OpenRouter API key。一枚密钥就能使用数十个模型。针对某项任务切换模型,只需要改一行配置——不需要更换 harness,不需要新的订阅,也不需要重新走注册流程。用过 Claude Code 之后,那种模型只能取决于 Anthropic 发布了什么的感觉,终于消失了,仿佛天花板被掀开。

真实的成本。2026 年 1 月 9 日,是很多人都记得的日子——那一天,Anthropic 开始限制第三方工具使用 Claude subscription OAuth,并计划在当年四月彻底切断访问。那也是我的项目停摆的一天:我坐下来准备继续两三周前开始的工作,却发现什么也做不了。一个工作日就这样浪费了,项目卡住了,而我付费购买的订阅,也不再以我付费时所期待的方式工作。换到另一边后,我的 token 账单终于变成了一笔可以实际分析和推算的开支,而不是一项要么能用、要么不能用的固定订阅。

真正重要的一条经验:重建,不要移植

有一个完全相反的现象,重塑了我对整件事的理解:我迁移过来的 skills 会悄悄降级,但一个全新安装的 skill 第一次运行就成功了。不需要调试,不需要和 frontmatter 较劲,也没有“为什么这个东西加载不了”的疑问。放进去,调用它,就完成了。

这彻底改变了我看待整个迁移过程的方式。不要移植你的 skills——重建那些你真正使用的 skills。

这不仅适用于 skills,也适用于规则、记忆和 MCP 配置。它还解释了为什么移植过来的东西会有不同的行为:harness 的影响比人们愿意承认的更大。同一个模型,换一个 wrapper,结果就会出现可衡量的差异——在 2026 年的一项基准测试中,OpenCode 用 7 分钟完成了任务,零错误;Claude Code 使用同一模型耗时 14 分钟,并犯了两个错误。另一组来自 tracker 的 SWE-bench 数据显示,同一模型在两种 harness 下运行,成绩会相差约 3.6 分。Agent 的能力上限,取决于你向它声明了什么。

带走知识,重建工具链。

我还会再迁移一次吗?会。这是我重来第一天的做法

直接说答案:会。故障清单中的问题加在一起,也从未严重到足以让我退回去。本地运行、默认权限优先、重建后比原版更好的 skill 工作流,以及成本——这四项收益压过了故障清单上的每一个问题。这一点比那些故障本身更让我意外。

但如果重来一次,我会改变第一天的做法,顺序如下:

先构建 AGENTS.md——由这个文件统一管理状态。整个上午都应该花在它身上,而不是迁移其他东西。

加入 session log 指令(“记录每个会话中做过的事情”),确保任何内容都不会被遗忘,任何决定都不会从缝隙中掉下去。

重建你真正使用的三个 skills,删除其余内容。

手动重新声明 MCP。信任它们之前,先审查版本。

有意识地决定模型和权限策略——运行什么模型、密钥保存在哪里、允许它读取哪些位置。

这次迁移中,大多数出问题的地方并不在工具本身,而在于我的知识存放在新工具无法读取的位置。解决办法不是打造一个更好的导入器,而是从第一天起就写好一个统一管理状态的文件。

如果你想获得多 provider 的自由,或者使用本地模型;如果你已经被 subscription OAuth 的经济账折腾得筋疲力尽;如果你看重权限优先的工作流;如果你愿意重新声明规则,而不是简单复制它们——那就迁移。

如果你已经深度投入 Claude 生态——skills、hooks、自动记忆;如果你希望开箱即用的速度和完成度;如果你对固定订阅感到满意;如果你无法承受数周适应期——那就留下。

或者两者一起用。这是诚实的折中方案:用 Claude Code 处理快速的交互式工作,用 OpenCode 做 provider 实验。几位评审者都明确推荐这种方式,而我的迁移经历也没有任何地方与之矛盾。

不要做这些事(检查清单)

复制文件,却不重新声明规则。迁移是重新声明,不是复制文件。

相信“直接放进去就能用”或“完全对等”之类的说法。真正的对等需要 wrappers、plugins,以及手动重新声明。

仅仅因为文件已经加载,就假定规则已经生效。已加载 ≠ 会遵守。务必验证。

让新 Agent 迁移旧配置。它无法盘点那些自己从未拥有过的东西。

忽视成本模式的变化:按 token 计费的模型、prompt cache 未命中,以及新的订阅成本结构。

跳过安全和版本审计。2026-22812/22813 这两个 CVE 已经修复,请保持版本更新。

四项故障,四项收益,毫不后悔。所有故障都可以追溯到同一个根源:知识确实存在,只是存放在新工具无法读取的位置。而每一个问题的解决办法也完全相同——把它声明出来,再把它记录下来。

这次迁移的重点,并不是哪种 harness 更好,而是有意识地让我的工作流具备可移植性。只有这样,迁移才能真正站稳脚跟——无论你现在迁移、以后迁移,还是永远不迁移。

OpenCode 会读取 CLAUDE.md 吗?

OpenCode 读取的是 AGENTS.md。只有在不存在 AGENTS.md 时,才会把 CLAUDE.md 作为 fallback 使用——这就是为什么直接复制 CLAUDE.md 并期待规则自动生效,会成为迁移中的头号错误。请重新声明这些规则。

我的 Claude Code skills 能在 OpenCode 中使用吗?

只能部分使用。OpenCode 只识别 skill frontmatter 中的 name、description、license、compatibility 和 metadata——其他所有内容都会被静默忽略,而且 skills 是按需加载的,不会自动触发。请重建那些你真正使用的 skills。

OpenCode 有 Claude Code 那样的自动记忆吗?

没有原生的跨会话记忆,相关功能请求 #20322 仍处于开放状态。请在 AGENTS.md 中加入 session log 指令,确保不同会话之间不会遗忘任何内容。

迁移值得吗?

如果你想要 provider 自由、local-first 的运行方式以及权限优先的工作流——值得。如果你已经深度投入 Claude 生态,包括 hooks、自动记忆和固定订阅——那就留下,或者两者同时使用。

我能在两边使用同一个模型吗?

可以——OpenCode 支持 75 个以上的 providers,包括 Anthropic 和 OpenRouter,因此你可以使用同一个模型进行 A/B 测试,比较不同 harness 带来的影响。

如果你也一直在和同样的问题斗争——指令得不到遵守,记忆在不同会话之间消失——我写了一份完整的解决手册:AGENTS.md 是为你的 AI Agent 编程,而不是为人类编写文档。

你迁移时遇到了什么问题?说出那个没人提醒过你、而你最终失去的东西——如果什么都没出问题,也请告诉我,尤其是我说错的地方。我会收集大家回复中的重建方案,整理到后续文章里。

这是我的 Agent 工作流迁移系列的第一篇文章。

如果需要采取进一步措施,你可以考虑屏蔽此人和/或举报滥用行为。

Original source

本文由 AI 翻译整理自 dev.to · AI,原文版权归原作者所有。

阅读英文原文
上一篇
如何构建 Agent 难以作弊的评测
下一篇
RAG向量数据库的真实成本陷阱