本版新增定时任务、会话排序与跨项目移动、手机提醒、WSL 远程、Git 面板、反馈贡献榜、规则目录与按名称关闭工具,推理强度可在进行中的回合里切换,并修复内置浏览器页面缩放、终端卡顿、子代理识图等一批问题。
新增
reasonix schedule add|list|tick等命令,在终端确认后按时间只读地运行任务;需用系统计划任务调用schedule tick。关联 #11406。- Studio 打开且可见(窗口或托盘图标)时,会按计划自动运行已确认的定时任务;同一时刻只有一个内核执行。关联 #11406。
- 会话菜单里可以把会话上移或下移,也可以在会话行上按 Alt+上下键;顺序保存在内核里,重启后不变。关联 #11420。
- Linux 增加
.AppImage下载(amd64 和 arm64),可直接运行;它不会自更新,新版本需重新下载。关联 #11653。 - 浏览器和工作台可以全屏查看,会话与输入框暂时收起,按 Esc 或再点一次回到分栏;有事等你决定时自动退出全屏。关联 #11721。
- 登录同一账号的手机可在有操作待批准、模型提问、一轮出错时收到提醒,通知只含类别和数量。电脑和手机两边默认都关,需分别开启。关联 #11878。
- MCP 服务器因授权范围不够拒绝调用时,模型会停下,你可在该服务器那行点“授权更多权限”,每次都会先问你。关联 #11959。
- 在“我的反馈”里可以撤回自己的反馈(命令行用 /feedback withdraw);已登记的议题会被关闭,已有结论的反馈不能撤回。关联 #11995。
- 可选的等级提示(设置里“等级提升时通知我”,默认关):反馈等级提高时在窗口顶部提示一次,终端 /feedback list 说一行。关联 #12025。
- 在“我的反馈”的对话里,你自己的回复旁会显示你的等级徽章,维护者的回复旁没有。关联 #12025。
- 关联账号的电脑上,“我的反馈”会列出其他已关联设备的反馈和回复;终端新增 /feedback link、unlink、links。关联 #12073。
- 设置 → 远程可以添加本机的 WSL 发行版:内核运行在发行版里,界面仍在 Windows;关闭 Studio 后内核随发行版停止,对话会保留。关联 #12225。
- 终端界面的 /mcp 面板里,返回 401 的服务器可按 a 登录,要求更多权限的服务器可按 u 授权,都会先问你。关联 #12357、#11959。
- ACP 会话支持
additionalDirectories,多文件夹工作区可让会话写入额外文件夹,仅限该会话,且经过与手动授权相同的检查。关联 #13114。 - ACP 支持
$/cancel_request、消息块messageId、权限请求带工具名,并按客户端声明转交 MCP 的表单与外部页面。关联 #13114。 - 可选的追踪导出,在用户配置里开启并填写收集器地址后,每轮对话以 OpenTelemetry 追踪发给你自己的观测系统;默认关闭,只发结构和名称。关联 #13115。
- 反馈面板里的“贡献榜”,按版本有名次,自己选择加入并预览名字,随时退出;终端用 /feedback board。服务端开启后才显示。关联 #13142。
- 会话菜单里可以把会话移到另一个项目,只带走对话和标题、置顶、归档;权限设置、检查点、后台任务日志和排队消息不随移动,原件会被移除。关联 #13370。
- 设置里的 SearXNG 地址旁新增「测试连接」,说明连不上的原因;只测已保存的地址,不连云元数据等地址;搜索失败时模型也收到同一原因码。关联 #13541。
- 大文件优先引用本地路径,无路径时流式上传;默认 1 GiB 上传安全上限可由用户配置调整。关联 #13544 by @SivanCola。
- 实验性,未经真实端点验证:原生 Gemini 提供方(Interactions API),支持思考、工具调用与视频(含 Files API)。关联 #13615。
- 可在设置里打开“把视频地址交给模型厂商”(默认关闭);只交你亲手写的 https 地址,厂商自己访问,智谱 GLM 与 Gemini(YouTube)支持。关联 #13616。
- 子代理的面板行、完整记录标题和嵌套卡片都会显示它实际跑在哪个模型和强度上,失败或中断的也有。见 #13640 fixed in #13812。
- 模型现在可以请你打开它需要的开关(比如派发到其他项目),你点一下确认才生效;安全边界类设置它永远改不了。关联 #13678。
- 在输入框输入 # 可选一段本工作区的历史会话,作为只读资料带进这条消息;搜索命中也能引用,长度上限可在设置里调。关联 #13687、#11942。
- 模型可用 task 的 task_id 给运行中的子代理补充指示,它在下一次调用工具时读到;设置里可调单条大小和每分钟上限。关联 #13693。
- mod 的安装预览写明完全信任与静态清单;mod 可在输入框上方画一条带,它的提问会写明来源。关联 #13694。
- 把鼠标移到你发的消息上,操作图标旁会显示这条消息的发送时间,长时间运行的任务可以据此核对起止时间。关联 #13697。
- 设置 → 扩展里,你自己和项目文件夹里的技能多了「卸载…」,确认框写明要删除的位置;内置技能和由包提供的技能不显示。关联 #13714 fixed in #13725。
- 终端里的 /mcp 面板现在可以添加和删除 MCP 服务器(按 n、d),添加前会完整显示将要运行的命令并要你确认。关联 #13754。
- 工作台里的 Git 面板:改动按文件夹树显示,可整个文件夹暂存、丢弃单个文件的改动,推送前先预览目的地,历史里的提交可展开看文件和差异,非仓库的项目文件夹会按仓库分组显示。关联 #13821。
- 终端里 /btw <问题> 在旁路问一个只读问题,答案只显示一次,不存入会话、不进入提示词。关联 #7950 fixed in #13757。
reasonix acp --permission-mode供把 Reasonix 当子代理嵌入的宿主使用:固定审批姿态,客户端只能降低不能抬高,旧存档的更高姿态被限制且文件不改。议题 #13839。- 连接可以声明余额接口的返回格式;其他域名(如中转站)必须选择格式,否则显示未配置,也不发密钥。关联 #13736。
- 设置里可以让新对话默认进入计划模式(agent.default_mode,默认关闭);已有对话保持自己的模式。关联 #7852 fixed in #13760。
- 状态栏显示当前按供应商哪个时段计费(高峰或平峰)和还有多久切换,只在模型用的是供应商自己的价格表时显示。关联 #8853。
- Studio「人设」页提供用户级前后缀及运行时上下文开关;内置指令保留,项目不能设置人设。保存后在新会话或下次会话重建时生效。关联 #13588 by @SivanCola。
- 连接编辑器里,每个模型价格下可填价格来源链接和核对日期(UTC);只显示主机名,点击才打开,不会自动访问。议题 #13276。
- 支持规则目录(.reasonix/rules、.claude/rules 和用户目录下的 rules),可用 paths: 限定到某些文件;不影响缓存前缀。关联 #9886 fixed in #13766。
- 可以按名称关闭工具([tools] disabled,设置里每个工具有开关),关闭后不再发给模型,调用会被拒绝;被其他功能依赖的保留并提示。关联 #8394 fixed in #13763。
变更
- 服务商支持逐请求设置思考强度时,切换强度不再重建会话,进行中的回合里也能切,下一次请求起生效。见 #11411。
- 会话等你回答时(含 Auto Guard 确认卡、沙盒越界提问)让出写入权;其间别的会话占了这些路径,会告知模型并记入回执,最长等待可设。见 #11531 fixed in #13842。
- task 工具新增 task_id 参数,升级后的第一轮对话,工具说明的缓存会冷一次,之后恢复。关联 #13693。
- 通过 ACP 连接时,失败的对话回合改为以 JSON-RPC 错误(-32603,data.code 为 turn_failed)结束,不再返回规范之外的 stopReason "error"。关联 #13703。
- 通过 ACP 连接时,模型缺少密钥或尚未配置提供方,新建会话返回协议规定的“需要认证”错误(-32000),客户端可据此引导运行 reasonix setup。关联 #13705。
- 通过 ACP 连接时,因“尚未验证”被暂停的回合以 end_turn 结束,响应带 paused 结果,文本末尾追加 [paused] 回执。关联 #13706。
- 通过 ACP 连接时,状态类扩展通知需要客户端在初始化时声明 statusUpdates 才会发送,会话记录路径改放在响应的 _meta 里。关联 #13721。
- 打开设置里的“派发”开关就是对派发的总同意:任务和回信不再出审批卡;新会话沿用发起会话的模型、预设、审批档位和计划模式,且不会更宽。见 #13526。
- 已装的全信任权限扩展现在也会被已安装的 MCP 工具咨询(只能收紧,不能放宽)。见 #13694。
- 常驻放行的会话间消息只会越过宿主自己设的暂停,不会越过你主动按下的暂停,它会留在队列里等你。关联 #13775。
- 本机与 SSH 项目统一展示;“打开项目”移至标题旁的加号,支持统一折叠与展开。提交 da051ab。
- 会话采用中性选中背景;可选的悬停置顶、归档按钮默认关闭,菜单始终可用;修复环境切换、重复点击及焦点问题。PR #13638 by @SivanCola。
- 远端读取与未指定目录的打开共用主机默认目录,已有会话不会改变读取目标或绕过禁用检查。PR #13638 by @SivanCola。
- 未登记的 SSH 主机在连接前返回明确拒绝,远端写入接口的请求体限制为 64 KiB。PR #13638 by @SivanCola。
修复
- 代码编辑器及其查找栏的字号现在跟随外观里的界面字号,不再固定在 12px 和 11px。关联 #11577。
- 撤回反馈后,它对应的 GitHub 议题会被自动关闭(标记为不计划处理)。关联 #11995。
- 迁移数据根之后,窗口里仍记着旧位置的会话现在能按文件名在新的会话目录里打开,不再提示“没有这个会话”。关联 #13152。
[[keep]]标记的回合现在有自己的保留预算(窗口的 15%,新的优先),超出的旧回合并入摘要并提示;共享窗口的模型在回复空间用尽前就会压缩。见 #13320、#12773。- 压缩时摘要请求被供应商以“输入超长”拒绝,现在会按更小的输入重试(70%、50%、35%),而不是放弃这次压缩。见 #13320。
- 有系统沙盒把 shell 限在项目文件夹里时,同一 git 仓库下两个项目里的会话不再因 bash 等无声明写入互相等待;没有沙盒(如 Windows)时仍整库互斥。见 #13335 fixed in #13851。
- 委派任务里点名了粘贴的截图(.reasonix/attachments 下的文件)时,子代理现在能收到图并切到识图模型;技能子代理也不再悄悄丢图。见 #13642 fixed in #13876。
- 刚进入窗格就打开分支菜单时,菜单会被自己的挂载收尾关掉,或一直停在加载中。关联 #13674。
- 模型调用跨项目派发被拒时,会说明是“允许模型把任务交给别的会话”开关没开,并指出设置位置,不再和“此会话无法打开别的项目”混为一谈。关联 #13677 fixed in #13679。
- 有新版本时,设置弹窗左侧列表里的「版本」一行也会出现和左下角设置图标一样的提示点,打开设置后能直接看到该点哪里。关联 #13682 fixed in #13685。
- Windows 上会话文件名含大写字母(如自定义模型名)时,顶部标题和标签总显示“新会话”。关联 #13684。
- 标题栏的搜索按钮在查找栏已打开时再点一次会关闭它,不再只是重新聚焦;快捷键和命令面板仍然是打开。关联 #13696 fixed in #13701。
- 你自己发的消息下面的操作图标(复制、改写、回退)和 AI 回复下面的一样大,不再偏小。关联 #13699 fixed in #13704。
- 侧栏搜索框有关键词时不再在失焦后收起,点搜索结果的第一下不会再因为列表上移而落空。关联 #13708。
- 技能目录顶层放了 SKILL.md 时,卸载它会把整个技能目录连同其他技能一起删掉;现在只删这一个文件。关联 #13714 fixed in #13725。
- 模型偏好里的“网页搜索”不再列出尚未添加的连接下的模型;选不了时的提示也改为“还没有添加”,不再误称“已被移出”。关联 #13806 fixed in #13813。
- HTTP 连接里输入
!命令被拒后,命令会整段选中留在输入框,接着打字就是替换,下一条普通消息能直接发出。关联 #13810。 - 智能体把页面排版到比窗格更宽的视口(如 1440 宽)时,内置浏览器只显示页面左侧一部分;现在整页缩放到窗格内显示。关联 #13811 fixed in #13835。
- 智能体给内置浏览器页面设了比窗格小的视口时,页面居中显示,不再缩在窗格左上角;页面被缩小适配窗格时,智能体的点击仍落在原来瞄准的位置。关联 #13811 fixed in #13835。
- 项目文件夹或外部文件夹被移走、改名或删除后,工具调用不再返回系统原话或“无匹配”,而是明确告诉模型和界面“文件夹不在了”,并在输入框上方提示重新选择。关联 #13833。
- OpenCode Go 的新地址(opencode.ai/inference/go/…)不再因缺少会话标识而返回 400。关联 #13849 fixed in #13860。
- 自定义提供商没有声明推理档位时,/effort 不再说“不支持”,而是告诉你在该条目里写 supported_efforts。关联 #13857 fixed in #13863。
- 同一主机、不同端口的两个模型服务被合并成一个,新增的那个不显示;现在端口属于地址,各自独立显示,重复的条目也不再被丢掉。关联 #13858 fixed in #13865。
- 终端界面里,命令输出很长、或思考/回答很长时,界面会越来越卡(每次追加都复制整段文字);现在追加开销不再随长度增长。见 #13872。
- Studio 窗口最小化时,智能体在内置浏览器里的点击被页面丢弃却报成功;现在输入前会不可见地升起窗口、之后恢复最小化(Windows)。见 #13628。
- 你在卡片上批准的、别的会话发来的消息,在发送队列被暂停时不再只入队不处理,会单独开始,更早排队的内容仍保持暂停。关联 #13775。
- 别的会话发来的消息正文里的 @ 不再被当成本地文件引用去读取,读不了的引用也不会再把发送队列暂停。关联 #13775。
- 终端里刚启动就输入 /feedback 会提示“当前会话不可用”,要先 /reload 才行;现在启动后即可用。关联 #12073。
- 用量页的「实付」不再包含订阅等价(Token Plan 之类)的估算;估算单独一行标为「等价估算」,每日明细里也并排显示。议题 #13276。
- 已选「自动下载」时,打开设置里的版本页会立即检查一次新版本并开始下载,不必再等最长一天的后台检查。议题 #13683 fixed in #13875。
贡献者
感谢本版本的贡献者:@SivanCola
This release adds scheduled tasks, session moves, phone reminders, WSL remotes, a Git panel, a contribution board and rules directories, lets reasoning depth change mid-turn, and fixes browser scaling, terminal slowdown and sub-agent image reading.
New
reasonix schedule add|list|tickand friends: a read-only task runs when you confirm it in a terminal; calltickfrom your OS scheduler. Refs #11406.- While Studio is open and visible (a window or tray icon), it runs the schedules you confirmed; only one kernel ticks at a time. Refs #11406.
- A conversation can be moved up or down from its menu or with Alt+Arrow on its row; the order is kept by the kernel and survives restarts. Refs #11420.
- Linux gets an
.AppImagedownload for amd64 and arm64 that runs in place. It does not update itself: download the next release. Refs #11653. - Full-screen browser and workbench with the conversation folded away; Esc or the button restores the split, and it exits by itself when something needs your decision. Refs #11721.
- phones on the same account can be reminded when an action awaits approval, the model asks, or a turn fails; only the kind and a count are sent. Off by default on both sides. Refs #11878.
- When an MCP server refuses a call for lack of access, the model stops and you can click "Grant more access" on its row; you are asked every time. Refs #11959.
- You can withdraw your own report from My feedback (or /feedback withdraw in the terminal); its issue is closed, and a report with an outcome can no longer be withdrawn. Refs #11995.
- An optional level-up notice (Settings "Tell me when my level goes up", off by default): one note at the top of the window, one line in /feedback list. Refs #12025.
- In a My feedback thread, your level badge now sits beside your own replies and never beside a maintainer's. Refs #12025.
- On a linked device, My feedback also lists reports and replies from your other linked devices; the terminal gains /feedback link, unlink, links. Refs #12073.
- Settings, Remote can add a WSL distribution on this PC. The kernel runs in it and stops with it when Studio closes; conversations are kept. Refs #12225.
- In the terminal /mcp panel, press a to sign in to a server that answered 401, or u to grant one the extra access it asked for; you are asked first. Refs #12357, #11959.
- ACP sessions accept
additionalDirectories, so a multi-folder workspace can give a session extra write roots, for that session only and with the usual vetting. Refs #13114. - ACP supports
$/cancel_request,messageIdon chunks and tool names on permission requests, and forwards MCP forms and pages when advertised. Refs #13114. - Opt-in trace export: once your user config enables it and names a collector, each turn goes to your own observability stack as OpenTelemetry traces; off by default. Refs #13115.
- A contribution board in the feedback panel, ranked per release; you choose to join, preview the name and can leave. Terminal: /feedback board. Refs #13142.
- Move a conversation to another project from its menu; permissions, checkpoints, task logs and queued messages stay behind and are removed. Refs #13370.
- A Test connection button beside the SearXNG address says why an instance does not answer; it tests only the saved one, never a metadata address. Refs #13541.
- Large files use native references or streaming; the default 1 GiB upload safety ceiling is user-configurable. Refs #13544 by @SivanCola.
- (experimental, not run against the real endpoint) a native Gemini provider on the Interactions API with thinking, tools and video. Refs #13615.
- a Settings switch (off by default) to hand a public video address you wrote to the model vendor, which visits it itself; Zhipu GLM and Gemini (YouTube). Refs #13616.
- a sub-agent's panel row, full-record header and nested card now show the model and effort it actually ran on, failed or interrupted runs included. See #13640 fixed in #13812.
- The model can now ask you to turn on a switch it needs (such as dispatching to another project), applied only when you confirm; boundary settings it can never change. Refs #13678.
- Type # in the message box to reference a past conversation of this workspace as read-only material; search hits can be referenced too, with a size limit in Settings. Refs #13687, #11942.
- The model can give a running sub-agent more guidance with task's task_id, read at its next tool call; Settings sets the size and per-minute limits. Refs #13693.
- A mod's install preview states full trust and a static listing; a mod can draw a band above the prompt, and its questions say whose they are. Refs #13694.
- Hovering your own message now shows when it was sent next to its action icons, so a long-running task's start can be checked against it. Refs #13697.
- Settings > Extensions can remove a skill of your own or the project's, after a confirmation naming the place to be deleted; built-in and package skills do not offer it. Refs #13714 fixed in #13725.
- The terminal's /mcp panel can now add and remove MCP servers (n, d), showing the full command it would run and asking you to confirm first. Refs #13754.
- A Git panel in the workbench: a folder tree of changes to stage and discard, push with a preview, commit details, and a section per repository. Refs #13821.
- In the terminal, /btw asks a read-only side question: the answer is shown once and is not saved to the session or sent into its prompt. Refs #7950 fixed in #13757.
reasonix acp --permission-mode, for hosts embedding Reasonix as a subagent, fixes the approval posture: clients can lower it, never raise it; a higher saved posture is clamped. Issue #13839.- A connection can declare the format its balance endpoint answers in; a relay must pick one or shows as not configured and is not sent the key. Refs #13736.
- Settings can start new conversations in plan mode (agent.default_mode, off by default); existing conversations keep their own mode. Refs #7852 fixed in #13760.
- The status bar shows which of the vendor's billing windows (peak or off-peak) the model is in and how long until it changes, only where the model is billed at the vendor's own rate. Refs #8853.
- Studio Persona settings add user-level prefix/suffix text and a runtime-context switch, preserving built-in guidance. Applies at the next session build. Refs #13588 by @SivanCola.
- A model's price in the connection editor can carry a source link and a check date (UTC); only the host is shown, the link opens when clicked and is never fetched. Issue #13276.
- Rules directories (.reasonix/rules, .claude/rules and the user's rules folder), optionally scoped to files with paths:; the cache-stable prefix is untouched. Refs #9886 fixed in #13766.
- Tools can be turned off by name ([tools] disabled, a switch per tool in Settings): they leave every request and a call is refused; tools another feature needs stay, with a note. Refs #8394 fixed in #13763.
Changed
- when the provider takes reasoning depth per request, changing it no longer rebuilds the session and works mid-turn, taking effect on the next request. See #11411.
- a session waiting on you gives up its write claim, Auto Guard and sandbox-escape asks included; contention reaches the model and receipt, and the longest wait is a setting. See #11531 fixed in #13842.
- The task tool gains a task_id parameter, so the tool-description cache is cold once on the first turn after upgrading and then warm again. Refs #13693.
- Over ACP, a failed turn now ends with a JSON-RPC error (-32603, data.code turn_failed), not the non-standard stopReason "error". Refs #13703.
- Over ACP, opening a session with a keyless model or no provider now returns the protocol's "Authentication required" error (-32000) so clients can offer reasonix setup. Refs #13705.
- Over ACP, a turn paused as unverified now ends with end_turn, a paused outcome and a [paused] receipt at the end of the text. Refs #13706.
- Over ACP, the vendor status notifications are sent only to clients that declare statusUpdates at initialize, and the transcript path moves into the response _meta. Refs #13721.
- the Dispatch switch is your consent: tasks and replies come in with no card, and the opened session keeps the sender's model, preset, approval mode and planning, never wider. See #13526.
- existing full-trust permission extensions are now also consulted for installed MCP tools (they can only tighten). See #13694.
- A message let in by a standing release starts only over a pause the host set itself, never over one you pressed; it stays queued for you. Refs #13775.
- Local and SSH projects share one list. Open Project moves to the heading's plus button, alongside collapse/expand all. Commit da051ab.
- Neutral session selection offers opt-in hover Pin and Archive, off by default; session menus remain available. Environment routing, repeated clicks, focus and stream budgets are fixed. PR #13638 by @SivanCola.
- Remote reads and unqualified opens share the host default. Existing panes cannot redirect a read or bypass a disabled host. PR #13638 by @SivanCola.
- Unknown SSH hosts are refused before connecting; remote mutation request bodies are limited to 64 KiB. PR #13638 by @SivanCola.
Fixed
- The code editor and its search bar now follow the interface text size in Appearance instead of staying at 12px and 11px. Refs #11577.
- When a report is withdrawn, its mirror GitHub issue is now closed automatically as not planned. Refs #11995.
- After the data root is moved, a conversation the window remembers by its old location opens from the new session folder by file name. Refs #13152.
- [[keep]] turns now have their own budget (15% of the window, newest first); older ones fold with a notice. Shared-window models fold before the reply runs out of room. See #13320, #12773.
- when the provider refuses a compaction's summary request as too large, it is retried with a smaller input (70%, 50%, 35%) instead of giving up the fold. See #13320.
- with an OS sandbox confining the shell to its folder, sessions in two projects of one git repository no longer wait on each other for bash writes; without one they still do. See #13335 fixed in #13851.
- a delegated task naming a pasted screenshot (a file under .reasonix/attachments) now gives the sub-agent the image on the vision model; skill sub-agents no longer drop it. See #13642 fixed in #13876.
- Opening the branch menu just as a pane settles no longer shuts it or leaves it loading forever. Refs #13674.
- When cross-project dispatch is refused because the user's switch is off, the error now says so and names the setting, not a generic "cannot open sessions". Refs #13677 fixed in #13679.
- When a newer release is known, the Version row in the settings list now carries the same mark as the gear, so the update entry is easy to find. Refs #13682 fixed in #13685.
- on Windows the header and tab always read "New chat" when the transcript file name had upper-case letters (for example a custom model name). Refs #13684.
- Pressing the title bar search button while the find bar is open now closes it instead of only re-focusing; the shortcut and the palette still open it. Refs #13696 fixed in #13701.
- The action icons under your own messages (copy, edit, rewind) are now the same size as those under a reply instead of smaller. Refs #13699 fixed in #13704.
- The rail's search box stays open while it holds a query, so the first press on a result is no longer lost to the list moving up. Refs #13708.
- Removing a skill whose SKILL.md sits at the top of a skills folder deleted the whole folder with every other skill; it now deletes only that file. Refs #13714 fixed in #13725.
- the web-search model picker no longer lists models from unadded connections, and a refused pick now says "not added" rather than "removed". Refs #13806 fixed in #13813.
- Over an HTTP connection a refused
!command now stays selected in the box, so what you type next replaces it and the next ordinary message sends. Refs #13810. - A page the agent laid out wider than the pane (for example 1440 wide) showed only its left part in the built-in browser; it is now scaled to fit. Refs #13811 fixed in #13835.
- A built-in browser page given a viewport smaller than the panel is centred at its own size, and clicks on a page scaled to fit the panel land where they were aimed. Refs #13811 fixed in #13835.
- when a project or external folder is moved, renamed or deleted, tools now say the folder is gone instead of a bare system error, and the window prompts to choose it again. Refs #13833.
- OpenCode Go's documented endpoint (opencode.ai/inference/go/…) no longer fails with 400 for lack of the session header. Refs #13849 fixed in #13860.
- /effort on a custom provider with no declared reasoning levels now says so and points at supported_efforts instead of claiming the model does not support them. Refs #13857 fixed in #13863.
- Two model services on one host but different ports were merged into one and the new one never showed; the port is now part of the address, and exact duplicates are listed too. Refs #13858 fixed in #13865.
- the terminal UI slowed down as a command's output, an answer or its thinking grew, since each appended piece copied everything so far; appending now costs the same at any length. See #13872.
- clicks the agent sent the built-in browser were dropped yet reported done while Studio was minimized; the window is now raised unseen for input, then minimized again (Windows). See #13628.
- A message from another session that you approved on its card now starts even when the send queue is paused; what was queued before stays paused. Refs #13775.
- An @token in the text of a message from another session is no longer read as a local file reference, and an unreadable one no longer pauses the send queue. Refs #13775.
- In the terminal, /feedback said "not available in this session" until a /reload; it now works from the start. Refs #12073.
- The usage page's paid figure no longer includes a subscription-equivalent estimate; it is its own labelled line and sits beside each day. Issue #13276.
- With automatic download chosen, opening the Versions page now checks for a release at once and starts the download, instead of waiting for the next daily background check. Issue #13683 fixed in #13875.
Contributors
Thanks to this release's contributors: @SivanCola
What's Changed
- chore(repolint): scope five frontend-parity edges where a frontend reaches the same behaviour another way by @esengine in #13675
- fix(desktop): the branch menu survives the chip settling, and its list is re-read when the root moves by @esengine in #13674
- fix(desktop): the code editor's text and find panel follow the interface text size by @esengine in #13676
- fix(peers): say that the dispatch switch is off, apart from a host that cannot open panes by @esengine in #13679
- feat(settings): declare every user-config key with a class, an effect timing and a secret flag by @esengine in #13680
- fix(desktop): raise a minimized window unseen so the agent's clicks reach the built-in browser by @esengine in #13681
- fix(studio): reference native files and stream attachment uploads / 大文件路径引用与流式上传 by @SivanCola in #13544
- fix(settings): mark the Version row when an update is known by @esengine in #13685
- refactor(config): move ProviderEntry's model and key methods out of config.go by @esengine in #13691
- fix(studio): key each skill metadata row / 技能元数据行补上 key by @SivanCola in #13688
- fix(find): the title bar search button closes an open find bar by @esengine in #13701
- feat(settings): the model can propose a setting change and the user confirms it by @esengine in #13690
- fix(acp): a failed session/prompt turn is a JSON-RPC error with a typed code by @esengine in #13703
- feat(settings): draw the setting card and point at a setting only the user may change by @esengine in #13698
- fix(chat): the action icons under your own message match the reply's size by @esengine in #13704
- feat(chat): show when your own message was sent in its action row by @esengine in #13707
- fix(acp): a host-paused turn ends with end_turn, a paused outcome and a receipt by @esengine in #13706
- feat(peers): the dispatch switch is the consent between a session and the sessions it opens by @esengine in #13709
- fix(agent): give [[keep]] turns a budget of their own and stop the fold ceiling where the send-time output check stops by @esengine in #13711
- feat(delegation): read a sub-agent run's conversation while it runs by @esengine in #13717
- feat(studio): reference a past conversation of this workspace from the message box by @esengine in #13708
- feat(gemini): a native Gemini provider on the Interactions API, with video (experimental) by @esengine in #13712
- fix(acp): vendor notifications reach only clients that declare them; transcriptPath rides _meta by @esengine in #13721
- fix(studio): the rail search box stays open while it holds a query, so the first press on a result is a click by @esengine in #13715
- fix(delegation): a run recorded complete is not live while its owner has yet to let go by @esengine in #13726
- feat(mcp): let the user grant a server the access it asked for by @esengine in #13730
- feat(acp): session-scoped additionalDirectories as write roots by @esengine in #13731
- feat(studio): move a conversation up or down in its project's list, kept by the kernel by @esengine in #13733
- feat(search): test a SearXNG address from settings and say why it does not answer by @esengine in #13659
- feat(tui): sign in to an MCP server, or grant it more access, from /mcp by @esengine in #13732
- feat(video): hand a public video address the user wrote to the model vendor (off by default) by @esengine in #13718
- feat(persona): add a system persona to Studio / 新增 Studio 系统人设 by @SivanCola in #13588
- docs(sandbox): what the Linux sandbox does in a container, measured by @esengine in #13749
- feat(otlp): opt-in OpenTelemetry trace export, user config only by @esengine in #13742
- feat(acp): cancel one request, message ids, elicitation by @esengine in #13746
- fix(peers): a dispatch proof is valid once per sequence number, and the adopt/spool boundaries are pinned by @esengine in #13743
- feat(modhost): run Claude Code mods as tighten-only extension runtimes by @esengine in #13724
- feat(schedule): a tick that runs what is due, and the schedule commands by @esengine in #13747
- feat(tui): /btw asks a read-only side question that is not saved to the session by @esengine in #13757
- fix(completion): cut a declined check's command at a character boundary by @xxoingr in #13762
- fix(hub): open a session by its pre-move path after the state root moves by @esengine in #13744
- refactor(remote): bootstrap depends on the file calls it uses, not on SFTP by @esengine in #13761
- feat(agent): start new conversations in plan mode when the user chose it by @esengine in #13760
- feat(feedback): withdraw your own report from My feedback or /feedback withdraw by @esengine in #13753
- feat(delegation): report an estimated token rate while a sub-agent streams by @esengine in #13750
- feat(remote): a host entry has a kind, and a WSL distribution is one by @esengine in #13765
- feat(studio): the browser and workbench can be viewed full screen with the conversation folded away by @esengine in #13686
- feat(skills): remove a skill from Settings, and never take its whole folder root with it by @esengine in #13725
- feat(studio): move a conversation to another project, carrying the conversation and not what the old project allowed by @esengine in #13737
- feat(schedule): the Studio host runs the ticker while supervised and visible by @esengine in #13752
- feat(rules): rules directories, delivered on the turn and scoped by paths by @esengine in #13766
- fix(acp): a session that cannot open for want of credentials is the authentication-required error by @esengine in #13705
- feat(feedback): close the mirror issue of a withdrawn report by @esengine in #13768
- feat(delegation): guide a running sub-agent through task_id or from the window by @esengine in #13739
- feat(feedback): show linked devices' reports in My feedback and link from the terminal by @esengine in #13770
- feat(feedback): show the reporter's level badge beside their replies in a thread by @esengine in #13772
- feat(receipt): say when a Claude Code mod's effects were not observed by @esengine in #13773
- feat(integrations): run Reasonix as a DeepSeek Harness subagent, with docs, a plugin package and a market index by @esengine in #13771
- feat(remote): bring up a kernel in a WSL distribution and reach it over loopback by @esengine in #13767
- feat(studio): Claude Code mods in the window: install preview, the band above the prompt, mod questions (settings block hidden) by @esengine in #13764
- feat(tui): add and remove MCP servers from the /mcp panel by @esengine in #13776
- refactor(schedule): run the scheduled child from a small package the Studio host can import without the command line by @esengine in #13779
- feat(desktop): add a WSL distribution as a remote machine from Settings by @esengine in #13781
- feat(agent): count a call whose arguments copy text an external result gave the task by @esengine in #13783
- feat(cli): add, test and connect a WSL machine from the command line by @esengine in #13777
- fix(sessioninbox): stop publishing an empty queue when the bodies cannot be read by @chuiwenwei in #13246
- docs(dsh): an installed plugin starts off and must be switched on by @esengine in #13789
- fix(cli): name the terminal's feedback surface in its first build so /feedback works from the start by @esengine in #13790
- fix(peers): the text of a message from another session is not read for file references by @esengine in #13787
- feat(feedback): tell the person once when their level goes up, if they asked by @esengine in #13793
- fix(memory): repair a rename interrupted after retiring the old file by @chuiwenwei in #13797
- Unify local and SSH project navigation / 统一本机与 SSH 项目侧栏 by @SivanCola in #13638
- chore(deps): bump the npm group in /desktop/frontend-next with 7 updates by @dependabot[bot] in #13808
- feat(extension): a mod answers a tool call, adds turn context, reads the session and queues a prompt by @esengine in #13778
- fix(settings): do not offer search models from connections that were never added by @esengine in #13813
- feat(delegation): sub-agents show the model and effort they ran on by @esengine in #13812
- fix(agent): release a stale-context maintenance block on the growth that caused it by @chuiwenwei in #13798
- chore(deps): bump golang.org/x/mod from 0.41.0 to 0.42.0 in /desktop in the go group by @dependabot[bot] in #13799
- chore(deps-dev): bump the npm group in /desktop/electron with 2 updates by @dependabot[bot] in #13807
- docs: point to the DeepSeek Harness integration from the README and the guide by @esengine in #13816
- chore(deps): bump the actions group with 2 updates by @dependabot[bot] in #13804
- fix(delegation): the dispatch profile stays the call's selection by @esengine in #13819
- chore(deps): bump the go group with 11 updates, including the desktop module by @esengine in #13809
- feat(host): tell enrolled phones that something is waiting, and manage them from the desktop by @esengine in #13795
- test(acp): drive the agent with the official SDK and hold its output to the shipped schema by @esengine in #13827
- feat(cli): refuse remote subcommands that change the book or open a link for an agent's shell by @esengine in #13784
- feat(release): build and verify an AppImage of Studio on Linux (download only) by @esengine in #13782
- fix(peers): a message the person let in starts over a paused queue, by what paused it by @esengine in #13791
- test: three timing-dependent tests no longer depend on wall-clock thresholds or cleanup races by @esengine in #13830
- feat(billing): a balance endpoint declares the format it answers in by @esengine in #13828
- test(mcp): hold step-up authorization at the boot boundary by @esengine in #13832
- feat(phone): remind this phone through Web Push, with its own key and a push-only service worker by @esengine in #13822
- fix(studio): show a page the agent laid out wider than the pane whole, scaled to fit by @esengine in #13835
- fix(phone): say a browser that cannot reach its push service is that, not an account outage by @esengine in #13836
- feat(status): show which of the vendor's billing windows the model is in by @esengine in #13838
- feat(tools): turn tools off by name, one registry removal for every surface by @esengine in #13763
- feat(studio): one Git panel: a changes tree, discard, push with a preview, commit details and a section per repository by @esengine in #13834
- test(boot): bound the catalog close in cleanup by the hang budget by @xxoingr in #13846
- chore(security): declare the Git push path and the host-only route list sensitive by @esengine in #13850
- fix(workspace): a writer with no declared extent holds its own folder, not the whole repository by @esengine in #13851
- feat(acp): --permission-mode fixes the session posture and caps what a client can raise by @esengine in #13844
- fix(effort): say a model's levels are undeclared, and where to declare them by @esengine in #13863
- test(control): cover the push trust gate and hold control/git_push.go to it by @esengine in #13862
- fix(providers): recognise OpenCode Go under its documented /inference/go prefix by @esengine in #13860
- feat(billing): a model's price can say where it was read and when by @esengine in #13864
- fix(studio): two model services on one host and different ports are two services, and a duplicate is never dropped from the list by @esengine in #13865
- feat(workspace): a session waiting on a person yields its write claim, and says so when another session took it by @esengine in #13842
- feat(feedback): the contribution board in Studio and the terminal, through the kernel by @esengine in #13866
- test(remote): bound the real-ssh jump test by the run's budget, not the product's 15 s by @esengine in #13868
- fix(usage): keep a subscription's estimate out of the paid total by @esengine in #13869
- fix(serve): match an open pane's row whatever the case of its transcript name by @esengine in #13871
- feat(effort): changing reasoning depth no longer rebuilds the session and works mid-turn by @esengine in #13843
- fix(tui): appending to a streamed answer, its thinking or a command's output no longer copies it whole by @esengine in #13873
- fix(studio): a refused ! command stays selected in the box so the next message replaces it by @esengine in #13814
- test(feedback): read the status chips inside the list, not the first one on the page by @esengine in #13874
- fix(studio): opening the Versions page checks for a release when automatic download is chosen by @esengine in #13875
- fix(delegation): a delegate gets the pasted images its task names, and a skill sub-agent is routed to the vision model by @esengine in #13876
- test(boot): a DeepSeek-shaped OpenAI-compatible usage reaches the quote split by cache by @esengine in #13877
- fix(studio): closing a file opened from the explorer comes back to the explorer by @imcreazy in #13820
- fix(compaction): retry a refused summary request at a smaller size by @esengine in #13825
- fix(agent): refuse a call whose project or external folder is gone, with one typed cause by @esengine in #13840
- fix(studio): a page with a viewport of its own is centred at its size or scaled to fit, and the agent's clicks are mapped by the scale by @esengine in #13853
Full Changelog: studio-v2.44.0...studio-v2.45.0
macOS 已用 Developer ID 签名并公证,打开时不需要清除隔离属性。Windows 的窗口、内核与安装器都经 Certum 代码签名证书做了 Authenticode 签名。Linux Debian 系从 .deb 安装,Fedora、RHEL、openSUSE 等从 .rpm 安装(sudo dnf install ./ReasonixStudio-linux-amd64.rpm)。x86_64 用文件名带 amd64 的包,aarch64(统信 UOS、麒麟等)用带 arm64 的包。也提供 .AppImage(只提供下载,不会自更新;需要 FUSE 2,或用 --appimage-extract-and-run 启动)。
三个平台都能自更新:Linux 的 .deb 走自己的包(.rpm 的自更新尚未提供,请手动下载新包),Windows 运行下一个安装器,macOS 替换自身 bundle。