self-update
The owlette agent can update itself remotely without physical access to the machine.
how it works
The self-update is handled by the service command handler in owlette_service.py:
- Receives an
update_owlettecommand from Firestore. - Requires
installer_urlandchecksum_sha256; readstarget_versionwhen provided and otherwise tries to infervX.Y.Zfrom the installer URL. - Rejects the command if another update marker is less than 10 minutes old.
- Checks for at least 500 MB of free disk space.
- Downloads the installer to
%ProgramData%\owlette\tmp\owlette-Update.exewith retry/backoff. - Verifies the file looks like a Windows executable and matches the supplied SHA-256 checksum.
- Writes
%ProgramData%\owlette\logs\update_in_progress.jsonso the next service start can report the update result. - Creates and runs an
OwletteUpdate_*scheduled task asSYSTEMwith highest privileges. The task launches the installer with/VERYSILENT /NORESTART /SUPPRESSMSGBOXES /ALLUSERS /LOG="<path>". - Creates an
OwletteRecovery_*scheduled task that waits about five minutes, checks whetherOwletteServiceis running, and starts it if needed. - On the next service start, checks the update marker, compares
agent/VERSIONwith the target version, reports success or failure to Firestore, and removes stale update/recovery tasks.
The service does not stop itself and run the installer inline. Task Scheduler owns the installer process so it can continue after the service stops.
triggering an update
from the dashboard
- Navigate to the machine in the dashboard.
- Click update owlette.
- Select the machines to update.
- Confirm the update.
The dashboard uses the current latest installer metadata automatically and sends an update_owlette command with the installer URL, expected SHA-256 checksum, and target version.
what gets preserved
| preserved | replaced |
|---|---|
| ProgramData configuration | Agent application files |
| Encrypted OAuth tokens | Bundled Python packages |
| Log files | Service wrapper files installed by the package |
| Cache and temporary data directories | Installer executable used for the update |
The installer upgrades in place and avoids deleting the ProgramData configuration, token, log, cache, and temp directories. It does not perform a separate config backup/restore step.
update command payload
{
"type": "update_owlette",
"installer_url": "https://firebasestorage.googleapis.com/.../Owlette-Installer-v2.1.8.exe",
"target_version": "2.1.8",
"checksum_sha256": "2f4c2f0e6d8f0c2f2a4f6f7a8b9c0d1e2f3a4b5c6d7e8f90123456789abcdef0",
"deployment_id": "deploy_abc123"
}Required fields:
| field | required | notes |
|---|---|---|
installer_url | yes | Download URL for the Windows installer. |
checksum_sha256 | yes | The command is refused without a checksum. |
target_version | recommended | Used for post-restart verification. If omitted, the agent tries to infer it from vX.Y.Z in the URL or records unknown. |
deployment_id | no | Passed through when updating command progress and completion. |
version verification
After the update completes:
- The service starts and reads the installed version from
agent/VERSION. - The startup check reads
%ProgramData%\owlette\logs\update_in_progress.json. - The agent compares the installed version with
target_version. - The command is marked completed or failed in Firestore.
- The next heartbeat reports
agent_version.
troubleshooting updates
update stuck
If the machine goes offline and does not come back:
- Check the machine physically if remote access is unavailable.
- Check
%ProgramData%\owlette\logs\service.log. - Check
%ProgramData%\owlette\logs\installer_update.log. - Check
%ProgramData%\owlette\logs\update_in_progress.jsonfor the old version, target version, command ID, and deployment ID. - Check for leftover
OwletteUpdate_*orOwletteRecovery_*scheduled tasks. - Start the service manually with
net start OwletteService.
version did not change
If the agent reports the same version after update:
- Review
%ProgramData%\owlette\logs\installer_update.logfor installer failures. - Confirm the installer URL was reachable from the target machine.
- Confirm the
checksum_sha256value matches the exact installer binary. - Confirm
target_versionmatches the version embedded in the installer.
rollback
To roll back to a previous version, trigger another update_owlette command that points to the older installer and includes that installer's SHA-256 checksum.
remote commands
The agent listens for commands from the web dashboard via Firestore. Commands are written as entries in a pending command map, executed by the agent, and mirrored into a completed command map as progress, completion, failure, or cancellation records.
agent troubleshooting
Common issues and how to resolve them.