agent troubleshooting
Common issues and how to resolve them.
log locations
| log | path | contents |
|---|---|---|
| Service | C:\ProgramData\Owlette\logs\service.log | Main service operations, Firebase sync, command execution |
| Service stdout | C:\ProgramData\Owlette\logs\service_stdout.log | NSSM-captured stdout from the service runner |
| Service stderr | C:\ProgramData\Owlette\logs\service_stderr.log | NSSM-captured stderr from the service runner |
| GUI | C:\ProgramData\Owlette\logs\gui.log | Configuration GUI operations |
| Tray | C:\ProgramData\Owlette\logs\tray.log | System tray icon operations |
| Pairing | C:\ProgramData\Owlette\logs\pairing_debug.log | Device-code pairing and token setup |
| Self-update installer | C:\ProgramData\Owlette\logs\installer_update.log | Inno Setup log written during remote agent updates |
| Interactive installer | Path passed with /LOG=... | Inno Setup log for manual installs; no fixed ProgramData installer log is written by default |
Main shared-logger files use rotating file handlers: 10 MB per file, 5 backups. tmp/status_writer.log rotates at 100 KB with 2 backups, and pairing_debug.log uses plain writes. Old main logs are auto-deleted after 90 days by default.
debug mode
Run the service in debug mode to see real-time console output:
cd C:\ProgramData\Owlette\agent\src
python owlette_service.py debugRequires Administrator
Debug mode must be run from an elevated command prompt.
common issues
agent won't start
Symptoms: Service fails to start, or starts and immediately stops.
Check:
- Run in debug mode to see the error:
cd C:\ProgramData\Owlette\agent\src python owlette_service.py debug - Check
service.logfor startup errors. - Verify Python is installed:
C:\ProgramData\Owlette\python\python.exe --version. - Verify
C:\ProgramData\Owlette\config\config.jsonis valid JSON.
Common causes:
- Corrupt
config.json: repair it, or move it aside and re-run pairing so the agent can create a fresh config. - Missing packaged files or Python dependencies: repair or reinstall the agent.
- Broken service registration after a failed upgrade: rerun the packaged repair flow or reinstall the service.
agent shows offline in dashboard
Symptoms: Machine shows offline (red/grey) despite the service running.
Check:
- Verify service is running:
sc query OwletteService. - Check
service.logfor Firebase connection errors. - Verify internet connectivity.
- Check firewall rules for outbound HTTPS (port 443) to the configured API host (
owlette.appordev.owlette.app) and Firebase services. - Verify
firebase.site_idinC:\ProgramData\Owlette\config\config.json.
Common causes:
- No internet: The agent keeps running locally but cannot update Firestore.
- OAuth token expired: Check for token refresh errors in
service.log; the agent should auto-refresh when the stored refresh token is valid. - Wrong site_id: The config is paired to a different dashboard site.
- Firebase disabled: Check
firebase.enabledistrueinconfig.json. - Heartbeat has not refreshed yet: Presence and metrics use an adaptive interval: about 5 seconds with the GUI open, 30 seconds when monitored processes are active, and 120 seconds when idle.
"agent not authenticated" error
Symptoms: Log shows "Agent not authenticated - no refresh token found".
Cause: The agent's stored OAuth tokens are missing or corrupt.
Fix:
- Delete the token file and re-pair:
del C:\ProgramData\Owlette\.tokens.enc - Run the pairing flow:
C:\ProgramData\Owlette\python\python.exe C:\ProgramData\Owlette\agent\src\configure_site.py - At
press Enter to open the pairing page in your browser, press Enter only if you want the local browser, or leave it open and enter the pairing phrase from another device. - Wait for authorization to complete, then restart the service.
If pairing fails before authorization completes, check C:\ProgramData\Owlette\logs\pairing_debug.log.
processes not auto-restarting
Symptoms: Configured processes crash but are not restarted.
Check:
- Verify
launch_modeisalways, orscheduledwith the current time inside a configured schedule window. - Check if the
relaunch_attemptslimit has been reached. The counter resets on manual restart. - Verify the
exe_pathexists and is correct. - Check
service.logfor launch errors. - Check
time_delayandtime_to_initif restarts are delayed after a failure.
Common causes:
- Executable not found: Launch fails,
process_launch_failedis logged, and anexe_missingalert may be sent. - Relaunch limit reached: The reboot prompt should have appeared.
- Permission error: Service may not have access to the executable path.
- User-session launch issues: Managed launches use
CreateProcessAsUserandprocess_launcher.py; check service/session token errors inservice.log.
When the executable is missing, the service logs process_launch_failed and sends an exe_missing alert with suggested sibling paths when it can find likely replacements. The dashboard toast can open the process edit dialog with a suggested path pre-filled.
connectionmanager states
The agent's connection to Firestore follows a state machine. Check service.log for the current state:
| state | meaning | action |
|---|---|---|
DISCONNECTED | No connection, not trying | Will attempt on next cycle |
CONNECTING | Actively establishing connection | Wait |
CONNECTED | Online and syncing | Normal operation |
RECONNECTING | Lost connection, retrying | Automatic retry |
BACKOFF | Too many failures, waiting | Exponential backoff, up to 1 hour |
FATAL_ERROR | Fatal-ish auth or site-access error with long-backoff retry | Restore site access or re-pair if credentials/site membership are invalid |
Fatal-ish errors are not a permanent terminal state; the connection manager keeps retrying with long backoff while you restore access or re-pair.
If stuck in BACKOFF:
- Check internet connectivity.
- Verify Firebase project is accessible.
- Wait for the automatic retry. Circuit-breaker recovery probes run after about 5 minutes, and repeated failures can stretch retry backoff up to 1 hour.
high cpu/memory usage
Symptoms: The owlette service itself uses excessive resources.
Normal usage: ~20-50 MB RAM, <1% CPU.
If excessive:
- Check if debug logging is enabled.
- Look for rapid reconnection loops in
service.log. - Verify no circular config updates; hash tracking should prevent feedback loops.
- Check whether the GUI is open. Metrics and heartbeat uploads run about every 5 seconds while the GUI is active, 30 seconds while processes are active, and 120 seconds when idle.
gui won't open
Symptoms: Clicking open owlette from tray does nothing, or GUI crashes immediately.
Check:
- Look at
gui.logfor errors. - Verify GUI file exists:
C:\ProgramData\Owlette\agent\src\owlette_gui.py. - Try launching manually:
"C:\ProgramData\Owlette\python\pythonw.exe" "C:\ProgramData\Owlette\agent\src\owlette_gui.py" - Check for CustomTkinter import errors.
tray status looks stale
Symptoms: The tray status does not match the service or Firebase state.
Check:
- Confirm
OwletteServiceis running. - Inspect
C:\ProgramData\Owlette\tmp\service_status.json. - Check
C:\ProgramData\Owlette\tmp\status_writer.logfor status-file write decisions.
The service writes service_status.json immediately when important state changes and otherwise uses a 30-second refresh floor with content-change throttling. The status file has nested service, firebase, and health sections.
remote install or update fails
Symptoms: A dashboard deployment fails before the installer runs, or an agent self-update does not complete.
Check:
- Check
service.logfor the command result. - For self-updates, check
C:\ProgramData\Owlette\logs\installer_update.log. - Check whether
C:\ProgramData\Owlette\logs\update_in_progress.jsonexists after a failed self-update. - Verify the installer URL is reachable from the target machine.
Common causes:
- Missing
sha256_checksum:install_softwarerefuses to run remote installers without this 64-character SHA-256 checksum. - Missing
checksum_sha256:update_owletterefuses to self-update without this checksum field. - Missing
target_version: The agent can infer a version from the installer filename, but the command should sendtarget_versionexplicitly. - No interactive user session: Third-party installers run in the user's desktop session; a user must be logged in.
- Wrong silent flags or verify path: The installer may complete but fail post-install verification.
windows defender blocking
Symptoms: Agent files quarantined, service won't start after update.
Cause: The WinRing0 driver that LibreHardwareMonitor uses for CPU/GPU temperatures is extracted at runtime to C:\ProgramData\Owlette\python\python.sys (and pythonw.sys for the GUI host) and loaded as kernel service R0python / R0pythonw. Defender's antivirus flags it as VulnerableDriver:WinNT/Winring0 and may quarantine that .sys file. Process exclusions do not cover a kernel-driver file load, so the driver path itself must be excluded.
Fix: The installer adds these exclusions automatically (2.12.12+). If the agent predates that, or the exclusion did not register, add them manually from an elevated PowerShell prompt, then restart the service:
# the runtime-extracted WinRing0 kernel driver — this is the file Defender quarantines
Add-MpPreference -ExclusionPath "C:\ProgramData\Owlette\python\python.sys"
Add-MpPreference -ExclusionPath "C:\ProgramData\Owlette\python\pythonw.sys"
# the wrapper DLL + the python hosts (already added by the installer)
Add-MpPreference -ExclusionPath "C:\ProgramData\Owlette\python\Lib\site-packages\WinTmp"
Add-MpPreference -ExclusionProcess "C:\ProgramData\Owlette\python\python.exe"
Add-MpPreference -ExclusionProcess "C:\ProgramData\Owlette\python\pythonw.exe"If the driver was already quarantined, restore it from Windows Security → Protection history (or it re-extracts on the next temp read once excluded). Use a broader C:\ProgramData\Owlette exclusion only as a temporary diagnostic step after reviewing the security tradeoff.
service management commands
# Check service status
sc query OwletteService
# Start service
net start OwletteService
# Stop service
net stop OwletteService
# Restart service
net stop OwletteService && net start OwletteService
# View service configuration
sc qc OwletteServiceAll commands require Administrator privileges.
getting help
- Email us at support@owlette.app
- File a bug or feature request on GitHub