# Making Periodic Save Task Invisible ## Problem The `periodic_save_check.py` script shows a flashing console window every minute when run via Task Scheduler. ## Solution Use `pythonw.exe` instead of `python.exe` and configure the task to run hidden. --- ## Automatic Setup (Recommended) Simply re-run the setup script to recreate the task with invisible settings: ```powershell # Run from PowerShell in D:\ClaudeTools .\.claude\hooks\setup_periodic_save.ps1 ``` This will: 1. Remove the old task 2. Create a new task using `pythonw.exe` (no console window) 3. Set the task to run hidden 4. Use `S4U` logon type (background, no interactive window) --- ## Manual Update (If Automatic Doesn't Work) ### Option 1: Via PowerShell ```powershell # Get the task $TaskName = "ClaudeTools - Periodic Context Save" $Task = Get-ScheduledTask -TaskName $TaskName # Find pythonw.exe path $PythonExe = (Get-Command python).Source $PythonDir = Split-Path $PythonExe -Parent $PythonwPath = Join-Path $PythonDir "pythonw.exe" # Update the action to use pythonw.exe $NewAction = New-ScheduledTaskAction -Execute $PythonwPath ` -Argument "D:\ClaudeTools\.claude\hooks\periodic_save_check.py" ` -WorkingDirectory "D:\ClaudeTools" # Update settings to be hidden $NewSettings = New-ScheduledTaskSettingsSet ` -AllowStartIfOnBatteries ` -DontStopIfGoingOnBatteries ` -StartWhenAvailable ` -ExecutionTimeLimit (New-TimeSpan -Minutes 5) ` -Hidden # Update principal to run in background (S4U = Service-For-User) $NewPrincipal = New-ScheduledTaskPrincipal -UserId "$env:USERDOMAIN\$env:USERNAME" -LogonType S4U # Update the task Set-ScheduledTask -TaskName $TaskName ` -Action $NewAction ` -Settings $NewSettings ` -Principal $NewPrincipal ``` ### Option 2: Via Task Scheduler GUI 1. Open Task Scheduler (taskschd.msc) 2. Find "ClaudeTools - Periodic Context Save" in Task Scheduler Library 3. Right-click → Properties **Actions Tab:** - Click "Edit" - Change Program/script from `python.exe` to `pythonw.exe` - Keep Arguments: `D:\ClaudeTools\.claude\hooks\periodic_save_check.py` - Click OK **General Tab:** - Check "Hidden" checkbox - Under "Configure for:" select "Windows 10" (or your OS version) **Settings Tab:** - Ensure "Run task as soon as possible after a scheduled start is missed" is checked - Ensure "Stop the task if it runs longer than:" is set to 5 minutes 4. Click OK to save --- ## Verification Check that the task is configured correctly: ```powershell # View task settings $TaskName = "ClaudeTools - Periodic Context Save" Get-ScheduledTask -TaskName $TaskName | Select-Object -ExpandProperty Settings # Should show: # Hidden: True # View task action Get-ScheduledTask -TaskName $TaskName | Select-Object -ExpandProperty Actions # Should show: # Execute: ...pythonw.exe (NOT python.exe) ``` --- ## Key Changes Made ### 1. pythonw.exe vs python.exe - `python.exe` - Console application (shows command window) - `pythonw.exe` - Windowless application (no console, runs silently) ### 2. Task Settings - Added `-Hidden` flag to task settings - Changed LogonType from `Interactive` to `S4U` (Service-For-User) - S4U runs tasks in the background without requiring an interactive session ### 3. Updated Output The setup script now displays: - Confirmation that pythonw.exe is being used - Instructions to verify the task is hidden --- ## Troubleshooting **Script still shows window:** - Verify pythonw.exe is being used: `Get-ScheduledTask -TaskName "ClaudeTools - Periodic Context Save" | Select-Object -ExpandProperty Actions` - Check Hidden setting: `Get-ScheduledTask -TaskName "ClaudeTools - Periodic Context Save" | Select-Object -ExpandProperty Settings` - Ensure LogonType is S4U: `Get-ScheduledTask -TaskName "ClaudeTools - Periodic Context Save" | Select-Object -ExpandProperty Principal` **pythonw.exe not found:** - Should be in same directory as python.exe - Check: `Get-Command python | Select-Object -ExpandProperty Source` - Then verify pythonw.exe exists in that directory - If missing, reinstall Python **Task not running:** - Check logs: `Get-Content D:\ClaudeTools\.claude\periodic-save.log -Tail 20` - Check task history in Task Scheduler GUI - Verify the task is enabled: `Get-ScheduledTask -TaskName "ClaudeTools - Periodic Context Save"` --- ## Testing After updating, wait 1 minute and check the logs: ```powershell # View recent log entries Get-Content D:\ClaudeTools\.claude\periodic-save.log -Tail 20 # Should see entries without any console window appearing ``` --- **Updated:** 2026-01-17 **Script Location:** `D:\ClaudeTools\.claude\hooks\setup_periodic_save.ps1`