Skip to content

Releases: wxtsky/CodeIsland

v1.0.30

Choose a tag to compare

@wxtsky wxtsky released this 10 Jul 03:01
Immutable release. Only release title and notes can be modified.

English

  • Add ZCode (Z.ai) integration — hooks written silently to ~/.zcode/cli/config.json with a strict event-name whitelist; restart ZCode after enabling (#245, thanks @JamesJian-tech for the plugin-structure intel)
  • Add QoderWork integration — Qoder's standalone desktop assistant, Claude-format hooks in ~/.qoderwork/settings.json; restart QoderWork after enabling (#249)
  • Add Traditional Chinese (zh-Hant) localization, hand-tuned Taiwan wording for all 287 strings (#251, thanks @hongyinull)
  • Add Quiet Hours — mute all event sounds inside a configured window (spans midnight); a small moon on the collapsed pill explains the silence
  • Add git branch / worktree indicator on session cards (⎇ branch, ⧉ for linked worktrees) — made for parallel-worktree agent workflows
  • Add Glance completion mode — on completion, light a green dot on the collapsed island instead of expanding; clears the moment you expand (three-way setting: expand / glance / off)
  • Add Claude token-usage footer under the session list — 5-hour and today windows aggregated from local transcripts (no API calls) with a 12-hour activity sparkline and cache-detail tooltip
  • Add Terax terminal click-to-jump (#253, thanks @wangmian0)
  • Complete cursor-cli / qoder-cli routing: dedicated process matching, real project names for Cursor sessions, grouped under their IDEs in the CLI tab; remote cwd filters honor workspace_roots and never drop lifecycle/approval hooks of tracked sessions (#248/#240/#255, thanks @zephyr110)
  • Every CLI row in settings now has an icon — pixel-mascot icons for Kiro & OpenClaw, deterministic monogram tiles for the rest (including custom CLIs)
  • Fix Codex "Always Allow" writing broken Starlark rules for multiline commands — newlines are now escaped, existing broken files need the bad rule removed once (#250/#252, thanks @hexsean)
  • Fix blocking AskUserQuestion cards staying collapsed under Smart Suppress — OMP (and every provider) waits on the island, so the card now always opens (#256, thanks @haixing23)
  • Fix legitimate dot-named repos (.dotfiles, .config) displaying their parent folder's name
  • Fix remote SSH sessions showing the local machine's git branch when directory layouts match
  • Fix zellij-inside-Terax losing precise pane focus on click-to-jump
  • Fix the ZCode installer flipping a user's explicit hooks master switch back on
  • Usage scanning is incremental (per-file byte offsets) — day-long multi-MB transcripts are read once, not on every panel expansion
  • Claude sessions running in $HOME keep model detection; Cursor project-path decoding moved off the render path

中文

  • 新增 ZCode(智谱 Z.ai)集成——hooks 静默写入 ~/.zcode/cli/config.json,严格事件名白名单防御;勾选后需重启 ZCode 生效(#245,感谢 @JamesJian-tech 提供插件结构情报)
  • 新增 QoderWork 集成——Qoder 生态的独立桌面助手,Claude 格式 hooks 写入 ~/.qoderwork/settings.json;勾选后需重启 QoderWork(#249
  • 新增繁体中文本地化,287 条文案逐条采用台湾用语校对(#251,感谢 @hongyinull
  • 新增「静默时段」——设定时间段内静音全部音效(支持跨午夜);静默期间收起的岛上会显示小月亮说明为何无声
  • 会话卡片新增 Git 分支 / worktree 指示器(⎇ 分支名,linked worktree 附 ⧉ 标记)——为并行 worktree 跑多 agent 的工作流而生
  • 新增 Glance 完成模式——任务完成时不弹面板,只在收起的岛上亮起绿点,展开即熄灭(完成提醒三选一:展开 / 绿点 / 无动作)
  • 会话列表底部新增 Claude 用量统计——本地 transcript 聚合 5 小时窗口与今日用量(零网络请求),附 12 小时活动迷你柱状图与缓存明细悬浮提示
  • 新增 Terax 终端点击跳转(#253,感谢 @wangmian0
  • 补全 cursor-cli / qoder-cli 路由:独立进程匹配、Cursor 会话显示真实项目名、CLI 分组归入所属 IDE;远程目录过滤识别 workspace_roots,且不再误拦已跟踪会话的生命周期/审批 hook(#248/#240/#255,感谢 @zephyr110
  • 设置里每个 CLI 行都有图标了——Kiro 与 OpenClaw 使用像素吉祥物图标,其余(含自定义 CLI)使用稳定配色的首字母图标
  • 修复 Codex「始终允许」对多行命令写出损坏的 Starlark 规则——换行符现已转义,已损坏的规则文件需手动删除坏段一次(#250/#252,感谢 @hexsean
  • 修复智能抑制下阻塞式 AskUserQuestion 卡片不展开——OMP(及所有 provider)都在等岛上作答,卡片现在始终弹出(#256,感谢 @haixing23
  • 修复合法的 dot 开头仓库(.dotfiles、.config)显示成父目录名的问题
  • 修复远程 SSH 会话在两端目录结构相同时显示本机 Git 分支的问题
  • 修复 Terax 内运行 zellij 时点击跳转丢失精确 pane 聚焦的问题
  • 修复 ZCode 安装器会把用户显式关闭的 hooks 总开关重新打开的问题
  • 用量扫描改为增量式(按文件记录字节偏移)——日级长会话的大 transcript 只读一次,不再每次展开面板重读
  • 在 $HOME 下直接运行的 Claude 会话保留模型识别;Cursor 项目路径解码移出渲染路径

v1.0.29

Choose a tag to compare

@wxtsky wxtsky released this 06 Jul 02:30
Immutable release. Only release title and notes can be modified.

Highlights

New integrations 🦞

  • OpenClaw — auto-installed TypeScript plugin pack with the new Molty space-lobster mascot (#235)
  • Claude Code Desktop — local Code-tab sessions recognized, tagged, and click-to-jump opens the right desktop window (#211)
  • Kiro gets its own pixel-ghost mascot; settings gallery completed

Answer agent questions from the island

  • The OMP / pi ask tool now pops the island's question UI — answer on your Mac (or iPhone/Watch) and it flows back to the agent; skip to fall through to the terminal (#244)

Quality of life

  • Per-host working-directory filter for shared remote SSH accounts (#240)
  • The island auto-dodges Bartender & friends on external screens (#219)
  • Gentler hover: quick pass-throughs no longer pop the panel; width slider steps by 1% (#208, thanks @Lucker-QY)
  • Approval buttons show their enabled keyboard shortcuts

Mascot motion polish — all 18 characters: irregular natural blinks, asymmetric breathing, dream twitches, humanized typing with "reading the output" pauses, de-synced float rhythms (#15)

Performance — idle CPU down ~38% (8.5% → 5.3%): every mascot's frame loop now pauses when hidden/asleep, idle scenes render at 8fps, wake no longer replays missed frames

Fixes

  • launchd daemons (Hermes gateway) no longer SIGTERM'd in a restart loop (#243)
  • Watch companion crash-on-launch loop hardened (#246; ships with the next App Store companion build)
  • Remote SSH install no longer wipes user-authored hooks (#242)
  • cursor-cli / qoder-cli mascot mapping (#248, thanks @zephyr110)
  • No more Bluetooth permission prompt for users who never enabled the iPhone companion

Plus everything since v1.0.28: native iPad companion layout (#238), German localization (#234), Google Antigravity approval details (#233), host-GUI-client jump (#237), pi/omp mascot setting (#228).


中文

新集成 🦞

  • OpenClaw——自动安装插件包,附全新太空龙虾吉祥物 Molty(#235
  • Claude Code 桌面版——本地 Code 会话可识别、点击跳转到对应窗口(#211
  • Kiro 拥有专属像素幽灵吉祥物;设置图鉴补全

在岛上回答 agent 提问

  • OMP / pi 的 ask 提问接入灵动岛问答 UI——在 Mac(或 iPhone/手表)作答后自动回填给 agent,跳过则回落终端(#244

体验优化

  • 远程 SSH 主机按工作目录过滤会话(共享账号隐私)(#240
  • 外接屏自动避开 Bartender 等菜单栏图标(#219
  • hover 更跟手:快速划过不再误弹面板;宽度滑块 1% 步长(#208,感谢 @Lucker-QY
  • 审批按钮显示已启用的快捷键

吉祥物动画质感——全部 18 个角色:不规则眨眼、非对称呼吸、睡梦小动作、拟人打字停顿、漂浮节奏去同步(#15

性能——空闲 CPU 降低约 38%(8.5% → 5.3%):所有吉祥物帧循环在隐藏/睡眠时暂停、空闲动画 8fps、唤醒不回放积压帧

修复

  • launchd 守护进程(Hermes gateway)不再被反复 SIGTERM(#243
  • 手表端启动崩溃循环加固(#246,随下次 App Store companion 版本生效)
  • 远程 SSH 不再覆盖用户自定义 hooks(#242
  • cursor-cli / qoder-cli 吉祥物映射(#248,感谢 @zephyr110
  • 未启用 iPhone 配件不再弹蓝牙权限

以及 v1.0.28 以来的全部改进:iPad 原生布局(#238)、德语本地化(#234)、Google Antigravity 审批详情(#233)、宿主客户端跳转(#237)、pi/omp 吉祥物设置(#228)。

v1.0.28

Choose a tag to compare

@wxtsky wxtsky released this 15 Jun 14:33
Immutable release. Only release title and notes can be modified.

English

  • Add Code Island Buddy companion app for iPhone & Apple Watch — Live Activity / Dynamic Island / Lock Screen / StandBy, with opt-in Mac broadcasting (off by default) (#218)
  • Add support for Pi / Oh My Pi sessions with a dedicated mascot (#222)
  • Add support for Google Antigravity (Gemini-based) hooks as a new agent source (#215)
  • Detect Superset terminal sessions (window-level focus; Superset exposes no per-tab focus API) (#213)
  • Surface Codex Desktop plan-mode user-input questions as interactive prompts (#209)
  • Fix Hermes hooks never firing at runtime — install to ~/.hermes/config.yaml (where Hermes actually reads) instead of settings.json (#226)
  • Fix "Always allow" not sticking for MCP tools, which kept re-prompting the same approval (#224)
  • Fix Claude Code shown with the Cursor icon when run inside Cursor's integrated terminal (#220)
  • Fix the approval panel not auto-dismissing after you approve a request in the terminal (#216)
  • Fix the global shortcut silently breaking after switching apps — now uses a Carbon hotkey that needs no Accessibility permission (#217)
  • Fix CPU spiking to 100% after sleep/wake by pausing the idle mascot animation while hidden or asleep (#225)
  • Fix remote SSH reconnection failing (ssh exited 255) by clearing the stale forwarding socket first (#206)
  • Fix Warp tab activation across multiple windows and tabs (#205)

中文

  • 新增 Code Island Buddy iPhone / Apple Watch 伴侣 App——Live Activity / 灵动岛 / 锁屏 / 待机显示,Mac 端可选开启镜像广播(默认关闭)(#218)
  • 新增 Pi / Oh My Pi 会话支持,配专属吉祥物 (#222)
  • 新增 Google Antigravity(基于 Gemini)hooks 支持,作为独立 agent 来源 (#215)
  • 识别 Superset 终端会话(窗口级聚焦;Superset 未提供单 tab 聚焦接口)(#213)
  • 把 Codex 桌面版 plan 模式的用户询问渲染成可交互弹窗 (#209)
  • 修复 Hermes hooks 运行时不触发——改为写入 Hermes 真正读取的 ~/.hermes/config.yaml 而非 settings.json (#226)
  • 修复 MCP 工具"始终允许"不生效、同一审批反复弹出 (#224)
  • 修复在 Cursor 集成终端里运行 Claude Code 被错误显示为 Cursor 图标 (#220)
  • 修复在终端里批准后审批面板不自动消失 (#216)
  • 修复全局快捷键切换应用后静默失效——改用免辅助功能权限的 Carbon 热键 (#217)
  • 修复休眠唤醒后 CPU 飙到 100%——隐藏或休眠时暂停空闲吉祥物动画 (#225)
  • 修复 remote SSH 重连失败(ssh exited 255)——连接前先清理残留转发 socket (#206)
  • 修复 Warp 跨多窗口 / 标签页的标签激活 (#205)

v1.0.27

Choose a tag to compare

@wxtsky wxtsky released this 30 May 02:55
Immutable release. Only release title and notes can be modified.

中文

  • 修复 Cursor / Trae / Qoder / Factory 点击灵动岛跳到"最近用过的窗口"而不是正在对话的那个——现在按项目目录匹配对应 workspace 窗口 (#199)
  • SSH 远程主机也会安装自定义 CLI 的 hooks(claude / nested 格式)——此前远程只配置内置 CLI (#192)

English

  • Fix Cursor / Trae / Qoder / Factory click-to-jump raising the most-recently-used window instead of the one running the clicked session — now matches the workspace window by project folder (#199)
  • Install custom CLI hooks on SSH remote hosts too (claude / nested hook formats) — previously only the built-in CLIs were configured remotely (#192)

v1.0.26

Choose a tag to compare

@wxtsky wxtsky released this 30 May 02:19
Immutable release. Only release title and notes can be modified.

中文

  • 新增 pi / Oh My Pi (OMP) 编码 agent 集成 (#197)
  • 远程 SSH socket 按用户隔离(/tmp/codeisland-<uid>.sock),修复多用户共享主机上的事件串话 (#193)
  • 修复 SSH 隧道在 ControlMaster 多路复用下 ssh -N 立即退出、被误报为 ssh exited (0) 的问题 (#190)
  • 修复 iTerm2 全屏 / 跨 Space 时点击会话跳到错误窗口 (#198)

English

  • Add pi / Oh My Pi (OMP) coding agent integration (#197)
  • Isolate the remote SSH socket per user to fix event cross-talk on shared hosts (#193)
  • Fix the SSH tunnel being misreported as ssh exited (0) under ControlMaster multiplexing (#190)
  • Fix iTerm2 click-to-jump landing on the wrong fullscreen / cross-Space window (#198)

v1.0.25

Choose a tag to compare

@wxtsky wxtsky released this 26 May 02:46
Immutable release. Only release title and notes can be modified.

English

New tools & features

  • Cline support — the VSCode-extension agent is now tracked end to end (file-based hooks, click to jump back to VSCode) (#156)
  • Zellij & Kaku multiplexers — active-pane detection for jump-back and visibility suppression; tmux pane resolution hardened and pane hints persisted across app restarts
  • Buddy (ESP32) overhaul — Bluetooth pairing state machine, priority write queue, extended protocol (model / stats / subagent / event / tool-history / pairing), and recovery from CoreBluetooth authorization changes; signing script gains an ad-hoc fallback for local Bluetooth testing (#187)
  • Dynamic Island width is now adjustable on real notch displays too, not just external screens (#172)

Fixes

  • AskUserQuestion in plan mode — fix the undefined is not an object (evaluating 'H.map') crash and answers coming back empty; the answer key now matches Claude Code's question-text lookup, so plan-mode questions no longer re-prompt in a loop (#170, #180)
  • Parallel tool calls auto-denied — batches like "Read 4 files" that share a tool_use_id are no longer collapsed as duplicates and denied; each request now waits for its own decision (#169)
  • Respect user-deleted hook events — auto-repair no longer re-adds Codex (or other CLI) hook events you removed by hand; only a fully-absent or stale config is repaired (#182)
  • Hermes on SSH remotes — the remote install script now configures Hermes too, so SSH-monitored Hermes sessions emit events (#176)
  • Codex — clean up the legacy codex_hooks config key, defer to Codex auto-review mode instead of popping an approval card, and persist always-allow rules
  • Permissions not blanket-denied — activity events (Stop, or a parallel PostToolUse from Notion/MCP plugins) no longer drain a pending approval before you can react (#147)
  • Cursor sub-agents — parallel sub-agent processes collapse onto a single session card instead of flooding 10+ (#148)
  • Default mascot is honored whenever no session is actively working, not just when there are zero sessions (#149)
  • WezTerm-family pane resolution by cli tty, complete IDE responses for flat-hook tools, and preserved remote OpenCode host identity

中文

新增工具与功能

  • Cline 支持 — VSCode 扩展形态的 agent 现在可全程跟踪(基于文件的 hooks,点击跳回 VSCode)(#156)
  • Zellij & Kaku 多路复用器 — 识别活跃 pane 用于跳转和可见性抑制;tmux pane 解析加固,pane 线索在 app 重启后保留
  • Buddy(ESP32)大改 — 蓝牙配对状态机、优先级写队列、扩展协议(model / stats / subagent / event / 工具历史 / 配对),以及从 CoreBluetooth 授权变化中恢复;签名脚本新增 ad-hoc fallback 便于本地测蓝牙 (#187)
  • 灵动岛宽度 现在在真实刘海屏上也能调节,不再只对外接屏生效 (#172)

修复

  • plan mode 下的 AskUserQuestion — 修复 undefined is not an object (evaluating 'H.map') 崩溃及回答变空;answer key 改为与 Claude Code 的 question-text 查找一致,plan mode 不再循环重弹问题 (#170, #180)
  • 并行工具调用被自动拒绝 — 像"Read 4 个文件"这种共享 tool_use_id 的批量请求不再被当成重复项合并拒绝,每个请求各自等待你的决定 (#169)
  • 尊重用户删除的 hook event — auto-repair 不再把你手动删掉的 Codex(或其他 CLI)hook event 补回;只有完全缺失或损坏的配置才会被修复 (#182)
  • SSH 远程的 Hermes — 远程安装脚本现在也会配置 Hermes,SSH 监控的 Hermes 会话能正常上报事件 (#176)
  • Codex — 清理旧版 codex_hooks 配置项、自动审查模式下不再弹审批卡、持久化 always-allow 规则
  • 权限不再被一锅端拒绝 — 活动事件(Stop,或 Notion/MCP 插件并行的 PostToolUse)不再在你反应过来之前把待审批清空 (#147)
  • Cursor 子 agent — 并行子 agent 进程合并到一张会话卡,不再刷出 10+ 张 (#148)
  • 默认角色 — 只要没有会话在实际工作就会生效,而不仅是完全没有会话时 (#149)
  • WezTerm 系终端按 cli tty 解析 pane、flat-hook 工具的 IDE 响应补全、保留远程 OpenCode 主机标识

Migration notes

升级后建议到 设置 → Hooks → Reinstall Hooks 一次,让新版 codeisland-bridge 与 hook 配置(Cline / 远程 Hermes / Codex 调整等)落到位生效。Codex 用户若曾手动精简过 ~/.codex/hooks.json 的 event,本版起 auto-repair 会尊重你的删除、不再补回。

v1.0.24

Choose a tag to compare

@wxtsky wxtsky released this 29 Apr 07:37
Immutable release. Only release title and notes can be modified.

English

  • Add Wear OS Buddy companion app — approve / deny / skip directly from your watch over BLE, full Bash command preview on incoming approvals (#144, PR by @liushaoxiong10)
  • Distinguish cursor-agent and qodercli from the desktop IDEs they share config files with — sessions render as "Cursor CLI" / "Qoder CLI" and click-jumps go to the host terminal instead of the IDE (#134)
  • Add Settings → Sessions → "Plugin Sub-Sessions" (separate / merge / hide) for events fired by plugins running inside another agent like omo inside OpenCode (#123)
  • Register Codex's PermissionRequest hook so shell-escalation / managed-network approvals trigger the panel + sound instead of the session sitting silently in "running" forever (#145)
  • Add Settings → Behavior → "Auto-Expand Panel on Agent Completion" toggle (default on, preserves current behavior) (#146)
  • Prefer ~/.config/opencode/opencode.jsonc over opencode.json so OpenCode users on the recommended format no longer see CodeIsland resurrect a sibling .json on every install / repair pass (#132)
  • Show "+N Sub" badge on session cards with active subagents; hover any subagent icon to see agent type + current tool (#141)
  • Empty default for the auto-approve tools list — every tool call now flows through the approval path; the previous default silently approved 9 internal tools (TaskCreate / TaskUpdate / TodoWrite / EnterPlanMode etc.) which hid those calls
  • Fix App hangs silently on launch — detectClaudeVersion / ConfigInstaller.install / verifyAndRepair / TerminalActivator.runProcess no longer block the main thread; all subprocess waits now have hard timeouts (5–10s) and the slow paths dispatch off-main (#139)
  • Harden UserPromptSubmit prompt extraction (nested payload/data containers, userPrompt / text fallback fields, preserve leading/trailing whitespace) and add a 100-entry hook event ring buffer to diagnostics export — future "prompt not showing" reports can be triaged from one zip (#103)
  • Fix update flow leaving "Update Failed" banner after the "Up to date" alert (#137 → PR #138 by @Drswith)
  • Skip Sparkle initialization in DEBUG builds without a bundle ID so Xcode runs no longer crash on launch (#133, PR by @jerry0804)
  • Polish Turkish translation for stylistic consistency (#135, PR by @Ardakilic)

中文

  • 新增 Wear OS Buddy 手表伴侣 — 通过 BLE 直接在手表上 approve / deny / skip 审批,待审批时显示完整的 Bash 命令预览 (#144, PR by @liushaoxiong10)
  • 区分 cursor-agent / qodercli 与对应的桌面 IDE — 会话显示为 "Cursor CLI" / "Qoder CLI",点击跳转到承载它的终端而不是桌面 IDE (#134)
  • 新增 设置 → 会话 → "插件子会话" 三选一(独立 / 合并到主会话 / 隐藏),处理 OpenCode 里 omo 这类插件触发的 hook 事件 (#123)
  • 注册 Codex 的 PermissionRequest hook — shell 提权 / 网络访问审批现在会触发审批面板和声音,而不是默默卡在 "running" (#145)
  • 新增 设置 → 行为 → "Agent 完成时自动展开面板" 开关(默认开,保持原行为)(#146)
  • ~/.config/opencode/opencode.jsonc 存在时优先写入它 — OpenCode 推荐用 .jsonc 格式,主端不再每次安装都重新创建一个 .json 兄弟文件 (#132)
  • session 卡片上显示 "+N Sub" 标签提示有 N 个活跃 subagent,hover 任意 subagent icon 查看 agent type + 当前工具 (#141)
  • 自动批准工具列表默认清空 — 每次工具调用都走审批流程;之前默认会静默批准 9 个内部工具(TaskCreate / TaskUpdate / TodoWrite / EnterPlanMode 等),那些调用在面板上看不到
  • 修复启动卡死 — detectClaudeVersion / ConfigInstaller.install / verifyAndRepair / TerminalActivator.runProcess 不再阻塞主线程,所有子进程等待都有 5–10s 硬超时,慢路径都搬到后台 (#139)
  • 加强 UserPromptSubmit 提示词提取(支持 nested payload/data 容器、新增 userPrompt / text 字段 fallback、保留代码片段前后空格),并在 diagnostics 导出里加 100 条 hook event ring buffer — 后续"提问不展示"类问题可以从一个 zip 里直接定位 (#103)
  • 修复 Sparkle 检查更新流程:在已显示"已是最新版本"后又弹"更新失败"的 bug (#137 → PR #138 by @Drswith)
  • DEBUG 模式下没 bundle ID 时跳过 Sparkle 初始化,避免 Xcode 直接跑时启动崩溃 (#133, PR by @jerry0804)
  • 润色土耳其语翻译(统一 Title Case + 修正 "ERTELE" 误译)(#135, PR by @Ardakilic)

Migration notes

升级后请到 设置 → Hooks → Reinstall Hooks 一次,让新版 codeisland-bridge 落到 ~/.codeisland/ —— 这样 #123 plugin sub-sessions / #134 cursor-cli + qoder-cli 区分 / #145 Codex permission hook / #103 增强诊断 才会生效。已显式调过自动批准列表的用户不受 default 清空影响(UserDefaults register 不会覆盖已 set 的值)。

v1.0.23

Choose a tag to compare

@wxtsky wxtsky released this 25 Apr 14:13
Immutable release. Only release title and notes can be modified.

English

  • Add ESP32 BLE companion device — port mascot animations to a real desk pet (#131)
  • Make auto-approve tools configurable in Settings; default no longer auto-approves ExitPlanMode so plan-mode exit prompts an approval dialog (#126)
  • Fix TraeCli YAML hook injection corruption on mixed indentation; preserve user comments via surgical merge (#122)
  • Respect $CODEX_HOME in codex auto-config (local + ssh) (#129)
  • Add WorkBuddy bundle ID for one-click jump from CodeIsland (#130)
  • Fix remote SSH sessions being force-flipped to idle on local timeout (#121)
  • Fix Ghostty click-to-jump no-op via System Events Accessibility fallback (#84)
  • Fix Terminal.app: minimized window not raising + multi-tab clicks all jumping to same tab (root cause: AppleScript tty variable shadowed Terminal.app's tab tty property) (#124)
  • Add configurable cwd-substring blocklist for hook events — filter out background plugins like claude-mem (#125)
  • Add webhook forwarding for hook events to external HTTP endpoints — pipe agent activity into DingTalk / Lark / Slack receivers (#115)
  • Add minimum Kiro CLI support — install hooks into ~/.kiro/agents/codeisland.json (launch with kiro --agent codeisland) (#127)

中文

  • 新增 ESP32 BLE 桌面伴侣设备——把吉祥物动画移植到实体小屏 (#131)
  • "自动批准工具"可在设置里逐项配置,默认不再自动批准 ExitPlanMode,退出 plan 模式会弹审批 (#126)
  • 修复 TraeCli YAML 在混合缩进下 hook 注入损坏的问题,并通过 surgical 合并保留用户注释 (#122)
  • codex 自动配置遵循 $CODEX_HOME(本地和 ssh 都生效)(#129)
  • 新增 WorkBuddy 一键跳转 (#130)
  • 修复远程 SSH 任务被本地 timeout 误判完成 (#121)
  • 修复 Ghostty 点击灵动岛无反应——加 System Events Accessibility 兜底 (#84)
  • 修复 Terminal.app 最小化无法打开 + 多终端点哪个都跳同一 tab(真 root cause:AppleScript 局部变量 tty 跟 tab property tty 同名导致 Strategy 1 静默失效)(#124)
  • 设置里新增"忽略指定路径的 Hook"——按子串过滤 claude-mem 等后台插件触发的事件 (#125)
  • 设置里新增"Webhook 转发"——hook 事件以 JSON POST 到外部端点,方便对接钉钉/飞书/Slack (#115)
  • 新增 Kiro CLI 最小可用支持——hooks 写到 ~/.kiro/agents/codeisland.json,启动用 kiro --agent codeisland (#127)

v1.0.22

Choose a tag to compare

@wxtsky wxtsky released this 23 Apr 06:30
Immutable release. Only release title and notes can be modified.

English

New

  • Sparkle-based auto-update — CodeIsland now self-updates via the Sparkle 2 framework with ed25519 signed appcast. No more opening GitHub Releases by hand; the About page tells you when an update is ready. (Users installed via Homebrew stay managed by brew upgrade.) From v1.0.22 onwards, Sparkle is in charge.
  • Session monitoring engine overhaul — four deep improvements after studying the space for a week:
    • Precise tool_use_id matching — Claude's PreToolUse / PermissionRequest / PostToolUse now pair by id, fixing a real bug where concurrent tool invocations could cancel each other's pending approval in the same session.
    • Warp terminal: exact pane jumping — reads Warp's SQLite state to find the exact tab running your session, then sends ⌘<n> via a CGEvent to switch. Handles firmlink path normalization (/tmp/private/tmp) and prefers active > focused > newest when multiple panes match.
    • Live JSONL tailing for Claude — streams the transcript file via DispatchSource.makeFileSystemObjectSource + inode change detection. AI output now shows up in the island panel as it streams, not only when the Stop hook fires.
    • Codex Desktop (app-server) support (#79) — subscribes to Codex.app's JSON-RPC app-server so thread lifecycle and waitingOnApproval states render on the island for users of the Codex desktop app, not only the CLI.
  • Click-to-jump on approval card (#108 by @alvis-HaoH) — clicking the permission approval jumps to the terminal tab and auto-collapses after the jump validates.
  • pi-mono support (#111) — pi-mono, the 38k★ TS-plugin-based Claude client.
  • Third-party CLI extensibility + bridge hardening (#120) — hookEventName alias and nested payload.session_id compatibility in the bridge; non-blocking alarm window tightened from 8s to 4s; Hermes/Gemini events no longer get dropped on the floor.
  • Default mascot setting + smart-suppress in IDE terminals (#102 #112) — pick any mascot as the idle indicator; smart-suppress now applies when a recognized IDE terminal is frontmost.
  • Performance benchmark guardrails — micro-benchmarks for scanLines, HookEvent.init, drainMessages, WarpPaneResolver — CI will catch hot-path regressions now. Transcript tailer got quickTypeProbe byte-prefilter: real-world mixed transcript 11.76ms → 5.49ms (-53%).

Bug fixes

  • #100 — Approval/question cards rendered fully transparent on macOS 26 until a hover forced a redraw; also "vanished when mouse approached the notch, reappeared near the buttons." Root cause: compositingGroup + blur in BlurFadeModifier's identity state triggered a macOS 26 compositor regression where the offscreen layer never fully rendered. Dropped the compositingGroup; blur + opacity now apply directly without the offscreen buffer.
  • #104 — Returning from a fullscreen space to a non-fullscreen one could leave the island hidden for up to 1.5s (or longer if fullscreen detection misreported). fullscreenLatch now clears immediately on space change when the new space is not fullscreen.
  • #116 — Clicking a Terminal.app session in the notch only shook the card because activateTerminalApp relied on a custom title that most users never set. Rewritten as a single AppleScript that tries tty → auto tab name → custom title → deminiaturize-first-minimized fallback.
  • #103 — Qwen hook PermissionRequest hung until Qwen's internal timeout because the installer was omitting the per-entry timeout field on Claude-style hook writes. Now emits the correct ms-unit timeouts (86400000 for PermissionRequest, 5000 otherwise).
  • #105 #106 #107 #119 — Hook installer used to destructively reformat ~/.claude/settings.json / ~/.opencode/opencode.json (stripped comments, reordered keys, escaped slashes). Now preserves user formatting, keys, and comments across install/uninstall.
  • Copilot — the hook installer no longer clobbers a user-set Copilot version field.
  • Compiler warningsSessionSnapshot, ChatMessage, ToolHistoryEntry, SubagentState, AgentStatus now declare Sendable; Codex supervisor bundle id marked nonisolated. Release build is now 0-warning.

中文

新功能

  • 基于 Sparkle 的自动更新 — CodeIsland 现在通过 Sparkle 2 框架实现自动更新,appcast 由 ed25519 签名。不用再去 GitHub Releases 手动下载,About 页会在有新版本时提示。(Homebrew 安装的版本继续交给 brew upgrade 管理。)从 v1.0.22 开始,Sparkle 接管后续升级。
  • 会话监测引擎全面升级 — 一周深挖后做了四项改进:
    • tool_use_id 精准配对 — Claude 的 PreToolUse / PermissionRequest / PostToolUse 按 id 配对。修了一个真 bug:多工具并发时 PostToolUse 会误删同 session 其他待审批请求。
    • Warp 终端精准 pane 跳转 — 读 Warp SQLite 找到运行当前会话的确切 tab,然后 CGEvent 发 ⌘<n> 切过去。处理了 firmlink 路径归一化(/tmp/private/tmp),多 pane 匹配按 active > focused > newest 排序。
    • Claude 会话 JSONL 实时 tail — 用 DispatchSource.makeFileSystemObjectSource + inode 换盘检测增量读 transcript 文件。流式输出实时显示在岛上面板,不用等 Stop 事件触发。
    • Codex Desktop(app-server)支持 (#79) — 订阅 Codex.app 的 JSON-RPC app-server,thread 生命周期和 waitingOnApproval 状态都能精确映射到岛。Codex 桌面 app 用户(不只是 CLI)也能享受权限审批识别。
  • 审批卡片点击跳转 (#108, by @alvis-HaoH) — 点权限审批跳转到终端 tab,跳转验证成功后自动收起岛。
  • pi-mono 支持 (#111) — pi-mono 是 38k★ 的 TS 插件式 Claude 客户端。
  • 第三方 CLI 扩展性 + bridge 加固 (#120) — bridge 兼容 hookEventName 别名和嵌套 payload.session_id;非阻塞 alarm 窗口从 8s 收紧到 4s;Hermes/Gemini 等 fork CLI 的 hook 事件不再静默丢弃。
  • 默认角色设置 + IDE 终端智能抑制 (#102 #112) — 无会话时可以选任意 mascot 作为岛上默认角色;智能抑制现在对所有被识别为 IDE 终端的前台 app 生效。
  • 性能 benchmark 回归闸 — 为 scanLines / HookEvent.init / drainMessages / WarpPaneResolver 加了微基准,CI 会抓热路径回归。Transcript tailer 新增 quickTypeProbe 字节预筛:真实混合场景 11.76ms → 5.49ms (-53%)。

Bug 修复

  • #100 — macOS 26 上权限/询问卡片一弹出就透明,hover 才显形;而且"鼠标移向刘海 → 消失、移回按钮位置 → 重现"。根因是 BlurFadeModifier 在 identity 态里用了 compositingGroup + blur,macOS 26 的 SwiftUI 合成器对这个组合有回归:offscreen 层的渲染结果异常,直到某个 invalidation 触发重新合成。去掉了 compositingGroup,blur+opacity 直接作用在子视图上,不再触发合成器 bug。
  • #104 — 从全屏 space 切回非全屏 space 时,岛可能被隐藏最长 1.5s(全屏检测误报时更久)。fullscreenLatch 现在在 space 切换时立即清除,不再等 1.5s poller。
  • #116 — Terminal.app session 点击跳转只看到卡片抖一下。原因:activateTerminalApp 依赖大多数用户从没设过的 custom title,匹配不到就什么都不干。重写为单个 AppleScript:tty → auto tab name → custom title → deminiaturize 最后一个兜底。
  • #103 — Qwen 的 hook PermissionRequest 会挂起直到 Qwen 内部超时。原因:installer 在写 Claude 风格 hook entry 时漏了 per-entry 的 timeout 字段,Qwen 靠这个控制每条 hook 的超时。现在正确填 ms 单位超时(PermissionRequest 86400000 = 24h,其他 5000 = 5s)。
  • #105 #106 #107 #119 — Hook installer 之前会破坏性重排 ~/.claude/settings.json / ~/.opencode/opencode.json(删注释、改字段顺序、escape 反斜杠)。现在 install/uninstall 全过程保留用户格式、字段顺序和注释。
  • Copilot — hook installer 不再覆盖用户手动设置的 Copilot version 字段。
  • 编译警告清理SessionSnapshot / ChatMessage / ToolHistoryEntry / SubagentState / AgentStatus 全部声明 Sendable;Codex supervisor bundle id 标 nonisolated。Release build 0 warning。

Thanks to contributors: @alvis-HaoH @Hatiaa and everyone who opened issues or shared reproduction steps this cycle.

v1.0.21

Choose a tag to compare

@wxtsky wxtsky released this 16 Apr 17:23
Immutable release. Only release title and notes can be modified.

English

New

  • TraeCli support — 11th supported CLI, with YAML config merge / remove that preserves user-authored blocks (PR #98)
  • Inline approval in session list — click an approval on the session list and Allow / Always / Deny / Details stay right there without stealing the surface (PR #98)
  • Dismiss button on permission prompts — temporarily collapse the card; the same session's next permission request brings it back (PR #93)
  • Auto-reconnect for remote SSH — hosts marked "Auto Connect" now retry with 5/15/45/120/300s backoff when the tunnel drops (#92)
  • Per-host SSH_AUTH_SOCK — optional field in the Add Host form, lets 1Password / Bitwarden / Secretive agents sign the handshake without launchctl setenv hacks (#81)
  • Japanese + Korean localization (PR #72) — now en / zh / ja / ko / tr
  • PID ancestry tracking for sh -c wrappers — hooks executed through a transient shell now correctly attribute to the long-lived CLI process (#98)
  • Event normalization for snake_case hooks — TraeCli/Coco style pre_tool_use, session_start, permission_request, etc. map to canonical names (#98)
  • dev-hot-restart scriptscripts/dev-hot-restart.sh watches Sources/Tests, rebuilds on change, and only restarts the running app if the build succeeds (PR #94)

Bug fixes

  • #89 — Stop clobbering user opencode.json: when the file is unparseable (comments, typos, non-object root), the installer now bails out instead of overwriting it with a 2-key minimal config. First write drops a timestamped .codeisland.bak.* alongside the original.
  • #92autoScreenPoller dropped from 1s to 5s; CGWindowListCopyWindowInfo was a measurable Energy Impact hit and NSWorkspace notifications already cover the common paths
  • #92 — SSH stderr readability handler is now cleared on ssh process exit; the leaked handler was pinning CPU at 100% after tunnel drops (reported by @jiz4oh)
  • #95 — Source inference from process ancestry when a hook arrives without --source. omo-triggered OpenCode events no longer fall back to "claude" and no longer double-up with the real OpenCode session (thanks @edso404 for the full trace)
  • #101 — Fenced code blocks in chat previews now keep their newlines and the language identifier no longer leaks into the code body (thanks @senshinya for the root cause)
  • Infer source now covers all supported CLIs, not just the one named by --source

Chore / docs

  • .gitignore reorganized with categories; *.log / *.tmp globs (PR #96)
  • README intro and About tagline bumped to "11 tools" everywhere
  • Trailing whitespace cleanup in ConfigInstaller
  • Post-merge: hardcoded Chinese strings in the inline approval UI localized via L10n
  • dev-hot-restart.sh SIGTERM-first with SIGKILL fallback, absolute --app-path preserved, seen counter initialized from wc -c

中文

新功能

  • TraeCli 支持 — 第 11 个支持的 CLI,YAML 配置 merge / remove 保留用户原有块 (PR #98)
  • 会话列表内 inline 审批 — 会话卡片上直接 Allow / Always / Deny / 详情,不再抢占面板 (PR #98)
  • 权限请求忽略按钮 — 暂时收起卡片,同会话下次权限请求会重新弹出 (PR #93)
  • 远程 SSH 自动重连 — 勾了"Auto Connect"的 host 断开后按 5/15/45/120/300 秒退避重连 (#92)
  • 每主机 SSH_AUTH_SOCK — Add Host 表单可选项,1Password / Bitwarden / Secretive 类 SSH agent 不再需要 launchctl setenv hack (#81)
  • 日语 + 韩语本地化 (PR #72) — 现在覆盖 en / zh / ja / ko / tr
  • PID 沿 ancestry 追踪 — 通过 sh -c 启动的 hook 现在能正确归到长生命周期 CLI 进程 (#98)
  • snake_case hook 事件归一化 — TraeCli/Coco 的 pre_tool_use / session_start / permission_request 等统一映射到标准事件名 (#98)
  • dev-hot-restart 脚本scripts/dev-hot-restart.sh 监听 Sources/Tests,构建成功才重启运行中的 app (PR #94)

Bug 修复

  • #89 — 不再覆盖用户 opencode.json:文件含注释/语法错误/根不是 object 时,installer 直接 bail out,不再把整个文件换成 2-key 最小 config。首次写入前会留一份 .codeisland.bak.<时间戳> 备份
  • #92autoScreenPoller 1s → 5s;CGWindowListCopyWindowInfo 对 Energy Impact 可见,NSWorkspace 通知已经覆盖主场景
  • #92 — ssh 子进程退出时清理 stderr readability handler;之前 handler 没清会在关闭 FD 上被紧密回调,pin 住 100% CPU (@jiz4oh 反馈)
  • #95 — hook 不带 --source 时沿进程 ancestry 推断 source。omo 触发的 OpenCode 事件不再误落回 "claude",也不再和真实 OpenCode 会话双显 (感谢 @edso404 的完整定位)
  • #101 — 聊天预览里的围栏代码块保留换行,语言标识不再混入代码内容 (感谢 @senshinya 的根因分析)

杂项 / 文档

  • .gitignore 重新分类,加 *.log / *.tmp 通配符 (PR #96)
  • README 和 About 全部统一为 "11 tools / 11 种工具"
  • ConfigInstaller 行尾空格清理
  • 合并后修复:inline 审批 UI 里硬编码的中文改走 L10n
  • dev-hot-restart.sh 优先 SIGTERM 再 SIGKILL,绝对路径 --app-path 保留,seen 计数从 wc -c 初始化

Thanks to contributors: @lkangd @liushaoxiong10 @alvis-HaoH @leizhiyuan @jiz4oh @Hatiaa @senshinya @edso404 @xiangzi-jiangxin