Scope
Extend beyond macOS/launchd. The service layer is already abstracted behind the ServiceManager trait (src/launchd.rs) specifically so another init system can slot in without touching callers (add / doctor / launch / uninstall).
Work
- Linux: implement a
ServiceManager backed by a systemd --user unit (install/state/reload/uninstall). The FS watcher already uses notify, which selects inotify on Linux.
- Windows: file-watcher backend + an appropriate service/startup mechanism (later).
- Select the implementation at runtime by platform.
Denylist note (already handled, verify per-platform)
.credentials.json relocates under CLAUDE_CONFIG_DIR on Linux/Windows (it lives in the OS keychain on macOS). It is already on the denylist unconditionally, so excluding it is correct on all platforms — confirm during Linux bring-up.
Notes
- Keep the launchd implementation untouched; add siblings behind the trait.
- Priority: Phase 3.
Scope
Extend beyond macOS/launchd. The service layer is already abstracted behind the
ServiceManagertrait (src/launchd.rs) specifically so another init system can slot in without touching callers (add/doctor/launch/uninstall).Work
ServiceManagerbacked by asystemd --userunit (install/state/reload/uninstall). The FS watcher already usesnotify, which selects inotify on Linux.Denylist note (already handled, verify per-platform)
.credentials.jsonrelocates underCLAUDE_CONFIG_DIRon Linux/Windows (it lives in the OS keychain on macOS). It is already on the denylist unconditionally, so excluding it is correct on all platforms — confirm during Linux bring-up.Notes