troubleshooting
Cross-cutting troubleshooting guide for common issues across the entire owlette system.
agent won't connect to cloud
Symptoms: Machine shows offline in dashboard, agent logs show connection errors.
Check:
- Verify internet connectivity on the agent machine
- Check firewall rules — outbound HTTPS (port 443) must be allowed to
owlette.app,dev.owlette.app,*.googleapis.com,*.firebaseio.com, and the Cloudflare R2 endpoint used for roost chunks (usually*.r2.cloudflarestorage.com) - Check
C:\ProgramData\Owlette\logs\service.logfor specific errors - Verify
firebase.enabledistruein config.json - Verify
firebase.site_idmatches a site that exists in Firestore
Common errors:
| log message | cause | fix |
|---|---|---|
| "Agent not authenticated" | Missing or corrupt tokens | Re-register with a new code |
| "HTTP error 403" | Firestore rules blocking access | Verify security rules are deployed |
| "Token expired" | Refresh failed | Check refresh token in logs, re-register if needed |
| "Connection refused" | Firewall or proxy | Allow outbound HTTPS |
dashboard shows machine offline
Symptoms: Agent is running but dashboard shows offline.
- Check heartbeat age — If last seen was recently, the machine may be experiencing intermittent connectivity
- Check agent service:
sc query OwletteService(should show RUNNING) - Check ConnectionManager state in logs — look for BACKOFF or DISCONNECTED
- Verify site_id — Agent and dashboard must be looking at the same site
- Check Firestore directly — Go to Firebase Console → Firestore →
sites/{siteId}/machines/{machineId}→ check the machine document fieldsonline,lastHeartbeat,agent_version, andmetrics
processes not auto-restarting
- Verify
launch_modeisalways, orscheduledwith the current time inside a configured schedule window - Check if
relaunch_attemptslimit was reached (reboot prompt should appear) - Verify
exe_pathexists on the machine (INACTIVEstate means file not found) - Check agent logs for launch errors
- Verify the service is running and the main loop is executing (look for periodic log entries)
process won't launch after an app upgrade
Symptoms: A managed process shows INACTIVE, or the dashboard shows an executable-missing toast after software was upgraded or installed side-by-side.
- Open the dashboard toast or activity log entry with action
exe_missing. - Review the suggested paths. The agent scans nearby sibling directories for executables with the same filename.
- Use the toast's use path action, or open the process edit dialog manually and update executable path.
- Save the process. If launch mode is
always, the agent should launch it on the next monitoring pass. If launch mode isscheduled, it launches when the next matching schedule window opens. - If no suggestion appears, browse the machine for the new executable path and update the process manually.
oauth token issues
"agent not authenticated - no refresh token found"
The encrypted token file is missing or unreadable.
Fix: Re-pair the agent:
- Delete the token file:
del C:\ProgramData\Owlette\.tokens.enc - Run the pairing flow:
C:\ProgramData\Owlette\python\python.exe C:\ProgramData\Owlette\agent\src\configure_site.py - Authorize on the web page that opens, then restart the service
token refresh failing
Check service.log for refresh errors. Common causes:
- Machine ID mismatch — The machine was renamed since registration
- Token revoked — An admin revoked the token from the dashboard
- Network issue — Can't reach the refresh endpoint
deployment stuck
Symptoms: Deployment shows "downloading" or "installing" indefinitely.
- Check agent logs for download/install progress
- Verify the installer URL is accessible from the agent machine (test in browser)
- Check if the installation timed out (default: 40 minutes)
- For large installers on slow connections, the download may simply be slow
- Try cancelling and re-deploying
roost sync failed
- R2 configuration failed — Check web runtime logs for missing
R2_S3_ENDPOINT,R2_S3_ACCESS_KEY_ID, orR2_S3_SECRET_ACCESS_KEY. The endpoint should be reachable from the web app and agents over HTTPS. - Chunk upload or verification failed — Retry the upload from the roost page and confirm the agent machine can reach signed R2 URLs. A publish can fail if the version references chunks that were not uploaded or were rejected after hash verification.
- Target fanout stalled — Check
sites/{siteId}/roosts/{roostId}/target_state/{machineId}. Current target states includepending,downloading,assembling,committed,failed, andcancelled. sync_pullstuck or failed — Checkservice.logon the target machine forsync_pullerrors. If no target-state document appears, confirm the machine is online and has a pending command insites/{siteId}/machines/{machineId}/commands/pending.- Permission denied — The configured extract root may not be writable or may be outside the agent's allowed extract roots.
mfa issues
lost authenticator
Use one of your backup codes at the MFA prompt. Each code can only be used once.
no backup codes
Contact an admin to disable MFA on your account by clearing the mfaEnabled, mfaSecret, and mfaBackupCodes fields in your Firestore user document.
code not working
- Ensure your device's clock is synchronized (TOTP is time-based)
- Codes expire every 30 seconds — enter the current one
- Verify you're using the correct account in your authenticator app
cortex not responding
- No LLM key configured — Check Cortex settings for API key
- Invalid API key — Verify the key is correct and has credits
- Machine offline — Cortex checks machine status before executing tools
- Tool timeout — Some tools may take longer than 30 seconds; try again
- Rate limited — The API may be rate-limiting requests
email alerts not working
- Verify
RESEND_API_KEYenvironment variable is set in Railway - Check that the Resend API key is valid
- Verify
CRON_SECRETis configured for health check cron - Check Railway cron schedule is set:
*/5 * * * * - Send a test email from Admin Panel → Email Test
- Check spam/junk folders
dashboard performance issues
slow loading
- Cold starts (Railway Hobby plan) — Upgrade to Pro for no cold starts
- Large dataset — Many machines/processes increase Firestore reads
- Bundle size — Check
.next/staticoutput during build
real-time updates not working
- Check browser console for Firestore listener errors
- Verify Firebase config is correct
- Try hard refresh (Ctrl+Shift+R)
- Check if the Firestore quota has been exceeded
log locations
agent logs
| log | path |
|---|---|
| Service | C:\ProgramData\Owlette\logs\service.log |
| GUI | C:\ProgramData\Owlette\logs\gui.log |
| Tray | C:\ProgramData\Owlette\logs\tray.log |
| Pairing | C:\ProgramData\Owlette\logs\pairing_debug.log |
| Self-update installer | C:\ProgramData\Owlette\logs\installer_update.log |
| Interactive installer | Only where Inno Setup is launched with /LOG=<path>; use /LOG="C:\ProgramData\Owlette\logs\setup.log" to write a setup log there |
dashboard logs
| log | location |
|---|---|
| Build logs | Railway → Deployments → [deployment] → Logs |
| Runtime logs | Railway → Deployments → [latest] → Logs |
| Client errors | Browser → F12 → Console |
firestore logs
| log | location |
|---|---|
| Rule evaluations | Firebase Console → Firestore → Rules → Monitoring |
| Usage metrics | Firebase Console → Firestore → Usage |
| Auth events | Firebase Console → Authentication → Users |
debug mode
Run the agent in debug mode for detailed console output:
cd C:\ProgramData\Owlette\agent\src
python owlette_service.py debugRequires an elevated (Administrator) command prompt. Shows real-time logging of all service operations.
getting help
- Check the relevant section of this documentation
- Review agent logs and browser console for specific error messages
- Check the Firestore Data Model to verify data structure
- Open an issue on GitHub
- Email us at support@owlette.app
architecture
owlette uses a split control, state, and data plane. Cloud Firestore is the real-time state store and command queue, Next.js API routes handle authenticated control actions, and object storage carries large binaries plus roost chunks and version bodies. Agents and the dashboard do not maintain a direct persistent connection to each other; they coordinate through API routes, Firestore state, and signed storage URLs.
changelog
All notable changes to owlette are documented here. The format is based on Keep a Changelog and this project adheres to Semantic Versioning.