Releases: fangshili/Liang
Release list
v0.1.11
Liang v0.1.11
Bug Fixes
- Fixed auto-install silently overwriting an existing hooks config when the existing file fails to parse (e.g. contains JSONC comments). Liang now aborts the install with a clear error instead of overwriting the user's configuration.
- Fixed the non-notch expansion animation: the fake notch now expands with a smooth scale + fade instead of a shape morph, removing the ghosting artifact and the square-corner look.
- Fixed mixed-language task titles: tool names from Claude Code / Codex / CodeBuddy (Bash, Read, Edit, Glob, Grep, WebFetch, etc.) are now localized.
- Fixed resources missing in local debug builds: icons and bridge scripts fall back to
Bundle.modulewhenBundle.maindoesn't contain them (DMG builds are unaffected).
New
- Auto-clear error on new task: toggle in Settings → Advanced; when on, a new processing event replaces the error state automatically.
- Show status label beside cursor: toggle in Settings → Glow → Cursor to hide the state text that follows the cursor.
- Hide notch (non-notch Macs only): toggle in Settings → Glow → General to hide the fake notch and disable task-detail expansion.
SHA-256: fb8aa42d092e481b8ee2ac6edf6d430ab3682fe76c312a9e621f46eb30696057
v0.1.10
Liang v0.1.10
Bug Fixes
- Fixed a crash (
EXC_BREAKPOINT) when configuring Claude Code / Codex / CodeBuddy on a fresh install. Bundled resources are now loaded viaBundle.maininstead of SPM'sBundle.module, whose lookup path breaks inside a signed.appbundle.
New
- Crash feedback: Liang now detects a crash from a previous session and shows a prompt in Settings → About, with a "Reveal in Finder" button to locate the crash log.
- Settings → About: the changelog placeholder is now a link that opens the GitHub Releases page.
SHA-256: c6704fcb8dc3f3a880f7d8a8b7efd624dbaa1b5a8681e680b9e171b47c1a9b50
v0.1.9
Liang v0.1.9
Security & Privacy
- Removed credential-dumping environment-variable logs from all bridge scripts (Cursor, CodeBuddy, Claude Code, Codex).
- Bridge scripts no longer log working-directory paths or raw payload contents on errors.
- Capped event files at 10 MB (truncate-to-empty) to prevent unbounded disk growth.
Waiting State
- Added
waiting(yellow) mapping for permission prompts / user-confirmation:- CodeBuddy / Claude Code:
PermissionRequest+Notification(permission_prompt/idle_prompt) - Codex:
PermissionRequest
- CodeBuddy / Claude Code:
- Note: the CodeBuddy desktop app supports only 7 hook events, so
waitingis only visible on the CLI.
Settings & Detection
- Settings no longer silently disable integrations when the page opens (detection paths missed pnpm / volta / fnm).
- Static check now verifies the hook command points to Liang's bridge script.
Docs
- Documented the CodeBuddy desktop 7-event limit and the
waitinggaps for Claude Code / Codex.
SHA-256: c72ad72acb0627518b35131480f9e7420a0bed9f03c9c0a66d6f288d614cf5f3
v0.1.8
Liang v0.1.8 Release Notes
This release adds CodeBuddy support (the fourth coding agent) alongside Cursor, Claude Code, and Codex, plus agent-detection fixes and onboarding polish.
New
- CodeBuddy integration
- Liang now listens to CodeBuddy Code hooks. Configure it in Onboarding or Settings → Coding Agent, and its sessions, tools, and subagents will drive the glow in real time.
- Detects the
codebuddyCLI across all official install methods (npm, Homebrew, and the native install script). IDE plugins (VS Code, JetBrains, Zed) run through the same CLI, so they're covered too.
Fixes
- Fixed leftover config files being misread as "configured"
- An agent that isn't installed is now always reported as "not configured", even if a stale hooks config file remains on disk.
- Fixed inconsistent installation detection between Onboarding and Settings
- Onboarding now refreshes Claude Code, Codex, and CodeBuddy detection on entry (previously only Cursor), so it agrees with Settings.
- Fixed the detail-panel enable switch bypassing detection
- The "Enable X Hooks" toggle now matches the left-side list behavior (disabled when the agent isn't installed).
- Fixed the CodeBuddy toggle being disabled in the agent list
- The left-side switch is now interactive for CodeBuddy, same as Cursor, Claude Code, and Codex.
Improvements
- "Not installed" label on Onboarding
- Uninstalled agents now show an orange "Not installed" badge next to their name, so you don't have to click Configure to find out.
- Onboarding window is taller (~20%) to fit more content without scrolling.
- Unified dark appearance
- The "Thanks for installing Liang" window and its title bar now stay dark, matching the rest of onboarding.
- "Other agents" no longer names specific agents — it now just says more coding agents are coming soon.
- Cursor now shows a supported-clients note (local desktop sessions only; cloud/remote sessions aren't supported), matching the other agents.
Known limitations
- CodeBuddy cannot distinguish task success from failure (no status field on Stop), so finished CodeBuddy tasks always show as success — same as Codex.
System Requirements
- macOS 14.0 or later
- Apple Silicon (arm64)
Checksums
Liang-0.1.8.dmg: PLACEHOLDER_SIZE bytes- SHA-256:
PLACEHOLDER_SHA256
v0.1.7
Liang v0.1.7 Release Notes
This release hardens agent detection: agents that aren't installed can no longer be enabled or configured, and the crash when configuring a missing agent is fixed.
Fixes
-
Uninstalled agents can no longer be enabled or configured
- In Settings, the enable toggle and the "Configure" button are now disabled (greyed out) with a "Not installed" label for Cursor, Claude Code, and Codex when the agent isn't detected.
- Detection re-runs every time you open the Settings page and whenever you toggle an agent, so uninstalling an agent immediately disables its switch.
-
Fixed a crash when configuring an uninstalled agent
- Tapping "Configure" for a missing agent previously ran the bridge install anyway and crashed. The install now aborts early when the agent isn't installed.
-
Fixed onboarding wrongly reporting "not installed" for Claude Code / Codex
- Onboarding only refreshed the Cursor detection on entry; Claude Code and Codex now refresh too, so installed agents are correctly recognized.
-
Fixed the detail-panel enable switch bypassing detection
- The "Enable X Hooks" toggle in the right-hand detail panel could still be switched on for an uninstalled agent. It now matches the left-side list behavior (disabled when not installed).
-
Removed the "Continue Anyway" option
- When an agent isn't detected, onboarding and Settings now show only a "Download / Install" action instead of offering to continue anyway.
-
Updated reset-onboarding.sh
- The test-reset script now also clears Codex state (events file, bridge script, and hooks.json entries).
System Requirements
- macOS 14.0 or later
- Apple Silicon (arm64)
Checksums
Liang-0.1.7.dmg: PLACEHOLDER_SIZE bytes- SHA-256:
PLACEHOLDER_SHA256
v0.1.6
Liang v0.1.6 Release Notes
This release adds Codex support alongside Cursor and Claude Code, plus setup-detection improvements and crash fixes.
New
- Codex integration
- Liang now listens to OpenAI Codex hooks in addition to Cursor and Claude Code. Configure it in Onboarding or Settings → Coding Agent, and its sessions, tools, and subagents will drive the glow in real time.
- Both the Codex CLI and the ChatGPT desktop app (in Codex mode) are detected and supported.
Improvements
-
Installed-agent detection before setup
- The "Configure" button for Cursor, Claude Code, and Codex now checks whether the agent is actually installed first, and shows a clear message instead of silently writing a bridge for a missing agent.
-
Supported-clients notes
- The Claude Code and Codex setup pages (and Onboarding) now list which clients are supported, so it's clear whether a problem is a Liang bridge issue or an unsupported client.
Fixes
- Fixed a crash when tapping "Configure" for an agent that isn't installed (background-thread state access across all three setup managers).
- Fixed Claude Code detection missing installs managed by
nvm. - Fixed Codex detection missing the ChatGPT desktop app.
Known limitations
- Codex cannot distinguish task success from failure, so finished Codex tasks always show as success.
System Requirements
- macOS 14.0 or later
- Apple Silicon (arm64)
Checksums
Liang-0.1.6.dmg: 2,972,219 bytes- SHA-256:
facb49f0eb3f183fe5303a79390f0b4e0e1b4cd349f66b52892923a9ff03dfb7
v0.1.5
Liang v0.1.5 Release Notes
This release adds Claude Code support alongside Cursor, plus task-list improvements and fixes.
New
- Claude Code integration
- Liang now listens to Claude Code hooks in addition to Cursor. Configure it in Onboarding or Settings → Coding Agent, and its sessions, tools, and subagents will drive the glow in real time.
- Local Claude Code sessions are supported: CLI, VS Code / JetBrains extensions, and Desktop app local sessions. Cloud sessions are out of scope (they don't read the local hooks config).
Improvements
-
Task source icons
- Tasks in the notch expansion panel now show the source agent's logo (Cursor or Claude Code), so you can tell which agent a task belongs to at a glance.
-
Subagent events merged into the parent task
- Claude Code frequently spawns subagents; they no longer create separate rows or overwrite the parent task's title. The task list stays focused on your main conversation.
Fixes
- Auto-enable Claude Code after configuring it in Onboarding (previously it stayed disabled even after a successful bridge install).
- Fixed Claude Code detection wrongly treating the presence of the Claude Desktop app as "Claude Code CLI installed".
System Requirements
- macOS 14.0 or later
- Apple Silicon (arm64)
Checksums
Liang-0.1.5.dmg: 2,892,786 bytes- SHA-256:
9a4ad6d9b8d2e1ac25369ca7e19a3eaa9b98fb7ea156902fe4f4738195a34004
v0.1.4
Liang v0.1.4 Release Notes
This release is a focused set of correctness and reliability fixes, based on a full code review of the event pipeline and setup flow. No new features.
Fixes
-
Fixed silently dropped events when hooks fire in quick succession
- When Cursor emitted multiple hook events close together (e.g.
stop+sessionEnd, orsessionStart+beforeSubmitPrompt), only the last event was processed and everything in between was dropped. - The adapter now publishes events incrementally and the state engine processes each one in order, so no intermediate state is lost.
- When Cursor emitted multiple hook events close together (e.g.
-
Fixed unbounded memory growth from the event buffer
- The adapter previously accumulated every received event in an ever-growing array that was never trimmed. Events are now streamed one at a time instead of buffered.
-
Fixed auto-install / uninstall overwriting your existing Cursor hooks
- Installing or uninstalling the bridge used to replace or delete the entire
~/.cursor/hooks.json, wiping any hooks you had configured for other tools. - Installation now merges Liang's entries into the existing file, and uninstall removes only Liang's entries, leaving everything else intact.
- Installing or uninstalling the bridge used to replace or delete the entire
-
Fixed a race condition that could permanently lose events
- The file-watcher and the periodic health check could read the same file concurrently, occasionally corrupting a line so its event was lost forever. All reads are now serialized on a single queue.
-
Fixed task status leaking across parallel conversations
- When one conversation finished while another was still running, the "finishing" transition could mark every in-progress task as finished. Task-state propagation is now scoped to the conversation that triggered the transition.
-
Fixed cross-conversation event de-duplication dropping legitimate events
- The de-duplication signature omitted the conversation and generation IDs, so two distinct events within the window could be treated as duplicates. The signature now includes both IDs.
-
Fixed two settings silently resetting after restart
- "Cursor status label" and "Notch expansion panel" were saved but never restored on launch, so they always reverted to their defaults. They are now restored correctly.
-
Fixed the bridge script passing the full payload via command-line arguments
- The payload (which can include large tool input) was passed to Python as an
argvargument, riskingARG_MAXfailures on large files and briefly exposing the payload inps. It now flows over stdin.
- The payload (which can include large tool input) was passed to Python as an
-
Fixed the adapter starting even when hooks were disabled at launch
- When Cursor hooks were already disabled, the adapter still started and reported itself connected. It now honors the disabled state consistently, matching the runtime behavior.
System Requirements
- macOS 14.0 or later
- Apple Silicon (arm64)
Checksums
Liang-0.1.4.dmg: 2,833,142 bytes- SHA-256:
4d258ccb6a8fb1bc7592438eb1d7477929b18d154405589d3f1c2c4053769ba3
v0.1.3
Fixes
-
Fixed Cursor bridge status appearing reset in Settings
- The bridge status was not automatically refreshed when opening Settings → Coding Agent → Cursor, causing it to display as "not configured" even after a successful setup.
- Status is now refreshed automatically when the page appears.
-
Fixed crash during automatic Cursor bridge configuration
CursorSetupManagerwas not isolated to the main actor, so published state changes could happen off the main thread and trigger a SwiftUI runtime assertion during auto-install.- The manager is now
@MainActor, while file I/O operations remain non-isolated to avoid blocking the UI.
-
Improved reliability of
~/.cursor/hooks.jsonwrites- Replaced the previous "delete then write" pattern with an atomic write, preventing a partially-terminated install from leaving
hooks.jsonmissing. - Relaxed validation so
hooks.jsoncan contain extra fields or a differentversionwithout breaking the bridge detection.
- Replaced the previous "delete then write" pattern with an atomic write, preventing a partially-terminated install from leaving
v0.1.2
Onboarding
- Redesigned two-step onboarding flow
- Step 1: Cursor bridge configuration.
- Step 2: Glow preview and final setup.
- Bridge status detection without auto-skip
Step 1 now checks whether the Cursor bridge is already installed and shows an "Installed" status, but it no longer jumps automatically to Step 2. - Streamlined Cursor setup
Only automatic installation remains. Manual and dynamic detection options have been removed. The flow clearly indicates whether Cursor is installed and whether the bridge is configured. - Notch preview hidden on non-notch Macs
On machines without a display notch, the notch preview card is hidden in Step 2.
Settings
- Redesigned Glow settings with tabs
The Glow settings page is now organized into four tabs: General, Notch, Cursor, and Menu Bar.- General: Brightness and Blur Radius only.
- Notch: Outer/Inner Thickness, Notch Inset, Horizontal Offset, Corner Radius Scale, Breathing, and Breathing Speed.
- Cursor: Cursor glow toggle and bridge configuration status.
- Menu Bar: Status-color glow settings.
- Notch tab hidden on non-notch Macs
On Macs without a display notch, the Notch tab is not shown. - Cursor settings simplified
Removed manual and dynamic detection; only automatic bridge installation is offered.
Bug Fixes
- Fixed crash when toggling Low Power Mode
GlowControllerobservedNSProcessInfoPowerStateDidChangeNotificationvia a selector-based observer. The notification is delivered on a background thread, which caused UI API calls (window.orderFront,window.contentView, etc.) to run off the main thread and trigger anEXC_BREAKPOINTcrash. All notification observers that touch UI have been migrated to block-based observers onOperationQueue.main. - Fixed unresponsive "Configure" button in onboarding
Chaining two.alert(isPresented:)modifiers on macOS SwiftUI prevented the second alert from presenting. The alerts inOnboardingStep1Vieware now combined into a single.alert(item:content:)modifier, and the button hit area is explicitly defined with.contentShape(Rectangle()). - Fixed notch glow turning on automatically during onboarding
OnboardingWindowController.preferredInitialStep()previously skipped to Step 2 when Cursor was already configured, and the glow defaults were left enabled. The initial step is now always Step 1 until onboarding is completed, andAppDelegateexplicitly disables all glow layers before showing onboarding. - Cursor glow now responds to motion and power settings
CursorGlowControllernow observesNSWorkspace.accessibilityDisplayOptionsDidChangeNotificationandNSProcessInfoPowerStateDidChangeNotificationon the main queue, so the cursor halo refreshes immediately when Reduce Motion or Low Power Mode is toggled.
Notes
- Breathing animations are intentionally static when Reduce Motion or Low Power Mode is enabled
Liang respects macOS accessibility and power-management settings by downgrading all breathing/pulse effects to a steady glow when either Reduce Motion or Low Power Mode is active. This is by design.