☰
IDEA插件:为Claude Code/Codex打造GUI外壳,告别终端切换
2026/10/5 3:03:59 网站建设 项目流程

我先开个题外话,暴露一下背景:我是一个写 Java 比写别的语言都多的老后端,日常几乎全程泡在 IntelliJ IDEA 里,连 git 都懒得回终端敲。而 2024 到 2025 年这段,Claude Code 和 Codex 这类 AI 编程代理有多火,大家有目共睹——它们跑在终端里,进去之后是交互式对话,能读项目、改代码、跑命令、甚至自己修 bug,确实能打。可问题来了:我一个 IDEA 重度用户,凭什么要为了用 AI 编程工具,被迫离开 IDE 去终端?能不能在 IDEA 里面做一个 GUI 插件,把 Claude Code、Codex 这两个 CLI 工具变成 IDE 内的聊天面板、任务面板,让我一边看代码一边跟 AI 代理聊?这个开源项目就是干这个的。

这篇文章我尽量把话说透:先说为什么要做、GUI 到底做了什么、再说技术选型里最要命的几个决策、最后把踩过的坑、安装方式、和同类方案对比一次讲完。如果你也是"离不开 IDEA 的开发者",并且想在 IDE 内流畅使用 Claude Code 或 Codex,那这篇文章应该能帮你省不少事。

1. 一个IDEA老用户,为什么非要给CLI套上GUI

先说一个反直觉的事实:Claude Code 和 Codex 本身是 CLI 工具,它们的"原生交互方式"就是终端。但终端交互对 IDE 用户来说,存在一层非常真实的割裂。我不是说终端不好——恰恰相反,命令行才适合批量、管道、复杂脚本。但我用 IDEA 的时间越长,就越发现"IDE 内开发 + 终端跑 AI 代理"的组合有几个很难受的地方。

1.1 痛点清单:当我同时面对IDEA和终端

我用一个真实场景还原一下。某天我在调一个 Spring Boot 项目,需要在 IDEA 里看代码、改配置,同时用 Claude Code 帮我分析某个 Service 接口的调用链路。于是我的屏幕布局变成了:左边是 IDEA 编辑器,右边是一个单独的终端窗口。然后我遇到了这些事:

  • 复制一段代码给 Claude Code,得先选中、复制,再切到终端粘贴,来回切窗口,一天几十次,非常烦。
  • 终端里工具跑出来的代码块想点一下就能定位到文件?做不到。它输出的是路径和行号,我得自己回 IDEA 里搜。
  • Claude Code 跑一个长任务(比如重构一个模块)可能要几分钟,期间我想切去写别的代码,但终端窗口一被遮挡,我就担心它是不是已经跑完、有没有报错。
  • 在 Windows 下某些终端对中文、特殊符号渲染很烂,AI 输出的解释性文字经常糊成一片。
  • 最重要的一点,IDEA里打开的 Project 文件上下文,终端里的 AI 代理并不知道。我明明在编辑UserServiceImpl.java,但 Claude Code 那边还得重新去扫描一遍才知道我在看什么。

这些痛点的本质是:开发上下文被分割在两个环境里。IDE 懂项目结构、懂当前选中文件、懂搜索结果,但 AI 代理在终端里,它只能靠自己的文件扫描能力去猜。如果我把 AI 代理直接请进 IDE,让它能看到我当前在编辑哪个文件、选了什么代码,这个上下文闭环就打通了。

1.2 为什么不做VS Code插件、不做独立App

动手之前我其实思考过三个备选方案:做一个 VS Code 插件、做一个独立的 GUI 桌面应用、或者干脆用系统终端凑合。

VS Code 的方案不是不行,也有不少人在用。但问题是很多后端团队的主力 IDE 就是 IDEA,不想为了让 AI 多一个入口去换编辑器。独立 GUI 桌面应用我最初也考虑过,后来想明白一件事:AI 编程工具的核心场景是"在代码里干活",不是在真空中聊天。一个脱离 IDE 的独立 App,本质上就是套了一层壳的终端,依然拿不到我在编辑器里的上下文。而直接做 IDEA 插件,是可以拿到Project、Editor、SelectionModel这类 IDE 核心对象的——这意味着我可以把"当前打开的文件"和"当前选中的代码"直接喂给 AI 代理,这是任何独立 App 都给的不了的体验。

至于"用系统终端凑合",那更是我最不想做的选择。身为 IDEA 用户,我不想改变自己的工作习惯来迁就工具,应该是工具来迁就我。

1.3 这个项目的定位和边界

所以这个插件的定位就非常清楚了:它不是要重新发明一个 AI 编程框架,而是充当 Claude Code / Codex 命令行的 GUI 外壳(GUI Wrapper)。CLI 工具负责跟模型对话、读写文件、执行命令;插件负责把终端交互转换成 IDE 里的面板、菜单、快捷键、文件上下文和持久化会话。说白了,就是把 AI 代理的"身体"留在终端层,但把"脸"换成 IDEA 的样子。

边界也要说清楚:如果你想在 IDEA 里直接调用模型 API、自己实现 agent 逻辑,那这个项目不适合你。但如果你和我一样,已经用惯了 Claude Code / Codex 的命令行工作流,只是想让它别再跟 IDE 抢窗口焦点,那这个插件就是为你准备的。

2. 绝对不是换皮肤:GUI外壳真实做了哪些事

很多人以为"给 CLI 套 GUI"就是开个终端面板,然后把输出重定向到 JTextArea。如果只是这样,那确实没什么技术含量,也没有必要开源。实际上要让 Claude Code / Codex 在 IDEA 里达到"可用、好用"的程度,需要解决不少细节问题。

2.1 一键拉起两个CLI:工具窗口与启动逻辑

插件在 IDEA 右侧或者底部添加了一个专门的工具窗口(Tool Window),叫 AICodex 也好、Claude Shell 也好,安装后你自己可以在窗口设置里改位置。工具窗口里有一个启动面板,两个大按钮分别对应 Claude Code 和 Codex。点击之后插件会依次做这几件事:

  1. 检查本机是否已安装对应 CLI(执行claude --version或codex --version),没装就会给出一条安装提示,并弹出配置对话框让你填路径。
  2. 校验版本号,太老的版本会提醒你升级,因为这两个工具的 CLI 参数和交互协议迭代很快。
  3. 在插件内部创建一个伪终端会话(这个后面详细讲),并把当前 IDEA 项目目录作为工作目录启动 CLI 进程。
  4. 启动成功后,工具窗口自动切换到对应的会话 Tab。

整个过程不需要你手动打开系统终端。以前是"打开终端 -> cd project -> 输入 claude",现在变成"打开 IDEA -> 点一下按钮"。省掉的动作不算多,但每天省几十次也会觉得清爽。

2.2 把"终端聊天"改造成"会话面板"

CLI 工具在真实终端里输出的是带 ANSI 转义序列的文本流,比如颜色、加粗、光标移动。如果直接把这种原始输出丢给 JTextArea,你会看到一堆类似[32m的乱码字母,完全没法看。

插件里做了一层"终端到聊天的翻译":

  • 对输出流做 ANSI 转义解析,提取出纯文本和颜色信息。
  • 把 AI 回复中的代码块(比如```java ... ```)识别出来,交给 IDERichTextPanel 渲染成带高亮的代码区块。
  • 把「用户输入命令」「工具执行计划」「AI 回复文本」「命令执行结果」这几个不同语义的块拆分开,用不同的视觉样式呈现,看起来更像一个会话面板,而不是一坨滚动文本。

这层翻译有个反直觉的难点:Claude Code 和 Codex 的输出结构并不稳定,同一个操作有时候是纯文本、有时候是 JSON 事件流、有时候又夹杂着进度条。解析器必须做得很宽容:遇到能识别的结构化块就结构化渲染,遇到不认识的格式就直接当纯文本兜底。理想很丰满,但工程上必须接受"尽力解析 + 兜底展示"的策略,否则解析器一崩,整个面板就黑屏了,体验更差。

2.3 文件上下文联动:把当前文件喂给Claude/Codex

这是我认为整个插件最核心的功能,也是它区别于"裸终端"的最大价值。IDEA 的编辑器是能感知用户行为的,插件在EditorFactory上注册了一个事件监听器,每当光标所在文件变化、或者选中代码变化时,它会捕获这些信息,并生成一个可选的上下文:

  • 当前打开文件的相对路径和语言类型。
  • 当前光标所在的行号、方法名、类名。
  • 当前选中的代码片段(如果用户选中了东西)。

然后插件会在输入框上方显示一行提示,比如:上下文: UserServiceImpl.java:42-58 (选中代码)。用户可以直接在输入框里 @ 一下,把这段上下文作为前缀或附加上下文发送给 CLI 工具。

实践中这个功能有巨大的效率提升:以前我需要用自然语言描述"帮我看看 UserServiceImpl 里第 42 到 58 行那个方法,为什么报空指针",现在直接选中、附带上下文、打一句"为什么这里会 NPE?"就够了。AI 代理拿到的 prompt 是结构化的,理解准确率远超聊天式描述。

2.4 会话管理:断线重连与多任务并行

CLI 工具跑长任务时,用户经常需要同时开两个甚至多个会话:一个在跑代码重构,另一个可以拿来问问题。插件为每个 CLI 实例维护独立的会话 Tab,Tab 之间互不干扰,切换 Tab 时底层的 PTY 会话仍然在跑,不会因为界面隐藏而挂掉。

另一个重要功能是会话语义持久化。终端窗口一关,Claude Code 的会话上下文就没了,这在裸终端里几乎是不可逆的损失。插件会在每次会话结束或 Tab 关闭时,把该会话的历史消息写到 IDEA 的LocalHistory目录下,下次打开时可以一键恢复。恢复方式有两种:一种是重新启动 CLI 并让它继续工作(CLI 本身支持 headless 续跑),另一种是只导出对话记录供人阅读。两种模式在插件设置里可以选。

3. 最要命的技术选型:CLI到GUI的桥怎么搭

上面说的功能听起来不复杂,但如果你真的动手做过,就知道最麻烦的部分永远是"CLI 工具到底怎么跟 GUI 通信"。这里我踩过坑,也重写过三轮。

3.1 直接抓stdout为什么不靠谱

最朴素的想法是:用ProcessBuilder启动claude,然后把process.getInputStream()读出来显示到面板,再把用户输入写进process.getOutputStream()。我第一版就是这么写的,只用了半天就发现问题了:

首先,Claude Code 和 Codex 在启动时会检测当前标准输入输出是否为 TTY(终端设备)。如果不是 TTY,它们会直接进入非交互模式,很多能力会静默失效:比如不会渲染交互式菜单、不会显示任务进度、部分斜杠命令直接不可用。你明明想让它干活,它却像被绑住手脚一样只给你纸面回复。

其次,即使强制交互模式通过了,ANSI 转义序列的处理也非常折磨人。Claude Code 喜欢用\r重绘进度条、用光标移动序列控制行内更新。直接读取输出会把所有中间状态全打印出来,面板变成一帧一帧的幻灯片慢放。

3.2 PTY方案:模拟终端才是正路

所以我很快就明白,不能走ProcessBuilder直连这条路,必须引入PTY(伪终端)层。PTY 的作用是向 CLI 进程伪装一个真实终端环境,让它们认为自己在跟用户交互,从而启用完整的交互能力。

Java 生态里做 PTY 最成熟的库是pty4j。它内部基于 JNA 调用系统底层接口:在 macOS/Linux 上走openpty/forkpty,在 Windows 上则支持 Winpty 和 ConPTY 双后端。我们最终选择了pty4j + ConPTY的组合,因为 ConPTY 是微软官方推荐的现代伪终端方案,对 Unicode、宽字符、鼠标事件的支持都比 Winpty 要完整。

引入 PTY 之后的数据流变成这样:

用户输入(GUI) -> PTY master -> PTY slave -> CLI进程(stdin) CLI进程(stdout) -> PTY slave -> PTY master -> 输出解析 -> GUI面板

PTY 层带来的额外麻烦是字节流和字符流的边界问题。Claude Code 会输出 UTF-8 多字节字符,而 PTY 读取时可能把一个字符拆成两半读到缓冲区末尾。所以我在 PTY 读取线程上做了字节拼接缓冲,等完整的字符序列再交给上层解析,否则中文大概率会乱码(具体看第 5 节踩坑)。

3.3 渲染层:终端字节流到聊天UI的数据通路

数据通路的下一环是渲染。其实有两种方案可以选:

方案 A:渲染成终端模拟器(比如嵌入式 jediterm 或嵌入式 WebView + xterm.js),保留完整的终端交互能力。好处是兼容性极高,任何 CLI 的异常输出都能显示;坏处是实现复杂,而且终端的视觉样式跟 IDEA 的主题格格不入。

方案 B:按语义拆分成聊天 UI,只保留主要展示,忽略部分底层细节。好处是好看、好用、贴近用户习惯;坏处是遇到新的输出格式时可能会有兼容性问题。

插件最终选择了 B 为主、A 为辅的混合方案:默认把输出解析成结构化会话面板;如果用户在设置里开启"完全原始终端模式",则切换成嵌入式终端模拟器,用 ANSI 转义逐字渲染,保证任何模式下工具都不会出现"显示不出来"的情况。

3.4 为什么不直接用 JetBrains 自带的 Terminal 插件

既然 IDEA 本身就有 Terminal 工具窗口,为什么不直接在 Terminal 里反弹一个claude命令?这其实是我被问得最多的一个问题。答案是:IDEA 的内置 Terminal 插件太黑了,它没有一个公开 API 能让你精准控制"在指定 Tab 启动指定命令,并把输出流实时回调给你的插件"。你只能在里面模拟键盘输入,读输出更是拿不到可直接消费的流。所以与其逆向 Terminal 插件,不如自己基于 PTY 造一套可控的数据通路。

4. 模块设计与工程落地:插件是怎么拆出来的

吹完技术方案,落回工程。这个插件不是单文件项目,我把它拆成了几个相对独立的模块,每个模块只干一件事,这也是我做得比较满意的地方。

4.1 总体模块划分

  • cli-bridge:封装 PTY 进程管理。负责启动 CLI、读写字节流、维护进程生命周期、检测进程退出。对上层只暴露start(),write(),onOutput(),dispose()几个方法。
  • parser:ANSI 转义解析、代码块识别、结构化消息拆分。输入是字节数组,输出是ChatSegment列表。
  • ui:工具窗口、会话面板、消息渲染、输入框、右键菜单。只消费ChatSegment,不直接接触 PTY 细节。
  • config:插件设置持久化,包括 CLI 路径、API 密钥、模型参数、代理设置、UI 偏好。
  • context:IDEA 编辑器上下文采集,负责监听文件切换和选中事件,生成结构化的代码上下文。

分层带来的好处是:parser 和 cli-bridge 完全可以在无 IDE 环境的单元测试里跑,不需要每次改动都强拉 IDEA 来调试。

4.2 IDEA插件开发的关键触点

IDEA 插件开发本身有固定的门道。构建工具用 Gradle +org.jetbrains.intellij插件,dependency 加上platform类型指向具体 IDE 版本。我遇到过一个容易让人放弃的点:如果要同时兼容 2023.1 和 2024.2,很多 API 的签名都不一样(尤其是 Tool Window 和 Editor 事件部分)。我的建议是初期只认准一个主版本(比如 2024.2+),把sinceBuild和untilBuild设好,先跑通再谈兼容。

几个核心 API 说下:

  • 工具窗口注册在plugin.xml的<toolWindow id="AICodex" anchor="right">里,对应的ToolWindowFactory负责创建面板。
  • 编辑器上下文监听用EditorFactory.getInstance().getEventMulticaster().addCaretListener(),能在光标移动、选中变化时回调。
  • 键盘快捷键通过ActionSystem注册,右键菜单用EditorPopupMenu扩展点注入"把选中代码发送给 AI"的动作。

4.3 配置体系:密钥、模型与网络设置

之前很多用户拿到插件的第一反应是:API 密钥填在哪?这里我坚持用 IDEA 的PasswordSafe来保存 API Key,而不是明文写进配置文件。PasswordSafe是 IDEA 提供的能力,会把密码加密后存在系统凭据管理器里,读取通过PasswordSafe.getInstance().getPassword()。好处是:第一,不把密钥泄露到项目里;第二,和 IDEA 的"记住密码"体系一致,用户心理上更容易接受。

模型参数方面,插件默认不硬编码模型名,而是读取claude/codex自身的配置文件。如果你在系统里已经配置过模型和 Base URL,插件直接沿用;如果没配置,插件会在首次启动时弹窗引导你完成基础配置。

4.4 进程生命周期管理:一个经常翻车的细节

PTY 进程的生命周期管理绝对是"看起来简单、做起来全是坑"的部分。Claude Code 和 Codex 会自己 fork 子进程来跑 shell 命令,如果你只 kill 掉父进程,子进程会很顽固地继续占用终端。所以插件在 dispose 时必须做进程树的清理:先发送CTRL_C或者exit命令让 CLI 优雅退出,等几秒没有响应再调用系统级的 TerminateProcess 或 kill 进程组。

另外还要注意 IDEA 关闭时的事件处理。用户直接关 IDEA,插件必须保证 PTY 进程也跟着退出,不能留一堆孤儿进程在后台跑,这是最基本的职业素养。

5. 开发路上踩过的坑:从OneKey到ConPTY的几次返工

聊聊真实开发过程中把我按在地上摩擦的几个坑。如果你也想做类似的 GUI 外壳型插件,这些经验能让你少走至少两周弯路。

5.1 坑一:Windows下PTY后端选型翻车

我最早在 Windows 上用的是 Winpty 后端,因为它在老项目里很常见。结果被坑得很惨:Winpty 对 ConPTY 模拟的现代终端控制序列支持得很差,Claude Code 的某些多行渲染在 Winpty 下会出现严重的闪烁和错位。查了两天,最后把后端切换成 ConPTY,问题立刻消失。事后总结:Windows 上做新项目无脑选 ConPTY,别碰 Winpty。Winpty 只能兼容老版本 Windows(如 Win7),如果你愿意为一个 2015 年的系统牺牲用户体验,那我没话说。

5.2 坑二:中文乱码与ANSI转义的相爱相杀

这个坑是组合拳:先遇到 ANSI 转义解析失败,后来遇到中文乱码,最后发现是同一个根因——字节边界处理失误。PTY 的读取事件没有固定边界,Linux 下一个 UTF-8 中文可能是 2-3 个字节在不同的事件片里到来。我第一版代码天真地对每个读取事件直接 decoders 成字符,于是中文只要跨片就乱。

解决方法是在读取线程里加了一个ByteArrayOutputStream作为 pending buffer,每次读入先 append,然后尝试按 UTF-8 解码,如果解码失败(说明字符不全)就继续等下一个事件片,直到可以完整解码再上抛。

另外 ANSI 解析器必须处理"ESC 序列部分到达"的情况。比如\x1b[32m可能分两片到达,如果解析器没有状态机,会把\x1b当成非法字符输出成?。做法是把 ANSI 解析器做成增量状态机,输入不完备就缓存,等待后续字节。

5.3 坑三:IDEA版本与JBR版本兼容性

IDEA 从某个版本开始捆绑了自己的 JetBrains Runtime(JBR),不同大版本的 JBR 差异很大。最直接的坑是:你用本机 JDK 17 编译的插件,放到用 JBR 21 的 IDEA 2024.2 里运行,某些反射 API 直接报InaccessibleObjectException。解决方案很朴实:在build.gradle里配置jvmToolchain(17)或者其他与目标 IDE JBR 大版本兼容的 JDK,并且在 CI 里用多个 IDEA 版本跑 smoke test。

5.4 坑四:Tab切换竟然导致会话失联

这个坑非常隐蔽。我在会话 Tab 切换时做了一个"释放资源再重新绑定"的优化,结果发现一旦切走再切回来,PTY 输出偶尔会丢失。排查了很久,最后发现是 IDEA 的 Tool Window 在 Tab 被隐藏时会暂停低优先级的事件分发,导致我的输出流回调线程被阻塞。解决办法是:输出回调绝不直接更新 UI,而是先丢进一个无锁队列,再由 Swing 的Timer周期性拉取刷新。这既解决了 UI 线程卡顿,也避免了隐藏时的回调丢失。

5.5 坑五:调试器的反直觉行为

IDEA 插件项目调试有一个反直觉的地方:你不能像普通 Java 程序那样直接跑 main,必须在 Gradle 里启动runIde任务,它会拉起一个带插件的新 IDE 实例。但这个实例的调试端口默认是随机的,你需要先在build.gradle里设置jvmArgs += ["-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005"],然后在 IDEA 里配置 Remote JVM Debug 连 5005 端口,才能断点调试插件代码。第一次做插件开发的人十有八九卡在这一步,特此写出来帮大家跳过。

6. 安装、配置与一天的真实使用流

下面这部分是纯操作指引,照着做就能用。

6.1 安装:市场安装与本地ZIP两种方式

推荐从 JetBrains Marketplace 直接安装:打开 IDEA 的Settings -> Plugins -> Marketplace,搜索插件名称(按项目名搜即可),点 Install,重启 IDE 即可。这种方式的好处是以后能自动收到更新。

如果你所在环境访问 Marketplace 不便(有些内网环境完全隔离),也可以走本地安装:在项目 GitHub Releases 页面下载 zip 包,然后Settings -> Plugins -> 齿轮图标 -> Install Plugin from Disk...选择 zip 即可。本地安装的插件同样能正常使用,只是更新需要手动下载覆盖。

装完之后右侧(或底部)会出现一个新的工具窗口,没有的话去View -> Tool Windows里找。

6.2 配置:命令行工具路径与密钥

第一次打开工具窗口时,插件会检测系统里有没有claude和codex。如果之前装过且配置过,基本直接可用;如果没装,先按官方移植方式装好这两个 CLI 工具,或者把它们的可执行文件路径手动填进Settings -> Tools -> AI Shell。

需要重点检查的配置项就一句话:确认 API 密钥所在位置。如果 Claude Code / Codex 本身已通过环境变量或配置文件设置好了,插件直接沿用;如果你之前没配置过,可以用插件内置的配置向导填 Key、选模型。这里我建议 Key 走PasswordSafe存,别写在项目里的.env文件中,免得哪天提交代码把密钥带出去。

6.3 真实使用流:一个Java项目的AI辅助开发演示

为了让你更直观地感受用起来是什么体验,我贴一段我自己下午的真实操作流:

  1. 打开项目,定位到OrderService.java,光标放在第 86 行一个嵌套循环内。按快捷键呼出插件输入框,输入:/why加一句"这段循环每次都要查数据库,能不能一次查出来?"。
  2. 插件自动带上当前文件、当前方法行号作为上下文发给 Codex CLI。它基于代码内容和 IDE 给的文件路径,直接给出优化建议,并附上修改后的代码块。
  3. 我在代码块右上角点一下"应用",插件就把代码块渲染成可 preview 的 diff,我确认后直接写入文件。
  4. 改完我又顺手开了第二个 Tab,让 Claude Code 去跑一次全量测试,同时自己继续写下一个功能。测试跑完,面板里弹出结果,出错的地方点了能直接跳到对应测试文件。

整个过程里我没离开过 IDEA,没有一次窗口切换、没有复制粘贴、没有手动跑命令。这就是我说"上下文闭环"的价值:AI 工具嵌入 IDE 之后,真正变成了编辑器的一部分,而不是另一个需要折腾的 App。

7. 对比与边界:这个插件到底适合谁用

最后做个坦诚的对比,不吹不黑。

7.1 和"终端裸奔"方案对比

如果你是一个极简主义者,所有工具都在终端里完成,那这个插件对你来说是多余的。裸终端 + Claude Code / Codex 是原汁原味的体验,特别是 tmux 重度用户,他们有自己成熟的多会话管理方案。但如果你和我一样整天在 IDEA 里点来点去,那显然 GUI 交互更顺手。两者对比其实没有高下之分,只有环境状态的差别。唯一我要提醒的是:如果你在 Windows 上裸用终端跑 Claude Code,至少先把终端模拟器选好,Windows Terminal 是底线,CMD 和 PowerShell 的老版本体验会让你怀疑人生。

7.2 和VS Code扩展/第三方扩展对比

VS Code 生态里已经出现了不少 Claude Code / Codex 扩展,体验也相当不错。VS Code 的插件生态更开放,容易嵌入 WebView + xterm.js,渲染天花板可能比 IDEA 插件更高。但 VS Code 的问题在于:对 Java/Kotlin 这种重量级语言项目的支持始终不如 IDEA。所以这个对比的答案取决于你的主语言:写前端、Python、Go,VS Code 很好用,去用它的扩展就行;写 Java、Kotlin、Scala 的老老实实待在 IDEA 里,这个插件更合适。

7.3 和JetBrains自家AI(AI Assistant)对比

JetBrains 自家 AI Assistant 在 IDE 集成深度上当然是最强的,但它是封闭的、按订阅付费的,而且主要接厂商自己的模型后端。如果你已经习惯 Claude Code / Codex 的工作流,或者你用的是 Claude 这类模型在自己的场景下效果好,那自家 AI 会显得不够灵活。这个插件的定位不是替代 AI Assistant,而是把外部 CLI 工具的能力带进 IDEA,二者可以共存。

7.4 适合谁,不适合谁

适合人群:IDEA 重度用户;已经用着 Claude Code / Codex 但想减少窗口切换的人;喜欢开源、愿意自己改插件逻辑的人。

不适合人群:终端原教旨主义者;只用 IDEA 写简单脚本的人;希望插件内置模型、不依赖外部 CLI 的人(这个插件没有内置模型,它只是壳,模型和密钥都得你自己配)。

8. 我的体会与下一步

做了这个项目之后,我最大的体会是:给 CLI 工具做 GUI 外壳,难点根本不是 UI,而是数据通路和生命周期管理。一个能用的壳子一天就能写完,但一个在 Windows、macOS、Linux 上都不乱码、不丢输出、不残留进程的壳子,需要一两周来打磨。这也是为什么这个项目值得开源——不同平台的坑,一个人真的踩不完。

下一步的规划里,我想优先补三块:一是把 IDEA 运行时 diff 预览做得更完善,让 AI 改代码的每一步都可视化可回滚;二是做一个会话导出功能,把 AI 和你的对话记录按 Markdown 导出,方便写周报和复盘;三是把不同 CLI 工具的兼容层抽得更干净,让以后接入更多 AI 编程工具(不只 Claude Code / Codex)变成改一行配置的事。

最后再分享一个我在实际使用中的小技巧:如果你在用这个插件跑 Claude Code 的"大改代码"任务,建议把Settings -> Tools -> AI Shell -> 输出缓冲区调大一点,否则输出量特别大时,旧版插件会出现 UI 卡顿。这个问题在 1.2 版本已经修复了,但我还是在设置里留了这个选项给喜欢开超长上下文的用户。希望这个项目能帮到你,也欢迎提交 issue 和 PR,尤其是那些只有某个平台才出现的怪问题——我还挺感兴趣的。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询