Problem
Ghostwork observes everything. There are apps where you never want it to learn or fire — password managers, banking apps, personal journaling apps, health apps, etc. Right now there's no way to say "never touch 1Password".
What to build
A Excluded Apps setting — a comma-separated list (or add/remove chips UI) of macOS app names. Two behaviours:
- Observation exclusion — the session ingester skips
ui_monitoring rows where app_name is in the exclusion list (before inserting into raw_events)
- Execution exclusion — the action engine skips rule matching when the frontmost app is excluded
A default list of sensitive apps should ship pre-populated:
1Password, Keychain Access, Mint, Robinhood, Banking, Health, Passwords
Acceptance criteria
Files to look at
src/main/sessionIngester.ts — where ui_monitoring rows are processed
src/main/actionEngine.ts — where getCurrentContext() is called
src/main/db.ts — getSettings() / setSetting() helpers
src/renderer/index.html — Settings tab UI
Problem
Ghostwork observes everything. There are apps where you never want it to learn or fire — password managers, banking apps, personal journaling apps, health apps, etc. Right now there's no way to say "never touch 1Password".
What to build
A Excluded Apps setting — a comma-separated list (or add/remove chips UI) of macOS app names. Two behaviours:
ui_monitoringrows whereapp_nameis in the exclusion list (before inserting intoraw_events)A default list of sensitive apps should ship pre-populated:
1Password, Keychain Access, Mint, Robinhood, Banking, Health, PasswordsAcceptance criteria
settings.set("excluded_apps", ...)getCurrentContext()returns early if frontmost app is excludedFiles to look at
src/main/sessionIngester.ts— whereui_monitoringrows are processedsrc/main/actionEngine.ts— wheregetCurrentContext()is calledsrc/main/db.ts—getSettings()/setSetting()helperssrc/renderer/index.html— Settings tab UI