Skip to content

Commit 29ad8fb

Browse files
committed
feat(debloat): add Debloat tab + privacy data toggles for Windows 11 bloat
New 'Debloat' tab with two sections, plus two Privacy-tab additions. Ten new registry monitors, all reversible, all off + unmonitored by default (zero behavior change until opt-in). None touch updates, security, or networking. Ads, nags & suggested content (HKCU, no UAC): - Suggested content & silent app installs (ContentDeliveryManager batch) - Lock screen tips / Spotlight ads - 'Finish setting up your device' SCOOBE nag - Start menu recommendations & recent files - File Explorer OneDrive/Office ad banners - Windows feedback request popups Background bloat (HKLM policy, one UAC prompt): - Widgets / News and interests - Edge startup boost & background mode Privacy data collection (Privacy tab): - Online (cloud) speech recognition - Inking & typing personalization (avoids the value owned by ai.inputinsights) Each monitor follows the IMonitoredSetting pattern with full SettingDocs mechanism/apply/verify + long-form catalog docs. Added a Debloat section to the generated SETTINGS-REFERENCE.md. Not added to the one-click gaming preset (matching the Privacy-tab convention). 27 new tests; full suite green (441).
1 parent 60557e5 commit 29ad8fb

20 files changed

Lines changed: 1578 additions & 1 deletion

docs/SETTINGS-REFERENCE.md

Lines changed: 242 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,21 @@ Every setting here is managed via the Settings window. Toggle **Monitor** to hav
3535
- [Activity History / Timeline](#activity-history---timeline) (`privacy.activityhistory`)
3636
- [Advertising ID](#advertising-id) (`privacy.advertisingid`)
3737
- [Cross-Device Platform (CDP)](#cross-device-platform-cdp) (`privacy.cdp`)
38+
- [Inking & typing personalization](#inking--typing-personalization) (`privacy.inking`)
39+
- [Online (cloud) speech recognition](#online-cloud-speech-recognition) (`privacy.speech`)
3840
- [Tailored experiences](#tailored-experiences) (`privacy.tailoredexp`)
3941

42+
**Debloat (ads, nags & background bloat)**
43+
44+
- ["Finish setting up your device" nag](#finish-setting-up-your-device-nag) (`debloat.finishsetup`)
45+
- [Edge startup boost & background mode](#edge-startup-boost--background-mode) (`debloat.edge`)
46+
- [File Explorer ad banners](#file-explorer-ad-banners) (`debloat.explorerads`)
47+
- [Lock screen tips, fun facts & ads](#lock-screen-tips-fun-facts--ads) (`debloat.spotlight`)
48+
- [Start menu recommendations & recent files](#start-menu-recommendations--recent-files) (`debloat.startrecommend`)
49+
- [Suggested content & silent app installs](#suggested-content--silent-app-installs) (`debloat.suggestedcontent`)
50+
- [Widgets / News and interests](#widgets---news-and-interests) (`debloat.widgets`)
51+
- [Windows feedback request popups](#windows-feedback-request-popups) (`debloat.feedback`)
52+
4053
**Network**
4154

4255
- [Nagle's algorithm (TCP no-delay)](#nagles-algorithm-tcp-no-delay) (`network.nagle`)
@@ -664,6 +677,52 @@ Every setting here is managed via the Settings window. Toggle **Monitor** to hav
664677
**Reversible via.** Delete EnableCdp from HKLM\SOFTWARE\Policies\Microsoft\Windows\System to restore the Windows default.
665678

666679

680+
### Inking & typing personalization
681+
682+
`privacy.inking`   **Recommended:** Disabled (privacy)
683+
684+
**What it does.** Windows building a personal dictionary from your handwriting samples and contact names to improve suggestions -- and uploading some of it. Covers the master AcceptedPrivacyPolicy opt-in plus implicit ink collection and contact harvesting. (The typing-text side is the separate 'Typing / input insights' toggle on the Windows AI tab.)
685+
686+
**Why you'd change it.** It's a data-collection feature; turning it off stops the harvesting. Autocorrect still works, just less personalized.
687+
688+
**How it helps.** Stops handwriting/contact data collection. Minimal day-to-day impact.
689+
690+
**Per-scenario recommendation:**
691+
692+
| Scenario | Setting |
693+
|---|---|
694+
| Privacy-conscious | Disabled |
695+
| Heavy pen / handwriting user who wants better recognition | Enabled |
696+
| Typical keyboard user | Disabled |
697+
698+
**Risks.** Handwriting recognition and word suggestions become less personalized. No functional breakage.
699+
700+
**Reversible via.** Settings > Privacy & security > Inking & typing personalization (or set AcceptedPrivacyPolicy = 1).
701+
702+
703+
### Online (cloud) speech recognition
704+
705+
`privacy.speech`   **Recommended:** Disabled (privacy)
706+
707+
**What it does.** When enabled, Windows sends your voice audio to Microsoft's cloud for recognition (used by some dictation and voice features). Controlled by the per-user HasAccepted flag.
708+
709+
**Why you'd change it.** It's a privacy trade-off: your audio leaves the machine. Offline recognition / Voice Access keeps working without it.
710+
711+
**How it helps.** Keeps voice audio on-device. No functional loss for offline voice typing and Voice Access.
712+
713+
**Per-scenario recommendation:**
714+
715+
| Scenario | Setting |
716+
|---|---|
717+
| Privacy-conscious / don't use voice | Disabled |
718+
| Use cloud dictation heavily | Enabled |
719+
| Mixed use | Disabled -- offline recognition still works |
720+
721+
**Risks.** Cloud-powered voice features lose accuracy or stop working. Offline Windows speech / Voice Access is unaffected.
722+
723+
**Reversible via.** Settings > Privacy & security > Speech > Online speech recognition (or set HasAccepted = 1).
724+
725+
667726
### Tailored experiences
668727

669728
`privacy.tailoredexp`   **Recommended:** Disabled
@@ -686,6 +745,189 @@ Every setting here is managed via the Settings window. Toggle **Monitor** to hav
686745

687746
**Reversible via.** Set HKCU\Software\Microsoft\Windows\CurrentVersion\Privacy\TailoredExperiencesWithDiagnosticDataEnabled = 1 (Settings > Privacy & security > Diagnostics & feedback).
688747

748+
## Debloat (ads, nags & background bloat)
749+
750+
### "Finish setting up your device" nag
751+
752+
`debloat.finishsetup`   **Recommended:** Disabled
753+
754+
**What it does.** The full-screen / notification SCOOBE prompts that nag you to set up OneDrive, a Microsoft account, or a Microsoft 365 subscription -- and resurface after feature updates. Controlled by UserProfileEngagement + a ContentDeliveryManager notification flag.
755+
756+
**Why you'd change it.** It's a recurring nag screen, not a feature. Most users have already decided and don't want to be asked again.
757+
758+
**How it helps.** Suppresses the post-update 'finish setup' interruption.
759+
760+
**Per-scenario recommendation:**
761+
762+
| Scenario | Setting |
763+
|---|---|
764+
| Annoyed by the setup nag | Disabled |
765+
| Want Windows' setup reminders | Enabled |
766+
| Managed/clean setup | Disabled |
767+
768+
**Risks.** You won't be prompted to finish optional account/OneDrive setup. Some newer build variants add prompt types this doesn't fully cover.
769+
770+
**Reversible via.** Settings > System > Notifications > 'Suggest ways to get the most out of Windows' (or set ScoobeSystemSettingEnabled = 1).
771+
772+
773+
### Edge startup boost & background mode
774+
775+
`debloat.edge`   **Recommended:** Disabled
776+
777+
**What it does.** Two Microsoft Edge behaviors: 'startup boost' keeps Edge processes resident from boot, and 'background mode' keeps it running after every window is closed. Set via HKLM Edge enterprise policies that survive Edge updates.
778+
779+
**Why you'd change it.** On a machine where Edge isn't the daily browser, these keep 150-500 MB of Edge resident for no benefit.
780+
781+
**How it helps.** Edge stops pre-launching at boot and exits when you close it, freeing idle RAM/CPU. Edge still opens on demand.
782+
783+
**Per-scenario recommendation:**
784+
785+
| Scenario | Setting |
786+
|---|---|
787+
| Edge isn't your main browser | Disabled |
788+
| Edge is your daily driver and you want fast launches | Enabled |
789+
| Minimal background processes | Disabled |
790+
791+
**Risks.** Edge cold-starts a little slower (no prelaunch). Does NOT block Edge or WebView2 -- apps that embed WebView2 keep working. Policy write needs one UAC prompt.
792+
793+
**Reversible via.** Edge > Settings > System and performance (Startup boost / 'Continue running background extensions'), or delete the two Edge policy values.
794+
795+
796+
### File Explorer ad banners
797+
798+
`debloat.explorerads`   **Recommended:** Disabled
799+
800+
**What it does.** The 'sync provider notifications' in File Explorer -- the OneDrive / Microsoft 365 upsell banners shown in the navigation pane and status bar. Single per-user Explorer\Advanced flag.
801+
802+
**Why you'd change it.** They're advertising inside the file manager. Disabling them is purely cosmetic with no downside.
803+
804+
**How it helps.** Removes the promo banners from File Explorer.
805+
806+
**Per-scenario recommendation:**
807+
808+
| Scenario | Setting |
809+
|---|---|
810+
| Dislike ads in Explorer | Disabled |
811+
| Want OneDrive sync prompts | Enabled |
812+
813+
**Risks.** You won't see OneDrive/Office promotional banners. Genuine sync-status icons on files are unaffected.
814+
815+
**Reversible via.** File Explorer > View > Options > View tab > 'Show sync provider notifications' (or set ShowSyncProviderNotifications = 1).
816+
817+
818+
### Lock screen tips, fun facts & ads
819+
820+
`debloat.spotlight`   **Recommended:** Disabled
821+
822+
**What it does.** The Windows Spotlight overlay that shows 'fun facts', tips, and ad-like captions on the lock screen. Controlled by per-user ContentDeliveryManager flags.
823+
824+
**Why you'd change it.** Many users find the lock-screen captions and tips intrusive or ad-like.
825+
826+
**How it helps.** Removes the tips/ad overlay from the lock screen.
827+
828+
**Per-scenario recommendation:**
829+
830+
| Scenario | Setting |
831+
|---|---|
832+
| Dislike lock-screen tips/ads | Disabled |
833+
| Enjoy the Spotlight facts | Enabled |
834+
| Use a custom lock-screen image | Disabled |
835+
836+
**Risks.** Only suppresses the tips/ads overlay. If your lock-screen background is set to 'Windows Spotlight', switch it to Picture/Slideshow in Settings for a full opt-out.
837+
838+
**Reversible via.** Settings > Personalization > Lock screen (or delete the ContentDeliveryManager overlay values).
839+
840+
841+
### Start menu recommendations & recent files
842+
843+
`debloat.startrecommend`   **Recommended:** Disabled
844+
845+
**What it does.** The Start menu 'Recommended' section: AI/Iris-driven app and web suggestions plus the list of recently opened files. Per-user Explorer\Advanced flags.
846+
847+
**Why you'd change it.** The recommendations are often ads/suggestions, and the recent-files list is a privacy leak on a shared screen.
848+
849+
**How it helps.** Quiets the Recommended section and stops surfacing recently opened files in Start/jump lists.
850+
851+
**Per-scenario recommendation:**
852+
853+
| Scenario | Setting |
854+
|---|---|
855+
| Privacy on a shared screen | Disabled |
856+
| Rely on recent files in Start | Enabled |
857+
| Minimal Start menu | Disabled |
858+
859+
**Risks.** Recently opened files stop appearing in Start and jump lists. On Windows 11 Home the Recommended section can't be fully emptied -- this removes the suggestions/recents that it can.
860+
861+
**Reversible via.** Settings > Personalization > Start (toggles for recommendations and recently opened items), or delete the two Explorer\Advanced values.
862+
863+
864+
### Suggested content & silent app installs
865+
866+
`debloat.suggestedcontent`   **Recommended:** Disabled
867+
868+
**What it does.** Windows 11's 'suggested content' machinery: silently installed promo apps (the Candy-Crush-style installs), Start-menu app suggestions, and 'tips, tricks & suggestions' cards. All live under the per-user ContentDeliveryManager key.
869+
870+
**Why you'd change it.** These are ads and unsolicited installs, not features. They cost disk, clutter Start, and re-appear after major updates.
871+
872+
**How it helps.** Stops silent third-party app installs and removes Start/Settings suggestion cards.
873+
874+
**Per-scenario recommendation:**
875+
876+
| Scenario | Setting |
877+
|---|---|
878+
| Anyone who dislikes ads in the OS | Disabled |
879+
| Want Microsoft's app suggestions | Enabled |
880+
| Clean/minimal setup | Disabled |
881+
882+
**Risks.** You stop seeing Microsoft's app/feature suggestions. No functional impact. Windows may re-enable some after a feature update -- tick Auto-apply to hold it.
883+
884+
**Reversible via.** Settings > Personalization > Start and > Privacy > General toggles (or delete the ContentDeliveryManager values GamerGuardian set to 0).
885+
886+
887+
### Widgets / News and interests
888+
889+
`debloat.widgets`   **Recommended:** Disabled
890+
891+
**What it does.** The Windows 11 Widgets board (the left-edge weather button) that opens a web-connected MSN feed and fetches data in the background. Disabled machine-wide via the HKLM Dsh policy plus the per-user taskbar button flag.
892+
893+
**Why you'd change it.** It's a background web feed many users never open; the panel and its updater consume RAM/CPU and bandwidth.
894+
895+
**How it helps.** Stops the Widgets process/feed and removes the taskbar button. Frees idle resources.
896+
897+
**Per-scenario recommendation:**
898+
899+
| Scenario | Setting |
900+
|---|---|
901+
| Never use Widgets | Disabled |
902+
| Use the weather/news board daily | Enabled |
903+
| Latency-sensitive gaming | Disabled |
904+
905+
**Risks.** The Widgets board and its taskbar button disappear. The machine-wide policy write needs one UAC prompt.
906+
907+
**Reversible via.** Settings > Personalization > Taskbar > Widgets (or delete the Dsh\AllowNewsAndInterests policy value).
908+
909+
910+
### Windows feedback request popups
911+
912+
`debloat.feedback`   **Recommended:** Disabled
913+
914+
**What it does.** The periodic 'rate your experience' dialogs Windows pops. Controlled by the per-user Siuf\Rules\NumberOfSIUFInPeriod count (0 = never).
915+
916+
**Why you'd change it.** On fresh installs these can fire frequently and interrupt you. Most users never want to be asked.
917+
918+
**How it helps.** Stops the periodic feedback-request dialogs.
919+
920+
**Per-scenario recommendation:**
921+
922+
| Scenario | Setting |
923+
|---|---|
924+
| Don't want to be asked for feedback | Disabled |
925+
| Windows Insider who submits feedback | Enabled |
926+
927+
**Risks.** Windows stops prompting for feedback. You can still open Feedback Hub manually any time. Telemetry level is unaffected.
928+
929+
**Reversible via.** Settings > Privacy & security > Diagnostics & feedback > Feedback frequency (or delete NumberOfSIUFInPeriod).
930+
689931
## Network
690932

691933
### Nagle's algorithm (TCP no-delay)

src/GamerGuardian/App.xaml.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,17 @@ protected override void OnStartup(StartupEventArgs e)
122122
new TailoredExperiencesMonitor(),
123123
new CdpMonitor(),
124124
new ActivityHistoryMonitor(),
125+
new OnlineSpeechMonitor(),
126+
new InkingTypingMonitor(),
127+
// Debloat tab -- ads, nags, suggested content & background bloat:
128+
new SuggestedContentMonitor(),
129+
new LockScreenSpotlightMonitor(),
130+
new FinishSetupNagMonitor(),
131+
new StartRecommendationsMonitor(),
132+
new ExplorerAdsMonitor(),
133+
new FeedbackNagMonitor(),
134+
new WidgetsMonitor(),
135+
new EdgeBackgroundMonitor(),
125136
// System toggles:
126137
new PowerThrottlingMonitor(), // CPU/Power tab
127138
new FastStartupMonitor(), // Global gaming tab

src/GamerGuardian/Models/AppConfig.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,23 @@ public sealed class GlobalPreferences
135135
public ToggleSettingPref Cdp { get; set; } = new() { DesiredOn = true };
136136
public ToggleSettingPref ActivityHistory { get; set; } = new() { DesiredOn = true };
137137

138+
// ---- Privacy data-collection toggles (Privacy tab). Intuitive Enabled/Disabled;
139+
// DesiredOn=feature enabled, so the privacy-optimized default is DesiredOn=false. ----
140+
public ToggleSettingPref OnlineSpeech { get; set; } = new() { DesiredOn = false };
141+
public ToggleSettingPref InkingTyping { get; set; } = new() { DesiredOn = false };
142+
143+
// ---- Debloat toggles (Debloat tab). Intuitive Enabled/Disabled; DesiredOn maps
144+
// to the bloat feature being enabled, so the debloated default is DesiredOn=false.
145+
// Monitor=false by default: zero behavior change until the user opts in. ----
146+
public ToggleSettingPref SuggestedContent { get; set; } = new() { DesiredOn = false };
147+
public ToggleSettingPref LockScreenSpotlight { get; set; } = new() { DesiredOn = false };
148+
public ToggleSettingPref FinishSetupNag { get; set; } = new() { DesiredOn = false };
149+
public ToggleSettingPref StartRecommendations { get; set; } = new() { DesiredOn = false };
150+
public ToggleSettingPref ExplorerAds { get; set; } = new() { DesiredOn = false };
151+
public ToggleSettingPref FeedbackNag { get; set; } = new() { DesiredOn = false };
152+
public ToggleSettingPref Widgets { get; set; } = new() { DesiredOn = false };
153+
public ToggleSettingPref EdgeBackground { get; set; } = new() { DesiredOn = false };
154+
138155
// ---- System toggles (inverted Gaming/Default; DesiredOn=true = gaming) ----
139156
public ToggleSettingPref PowerThrottling { get; set; } = new() { DesiredOn = true };
140157
public ToggleSettingPref FastStartup { get; set; } = new() { DesiredOn = true };
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
using GamerGuardian.Models;
2+
using GamerGuardian.Services;
3+
using Microsoft.Win32;
4+
5+
namespace GamerGuardian.Monitors;
6+
7+
/// <summary>
8+
/// Microsoft Edge "startup boost" + "background mode" -- the pair that keeps
9+
/// Edge processes resident at boot and running after every window is closed,
10+
/// costing idle RAM/CPU on a machine where Edge isn't the daily browser. Set via
11+
/// the HKLM Edge enterprise policies (which survive Edge updates, unlike the
12+
/// in-app toggles). Intuitive Enabled/Disabled: <c>DesiredOn</c> = the
13+
/// boost/background behavior enabled; recommended OFF. HKLM write needs elevation.
14+
///
15+
/// <para>This does not block Edge itself -- it still launches on demand and
16+
/// WebView2-dependent apps keep working.</para>
17+
/// </summary>
18+
public sealed class EdgeBackgroundMonitor : IMonitoredSetting
19+
{
20+
public string Id => "debloat.edge";
21+
private const string PolicyKey = @"SOFTWARE\Policies\Microsoft\Edge";
22+
private const string StartupBoost = "StartupBoostEnabled";
23+
private const string BackgroundMode = "BackgroundModeEnabled";
24+
25+
public IEnumerable<DriftItem> CheckDrift(AppConfig config)
26+
{
27+
var pref = config.Global.EdgeBackground;
28+
var current = ReadCurrent();
29+
if (current is null) yield break;
30+
if (current.Value == pref.DesiredOn) yield break;
31+
32+
bool desired = pref.DesiredOn;
33+
yield return new DriftItem(
34+
SettingId: Id,
35+
DisplayKey: "debloat",
36+
DisplayLabel: "Debloat",
37+
Description: "Edge startup boost & background mode",
38+
CurrentValue: current.Value ? "Enabled" : "Disabled",
39+
DesiredValue: desired ? "Enabled" : "Disabled",
40+
AutoApply: pref.AutoApply,
41+
Apply: () => Task.Run(() => Apply(desired)),
42+
IsMonitored: pref.Monitor,
43+
RawBefore: current.Value ? "(default / Edge prelaunch on)" : "StartupBoostEnabled=0, BackgroundModeEnabled=0",
44+
RawDesired: desired ? "(policies deleted / Windows default)" : "StartupBoostEnabled=0, BackgroundModeEnabled=0");
45+
}
46+
47+
/// <summary>True (on) unless the startup-boost policy explicitly disables it.</summary>
48+
public static bool? ReadCurrent()
49+
{
50+
try
51+
{
52+
using var k = Registry.LocalMachine.OpenSubKey(PolicyKey, writable: false);
53+
return (k?.GetValue(StartupBoost) as int?) != 0;
54+
}
55+
catch { return null; }
56+
}
57+
58+
public static void Apply(bool on)
59+
{
60+
if (on)
61+
ElevatedRegistry.DeleteHklmMulti(new[]
62+
{
63+
(PolicyKey, StartupBoost),
64+
(PolicyKey, BackgroundMode),
65+
});
66+
else
67+
ElevatedRegistry.SetHklmMulti(new[]
68+
{
69+
(PolicyKey, StartupBoost, "REG_DWORD", "0"),
70+
(PolicyKey, BackgroundMode, "REG_DWORD", "0"),
71+
});
72+
}
73+
}

0 commit comments

Comments
 (0)