Add native macOS Endpoint Security app - #42
Conversation
Code review — full branch + follow-up commitsReviewed Verified locally: 1. Base branch (
|
Follow-up review —
|
# Conflicts: # crate/gensee-crate-cli/src/tclone.rs # docs/dashboard.md
Review —
|
Review —
|
Review —
|
Review —
|
Review —
|
Review —
|
Review —
|
What changed
macos/GenseeCrategenseeCLIgensee setupcommands; disabling removes only Gensee-owned hook entries and preserves unrelated user settings and hooksgensee rununtil a direct policy bridge is availableWhy
The previous macOS path used
/usr/bin/esloggeras a temporary compatibility sensor. Gensee now has Apple approval forcom.apple.developer.endpoint-security.client, so the product can use a signed, first-party system extension with exact process identity and managed agent-tree attribution.The native app intentionally calls the OSS Rust CLI rather than implementing a second backend in Swift. Policy, storage, event normalization, lineage, dashboard state, harness setup, and Daily Highlight aggregates therefore remain shared with the CLI and existing dashboard.
The harness inventory gives users one place to see all supported agent surfaces and explicitly choose which installed direct-hook integrations receive Gensee monitoring and policy enforcement. Unsupported-on-this-machine and managed-launch-only states remain visible without presenting a working toggle.
Developer and user impact
The source is public, but publishing an entitlement plist does not grant Endpoint Security access to another Apple Developer account. Contributors and distributors need their own Apple approval and matching Development or Developer ID signing/provisioning. No certificates, private keys, profiles, notarization credentials, built apps, DMGs, or archives are included.
The extension defaults to
observe, which records evidence without denying operations.protectandstrictauthorization behavior is scoped to explicitly managed agent process trees; unrelated host processes remain outside the deny scope.Token collection stores only numeric usage totals exposed by supported local transcript formats; it does not copy prompt or response content into the Gensee event store.
Validation
cargo fmt --all -- --checkcargo test --workspace— 497 tests passednpm run docs:buildplutil -linton both Info.plists and entitlement plistsjq emptyon the default policy and policy schemaxcodegen generate --spec project.ymlxcodebuildof the host, embedded Rust CLI, assets, and system extension — succeeded