Claude Code 中文界面版成了!改了5000多行代码

感谢伟大的 AI 工具,Code 功能还真的被我搞出来了!

深色主题如下:

浅色主题如下:

修改代码情况如下:

我本来只是想测试一下大模型的 UI 复刻能力。没想到直接把 Claude 桌面版软件给复刻出来了。

既然 UI 有了,我就把对话(Chat)功能也实现了。

既然能对话了,那必须能写代码啊,所以把Code功能也搞出来了。

现在的情况,就是相当于我做了一个界面版的Claude Code,而这个界面其实就是官方版的界面😄!

闭环了!

我不光要抄它,还要超越它了。

毕竟我们的克隆版拥有官方永远都不具备的功能:纯的不能再纯的纯中文界面;可以外接任意模型,国内国外都可以。

中文界面如下:

第三方模型配置如下:

把 Anthropic 的 API 配到这里,这不就是官方纯血版了。

理论上,你甚至可以把 OpenAI 的 GPT5.5 接入这个 Claude 桌面版。(我必须实现这个功能!)

下面我就来跟大家汇报一下,具体修改了什么东西。

我主要是分两个部分来讲,一个是界面上的修改,一个是实现的技术方案!

界面修改

这次的修改核心,就是为了跟上 Claude Desktop 的新版布局。我第一次克隆它到现在,它的界面细节已经有了很多变化。

最明显的就是三个 tab 的切换:

它的左侧区域中,把聊天 Chat、工作 Cowork、代码 Code 做了区分。它的思路也很清晰了,它这个桌面版包含了三大功能,针对三种重要场景。另外它这个左侧框也变了,把菜单、搜索、展开的图标放到了最顶上。

为了与时俱进,我也给加上了!

另外有一个细节,它的 Code 模式,在右下角添加了一个开关图标,可以快速切换字体和主题。我也加上了,现在已经可以快速切换主题了,字体功能没加,目前还没有专注字体优化。

也就是说,现在我们这个"山寨版"的Claude也有三个大功能了。

第一个是聊天 Chat 功能。

这个功能的特点,就是纯聊,就是直接跟 AI 聊天。

缺点是不能控制电脑和读写文件。

优点是省 tokens 啊,快啊。知识问答的最佳选择。

第二个是办公 Cowork。

因为我很少用这个功能,所以现在还只是做了个界面,并没有实现。等我以打工人视角切入的时候,再来更新这个功能,把它搞成"办公的效率神器"。官方这个功能,主要是可以分配任务,然后执行定时任务,以及手机远程操控电脑等功能。

第三个是编程 Code。

写代码是我的高频场景,也是目前的模型真正能落地的能力。所以我要先完善这个功能。今天就是重点讲这个!

其实这个 Code 功能,不仅仅限于编程,任何工作都可以使用。

目前我们的克隆版主要是实现了 token 预览、模型选择、项目选择,以及权限控制等界面效果。

其中的 tokens 消耗统计,目前这个还是摆设,并不是真实数据。我已经在 JCode 中实现过这个功能,不会很难。

文件夹选择,这个是必备功能,所以制作了 UI 并已经实现了功能。

模型选择,也是必备功能,已经制作了 UI 并实现了功能。

而且最近更新的 Opus 4.7 fast mode 都有哦~ 虽然对第三方模型来说没啥用,但是也得有!

做界面嘛,怕什么,先加上!

授权选择,也是必备功能,已经制作了UI,并实现了功能。

这些UI的内容、描述、布局还原度还是比较高的。

很多时候,我自己都有错觉,我到底是在用 Claude 还是在用克隆版的 Claude。

还好,具体的对话界面和官方版是有差别的。

官方版的输出有点"太平了"!

就是文字内容和工具调用混在一起,没有很好的区分,有种密密麻麻的感觉。这一点 Codex 的 UI 会好一点。

Claude本身的UI是非常有特色,这几个月疯狂更新,有些设计变得很潦草了。

比如,用户输入这个蓝色框和内容,与整体的软件风格完全是格格不入,不知道它们怎么想的!

我在实现这部分的时候,我希望能比较好的来观察整个执行过程。

目前还在优化中,当前的效果大致如下:

这样可以清晰的查看每一个环节发生了什么。

比如写入工具,到底写了什么文件,写了什么内容。

授权工具,到底是授予了什么权限,做了什么。

这些工具调用,全部可以展开和收起,默认收起状态不占空间。如有需要可以手动展开查看细节。

每一次问答和授权都会有明确的交互界面。

目前这个风格,感觉分块还是有点多,还有很大优化空间。

界面大概就是这些,虽然看起来很简单,但是要搞成这样,没有奇怪的样式,也不是很简单。

把一个界面做到简单又好用是非常难的,仅仅是看起来不讨厌已经很难了。

技术方案

刚开始动手之前,我其实没啥信心。因为我知道实践总是比想象中的要复杂很多倍

为了少走弯路,我也是做了一些功课。

方案对比

大概有这么几种方案:

第一种,直接spawn本地的Claude Code

优点,Claude Code全套能力零成本拿到,我的UI功能基本可以一对一实现。

缺点,用户电脑要有 Claude Code,拿不到 agent loop 的内部内容,只能通过 JSON 事件观察

这些缺点还是可以接受的。

没有装的话提示安装就行了,或者直接使用sidecar打包。

agent loop的内部内容我也不关心啊~~能通过JSON交互就够了!

第二种,嵌入Claude Agent SDK

这个也是 Claude 官方产品,专门为专业开发者提供的专业智能体开发套件。

优点是可控性更强:tool 定义、system prompt、hooks、上下文压缩都可以自己来控制。

缺点是我怕我搞不定~~哈!因为 Opus 告诉我这个方案"等于把 Claude Code 重写一遍"!

不是不能写,实力不允许啊,主要是 tokens 不允许啊!

第三种,接入类似 Pi Agent 这种第三方智能体。

Pi 是 OpenClaw 的智能体实现部分。

我咨询了所有的AI,它们都没有把这个作为首选方案,我就不讲了!

确实,有条件上Claude Code,没理由去用Pi,谁用Pi写代码啊!

我已经卸载了所有龙虾,对我而言龙虾只是玩具,没有任何其它意义,Claude 和 Codex 才是干活的!

所以,最终我毫不犹豫地选择了第一种方案。

而第一种方案的关键,就在下面一行命令之中:

css 复制代码
claude --print --input-format stream-json --output-format stream-json --verbose --permission-prompt-tool stdio --permission-mode acceptEdits --model GLM-5.1

为了探索出这一行命令,我也是花了不少时间,看了很多资料,并且进行了多轮实践。

开发目标

大的方案选完之后,还要问一下自己,有哪些核心目标。

1、全方位复用Claude Code

2、和官方模型解绑,接入任意第三方模型提供商。

3、界面操作体验要和Claude桌面版对齐,模型选择,权限控制等。

4、可以管理session和对话。

代码结构

这个是Opus总结的调用结构。

lua 复制代码
┌─ Tauri front-end (vanilla JS) ─────────────────────────────────────┐
│  Code workspace UI                                                  │
│    • cwd 选择 / model / mode / send                                 │
│    • 三种特化权限卡:AskUserQuestion / ExitPlanMode / 通用工具      │
│    • 折叠工具块、思考中胶囊、markdown 渲染、Recents 持久化           │
│    ▼                                                                │
│  invoke('claude_code_session_*')                                    │
└──────┬──────────────────────────────────────────────────────────────┘
       │ Tauri IPC
┌──────▼──────────────────────────────────────────────────────────────┐
│  Rust commands (desktop/src-tauri/src/lib.rs)                       │
│   claude_code_check            探测 CLI 是否可用                    │
│   claude_code_config_dir       暴露隔离的 CLAUDE_CONFIG_DIR         │
│   claude_code_session_start    spawn CLI、起 stdin writer + init    │
│   claude_code_session_send     写一条 user message 到 stdin         │
│   claude_code_session_respond  写 control_response 到 stdin         │
│   claude_code_session_set_mode 中途切 plan/acceptEdits/...          │
│   claude_code_session_end      kill 子进程                          │
│                                                                     │
│  emit "claude-code-event"  ◄── stdout JSON lines                    │
└──────┬──────────────────────────────────────────────────────────────┘
       │ stdio
┌──────▼──────────────────────────────────────────────────────────────┐
│  claude --print --input-format stream-json                          │
│         --output-format stream-json --verbose                       │
│         --permission-prompt-tool stdio   ← 关键 flag                │
│  env: ANTHROPIC_BASE_URL / ANTHROPIC_API_KEY /                      │
│       ANTHROPIC_MODEL / CLAUDE_CONFIG_DIR / CI=1                    │
└─────────────────────────────────────────────────────────────────────┘

因为涉及到一些内部的代码,可能有点难懂。可以看个大概!

业务流程

1、启动检测,需要看看有没有 Claude Code。

2、选择目录,所有开发必须先选择工作目录。

3、发送第一条消息,要跳过官方权限检测,同时要隔离官方 Claude Code 配置。

4、后续轮询,同一个session不重启进程。

核心协议

整个调用比较困难,或者说比较花时间摸索的是 JSON 格式,也可以称为"核心协议"。

我们得摸清楚 Claude Code 返回的信息格式是什么样,工具调用、授权、Ask 这些交互都是如何返回和如何发送的。

比如一开始就遇到了Ask模式里面无法回答Ask的问题。

然后,Plan模式无法选择选项,以及无法退出Plan的问题。

还有各种授权被挂起来的问题。

这里细节非常多,关键是 --permission-prompt-tool stdiocan_use_tool

跑通这个协议的步骤大概是这样的。

1、传上面的关键参数:

css 复制代码
--permission-prompt-tool stdio

2、初次握手(host->CLI)

json 复制代码
{"type":"control_request","request_id":"init-<sid>","request":{"subtype":"initialize","hooks":{}}}

3、接收返回(CLI->host)

json 复制代码
{"type":"control_request","request_id":"...","request":{"subtype":"can_use_tool","tool_name":"<name>","input":{...}}}

然后根据具体的信息,处理 AskUserQuestion、ExitPlanMode、Bash、Write、Edit、Read、WebFetch、WebSearch、Glob、Grep、Task 这些类型,弹出对应的确认卡片给用户选择。

4、下发反馈(host->CLI)

json 复制代码
{
  "type": "control_response",
  "response": {
    "subtype": "success",
    "request_id": "<原 control_request 的 id>",
    "response": {
      "behavior": "allow"|"deny",
      "updatedInput": {...}|null,
      "message": "..."|null
    }
  }
}

注意control_response有两层response嵌套。

5、中途切换权限模式

json 复制代码
{"type":"control_request","request_id":"set-mode-...","request":{"subtype":"set_permission_mode","mode":"plan|acceptEdits|default|bypassPermissions"}}

主要的操作都在这里了。

作为一篇公众号文章,好像讲得有点多了,我要收一下。

技术细节就不展开了。

我这次开发主要遇到了以下几个问题:

go 复制代码
问题 1:UI 卡死,发送按钮无法点击取消
​
问题 2:响应只到第一条,无法继续
​
问题 3:"Not logged in · Please run /login"
​
问题 4:Overview 卡片在会话开始后还占位
​
问题 5:cwd 默认指到了 `src-tauri`
​
问题 6:Ask permissions 模式下工具被静默拒绝
​
问题 7:AskUserQuestion 提交答复后 CLI 没反应,超时报 "stream closed"

最后补充下遗留问题和后续改进方向:

scss 复制代码
1、Worktree 复选框尚未联动
2、未对接 `--add-dir`:cwd 之外的额外参考目录还没 UI。
3、MCP server 配置
4、`--resume <session-id>` 续接
5、真实 token 计费
6、权限协议字段兼容性,这是个持续性的事情
7、AskUserQuestion 题数限制,现在默认官方遵守规则,我就不做校验了。
8、Always allow 颗粒度的问题

这里面的 resume 是比较关键的。其他部分不是很紧迫。

哪个孙子骗我说调用一下Claude Code很简单的?!

一大堆问题,一个头两个大,写代码,就是个无底洞。

万幸,核心功能已经搞定了,简单测试,非常丝滑。

万事开头难,最难的部分已经过去了。

这次文章的主要内容就是这些了。

说点题外话!

上次发布第一个版本之后,很多人给了鼓励和支持,也有很多人默默获取了软件。

我还是挺开心的!

但是也有一些人表达了一些比较负面的评论。

比如套壳有什么用,重复造轮子毫无意义,搞个界面有什么,有种把Claude Code也给加上!

这就让我有点不开心了

其实,这些问题,我也早就问过自己。

但是当别人怼脸批评的时候,我还是要反驳一下,仅针对发表相关评论的人。

有没有用关你什么事情?我觉得有意义就行了;我又不是给你打工的,我又不收你的钱,爱用不用;Claude Code 已经加上了,别哔哔了!

因为有人觉得没啥用,那我就自己用吧,不更新了!

开玩笑的~~ 既然我写出来了,就证明我的气早就放完了!

暂时不更新的主要原因是:我的Claude Code 周配额已经耗尽!

实测,Claude 的周配额还是很少。

同时我不想让其它模型插手我的软件,我要坚持用 Claude 克隆 Claude!

目前,有些软件细节还没改完,没法打包,所以我先把界面、进展、关键技术记录一下,稍后更新。

日子很长,不差这几天!

最近没啥牛逼的闭源更新,我都要跑去玩开源了,有啥好玩的开源项目没?

开源自己的项目?!

Claude的第一个克隆版,可以看这篇文章,文末有获取方式!

相关推荐
2301_780029041 小时前
A survey on large language model based autonomous agents —— 论文精读
人工智能·语言模型·自然语言处理
AlexMaybeBot1 小时前
巧用 OpenClaw 为 Android 开发电脑瘦身
android·github·ai编程
机器学习之心1 小时前
轴承剩余寿命预测 | 基于BP神经网络的轴承剩余寿命预测MATLAB实现!
人工智能·神经网络·matlab·轴承剩余寿命预测
Harvy_没救了1 小时前
【大模型】AI大模型的“三板斧”
人工智能
ClouGence1 小时前
豆包收费之后,我找到了更好用的 AI 工具
前端·人工智能·后端·ai·ai编程·ai写作
dfsj660111 小时前
第八章:注意力机制的诞生
人工智能
老刘说AI1 小时前
Embedding不是魔法:把文字变成数字的底层逻辑
人工智能·python·语言模型·embedding·ai编程
Haibakeji1 小时前
党建信息化平台建设和传统党务管理系统开发有什么区别
人工智能·软件构建·软件需求
一念杂记1 小时前
现在很火的MCP是什么? 一文教会你使用&开发
ai编程·mcp