Release version 0.31.0
codeg has a browser now. A link in a conversation, a tool result or the terminal opens as a tab beside your files — with profiles, downloads, find in page and a locked-down preview for local HTML — instead of throwing you into another app.
It is also a surface you and an agent can share: hand a page, an element, a screenshot or a console error straight into the conversation, or let an agent read and drive a page you have shared, with everything it does written on the tab where you can watch it.
Alongside it: the blocking question card folds away to its header, qoder sessions finally report what they cost, and a cancelled task put back on the board starts over cleanly.
Built-in browser
- Links open in a tab beside your files instead of leaving the app — from a conversation, a tool result, the terminal, the editor or a notification, on macOS, Windows and Linux; ⌘/Ctrl-click uses your system browser just that once, and Settings → Built-in browser sets the destination per source, per site, or turns the whole thing off. (#723)
- A tab is a real browser — back, forward, reload and the address bar in one row, find in page with ⌘F, downloads into your downloads folder, pop-ups that say why they were blocked and offer to open anyway, and an error page that names what went wrong and offers Retry.
- Tabs come back after a restart, and can hand their memory back after half an hour in the background if you would rather have the memory than the page's state.
- Profiles keep two sign-ins apart — separate cookies, storage and logins, a choice of which profile new tabs use, the same page re-openable in another, and browsing data clearable one profile at a time; signing in with Google from a tab works too, which embedded browsers are normally refused.
- A server you start in a terminal comes to you — codeg notices the address it prints and offers it in a toast (or opens a background tab, or stays quiet — your choice), only ever for addresses on this machine, and the “+” at the end of the tab strip lists the local servers running right now.
- HTML files preview in a locked-down document view — no scripts until you press Enable, and even then only over files in the document's own folder with no way to reach the network; the old inline preview stays one switch away.
- Hand what you are looking at to the conversation — the page, an element you pick on it, a screenshot, or the errors its console printed, each landing in the composer as a badge you can still take back before sending.
- Let an agent work on the page in front of you — with the "Read and drive the built-in browser" tool group switched on (it is off for every agent until you do), an agent can list your open tabs, read a shared page's structure, click, type, press keys, choose options, screenshot it, read its console, and open, navigate or close tabs.
- And see exactly what it did — each tab's address bar says what it is sharing and takes it back in one press, every action an agent takes is written on the tab itself with refusals included, sharing ends the moment the page leaves that site, and the standing level for new pages (read and act, read only, or nothing) is yours to set.
- An agent running its own JavaScript is a separate switch, off by default — each snippet is shown to you for approval before it runs, and approving one never approves the next.
- Platform notes — on Linux a tab is a window of its own rather than a pane inside the workspace, and the locked-down HTML document view is macOS and Windows only. Favicons, download progress and background preloading are not in this first release.
New
- Collapse the blocking question card to its header — one click gives the message list its space back while the question stays pending, and the card re-opens itself if the agent replaces the question set or your answer comes back failed. (#622, #623, @yunsheng111)
- The composer's token popover shows your cache hit rate — one row under Total, to one decimal, with the Token Usage dashboard and its share card now printing the same number instead of rounding to a whole percent; a session that reports no cache counters at all leaves the row out rather than claiming a confident 0.0%. (#771, @gongcavalry)
- Every model is captioned the way its own agent names it — codeg records the id/name pairs an agent's model picker advertises, so the reply footer, the session details and the sidebar hover chip say
Qwen3.8-Flashwhere a qoder transcript records the account-internalqfmodel. - Adding an MCP server offers the official Chrome DevTools server by name — one press fills the form with the right package, which matters because the registry carries same-named copies from other owners; you still pick the agents and press Create.
Improved
- Updated bundled agents: Claude Code ACP 0.79.0, CodeBuddy 2.155.0, Kimi Code 2.0.2, Cursor 2026.09.15, Qoder 1.1.57.
- An agent asking you a question no longer costs two dialogs — under a permission mode that consults you before every MCP tool call (Claude Code's default), the real question card was preceded by a raw "run this tool?" approval that dumped the questions as JSON; codeg now recognizes its own ask tool and answers that one for you, for that turn only.
- Pi reads each model's context window from its own
models.json— resolved by provider and id, and honoring pi's 128K default for a listed model that declares none, so a self-hosted or proxied model shows a real percentage instead of a raw token count or a window pi is not running with. (#771, @gongcavalry) - A shell approval on Claude Code 0.79 keeps its explanation — the new adapter turns the card's heading into the raw command, which would have printed the command twice and dropped the one-line description of what it does.
- Cursor's new build keeps codeg's retry fix — Cursor's ACP sessions retry nothing on their own, and the 2026.09.15 build renamed the internals the fix patches, which would have left new installs silently unpatched and ended a turn on the first transport blip.
Fixed
- Qoder sessions report what they actually cost — qoder zeroes its own token counters unless told otherwise, so every session read 0 tokens and drew no context ring; codeg now turns the counters on and reads qoder's own occupancy signal, so sessions recorded before this release get a gauge too, and a cached prefix is no longer counted twice (a measured turn read 39,384 of 200,000 against qoder's own 10.26%).
- A PowerShell call renders as a terminal card — with its command line and its output, live and reopened, instead of a raw JSON dump under a terminal icon; Claude Code and pi both.
- An approval for a command starting with
{or[—[ -f x ] && y,{ npm test; }, a patch-writing heredoc — shows the command again instead of an approval card with no command in it at all. - A requeued task starts over instead of resuming the run you cancelled — the requeue kept the cancelled run's conversation, so the next start loaded the killed session, settled the task as
canceled, and that task never ran again. (#649 reported by @ijry, #714, @Adam-Dalloul) - A requeued run keeps the feedback you returned with it — review → "rework this" → cancel → requeue replayed the original order alone, into a worktree that already holds the stopped run's work, and a returned question arrived carrying a licence to commit; the prompt now carries the returned turn first and your note after it, and says the worktree is not empty.
- Closing the window while macOS is in fullscreen works — hide, minimize-to-tray or exit left a black blank with leftover toolbar chrome; the fullscreen Space is now torn down first, and only when the window is really being dismissed, so answering "cancel" to the close prompt keeps your fullscreen. (#507 reported by @Lparksi, #767, @Frank-zhu0404)
- A session tab no longer sticks to the pointer — a click whose release never reached the window left the tab latched to the cursor, and with it a global drag lock that stopped every other drag in the app until reload. (#769, #770, @turingcat)
Thanks to @yunsheng111, @gongcavalry, @Adam-Dalloul, @Frank-zhu0404 and @turingcat for contributing to this release, and to @ijry and @Lparksi for the reports.
发布版本 0.31.0
codeg 有自己的浏览器了。对话里、工具结果里、终端里的链接会在文件旁边开成一个标签页——带独立身份配置、下载、页内查找,以及本地 HTML 的受限预览——不再把你甩到另一个应用里。
它同时也是一块你和智能体共用的界面:页面、页面上的某个元素、一张截图、控制台里的报错,都能直接递进对话;你也可以把某个页面共享给智能体去读、去操作,它的每一步都写在那个标签页上,你看得见。
同期还有:提问卡可以收进标题行、qoder 会话终于能报出真实开销、被取消后重新入列的任务能干净地从头开始。
内置浏览器
- 链接在文件旁边开成标签页,不再跳出应用——对话消息、工具结果、终端、编辑器和通知里的链接都算,macOS、Windows、Linux 三端均可;按住 ⌘/Ctrl 点击可临时改用系统浏览器,设置 → 内置浏览器里可以按来源、按站点设定去向,也可以整个关掉。(#723)
- 标签页就是一个完整的浏览器——后退、前进、刷新和地址栏合并成一行,⌘F 页内查找,下载直接落到下载目录,弹窗被拦截时会说明原因并提供「仍然打开」,页面打不开时给出说明清楚的错误页和「重试」。
- 标签页重启后会回来,也可以选择让后台停留半小时以上的标签页释放内存(切回时自动重新加载)。
- 多身份配置让两个账号同时在线——各自独立的 Cookie、站点存储和登录态,可指定新标签页使用哪一个,同一页面可在另一个配置里重新打开,浏览数据也能按配置单独清除;从标签页登录 Google 同样可用,而嵌入式浏览器通常会被它拒绝。
- 你在终端里起的服务会自己找上门——codeg 会识别它打印的地址并用 toast 提示(也可以改成直接开后台标签页,或者完全不打扰),且只认本机地址;标签条末尾的「+」菜单会列出当前真正在跑的本机服务。
- HTML 文件以受限文档视图预览——不点「启用脚本」就不跑脚本,即便启用也只能读取该文档同目录下的文件、且无法访问网络;原来的内联预览仍然一键可切回。
- 把你正在看的东西递给对话——整页、你在页面上点选的某个元素、一张截图,或者控制台里打印的报错,都会作为一个胶囊落进输入框,发送前仍可撤下。
- 让智能体在你眼前的页面上干活——打开「读取并操作内置浏览器」工具组后(默认对所有智能体关闭),它可以列出你打开的标签页、读取已共享页面的结构,并点击、输入、按键、选择选项、截图、读取控制台,以及打开、跳转和关闭标签页。
- 而且它做了什么你一眼看得见——每个标签页的地址栏会标明当前共享级别并可一键收回,智能体的每一次动作(包括被拒绝的)都记在该标签页上,页面一旦离开该站点共享立即结束,新页面的默认共享级别(可读可操作/只读/不共享)由你设定。
- 让智能体运行自己的 JavaScript 是另一个开关,默认关闭——每一段代码运行前都会把原文摆给你确认,同意这一段绝不等于同意下一段。
- 平台说明——Linux 上标签页是一个独立窗口,而不是嵌在工作区里的面板;受限 HTML 文档视图目前仅 macOS 与 Windows 提供。网站图标、下载进度与后台预加载不在首个版本内。
新增
- 提问卡支持一键收起为标题行——把消息列表的空间还给你,同时问题保持待回答状态;当智能体换了新一组问题、或你提交的回答失败时,卡片会自动重新展开。(#622、#623,@yunsheng111)
- 输入框的 Token 浮层新增缓存命中率——位于「总计」下方,保留一位小数;Token 用量看板及其分享卡片也统一成同一个数字,不再四舍五入到整数百分比;若该会话完全没有缓存计数,则直接不显示这一行,而不是给出一个笃定的 0.0%。(#771,@gongcavalry)
- 模型名称一律按其所属智能体的叫法显示——codeg 会记录智能体模型选择器公布的 id/名称对应关系,因此回复页脚、会话详情和侧边栏悬浮胶囊会显示
Qwen3.8-Flash,而不是 qoder 会话记录里那个账号内部的qfmodel。 - 添加 MCP 服务器时可一键填入官方 Chrome DevTools 服务器——注册表里存在同名但不同作者的仿冒条目,这个按钮只负责把正确的包名填进表单,选择哪些智能体、是否创建仍然由你决定。
改进
- 内置智能体版本更新: Claude Code ACP 0.79.0、CodeBuddy 2.155.0、Kimi Code 2.0.2、Cursor 2026.09.15、Qoder 1.1.57。
- 智能体向你提问不再需要点两次弹窗——在每次调用 MCP 工具都要征求你同意的权限模式下(Claude Code 的默认模式),真正的提问卡之前还会先弹出一个把问题以 JSON 原样抛出的「是否运行该工具?」审批;codeg 现在会识别自己的提问工具并代为放行,且仅对本轮生效。
- Pi 的上下文窗口改为读取它自己的
models.json——按(供应商,模型 id)解析,并遵循 pi 对未声明窗口的模型采用 128K 的默认值,因此自建或中转的模型会显示真实的百分比,而不是一串裸 Token 数或一个 pi 并未采用的窗口值。(#771,@gongcavalry) - Claude Code 0.79 下的命令审批卡保留说明文字——新版适配器把卡片标题改成了原始命令,若不做适配,卡片会把命令打印两遍并丢掉那句「这条命令是做什么的」说明。
- Cursor 新版本仍然保留 codeg 的重试修复——Cursor 的 ACP 会话自身完全不重试,而 2026.09.15 构建重命名了该修复所依赖的内部标识,若不跟进,新安装会悄无声息地未打补丁,一次网络抖动就会让整轮对话直接结束。
修复
- Qoder 会话能报出真实开销——qoder 默认会把自己的 Token 计数抹成 0,导致每个会话都显示 0 Token、也画不出上下文占用环;codeg 现在会开启真实计数,并读取 qoder 自己给出的占用比例,因此本次发布之前记录的会话同样能显示占用环,缓存命中部分也不会再被重复计算(实测某一轮显示 39,384/200,000,而 qoder 自报为 10.26%)。
- PowerShell 调用会渲染成终端卡片——带命令行和输出,实时与重新打开都一样,不再是终端图标下的一坨原始 JSON;Claude Code 与 pi 同时受益。
- 以
{或[开头的命令审批卡重新显示命令内容——[ -f x ] && y、{ npm test; }、写补丁的 heredoc 等,此前审批卡里根本看不到要执行的命令。 - 重新入列的任务会从头开始,而不是续跑你刚取消的那次运行——重新入列时保留了被取消运行的会话,导致下一次启动加载了已被杀掉的会话,任务最终落到
canceled,且该任务再也跑不起来。(#649 由 @ijry 反馈,#714,@Adam-Dalloul) - 重新入列时你填写的反馈不会再丢——评审 →「返工」→ 取消 → 重新入列,此前只会重放最初的需求,而工作树里已经有上一次运行的成果;被退回的「提问」还会带着提交授权一起下发。现在提示词会先带上被退回的那一轮,再附上你的备注,并明确说明工作树并非空白。
- macOS 全屏状态下关闭窗口恢复正常——隐藏、最小化到托盘或退出会留下一块黑屏和残留的工具栏;现在会先退出全屏 Space,且只在窗口确实要被关闭时才退出,所以在关闭确认框里选「取消」不会再白白丢掉全屏。(#507 由 @Lparksi 反馈,#767,@Frank-zhu0404)
- 会话标签页不会再粘在鼠标上——点击后若松开事件没能传回窗口,标签页会一直跟着光标,并连带锁死全局拖拽,导致应用内其它拖拽在重新加载前都失效。(#769、#770,@turingcat)
感谢 @yunsheng111、@gongcavalry、@Adam-Dalloul、@Frank-zhu0404、@turingcat 为本次发布做出的贡献,也感谢 @ijry 和 @Lparksi 的反馈。