Skip to content

feat: zoicware AI parity easy wins + one-click Recommended gaming preset#25

Merged
carterscode merged 4 commits into
mainfrom
feat/ai-parity-easy-wins
Jun 3, 2026
Merged

feat: zoicware AI parity easy wins + one-click Recommended gaming preset#25
carterscode merged 4 commits into
mainfrom
feat/ai-parity-easy-wins

Conversation

@carterscode

@carterscode carterscode commented May 20, 2026

Copy link
Copy Markdown
Owner

Two-commit feature stack.

5dbe9a1 — closer parity with zoicware/RemoveWindowsAI

4 new monitored AI policy toggles + 4 existing monitors extended + AarSvc service. See commit body for the full registry-key list and the rationale for everything we deliberately skipped (TrustedInstaller, CBS surgery, file deletion, etc.).

a279aac — one-click Recommended gaming preset

New button at the top of the General tab. One click stages GamerGuardian's gaming preset across every setting it knows about: sets the recommended Want value, turns Monitor on, turns Auto-apply silently on. Idempotent — re-running after a future update only stages the new deltas; everything already in the recommended state is reported as "already correct" and skipped.

Preset scope:

  • 10 global gaming toggles (Game Mode on, Game DVR off, HAGS on, VRR on, gaming-tuned multimedia knobs, Mouse Precision off, etc.)
  • 9 Windows AI toggles (all off for gaming)
  • Power plan = High Performance (only if the well-known GUID is installed)
  • Every service with a ServiceDefinition.RecommendedTarget
  • Per-display HDR + RefreshRate (Maximum)

Deliberately NOT in the preset: Memory Integrity (security tradeoff), UWP AI app removal (irreversible without the Store), display resolution (too display-specific).

Each preset-induced change is logged to changes.log via ChangeLogger.LogPreferenceChange with source="preset".

Test plan

  • 143/143 unit tests passing (was 108 on main)
  • Debug + Release builds clean
  • docs/SETTINGS-REFERENCE.md regenerated from catalog; catalog<->doc consistency test passes
  • Dev-build CI green on 5dbe9a1 (parity commit)
  • Dev-build CI on a279aac (preset commit) — in progress
  • Smoke test:
    • Open Settings → General tab → click "Apply recommended"
    • Dialog reports N changes staged + M already correct
    • Pending count shows N
    • Click into each tab and verify the new state is staged
    • Click Cancel → reopen Settings → confirm nothing was committed
    • Repeat → click Apply → UAC fires once per actual change → all green in ApplyResults
    • Click "Apply recommended" again → dialog reports 0 changes (everything already correct)

🤖 Generated with Claude Code

…ns only

Adds the easy-win zoicware items that fit our existing pattern (registry
toggle, service disable) without crossing into the drastic ones we
deliberately skipped (TrustedInstaller manipulation, CBS package removal,
IntegratedServicesRegionPolicySet.json patching, voiceaccess.exe deletion,
custom Windows Update blocker package, modern-app replacement).

Four new monitored AI policy toggles:

  - SettingsSearchAiMonitor (ai.settingssearch)
      HKCU\SOFTWARE\Policies\Microsoft\Windows\Explorer\DisableSearchBoxSuggestions=1
      HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\TaskbarCompanion=0
      Hides AI search suggestions + the floating Copilot taskbar companion
      widget. Indexing itself is untouched.

  - AiActionsMonitor (ai.actions)
      HKLM\SYSTEM\ControlSet001\Control\FeatureManagement\Overrides\8\
        1853569164\EnabledState=1
        4098520719\EnabledState=1
      Disables right-click AI Actions surface via the documented
      FeatureManagement override hive (same feature IDs zoicware uses).

  - InputInsightsMonitor (ai.inputinsights)
      HKCU\Software\Microsoft\InputPersonalization\RestrictImplicitTextCollection=1
      HKCU\Software\Microsoft\input\Settings\InsightsEnabled=0
      Per-user opt-out of typing-data harvesting.

  - OfficeCopilotMonitor (ai.office)
      HKCU\Software\Microsoft\Office\16.0\{Word,Excel}\Options\EnableCopilot=0
      HKCU\Software\Microsoft\Office\16.0\OneNote\Options\Copilot\CopilotEnabled=0
      HKLM\SOFTWARE\Policies\Microsoft\office\16.0\common\ai\training\general\disabletraining=1
      Disables Copilot ribbon + model-training opt-out. ReadCurrent returns
      null if Office isn't installed -- no-op on Office-less machines.

Four existing monitors extended with the additional zoicware keys:

  - CopilotMonitor: blanks HKCU\...\Shell\BrandedKey\AppAumid (kills the
    Win+C launch alias) + sets HKCU\...\BackgroundAccessApplications\
    Microsoft.Copilot_8wekyb3d8bbwe\DisabledByUser=1 so the package can't
    background-launch even if the UWP is still installed.
  - RecallMonitor: adds HKLM\...\WindowsAI\TurnOffSavingSnapshots=1 as a
    third disable knob (some Windows builds respect this but not the older
    AllowRecallEnablement).
  - EdgeAiMonitor: adds HKLM\...\Edge\ComposeInlineEnabled=0 and
    AllowBrowsingWithCopilot=0 to cover the in-page Compose box and the
    broader "browse with Copilot" workflow.
  - NotepadPaintAiMonitor: adds HKCU\...\Applets\Paint\View\
    IsSignedUpForTargetingService=0 (opts out of Paint experiment targeting)
    and HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Paint\
    DisableImageCreator=1 (machine-wide Paint policy so the disable holds
    across user accounts and new Paint experiments).

ServiceCatalog adds AarSvc (Agent Activation Runtime Service), the per-user
agent runtime backing Copilot voice and certain shell AI surfaces. Fits the
existing service tab pattern; users would disable it alongside WSAIFabricSvc
after flipping the AI policy toggles. We disable the template service
definition (not sc.exe delete like zoicware) so the change is reversible
via Set-Service.

All defaults remain Windows-friendly: DesiredOn=true and Monitor=false on
every new pref, so existing config.json loads with zero behavior change.

SettingDocs gets Mechanism / VerifyCommand / ApplyCommand entries for every
new id; SettingDocsCatalog gets full rich-doc entries (What / Why /
HowItHelps / Scenarios / Recommended / Risks / ReversibleVia) so the in-app
Learn more expander and docs/SETTINGS-REFERENCE.md surface them the same
way as the original AI toggles. README updated to list the new toggles in
the Windows AI feature blurb.

Items deliberately not added (with rationale):

  - AI Voice Effects (HKLM audio registry) -- requires TrustedInstaller
    ownership change to write the audio key. Too invasive.
  - Voice Access disable -- requires deleting voiceaccess.exe via
    TrustedInstaller. Accessibility tool + file deletion = no.
  - Gaming Copilot disable -- zoicware modifies profileDataSettings.txt in
    the Game Bar package folder. JSON-in-app-data is fragile across updates.
  - Photos AI flags -- live in Settings.dat binary blob. Reading/writing
    LocalSettings.dat is undocumented and breaks across major Photos updates.
  - HKCR\.copilot deletion -- global file extension change, blast radius
    larger than the benefit.
  - sc.exe delete WSAIFabricSvc / sc.exe delete AarSvc -- we Disable
    startup type instead (reversible via Set-Service).
  - LastConfiguration key deletion -- can break Windows AI initialization
    on subsequent OS updates.

Tests: 133/133 passing (was 108). New tests cover GlobalPreferences having
all 9 AI toggles, every new settingId has Mechanism/Verify/Apply entries,
extended monitors list the new keys in their mechanism doc, AarSvc is in
ServiceCatalog. Catalog<->doc consistency test still passes after
regenerating SETTINGS-REFERENCE.md.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
}
return !allDisabled;
}
catch { return null; }
bool off = restrict == 1 && insights == 0;
return !off;
}
catch { return null; }
ikey.SetValue(InputSettingsVal, 0, RegistryValueKind.DWord);
}
}
catch { }
ikey.SetValue(InputSettingsVal, 0, RegistryValueKind.DWord);
}
}
catch { }
}
}
catch { /* HKCU writes shouldn't fail; swallow to keep apply pass alive */ }
catch { /* HKCU writes shouldn't fail; HKLM may UAC-fail and we swallow to keep the batch alive */ }
else
ElevatedRegistry.SetHklmDword(TrainingKey, TrainingVal, 1);
}
catch { }
else
ElevatedRegistry.SetHklmDword(TrainingKey, TrainingVal, 1);
}
catch { }
bool off = disable == 1 && companion == 0;
return !off;
}
catch { return null; }
advanced.SetValue(TaskbarCompanionVal, 0, RegistryValueKind.DWord);
}
}
catch { }
advanced.SetValue(TaskbarCompanionVal, 0, RegistryValueKind.DWord);
}
}
catch { }
Adds a "Apply recommended" button at the top of the General tab that
stages GamerGuardian's gaming-optimized preset across every setting it
knows about. One click = full setup: Want = recommended, Monitor on,
Auto-apply silently on.

Idempotent: re-running after a future GamerGuardian update that adds new
preset-managed settings only stages the deltas; everything already in the
recommended state is reported as "already correct" and skipped. Run-twice
returns SettingsChanged=0.

Scope (in the preset):
  - 10 global gaming toggles (Game Mode, Game DVR off, HAGS, VRR,
    System Responsiveness gaming, Network Throttling disabled, USB
    Selective Suspend disabled, Games Task Profile boosted, Mouse
    Precision off, Fullscreen Optimizations on)
  - 9 Windows AI toggles (all off: Copilot, Recall, Click-to-Do, Edge AI,
    Notepad/Paint AI, Settings Search AI, AI Actions, Input Insights,
    Office Copilot)
  - Power plan: High Performance (only if the well-known GUID is installed
    locally; custom plans are left alone)
  - Every service with a ServiceDefinition.RecommendedTarget set
  - Per-display HDR + RefreshRate (Maximum) -- AutoApply pinned on

Explicitly NOT in the preset (with rationale):
  - Memory Integrity / VBS: security toggle; some anti-cheat needs it on.
    Users flip it individually if they want.
  - UWP AI app removal (Microsoft.Copilot etc.): irreversible without the
    Microsoft Store. The policy toggle is enough to silence Copilot.
  - Display resolution: too display-specific to push a default.

UX: clicking the button mutates the draft (not the live config -- same
staged-apply pattern), bumps _pendingCount so Save&close doesn't
short-circuit, rebuilds the row collections so every tab reflects the
preset, then pops a summary dialog with the counts. Each change is logged
to changes.log via the standard ChangeLogger.LogPreferenceChange with
source="preset" so the audit trail is complete.

Tests: 10 new tests cover fresh-config full-apply, AI toggles all turn off,
MemoryIntegrity not touched, idempotence, partial-state minimal-delta,
service targets honored, multi-display HDR+refresh, null draft throws,
UWP removal stays opt-in, ChangeDescriptions matches SettingsChanged count.
143/143 passing (was 133).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@carterscode carterscode changed the title feat(ai): closer parity with zoicware/RemoveWindowsAI -- safe additions only feat: zoicware AI parity easy wins + one-click Recommended gaming preset May 20, 2026
Comment on lines +82 to +91
foreach (var def in ServiceCatalog.All)
{
if (def.RecommendedTarget is not { } target) continue;
if (!draft.Services.TryGetValue(def.Name, out var pref) || pref is null)
{
pref = new ServicePref();
draft.Services[def.Name] = pref;
}
Count(SetService(pref, $"Service: {def.DisplayName}", target, changes));
}
private static IDictionary<Guid, string> SafeListPlans()
{
try { return Monitors.PowerPlanMonitor.ListAvailablePlans(); }
catch { return new Dictionary<Guid, string>(); }
Comment on lines +960 to +965
catch (Exception ex)
{
System.Windows.MessageBox.Show(this, "Recommended preset failed: " + ex.Message,
"GamerGuardian", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Error);
return;
}
Comment on lines +105 to +113
foreach (var def in ServiceCatalog.All)
{
if (def.RecommendedTarget is not { } target) continue;
Assert.True(cfg.Services.ContainsKey(def.Name), $"Missing service pref entry: {def.Name}");
var pref = cfg.Services[def.Name];
Assert.Equal(target, pref.Desired);
Assert.True(pref.Monitor);
Assert.True(pref.AutoApply);
}
foreach (var def in ServiceCatalog.All)
{
if (def.RecommendedTarget is not { } target) continue;
Assert.True(cfg.Services.ContainsKey(def.Name), $"Missing service pref entry: {def.Name}");
Comment on lines +153 to +160
foreach (var pkg in WindowsAiAppCatalog.All)
{
if (cfg.WindowsAiApps.TryGetValue(pkg.PackageName, out var pref))
{
Assert.False(pref.DesiredRemoved,
$"Preset should never auto-stage UWP removal for {pkg.PackageName}");
}
}
…ion header

Three bugs surfaced by a user report on the v0.1.39 dev build:

1. The "Search box AI suggestions + taskbar companion" toggle had
   Auto-apply silently ticked, yet the drift popup kept firing every
   tick. Root cause: SettingsSearchAiMonitor.ReadCurrent used strict
   AND on (DisableSearchBoxSuggestions == 1 AND TaskbarCompanion == 0),
   but verifying on the user's machine showed:
     HKCU\...\Policies\...\Explorer\DisableSearchBoxSuggestions = 1
     HKCU\...\Advanced\TaskbarCompanion               = VALUE MISSING
   Explorer apparently ignores the non-standard TaskbarCompanion value
   name and never persists it. ReadCurrent kept reporting "on" because
   `companion == 0` was false (companion was null). Verify failed every
   tick -> 15-min backoff -> drift item promoted to the notification
   queue every cycle. Fix: treat companion as off when null OR 0; only
   companion == 1 counts as "still on". The primary DisableSearchBox-
   Suggestions value remains the authoritative signal.

2. The notification window's header was hard-coded "Display settings
   have drifted" -- a holdover from when only HDR/Refresh were
   monitored. With Windows AI, services, and global gaming all in the
   monitor list, the message was actively wrong for most drifts.
   Replaced with NotificationHeader.For(report) that picks a category-
   appropriate header based on the drift items' DisplayKey (global
   gaming / Windows AI / Windows service / Display / mixed-count
   fallback). Extracted into Services/NotificationHeader.cs so it can
   be unit-tested without standing up a WPF window.

3. MonitorService.TickAsync had a spurious `_store.Save(config)` after
   the CheckDrift loop. Nothing in the tick mutates config, so the save
   was a no-op -- except it raced with the user clicking Apply in
   Settings: if the user's save landed between MonitorService's Load
   and Save, MonitorService's save overwrote the user's prefs (silently
   dropping any newly-added AppConfig properties, e.g. the v0.1.39
   Windows AI prefs that don't exist in stale snapshots). This is why
   the user's config.json showed zero AI prefs even after they clicked
   Apply Recommended + Apply. Removed the save with a comment.

Tests: 10 new NotificationHeader tests cover empty/null report, single
category labeling (AI, service, display, global), pluralization, mixed-
category fallback, unknown-category graceful fallback. The fix to
SettingsSearchAi.ReadCurrent is verified manually against the user's
known-broken state -- a unit test would need registry mocking we don't
currently have. 153/153 passing (was 143). Release + Debug builds clean.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
fix: silent-apply popup + race-write + notification header
@carterscode carterscode merged commit b4643ac into main Jun 3, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants