Highlights
OpenLogi 0.6.0 splits the app into a headless, always-on agent daemon and an on-demand GUI configuration editor. This makes remapping and device I/O keep running after the GUI window is closed, while the GUI becomes a normal app that opens only when you need to change settings.
What's new
- Added
openlogi-agent, a headless daemon that owns HID++ device I/O, the CGEventTap hook, foreground-app tracking, pairing, and the menu-bar status item. - Reworked
openlogi-guiinto an on-demand configuration app that talks to the agent over IPC instead of running device I/O itself. - Added a tarpc-based agent IPC protocol for inventory/status polling, DPI, lighting, SmartShift, config reloads, Accessibility prompts, and pairing.
- Moved device pairing into the agent so receiver pairing no longer competes with the live gesture/capture session from another process.
- The GUI can auto-launch the embedded agent helper when the IPC socket is unavailable.
macOS packaging and startup
- The packaged app now embeds
OpenLogiAgent.appas a nested login-item helper underOpenLogi.app/Contents/Library/LoginItems/. - Launch-at-login is now handled by the agent instead of the GUI.
- The menu-bar item is hosted by the agent, so remapping and tray access can stay alive independently of the GUI window.
- Release signing now signs the nested agent helper inside-out before signing the outer app, helping the agent keep a stable Accessibility/TCC identity across updates.
- Homebrew tap update dispatch for
openlogi@latesthas been re-enabled.
Fixes and hardening
- Fixed an agent single-instance race that could start two agents and install duplicate hooks.
- Fixed Accessibility prompting so macOS authorizes the agent binary, not the GUI.
- Fixed transient inventory errors wiping live runtime state or resetting DPI-cycle state.
- Fixed agent recovery when the GUI sees a dead or quit agent.
- Fixed LaunchAgent plist escaping and made tray Quit stay quit after a clean exit.
- Preserved typed device errors across IPC so unsupported DPI/SmartShift features latch correctly instead of retrying forever.
- Kept the agent and GUI device ordering consistent so the default selected device matches in both processes.
- Confirmed SmartShift writes with a re-read so rejected writes self-correct in the UI.
- Honored the Show-in-menu-bar preference at agent startup.
- Added IPC protocol handshake checks and pairing-session race fixes from review.
Upgrade notes
- On first launch after upgrading, macOS may ask you to grant Accessibility permission to
OpenLogiAgent. This is expected: the agent is now the process that owns the input hook. - If remapping does not work after upgrading, check System Settings → Privacy & Security → Accessibility and ensure the agent/helper is allowed, then restart OpenLogi.
Included PRs
- #165 — Split into a headless agent daemon + on-demand GUI
- #161 — Dispatch
openlogi@latestHomebrew tap updates - #164 — Release v0.6.0
Full changelog: v0.5.3...v0.6.0