📦帮你从 iFlow CLI ⚡ 无缝迁移到OpenCode 🔲——第一弹(模型配置,skills,subagent,项目,mcp,通知,使用习惯,主题,新特性,常见问题等)

0. 写在开头的话

好的,我非常理解大家的心情,我明白大家对iFlow CLI的不舍之情,因为我也一样……

但是我们还是要向前看,iFlow CLI固然是好用顺手,陪我们度过了一个一个难忘的日子,但随着后续团队业务重心的转向,iFlow CLI从2026年3月20日之后,原则上不再进行维护和更新功能了,那么随着时间的推移,抱守不再更新的工具也并非明智之举,其实开源项目里,opencode的体验也还是很不错的,推荐各位没有尝试过的小伙伴也都可以试一下。

为了让各位没接触过的小伙伴能更加顺利地从iFlow CLI迁移过来上手使用(包括过去的资源和使用习惯),我这里整理了一些迁移和使用方面的内容,如果有错误和遗漏的地方,也欢迎大家指出或补充,众人拾柴火焰高嘛~

1. 安装

1.1 Node.js

opencode和iflow一样,也是需要node.js的环境,当然如果是之前就在用iFlow的小伙伴,这部分就可以跳过了, 如果之前没有安装过类似CLI工具的小伙伴,可以先看下你的电脑上是否安装了node.js环境,打开你的终端,输入:

node -v

看看能否返回版本号,如果可以正常返回版本号,并且版本号高于20,也可以调过此步骤了,如果没有正确返回版本号,说明没有安装过,那么需要首先安装nodejs,去官网: Node.js — Download Node.js®,选择你对应平台和版本的安装方式,按照官网指示安装即可。

1.2. opencode

image

官网: OpenCode | 开源 AI 编程代理
Github: GitHub - anomalyco/opencode: The open source coding agent. · GitHub

有多种安装方式

curl:curl -fsSL https://opencode.ai/install | bash

npm:npm i -g opencode-ai

bun:bun add -g opencode-ai

brew:brew install anomalyco/tap/opencode

paru:paru -S opencode

安装完后输入opencode -v,能正常看到返回版本号就算是成功了。

2. 模型提供商接入

2.1 官方支持的供应商

如果是官方支持的供应商,可以在opencode中输入/connect命令,然后在供应商列表中选择一个。


比如智谱的coding plan

我扫了一眼,支持智谱的api,智谱coding plan,Nvidia,魔搭社区,Llama,小米,七牛云,Minimax Coding plan,阿里百炼Coding plan,Kimi coding plan,DeepSeek,OpenRouter,腾讯Coding plan等等……


之后再输入你的API Key即可。


哎……

2.2 自定义模型

如果你的模型供应商没有在上面的支持的列表里,不论您是购买的,还是从其他什么渠道获得的,通常来说关键信息就是三个

  • baseUrl
  • API Key
  • 模型标识

拿到这三样信息后,我们有两种方式来配置。

2.2.1 (古法) 手搓配置

当你安装完opencode后,会在你的用户目录下创建一个~/.config/opencode目录,这里是放置opencode各项配置的地方,类似于iFlow CLI的~/.iflow/。

步骤1
使用opencode auth login进行认证登录,然后选择other。

接着输入你的供应商id,api key

步骤2

在~/.config/opencode/下边创建一个opencode.json文件,文件格式为(<>的部分替换成你自己的):

{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "<你的模型供应商id>": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "<你的模型供应商显示名称>",
      "options": {
        "baseURL": "<之前获取到的baseUrl填这里>/v1",
      },
      "models": {
        "<模型id>": { "name": "<模型显示名称>" }
      }
    }
  }
}

步骤3

进入opencode,使用/models命令列出模型列表,你就能看到刚刚添加的模型了。

我这加了个iflow-ROME来演示效果:

给它发条消息测试下,收到回应就说明调通了

附:
配置文件里其实还可以配置更多的附加参数,例如

  • headers:随每个请求发送的自定义请求头。
  • options.headers:可选,设置自定义请求头。
  • limit.context:模型接受的最大输入 Token 数。
  • limit.output:模型可生成的最大 Token 数。

2.2.2 使用CC-Switch(推荐)

其实我更推荐您使用CC-Switch来配置管理您的模型配置,无论从配置难度上,还是管理、切换的便利性上来说,相比古法配置方法都要好上不少,答应我宝贝,别再手搓json配置了,对自己好点。

CC-Switch Github地址:
GitHub - farion1231/cc-switch: A cross-platform desktop All-in-One assistant tool for Claude Code, Codex, OpenCode, openclaw & Gemini CLI. · GitHub

直接到旁边release链接里,根据你的平台,下载对应的即可。

它有两种,一个是安装包的,一个是便携版(绿色版),便携版开箱即用,就是无法自动更新,根据你的喜好下载即可。

打开之后长这个样子,可以看到它现在支持ClaudeCode,Codex,GeminiCLI,OpenCode,OpenClaw。

切换到Opencode下边,点击添加供应商,自定义配置,还是输入供应商标识,名称,APIKey,BaseUrl,模型id,模型显示名称(还是熟悉的配方,熟悉的味道)

从后边的json看,其实就是提供了一个GUI界面,然后帮你拼成上面格式的json,写入opencode.json文件。因此你配置一次后,即便下次不启动cc-switch,也不会影响,因为配置已经写入文件了,除非你要切换供应商。


之后将你要切换的供应商"+添加"到你的配置中,就可以在opencode中的模型列表中使用了。

是不是比古法手搓方便多了!

3. Skills 迁移

其实这里我强烈建议你,除了你自己创建的那些私有skills,其他公共安装的,就别迁移了(说好的迁移教程呢喂),直接使用 The Agent Skills Directory上的方式来安装skills,具有以下两个明显优势:

  • 统一:通过该方式安装的skills,会统一安装在一个地方,而在各个vibe coding工具中都可以读取或者通过符号链接的方式来使用skills,这避免了你在不同的工具中要重复安装skills的问题
  • 更新:是的,skills也是会更新的,通过此方式安装skills之后,你便可以通过npx skills update一键更新你所有的skills了。

至于你自己创建的skills,可以直接把skills的目录复制粘贴到~/.config/opencode/skills/下即可。

4. Subagents 迁移

可以直接将你在iflow中的subagent迁移到opencode中,创建~/.config/opencode/agents将你的subagent的md文档直接复制粘贴过来。

注意:迁移过来后,你可能会遇到启动opencode后显示报错,类似下面的样子:

PixPin_2026-03-23_09-51-45

感谢 @10011029045 大佬和 @10011114789 大佬的贡献。Thanks to @10011029045 and @10011114789 for their contribution

这是由于配置的兼容性问题。

第一个是subagent定义里的模型名为空,第二个是颜色信息不支持。

对于第一个,我们只要打开对应subagent的md文档,在元数据中的model:后边填写优先使用的模型名称即可。

对于第二个,我们需要调整subagent标识颜色,iflow使用的是颜色的英文名称,opencode需要改成颜色的16进制格式,并且需要使用引号进行包裹。

区别对比:


iflow的配置格式


opencode的配置格式

Update:主agent和子agent区分

由于opencode中,plan也是一个agent,切换计划模式,就是按tab键,但如果你像上面一样迁移了过多的agent过来后,可能你tab的列表就会很长,而且顺序可能会被打乱,导致你tab后无法快速找到你的plan agent

其实opencode对于agent是有区分的,分为主agent(primary)和子agent(subagent)

主agent包括内置的build,plan
子agent包括内置的 General、Explore、Compaction、Title、Summary,后边三个是隐藏的,用于压缩,生成会话标题和会话摘要。

主agent可以通过tab键来切换,也可以通过@来调用
子agent不会出现在tab列表中,一般来说是被主agent派遣调用的,但也可以通过@来手动调用
可通过mode参数来指定一个agent是主agent还是子agent,如果不指定,则默认是all

比如我们要指定debugger这个agent为子agent,则直接在它的md文档的元数据部分加入:

mode: subagent

我把从iflow迁移过来的subagent都加上了mode: subagent,现在按tab只会在build和plan之前切换了,用@也可以显式调用这些subagent,不过一般来说会让主agent自行判断需要调用哪些。

5. MCP 迁移

将你的~/.iflow/settings.json中的"mcpServers":{}中的配置,复制粘贴到~/.config/opencode/opencode.jsonmcp:{}下面,保存。

兼容性问题:如果迁移过来出现兼容性问题,无法启动opencode,需要修改下格式。举例:
iflow下的mcp格式是:

    "chrome-devtools": {
      "command": "npx",
      "args": [
        "-y",
        "chrome-devtools-mcp@latest"
      ]
    }

opencode下应该对应改成:

    "chrome-devtools": {
      "command": [
        "npx",
        "-y",
        "chrome-devtools-mcp@latest"
      ],
      "enabled": true,
      "type": "local"
    }

6. 项目迁移

这个其实就做的时候,在项目目录下,/init一下就好,opencode的指令也是/init,并且opencode也是使用的AGENTS.md文档,这就是统一的好处啊。opencode会读取你iflow创建更新的AGENTS.md文档内容,对项目进行初始化,你可以继续用opencode更新你的项目了。

对于那种比较老的项目,之前iflow创建的是IFLOW.md文档,您可以手动修改下文件名即可。

7. 通知提示功能

### 这里我没有找到opencode支持hook的说明,如果有大佬知道麻烦告知下,我后续可补充上这块的配置说明

OpenCode是通过插件支持的,已经有跨平台(win/mac/Linux)的插件了:

8. 使用习惯迁移

一些在iFlow中常用的命令映射到opencode,以及opencode中一些有意思的功能特性

8.1 常用命令映射关系

注:

  • 斜杠命令有多个的,说明有别名,都可以用
  • opencode的组合键,是先按ctrl+x松手,它会等待你继续按下一个命令键,再按一个键触发命令
命令内容 iflow opencode opencode(组合键)
压缩上下文 /compress /compact ctrl+x c
清空上下文 /clear /new, /clear ctrl+x n
切换会话 /resume /sessions, /resume ctrl+x l(是L,不是i)
跳转到指定对话内容 /timeline ctrl+x g
重命名会话 /rename
切换模型 /model /models ctrl+x m
切换模式 sifth+tab, alt+m tab(向下切换,默认bulid,第二个plan,之后是subagent,所以实际上opencode都是agent),shift+tab(向前切换)
回滚 /restore /undo(可多次回滚) ctrl+-
重做 /redo ctrl+.
退出 /quit /exit, /quit ctrl+x q
主题 /theme /themes ctrl+x t
终止输出 ESC 两次 ESC
分支 /fork
输入换行 ctrl+Enter ctrl+Enter
执行shell命令 !开头切换shell模式 !开头切换shell模式
导出会话 /export /export ctrl+x x
分享会话 /share
引用文件 @ @
显式调用subagent $ tab, /agent ctrl+x a

先整理这么多,基本涵盖之前在iFlow CLI中使用到的一些功能,映射到opencode里对应的命令,以及组合快捷键。

这里重点解释一下加粗的三个。

  • 清空上下文:在iFlow CLI中,仅仅是清屏+清空上下文,让上下文剩余百分比回满(100%)。在opencode中,其实它是在当前窗口中新开了一个会话,你原先的会话如果有任务,还会继续跑(对,并发!),你可以随时通过后边的切换会话命令/sessions或者快捷键ctrl+x l,回到你前一个会话去看执行的结果情况。
  • 分支:这是一个特性,用于某个地方,如果你拿不定主意哪个方案更好,可以/fork有个分支会话出来,进行ab方案的验证。
  • 切换到指定对话内容:之前其实也有小伙伴提过,对话内容太多了,怎么能定位到之前的某次对话,在终端界面里疯狂滚动鼠标,腱鞘炎都要滚出来了。在opencode里,你可以通过/timeline,会弹出窗口,列出你的对话列表,然后你可以快速跳转了。

8.2 其他Q&A

Q:旁边的侧边栏看着烦,怎么隐藏?
A:ctrl+x b

Q:从剪贴板中粘贴文字和图片?
A:iflow里粘贴文字是Ctrl+V,粘贴图片是Alt+V,在Opencode里都是Ctrl+V

Q:会话可以重命名吗?
A:可以的,使用/rename即可对会话进行重命名


然后再切换会话时,就会看到会话名字已经变成你刚刚重命名过的了

Q:启动后直接进入上一次的会话?
A:在iflow里是iflow -c,在opencode里是opencode -c

于是,你依然可以使用类似下面的做法,将“通过 opencode 打开”添加到你的右键菜单里,参数加上-c,就可以直接在你的项目目录里打开opencode并自动进入上一次的会话,可以继续你未完成的任务了。


项目目录下直接右键菜单打开opencode并自动进入上一次会话

Q:思考深度?
A:iflow里是通过提示词触发的不同深度的思考,opencode通过ctrl+t来切换

Q:支持自动压缩吗?
A:有自动压缩的配置,可以在你的~/.config/opencode/opencode.json配置文件中加入相关配置,类似如下格式:

{
  "$schema": "https://opencode.ai/config.json",
  "compaction": {
    "auto": true,
    "prune": true,
    "reserved": 10000
  }
}

auto:自动压缩,默认值true
prune:删除旧的工具输出以节省token,默认值true
reserved:压缩时的 Token 缓冲区。保留足够的窗口以避免压缩过程中溢出。

Q:工具权限如何设置?支持yolo模式吗?
A:通过"permission": {}来设置工具的权限。
支持的工具包括:

  • bash
  • edit
  • write
  • read
  • grep
  • glob
  • list
  • lsp
  • patch
  • skill
  • todowrite
  • todoread
  • webfetch
  • websearch
  • question

支持的权限配置为:

  • allow
  • ask
  • deny

你可以自由的配置每种工具的权限,例如:

{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "*": "ask",
    "bash": "allow",
    "edit": "deny"
  }
}

表示bash允许,edit进制,其他询问。

如果设置了"*":“allow”,即为全部允许,也就是iFlow CLI的YOLO,注意该配置风险较大,请谨慎评估是否要使用全部允许的模式。

当然如果你有更加灵活的配置需求,也可以针对每种工具,对不同的命令,甚至不同的代理单独配置,例如:

{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "bash": {
      "*": "ask",
      "git *": "allow",
      "git commit *": "deny",
      "git push *": "deny",
      "grep *": "allow"
    }
  },
  "agent": {
    "build": {
      "permission": {
        "bash": {
          "*": "ask",
          "git *": "allow",
          "git commit *": "ask",
          "git push *": "deny",
          "grep *": "allow"
        }
      }
    }
  }
}

上面的例子,为bash中的git commit,git push进行了阻止,grep,git其他设置了允许,其余bash命令为询问。build代理下的执行bash命令也是同样的权限配置。

Q:为什么我的opencode不显示上下文百分比,一直都是0% used?
A:自定义模型配置的时候,没有配置模型的上下文限制,需要在opencode.json中的模型的配置中增加上下文限制的配置,这样opencode才可以计算出百分比。

配置的方式是在模型配置中,增加:

"limit":{
  "context":最大输入token(词元!)数,
  "output":最大输出token(词元!)数
}

如下面的demo:

这样就可以正确显示百分比了(注意oc里是使用,iflow里是剩余)

Q:如何设置使用外部编辑器编辑内容?
A:iflow里是ctrl+x打开外部编辑器,编辑后保存关闭,回到iflow cli,你在外部编辑器里的内容就会自动填入对话框里了,这个功能非常好用,在opencode里也是支持的,只不过不是ctrl+x(毕竟这个作为opencode的组合快捷键的前缀了),而且在opencode里需要“小小的”配置一下。

如果使用的powsershell,需要环境变量:

$env:EDITOR="notepad"

再打开opencode,即可通过/editor命令或者ctrl+x e的组合快捷键打开记事本,在记事本中编辑好后,保存,关闭,回到opencode中,即可看到内容已经填入对话框了。

当然上边的是一次性的环境变量配置,你关闭这个终端窗口,下次再启动,就没有了。

如果需要每次启动都生效,可以直接在powershell的配置文件中设置。

powershell的配置文件一般在你的文档中的WindowsPowserShell目录下,扩展名是.ps1

如果没有就自己创建一个,然后打开,把之前那个设置环境变量的加进去即可


只加红框那一句即可,忽略其他的(我加了代理配置)

如果需要使用vscode作为外部编辑器,需要使用

$env:EDITOR = "code --wait"

注意vscode的code后边要带–wait参数,否则不起作用。

Q:有时我习惯性按ctrl+z想撤销,结果oc怎么退出来无法操作了?
A:注意Ctrl+Z在OC里不是撤销,而是将终端挂起的命令。虽然官方说挂起后,按fg可以恢复,但至少我这里两台Windows电脑都无法恢复。所以切记不要在oc里按ctrl+z!

Q:我有时候管不住自己的手,还是不自觉按ctrl+z,有办法禁用掉这个挂起操作吗?
A:有的兄弟,有的。在~/.config/opencode/目录下创建tui.json,然后加入如下的语句:

{
  "$schema": "https://opencode.ai/tui.json",
  "keybinds": {
    "terminal_suspend": "none"
  }
}

terminal_suspend表示终端挂起操作,none表示无快捷键,这样会替换掉原有的快捷键,起到了禁用的效果。

当然,你也可以通过这个方法来修改默认的快捷键。

Q:升级了pixpin,怎么突然不能在opencode中贴图了?
A:打开pixpin配置,系统,剪贴板,复制图像为文件,选择复制为PNG,搞定。

9. WSL

WSL是windows下的Linux子系统,可以直接在你的windows运行多个Linux发行版,相比传统的虚拟机,WSL具有明显的优势,可以让你的windows系统和Linux子系统共享文件系统,可以使用windows应用无缝打开Linux子系统下的文件进行编辑。

CLI开发工具对Linux的兼容性会更好,因此其实在WSL中进行项目开发会比在win下更加顺畅。

关于WSL的相关教程我这就不展开了,一是网上教程非常多,二是展开的话这个帖子就太长了……大家看着也累,我这贴个b站的视频教程,入门完全没问题了。

安装好WSL和某个发行版后(例如Ubuntu),进入WSL发行版终端,然后使用本文最前面关于安装部分的命令,安装opencode,你在windows中安装的opencode,和在WSL中安装的opencode是独立的,他们的配置文件也是独立的。

注意:虽然在WSL中,能够通过/mnt/下的c、d等访问到windows的c盘、d盘下的文件,但不建议在此目录中开发,这会导致IO性能下降。

当然,后边提到的opencode(server),通过web方式访问也同样可以应用在WSL中,在WSL中通过opencode web --hostname 0.0.0.0,然后就可以在windows浏览器中访问http://localhost:(默认是4096端口)来打开wsl中的opencode进行开发。

要在vscode中使用,可以配合VSCode的WSL插件使用:

10. opencode server(Web)

opencode可以本机起一个服务,然后通过浏览器web进行访问


通过opencode web命令启动后,会自动给你分配一个默认的端口(4096端口,默认值,配置里可进行修改)

然后你就可以在你的浏览器中使用啦


大概长这个样子(我把能展开的都展开了),看起来功能还是很全的,更多的你可以自己去探索~

指定端口:

opencode web --port xxxx

默认情况下,服务器绑定到 127.0.0.1 (仅限本地访问)。要使 OpenCode 在网络中可访问:

opencode web --hostname 0.0.0.0

11. 颜值

Opencode默认有个黑色的底色,四周和终端有一些间距,当改变终端的外观,如透明度,开启亚克力材质效果(Windows Terminal)时,只有四周margin的区域是透明亚克力的,里边还是很丑的黑色大方框,而且由于要给滚动条留出位置,左右还不等宽的感觉,强迫症史诗狂怒,没有人比我更懂亚克力!(风琴手)

无法做到iFlow CLI那种一整块亚克力的效果?

其实是主题的问题,默认的主题是有背景色的。

使用/themes,或者组合快捷键ctrl+x t,打开主题列表,搜索system,选择它,回来了,都回来了,你的一整块亚克力它来了。

Update:默认的system主题是高对比度的,且遇到大面积的思考,代码等块,还是会有黑色方块。我按照github主题配色,让opencode自己生成了一个透明主题,效果如下:


思考,正文,文字高亮


diff效果

主题配置:
~/.config/opencode/themes/github-transparent.json

{
  "$schema": "https://opencode.ai/theme.json",
  "defs": {
    "gh3": "#21262d",
    "gh4": "#30363d",
    "gh6": "#6e7681",
    "gh7": "#8b949e",
    "gh8": "#b1bac4",
    "gh9": "#c9d1d9",
    "gh10": "#e6edf3",
    "ghBlue2": "#0d419d",
    "ghBlue3": "#1f6feb",
    "ghBlue5": "#58a6ff",
    "ghBlue6": "#79c0ff",
    "ghBlue7": "#a5d6ff",
    "ghGreen2": "#0f532e",
    "ghGreen3": "#238636",
    "ghGreen4": "#2ea043",
    "ghGreen5": "#3fb950",
    "ghGreen6": "#56d364",
    "ghYellow3": "#9e6a03",
    "ghYellow5": "#d29922",
    "ghOrange3": "#bd561d",
    "ghOrange6": "#f5a257",
    "ghRed2": "#7d1e26",
    "ghRed3": "#da3633",
    "ghRed4": "#f85149",
    "ghRed5": "#ff7b72",
    "ghRed6": "#ffa198",
    "ghPurple3": "#6e40c9",
    "ghPurple5": "#a371f7",
    "ghPurple6": "#bc8cff",
    "lightText": "#1f2328",
    "lightBgElement": "#eaeef2",
    "lightBorder": "#d0d7de",
    "lightBorderActive": "#1f6feb",
    "lightBorderSubtle": "#d8dee4",
    "lightDiffAddedBg": "#ddf4ff",
    "lightDiffRemovedBg": "#ffebe9",
    "lightDiffContextBg": "#f6f8fa",
    "lightDiffLineNumber": "#8c959f",
    "lightDiffAddedLineNumberBg": "#dafbe1",
    "lightDiffRemovedLineNumberBg": "#ffebe9",
    "lightHorizontalRule": "#d0d7de",
    "diffAddedBgDark": "#1B5E2E",
    "diffRemovedBgDark": "#661F15"
  },
  "theme": {
    "primary": {
      "dark": "ghBlue3",
      "light": "ghBlue3"
    },
    "secondary": {
      "dark": "#bc8cff",
      "light": "ghBlue2"
    },
    "accent": {
      "dark": "ghPurple5",
      "light": "ghPurple3"
    },
    "error": {
      "dark": "ghRed5",
      "light": "ghRed3"
    },
    "warning": {
      "dark": "ghYellow5",
      "light": "ghYellow3"
    },
    "success": {
      "dark": "ghGreen5",
      "light": "ghGreen3"
    },
    "info": {
      "dark": "ghBlue6",
      "light": "ghBlue3"
    },
    "text": {
      "dark": "gh9",
      "light": "lightText"
    },
    "textMuted": {
      "dark": "gh6",
      "light": "gh6"
    },
    "background": {
      "dark": "none",
      "light": "none"
    },
    "backgroundPanel": {
      "dark": "none",
      "light": "none"
    },
    "backgroundElement": {
      "dark": "gh3",
      "light": "lightBgElement"
    },
    "border": {
      "dark": "ghBlue5",
      "light": "lightBorder"
    },
    "borderActive": {
      "dark": "ghBlue6",
      "light": "lightBorderActive"
    },
    "borderSubtle": {
      "dark": "ghPurple5",
      "light": "lightBorderSubtle"
    },
    "diffAdded": {
      "dark": "ghGreen3",
      "light": "ghGreen3"
    },
    "diffRemoved": {
      "dark": "ghRed3",
      "light": "ghRed3"
    },
    "diffContext": {
      "dark": "gh8",
      "light": "gh6"
    },
    "diffHunkHeader": {
      "dark": "gh6",
      "light": "gh6"
    },
    "diffHighlightAdded": {
      "dark": "ghGreen6",
      "light": "ghGreen4"
    },
    "diffHighlightRemoved": {
      "dark": "ghRed6",
      "light": "ghRed4"
    },
    "diffAddedBg": {
      "dark": "diffAddedBgDark",
      "light": "lightDiffAddedBg"
    },
    "diffRemovedBg": {
      "dark": "diffRemovedBgDark",
      "light": "lightDiffRemovedBg"
    },
    "diffContextBg": {
      "dark": "none",
      "light": "lightDiffContextBg"
    },
    "diffLineNumber": {
      "dark": "gh8",
      "light": "lightText"
    },
    "diffAddedLineNumberBg": {
      "dark": "ghGreen4",
      "light": "lightDiffAddedLineNumberBg"
    },
    "diffRemovedLineNumberBg": {
      "dark": "ghRed2",
      "light": "lightDiffRemovedLineNumberBg"
    },
    "markdownText": {
      "dark": "gh9",
      "light": "lightText"
    },
    "markdownHeading": {
      "dark": "gh10",
      "light": "lightText"
    },
    "markdownLink": {
      "dark": "ghBlue5",
      "light": "ghBlue3"
    },
    "markdownLinkText": {
      "dark": "ghBlue6",
      "light": "ghBlue2"
    },
    "markdownCode": {
      "dark": "ghGreen5",
      "light": "ghGreen3"
    },
    "markdownBlockQuote": {
      "dark": "gh8",
      "light": "gh6"
    },
    "markdownEmph": {
      "dark": "ghYellow5",
      "light": "ghYellow3"
    },
    "markdownStrong": {
      "dark": "gh10",
      "light": "lightText"
    },
    "markdownHorizontalRule": {
      "dark": "gh4",
      "light": "lightHorizontalRule"
    },
    "markdownListItem": {
      "dark": "ghBlue5",
      "light": "ghBlue3"
    },
    "markdownListEnumeration": {
      "dark": "ghPurple5",
      "light": "ghPurple3"
    },
    "markdownImage": {
      "dark": "ghBlue6",
      "light": "ghBlue2"
    },
    "markdownImageText": {
      "dark": "ghPurple5",
      "light": "ghPurple3"
    },
    "markdownCodeBlock": {
      "dark": "gh9",
      "light": "lightText"
    },
    "syntaxComment": {
      "dark": "gh7",
      "light": "gh6"
    },
    "syntaxKeyword": {
      "dark": "ghRed5",
      "light": "ghRed3"
    },
    "syntaxFunction": {
      "dark": "ghPurple6",
      "light": "ghPurple3"
    },
    "syntaxVariable": {
      "dark": "gh9",
      "light": "lightText"
    },
    "syntaxString": {
      "dark": "ghBlue7",
      "light": "ghBlue2"
    },
    "syntaxNumber": {
      "dark": "ghBlue6",
      "light": "ghBlue3"
    },
    "syntaxType": {
      "dark": "ghOrange6",
      "light": "ghOrange3"
    },
    "syntaxOperator": {
      "dark": "ghBlue5",
      "light": "ghRed3"
    },
    "syntaxPunctuation": {
      "dark": "gh9",
      "light": "lightText"
    }
  }
}

~/.config/opencode/tui.json

{
  "$schema": "https://opencode.ai/tui.json",
  "theme": "github-transparent"
}

12. 支持中文吗?

web版和桌面应用都是支持中文界面的。

输入和输出的内容也都是支持中文的。

目前CLI的界面语言还没有支持中文,未来可能会支持,毕竟现在文档,web,desktop都逐渐有原生中文支持了。

如果实在需要CLI界面显示中文,可以看看下面的项目,是一个Opencode的汉化项目,基于opencode官方仓库做的自动化流水线。

https://github.com/1186258278/OpenCodeChineseTranslation

OpenCode 汉化发行版 是一个全自动化的 OpenCode 本地化项目。我们基于 GitHub Actions 构建了一套完整的自动化流水线:

  • :one_o_clock: 每小时检测 官方仓库更新
  • :bar_chart: 智能触发 累计 ≥5 个新 commit 时自动构建
  • :memo: 完整日志 Release Notes 自动包含官方更新日志

主要特性:

  • :high_voltage: 实时跟进:每小时检测上游更新,第一时间体验新特性
  • :package: 全平台支持:提供 Windows、macOS (Apple Silicon)、Linux 二进制包
  • :rocket: 一键安装:Go 语言编写的管理工具,无需任何运行时依赖
  • :wrench: 完整汉化:覆盖 TUI、对话框及核心交互流程

:bar_chart: 汉化统计

指标 数量 说明
:file_folder: 翻译文件 41 模块化 JSON 配置
:memo: 翻译规则 397 精准字符串替换
:bullseye: 覆盖模块 5 dialogs/routes/components/common/root
:white_check_mark: 测试覆盖 100% 18 个单元测试用例
12 个赞

有办法精简默认的模型列表吗 :thinking:

虽然可以直接搜索,但有时候还是容易点错,暂时的做法是将用的比较多的进行收藏

好像是可以配置排除供应商,通过disabled_providers来排除,可以试试把默认的加进去,格式类似:
{
“$schema”: “https://opencode.ai/config.json”,
“disabled_providers”: [“openai”, “gemini”]
}

好像没有效果,不过影响不大,只要收藏了不会点错连上没有配置的模型了,只是好奇看看有没有得调而已,desktop 版倒是可以进行隐藏,所以问问 tui 版有没有办法 :joy:

动作搞挺快也

用 opencode 必装 oh my opencode 插件

2 个赞

How to Move Skills and Agents from iFlow to Kilo
Summary
The process involves converting iFlow’s flat Markdown files to Kilo’s folder-based structure with SKILL.md files.

Agents
iFlow location: ~/.iflow/agents/.md
Kilo location: ~/.kilocode/agents/
.md (flat files)
Conversion:

  1. Copy .md files from ~/.iflow/agents/ to ~/.kilocode/agents/
  2. Fix color format: change named colors to hex (e.g., orange → #F39C12, brown → #8B4513, red → #E74C3C, purple → #9B59B6)
  3. Ensure YAML frontmatter has: name, description, agent-type

Skills
iFlow location: ~/.iflow/agents/*.md (iFlow uses agents for both agents and skills)
Kilo location: ~/.kilocode/skills/{skill-name}/SKILL.md (folder structure required)
Conversion:

  1. Create folder: mkdir -p ~/.kilocode/skills/{skill-name}
  2. Create SKILL.md inside the folder
  3. Required frontmatter:

    name: skill-name
    description: Description of what the skill does and when to use it.

    1. Important: name must match the folder name exactly
  4. No trigger field - Kilo uses description for skill matching

Key Differences
Aspect iFlow
Skills location ~/.iflow/agents/
File structure Flat .md files
Color format Named (orange, red)
Trigger field Supported
Name matching Flexible

Directory Structure
~/.kilocode/
├── agents/
│ ├── backend-architect.md
│ ├── code-reviewer.md
│ └── python-pro.md
├── skills/
│ ├── git-commit/
│ │ └── SKILL.md
│ ├── debug/
│ │ └── SKILL.md
│ └── api-design/
│ └── SKILL.md
└── skills-code/ # Mode-specific (optional)
└── my-skill/
└── SKILL.md

After Migration
Reload VSCode: Ctrl+Shift+P → “Developer: Reload Window”
Verify skills loaded: Ask “What skills do you have available?”
/agents

1 个赞

OpenCode出了桌面版 虽然还是Bate版 ,界面和web完全一毛一样,重点是:支持中文
OpenCode | 下载

看到支持IFLOW那里,泪目了

2 个赞

是呀,provider里出现iflow的一幕……一声叹息

Perfect, I originally thought it was a configuration item in the metadata that didn’t support colors, turns out it doesn’t support color names but supports hex color values

1 个赞

从oc 来到了iflow 除了kitty对iflow的支持有点问题以外.
体验是拉满的.
现在又只能被迫回到oc了.

不知道现在oc支持自动压缩没. iflow的自动压缩上下文是真的太爽了

自动压缩很多都有的,我主用CC

cc我还没用过.

有一个配置

{
  "$schema": "https://opencode.ai/config.json",
  "compaction": {
    "auto": true,
    "prune": true,
    "reserved": 10000
  }
}

auto:自动压缩
prune:删除旧的工具输出以节省 Token
reserved:压缩时的 Token 缓冲区。保留足够的窗口以避免压缩过程中溢出。

1 个赞

open code zen订阅怎么样?

量大的话 go 可能比 zen 要好点?go 是按次付费,zen 是按 token 付费,不过 zen 订阅提供了免费的 minimax-m2.5 ,不知道是否可以通过 api 调用 :thinking:

想问一下怎么是英文界面,怎么修改为和iflow一样的中文

目前cli界面是英文的,交互语言可以是中文。

web版和desktop应用有中文界面

应该也在不断完善中,官方文档,web版,desktop应用都有中文了,后续cli可能也会支持中文

我找到了一个opencode汉化项目。

OpenCode 汉化发行版 是一个全自动化的 OpenCode 本地化项目。我们基于 GitHub Actions 构建了一套完整的自动化流水线:

  • :one_o_clock: 每小时检测 官方仓库更新
  • :bar_chart: 智能触发 累计 ≥5 个新 commit 时自动构建
  • :memo: 完整日志 Release Notes 自动包含官方更新日志

主要特性:

  • :high_voltage: 实时跟进:每小时检测上游更新,第一时间体验新特性
  • :package: 全平台支持:提供 Windows、macOS (Apple Silicon)、Linux 二进制包
  • :rocket: 一键安装:Go 语言编写的管理工具,无需任何运行时依赖
  • :wrench: 完整汉化:覆盖 TUI、对话框及核心交互流程

:bar_chart: 汉化统计

指标 数量 说明
:file_folder: 翻译文件 41 模块化 JSON 配置
:memo: 翻译规则 397 精准字符串替换
:bullseye: 覆盖模块 5 dialogs/routes/components/common/root
:white_check_mark: 测试覆盖 100% 18 个单元测试用例