• 0.0.1 135db9b308

    Rewrite shannoncoat as a native Swift menu-bar app

    bdeshi released this 2026-08-04 21:56:22 +06:00 | 15 commits to main since this release

    Replaces the original shannoncoat.sh entirely with in-process Swift. The
    script stopped earning its keep once the rest went native, and being a
    persistent process rather than a one-shot CLI is what later makes live
    window tracking possible at all.

    • ProfileStore: JSON config at ~/.shannoncoat/.json (was hand-rolled
      YAML), with ~ expansion, paths relative to the config dir, and
      name/dir-collision validation in one place.
    • ProcessInspector: sysctl(KERN_PROC_ALL/KERN_PROCARGS2) enumeration
      instead of shelling out to pgrep.
    • ClaudeControl: launch via Process, focus via direct Accessibility calls
      (unhide, un-minimize, poll-for-window, AXRaise) instead of AppleScript,
      and a quit that respects Claude's own termination handling rather than
      unconditionally SIGKILLing after a flat 5s timeout.
    • LiveState: NSWorkspace notification-driven state with no polling timer,
      so the menu bar reflects reality within about a second — including
      changes made outside the app entirely.
    • ManageWindow: one non-modal window replacing what would otherwise be a
      string of separate popup alerts, with inline add/remove and directory
      pickers.
    • LaunchAtLogin / UpdateChecker: SMAppService login-item toggle, and a
      minimal VERSION-file update check that alerts on a manual check and
      posts a quiet notification on the automatic one.

    Also drops the standalone CLI in favour of GUI-only, and adds a
    placeholder app icon drawn from vector shapes rather than composited on
    top of Claude's own icon assets.

    Claude Desktop is located at runtime rather than assumed: a path the user
    picked previously, then /Applications, then a per-user ~/Applications
    install, each accepted only if it actually contains the executable. If
    none match, launching a profile asks the user to locate it once and
    remembers the answer — a launch that silently does nothing gives them no
    way to work out what's wrong.

    Downloads