Repository navigation
English
Important
- The island no longer keeps a CPU core busy while its mascots move. A moving mascot, the glow behind a waiting one, the shimmer on "Thinking…" and on a running tool's name, and the pulsing badge on the collapsed bar each asked for a redraw on every frame the display showed, and each redraw measured the whole island again: 120 times a second on a 120 Hz screen, every session card included, though the mascots only move 20 times a second. With the island open and a few sessions that took about a quarter of a core here, more on older Macs, and hovering to open it made it worse. Everything that moves now runs on one 20-frames-a-second clock and redraws only what moves: the open island does about a sixth of the work it did, the collapsed bar with a session running half, and an island with nothing running still does nothing. The behaviour previews in Settings run on the same clock (#381, thanks @finch-ift and @kuznetsov-m; #391, thanks @conghuhu)
- "Always allow" keeps working in the session you click it in. Codex reads
~/.codex/rulesandconfig.tomlonly when a session starts, so the rule "Always" saved did nothing for the session you clicked it in, and the same command asked again and again. CodeIsland now answers that session's requests the rule covers itself, and only that session's; sessions started later get the rule from Codex. Gemini CLI, Qwen Code, the Qoder IDE, Trae CLI, ZCode, OpenCode, MiMo, pi, Oh My Pi, OpenClaw and DeepSeek Harness didn't keep "Always allow … this session" either: most allowed one call and asked again, while OpenCode and ZCode saved a broader rule of their own to the folder or project. CodeIsland now keeps it for the session for them too, and tells the agent only "allow". Requests of the same session that were already waiting when you click "Always" are answered with it if it covers them (#380, thanks @unaisshemim)
New
- Clear idle cards from the session list. When the expanded list has idle cards, a trash button in its header asks in a banner above the list whether to remove them ("Remove 3 idle cards?"), and marks the cards it would remove. A session that is working, waiting for you or still running a subagent is never removed, and a parent and its child sessions go together or not at all. Removing only takes cards off the island, not the conversations: a card comes back as soon as its session does something again (a prompt, a tool, a permission request or a question). Until then, session discovery and other background updates don't bring it back; restarting CodeIsland forgets which cards you removed (#385, thanks @alvinli1991)
- DeepSeek Harness has a mascot of its own. DSH cards showed Claude's crab; they now show a pixel DeepSeek whale that bobs while idle, spouts while a turn runs and raises an alert dot when DSH waits for you. Settings → Mascots lists it too (#390, thanks @conghuhu)
Approvals
- Codex "Always" saves rules Codex can use. Codex matches a rule only against plain commands and checks every command on the line, so a rule from the first words of
cd app && make testleftmake testasking, and one fromswift build 2>&1 | tailorcat ~/notesnever matched. "Always" now saves a rule for each command (up to four, all named on the link: "commands starting with cd app or make test"). A command Codex can't match against a rule holds for the session, and the link says so. An MCP tool's approval is saved only for a server yourconfig.tomldeclares (notcodex_appsor a plugin's server); otherwise the link says "this session" - MiniMax Code's "Always" covers its file tools. It matched the rule
Read(*)as a path, which never matched; the rule now names just the tool - A request you answer in Claude Desktop leaves the island when its call finishes. Answering a Claude Code request in the Claude app, such as which branch the changes go on, changes the call's input, so the island didn't recognise the call finishing as the one it was waiting on, and the pending card stayed until your next message or the end of the turn. The call is now also known by the input it was first asked with, however long you take to answer; as before, the card goes without CodeIsland deciding anything for you (#389, thanks @Junyu06)
Displays and shortcuts
- Shortcuts work with a second display. With a monitor attached, a shortcut often found the island somewhere you couldn't see it. With Display set to Auto, the island stayed on the MacBook while you worked on a monitor above it (or on the lower part of a taller monitor beside it), and after you moved between two windows of one app on different displays it took a few seconds to follow, so Toggle Panel opened or closed it on the other screen. Hide in Fullscreen hid the island whenever the app in front had a fullscreen window on any display, or just a maximized one on a larger monitor; Toggle Panel then opened an island that stayed hidden, and approve, deny and skip acted on a card you couldn't see. Now Auto follows the window in front on any display arrangement, Hide in Fullscreen only counts a fullscreen app on the island's own display, and a shortcut brings the island to you: onto the display you're working on, and over a fullscreen app until it closes again. On a hidden island a card shortcut first shows the card; the next press acts (#384, thanks @unaisshemim)
- A pinned display stays pinned. Settings → General → Display remembered the chosen display by its place in the list of displays, and that order follows the primary display: making a monitor the primary display, or reconnecting monitors in another order, quietly moved the island to the other display. It now remembers the display itself. While that display is unplugged the island follows Auto and goes back as soon as the display returns; meanwhile Settings shows the choice as "Pinned display (not connected)". An existing choice carries over unchanged
- A half-typed answer survives the island moving to another display. A question card kept what you had typed and picked (a typed answer, the "Other" text, the earlier answers of a multi-question card) in its view, which the island rebuilds whenever it moves to another display or the displays change, so all of it was lost. It's now kept for the request until it's answered or skipped, and with Display set to Auto the island no longer moves while your pointer is on it or you're typing into it; it follows once you've left it
Fixes
- pi and Oh My Pi ring once per task, when it's really done. The chime played every time pi or Oh My Pi ended a run, but a retry, error recovery, compaction, a queued message or a subagent's result starts another run right after. One task could chime while still working, and a pi session handing work to a pi-subagents child chimed, with no reply, before the child had answered. CodeIsland now waits until pi (0.80.4 and later) or Oh My Pi (17.0.2 and later) has nothing left to run, and the card shows the final reply. Stopping a pi or Oh My Pi turn with Esc now ends it quietly, as in Claude Code. Older versions behave as before. Restart pi or Oh My Pi (or
/reload) after updating (#386, thanks @uniStark) - Claude Code's background compaction no longer wakes a finished card. About 54 minutes after a turn ends, Claude Code compacts an idle session in the background before its prompt cache expires. CodeIsland took that for work: the finished card switched to "thinking" and stayed there, and a card the idle cleanup had already removed came back. The compaction now leaves the card as it was (no "thinking", no sound, the last reply kept, idle cleanup on schedule), and a removed card stays gone. A compaction during a turn and a manual /compact still show "Compacting context…" (#388, thanks @Junyu06)
- Clicking a Codex Desktop card opens its thread. The jump raised Codex's window but left it on whichever thread it showed last; it now opens the card's own thread, and a minimized window comes back. Raising any desktop app (Codex, Claude, an IDE, a harness's app) also brings forward the copy that is running, instead of launching another install with the same bundle id, such as an old Codex.app next to ChatGPT.app (#387, thanks @ljt990218)
- Grok and DeepSeek Harness get their own section in Group by CLI. Their sessions were listed under "Other"
Performance
- Reduce Motion stills the waiting glow too, and Animation Speed "Off" stops redrawing. Most mascots kept pulsing the glow behind them while they waited, even with Reduce Motion on; it now holds steady like the rest. With Settings → Mascots → Animation Speed set to Off, the mascots stood still but were redrawn on every frame; now they're drawn once
中文
重要
- 吉祥物动起来时,灵动岛不再一直占着一个 CPU 核心。 正在动的吉祥物、等待中吉祥物身后的光晕、「思考中」和运行中工具名上的流光,以及收起状态栏上闪动的提醒图标,都会让屏幕每刷新一帧就重绘一次,而每次重绘都要把整个灵动岛重新排版:在 120 Hz 屏幕上每秒 120 次,连每张会话卡片都一起重算,尽管吉祥物本身每秒只动 20 帧。展开灵动岛、开着几个会话时,在本机要占掉约四分之一个核心,旧一些的 Mac 更多,鼠标悬停展开时尤其明显。现在所有动画共用一个每秒 20 帧的时钟,只重绘真正在动的部分:展开时的工作量约为原来的六分之一,收起且有会话运行时约为一半,没有会话在运行时依然完全不占用。设置里「行为」页的预览动画也改用同一个时钟(#381,感谢 @finch-ift 和 @kuznetsov-m;#391,感谢 @conghuhu)
- 「始终允许」在你点它的会话里一直有效。 Codex 只在会话启动时读取
~/.codex/rules和config.toml,所以「始终允许」保存的规则对点下它的那个会话不起作用,同一条命令一遍遍地问。现在由 CodeIsland 替这个会话回答规则覆盖到的请求,且只限这个会话;之后新开的会话由 Codex 自己读取规则。Gemini CLI、Qwen Code、Qoder IDE、Trae CLI、ZCode、OpenCode、MiMo、pi、Oh My Pi、OpenClaw 和 DeepSeek Harness 原本也没有保住「本会话始终允许」:多数只放行这一次,下次照样问;OpenCode 和 ZCode 则把范围更大的规则存进了目录或项目。现在同样由 CodeIsland 在本会话内保持,并且只告诉 agent「允许」。点「始终允许」时同一会话里已在排队、且被它覆盖的请求也会一起放行(#380,感谢 @unaisshemim)
新功能
- 一键清理会话列表里的空闲卡片。 展开的会话列表里有空闲卡片时,标题栏会出现一个垃圾桶按钮,点一下会在列表上方询问是否移除(「移除 3 张空闲卡片?」),并标出会被移除的卡片。正在工作、在等你处理、或还有子代理在运行的会话不会被移除;父会话和它的子会话要么一起移除,要么都保留。移除只是把卡片从灵动岛上拿掉,对话本身不受影响:会话一有新动作(新的提示、工具调用、权限请求或提问),卡片就会回来。在那之前,会话发现等后台更新不会让它重新出现;重启 CodeIsland 后不再记得移除过哪些卡片(#385,感谢 @alvinli1991)
- DeepSeek Harness 有了自己的吉祥物。 DSH 的卡片以前显示的是 Claude 的螃蟹;现在是一只像素风 DeepSeek 鲸鱼:空闲时轻轻浮动,干活时喷水,等你批准或回答时亮起提醒点。设置 → 角色里也能看到它(#390,感谢 @conghuhu)
审批
- Codex 的「始终允许」只保存 Codex 用得上的规则。 Codex 只对纯命令匹配规则,而且一行里的每条命令都要匹配:从
cd app && make test开头几个词生成的规则管不到make test,从swift build 2>&1 | tail或cat ~/notes生成的规则永远匹配不上。现在「始终允许」为每条命令各存一条规则(最多四条,链接逐条写明,如「始终允许以 cd app 或 make test 开头的命令」)。Codex 无法用规则匹配的命令改为在本会话内有效,链接也如实写明。MCP 工具的授权只在config.toml声明了该服务器时才保存(codex_apps和插件的服务器不算),否则链接写「本会话」 - MiniMax Code 的「始终允许」也覆盖文件工具。 它把规则
Read(*)当成路径比较,从来匹配不上;现在规则只写工具名 - 在 Claude 桌面版里回答过的请求,调用结束时卡片随即消失。 在 Claude 桌面版里回答 Claude Code 的请求(比如改动放在哪个分支)会改变这次调用的输入,灵动岛于是认不出结束的正是它在等的那个调用,待处理卡片一直留到下一条消息或这一轮结束。现在也按调用最初请求时的输入来认,不管你隔多久才回答;卡片撤下时照旧不替你做任何决定(#389,感谢 @Junyu06)
显示器与快捷键
- 双显示器下快捷键也能正常使用。 以前接上外接显示器后,快捷键常常作用在一个你看不见的灵动岛上。显示器设为「自动」时,在 MacBook 上方的显示器上工作(或在旁边更高的显示器的下半部分),灵动岛会一直留在 MacBook 上;在两块屏幕上同一个 App 的两个窗口之间切换后,它要过几秒才跟过来,于是「切换面板」在另一块屏幕上展开或收起。「全屏时隐藏」只要前台 App 在任意一块屏幕上有全屏窗口(甚至只是在更大的显示器上最大化的窗口)就会隐藏灵动岛,这时「切换面板」展开的灵动岛仍然看不见,批准、拒绝、跳过则作用在你看不到的卡片上。现在「自动」在任何显示器排列下都跟随前台窗口,「全屏时隐藏」只看灵动岛所在的那块屏幕,快捷键会把灵动岛带到你面前:移到你正在使用的屏幕上,在全屏 App 上方显示,直到再次收起。灵动岛隐藏时,卡片快捷键第一次按下只显示卡片,再按一次才执行(#384,感谢 @unaisshemim)
- 固定的显示器不会再变。 「设置 → 通用 → 显示器」以前按显示器在列表中的位置记住你的选择,而这个顺序跟随主显示器:把外接显示器设为主显示器,或换个顺序重新连接显示器,灵动岛就会悄悄换到另一块屏幕上。现在记住的是显示器本身。这块显示器断开期间,灵动岛按「自动」显示,重新连接后立即回到它上面;这期间设置里显示为「已固定的显示器(未连接)」。已有的选择会原样保留
- 灵动岛换到另一块屏幕时,问题卡片上没打完的回答不会丢。 问题卡片把你输入和选择的内容(打了一半的回答、「其他」里的文字、多题卡片前面几题的答案)存在视图里,而灵动岛每次换屏或显示器变化都会重建视图,这些内容就全没了。现在它们跟着请求保存,直到回答或跳过;显示器设为「自动」时,鼠标停在灵动岛上或正在里面输入时也不再搬家,等你离开后再跟过去
修复
- pi 和 Oh My Pi 一个任务只响一次,而且是真正做完时。 以前 pi 或 Oh My Pi 每结束一轮运行就响一次,但重试、错误恢复、上下文压缩、排队的消息或子代理的结果都会紧接着开始新的一轮:任务还在进行就响了,pi 把工作交给 pi-subagents 子代理时,父会话会在子代理答复之前先响一次,而且没有回复内容。现在 CodeIsland 会等到 pi(0.80.4 及以上)或 Oh My Pi(17.0.2 及以上)没有后续要运行时才结束回合,卡片显示最终回复。用 Esc 停止 pi 或 Oh My Pi 的回合现在也会安静结束,和 Claude Code 一样。更早的版本行为不变。更新后请重启 pi 或 Oh My Pi(或执行
/reload)(#386,感谢 @uniStark) - Claude Code 的后台压缩不再唤醒已完成的卡片。 一轮结束大约 54 分钟后,Claude Code 会赶在提示缓存过期前,在后台压缩闲着的会话。CodeIsland 把这当成了在干活:已完成的卡片变回「思考中」并一直停着,已被空闲清理掉的卡片也会重新出现。现在这次压缩不会改动卡片(不进入「思考中」、不响提示音、保留最后一条回复,空闲清理照常进行),已清理的卡片也不会回来。一轮进行中的压缩和手动 /compact 仍显示「Compacting context…」(#388,感谢 @Junyu06)
- 点 Codex 桌面版的卡片会打开对应的对话。 以前跳转只把 Codex 窗口拉到前台,停在它上次显示的对话;现在直接打开这张卡片的对话,最小化的窗口也会恢复。唤起任何桌面 App(Codex、Claude、IDE、托管 agent 的 App)时,也改为把正在运行的那一份拉到前台,不会再拉起另一份同 bundle id 的安装(比如 ChatGPT.app 旁边残留的旧 Codex.app)(#387,感谢 @ljt990218)
- 「按 CLI 分组」里 Grok 和 DeepSeek Harness 有了自己的分组。 以前它们的会话被归到「其他」
性能
- 「减弱动态效果」也会让等待光晕静止,动画速度设为「关闭」后不再重绘。 以前大多数吉祥物等待时身后的光晕,即使开了「减弱动态效果」也照样闪动,现在会和其他动画一样保持静止。「设置 → 角色 → 动画速度」设为「关闭」时,吉祥物虽然不动,却仍每帧重绘一次;现在只绘制一次