v0.12.3
October 29, 2026 Miru Agentv0.12.3 upgrades the Device API to v0.2.4, which lets on-device applications say who reported a calibration and report calibrations as CSV.
Device API v0.2.4 changelog »
Features
POST /v0.2/calibrationsnow accepts an optionalreported_by, the person who reported the calibration, and the agent sends it to Miru with the calibration; calibrations queued on the device before the upgrade upload without onePOST /v0.2/calibrationsnow acceptscsvas thecontent.format
v0.12.2
October 27, 2026 Miru Agentv0.12.2 makes provision fail on a machine that is already provisioned, so a script can no longer mistake a re-run for a successful provision.
Breaking changes
miru-agent provisionnow exits with status1when the machine is already provisioned, instead of printing “Device is already provisioned” and exiting0without contacting Miru
v0.12.1
October 27, 2026 Miru Agentv0.12.1 makes refused uploads easier to diagnose by logging the storage provider’s explanation of the error.
Improvements
- When a bucket refuses an upload, the agent’s log now includes the provider’s error message and details, such as which account lacked which permission on Google Cloud Storage, instead of only the error code
v0.12.0
October 26, 2026 Miru Agentv0.12.0 allows on-device applications to report calibrations to Miru. Calibration reporting is added in Device API v0.2.3.
Device API v0.2.3 changelog »
Features
- Added
POST /v0.2/calibrationsto the Device API, which records a calibration for a component of the device and returns itsreport_id - The agent saves each calibration on the device and uploads it once Miru is reachable, so calibrations reported while offline aren’t lost
- Uploads now carry each file’s modification time with the device’s UTC offset, so file rules with
upload.timezone: devicerender upload paths in the device’s local time - Uploads now resume across retries and restarts: each upload is created in Miru once, and a multipart upload continues from the parts that already landed, so a restart or power loss loses at most one part
Improvements
- Uploads to Google Cloud Storage buckets now use the same upload client as Amazon S3 buckets, which removes the agent’s separate Google Cloud dependencies
- A failed upload attempt that ran for 30 minutes or more, such as a long upload whose credentials expired, is now retried without counting against its retry budget, so long uploads are no longer dropped after about 30 hours
- An upload that keeps failing is now dropped 7 days after the agent queued it, whatever the error; before, only network errors had this limit and other failures were retried up to 30 times
Fixes
- Uploads now stream from the file instead of loading it into memory, so large files no longer risk exhausting memory and crash-looping the agent on low-memory devices
- A stalled upload now fails after 60 seconds without progress and is retried without counting against its retry budget, instead of waiting out a deadline that grew with the file’s size (about 23 hours for a 5.4 GB file)
v0.11.1
October 9, 2026 Miru Agentv0.11.1 upgrades the Device API to v0.2.2, which exposes file rules to on-device applications.
Device API v0.2.2 changelog »
Features
- Added
GET /v0.2/file_rules/{id}to the Device API; if the rule isn’t stored on the device yet, the agent fetches it from Miru - Releases returned by the Device API now include
file_rule_idsandos GET /v0.2/versionnow includesapi_release_version, the full Device API version the agent serves
v0.11.0
October 9, 2026 Miru Agentv0.11.0 adds Windows support. The agent installs from a signed MSI, runs as a Windows service, and serves the Device API to applications on the device over loopback TCP.
Features
- Added Windows support for Windows 11 (x64), see supported platforms
- Each release now includes a signed MSI installer,
miru-agent-<version>.msi, and a signedmiru-agent.exe - The agent runs as the Windows service
miru-agentunder the virtual accountNT SERVICE\miru-agent, with no administrator rights, and restarts automatically on failure - The Device API is served on
127.0.0.1:6478and requires a bearer token that changes each time the agent starts; the agent writes the port and token to%ProgramData%\Miru\device-api\device-api.json - The installer creates the
Miru Agent Usersgroup whose members can call the Device API and read configs deployed to%ProgramData%\Miru\configs; see file system access
- Each release now includes a signed MSI installer,
- Devices now report their operating system, CPU architecture, hostname, OS version, and kernel version when provisioned or reprovisioned, and report changes to them on later syncs
Improvements
- On Linux, the systemd unit now applies additional hardening directives (
LockPersonality,RestrictNamespaces,SystemCallArchitectures=native,ProtectClock, andProtectKernelLogs)
Fixes
- On Linux,
/var/lib/miruis now mode0700, so other local accounts can no longer read the agent’s state, including its access token - On Linux,
/var/log/miruis now mode0750, to restrict access to the agent’s log files to themirugroup - The agent now exits with status
1when it fails to start, sosystemctl status mirureportsfailedinstead ofinactive - The agent now stops with an error instead of crashing when it can’t open its log file
v0.10.3
September 17, 2026 Miru Agentv0.10.3 connects to the MQTT broker over TLS on port 443 instead of 8883, so devices behind firewalls that only allow outbound 443/HTTPS traffic can maintain their real-time connection to the control plane.
Improvements
- The agent now maintains its real-time MQTT connection over TLS on port
443instead of8883, so it works on networks that only permit outbound443/HTTPS traffic
v0.10.2
September 6, 2026 Miru Agentv0.10.2 adds provision --check so fleet automation can tell whether a device is already provisioned without minting a token, and stops retrying failed retention deletes forever.
Features
- Added
provision --checkto report whether the device is already provisioned via exit code, without contacting the control plane - Retention file rule delete jobs now stop after 10 failed attempts instead of retrying forever, leaving the file on disk
Fixes
- Fixed a bug where a backward clock step could stall the upload retry queue
v0.10.1
August 12, 2026Features
- Added support for the latest file rule capabilities, including retention-only rules and a configurable delay period before deletion
Fixes
- Fixed a bug where failing to shut down one component of the agent would block other unrelated components from gracefully shutting down
- Upload failures are more robust to network connection errors by no longer counting them against a file upload’s retry budget for a given upload
v0.10.0
July 20, 2026 Miru Agentv0.10.0 introduces data uploads. The agent can now upload files from your devices directly to your own cloud storage bucket: when an upload rule matches files on a device, the agent streams them straight to your AWS S3 or GCS bucket—your data never passes through Miru.
Reading files for upload may require granting the miru user read access to the source paths. To learn more, visit the data uploads documentation.
Features
- Added data uploads: the agent scans for files matching an upload rule’s source glob pattern and uploads them to your configured AWS S3 or GCS bucket
Fixes
- Send an immediate heartbeat on SSE connection opens so that applications can immediately determine if the connection is healthy
- Redact the MQTT password in logs to prevent credential leakage
- Preserve a deployment’s dirty flag when resetting retry state on startup
- Create device RSA keys with
0600/0640permissions without achmodrace window
v0.9.0
May 12, 2026 Miru Agentv0.9.0 introduces provisioning tokens as the standard programmatic device-provisioning mechanism, replacing the legacy API key flow.
To learn more, visit the provisioning tokens documentation.
Breaking changes
- The legacy provisioning script only supports provisioning
miru-agentversions that precedev0.9.0; use provisioning tokens formiru-agentversionsv0.9.0or later
Features
- Added
provisionandreprovisionsubcommands for enrolling and re-enrolling devices using provisioning tokens - Upgrading the
miru-agentpackage now automatically resets the on-device state so that reprovisioning is no longer required to upgrade themiru-agentpackage
Fixes
- Resources fetched from on-device applications via the Device API are now fetched from the Miru control plane if not found locally
- All network communications are now restricted to
mirurobotics.comand its subdomains (loopback domains such as127.0.0.1are permitted for testing) - Fixed a Debian
postinstfailure (useradd: group miru exists) on systems withUSERGROUPS_ENAB=yes, and added atmpfiles.dentry so/srv/miruis recreated on boot - Resolved a
rustls-webpkisecurity advisory by routing MQTT TLS throughnative-tlsinstead ofrustls - Fixed a
usizeunderflow in cache pruning that, in release builds, could wipe all valid cache entries after invalid entries were removed
v0.8.1
May 7, 2026v0.8.1 is a bug fix release that restores MQTT command delivery after transient reconnects to the MQTT broker. Devices now correctly re-subscribes to command topics on every successful reconnect, preventing long-lived “connected but not receiving commands” states.
Fixes
- Re-subscribe to MQTT sync and ping command topics on every successful
ConnAckso inbound commands continue working after auto-reconnects
v0.8.0
April 12, 2026 Miru Agentv0.8.0 allows config instances to be written to paths outside of the /srv/miru/config_instances/ directory—any valid file system path is now supported. Configs deployed to paths outside of the /srv/miru directory require additional file system permissions to be granted to the miru user.
To learn more, visit the file system access documentation.
Breaking changes
- Removed
ProtectSystem=strictandProtectHome=truefrom the default systemd unit to allow writing config files to arbitrary absolute paths if desired
Features
- Config instances can be deployed anywhere on the file system, not just in the
/srv/miru/directory - Deployments being removed now transition through an intermediate
removingstatus when removal begins
Fixes
- Fixed graceful shutdown handling when SSE streams are active
- Scope cooldown periods to be per-deployment so that new deployments are not unnecessarily delayed by other deployment failures
Improvements
- Default all file system write operations to atomic mode for improved reliability
v0.7.2
September 17, 2026 Backport of the MQTT port-443 change to the v0.7 line. Miru Agent v0.7.2 connects to the MQTT broker over TLS on port 443 instead of 8883 so devices behind firewalls that only allow outbound 443/HTTPS traffic can maintain their real-time connection, and hardens the MQTT TLS stack.
Fixes
- Moved the MQTT TLS stack from
rustlstonative-tls, resolving the knownrustls-webpkisecurity advisories RUSTSEC-2026-0098, RUSTSEC-2026-0099, and RUSTSEC-2026-0104
Improvements
- The agent now maintains its real-time MQTT connection over TLS on port
443instead of8883, so it works on networks that only permit outbound443/HTTPS traffic
v0.7.1
April 7, 2026v0.7.1 adds YAML support and Server-Sent Events (SSE) streaming to the Miru Agent. On-device applications can now receive real-time deployment lifecycle notifications. This release also upgrades the Device API to v0.2.1.
Device API v0.2.1 changelog »
Features
- Added YAML support for configuration files
- Added Server-Sent Events (SSE) streaming via
GET /v0.2/eventsfor real-time deployment lifecycle notifications
v0.7.0
March 13, 2026v0.7.0 upgrades the Miru Agent to Device API v0.2.0, adding deployment-pipeline visibility for on-device applications and improving deployment reliability under transient failures.
Device API migration guide »
Breaking changes
- Upgraded to Device API
v0.2.0, visit the v0.2.0 changelog for more details
Features
- Deployments are guaranteed to be atomic—all config instances for a deployment are written to the file system simultaneously or none of them are
- The agent now explicitly tracks
deployed_atandarchived_attimestamps on device when deployments are applied - Config instances deployed to the device’s file system are now identical (indents, spacing, etc.) to config instances edited in the config editor
Improvements
- The agent immediately retries transient network connection errors three times before entering a cooldown period
- Improved config instance caching logic to reduce network calls during sync cycles
Fixes
- Fixed deployment retry logic to eagerly retry failed deployments instead of waiting for the polling interval to expire (occasionally leaving deployments stuck in a
queuedstate) - Fixed deployment cooldown handling so retry windows are reported and cleared correctly
- JWT tokens are now redacted from debug outputs
v0.6.1
January 22, 2026Fixes
- The
miru-agent --installcommand now correctly returns a non-zero exit code on failure, instead of0
Agent install script update
December 8, 2025Improvements
- Agent install script now runs
sudo chown -R miru:miru /srv/miruto prevent any permissions issues encountered if the/srv/mirudirectory has previously been created with the wrong permissions
v0.6.0
October 19, 2025v0.6.0 adds support for installing the agent over poor internet connections, ensuring reliable provisioning on bandwidth-constrained devices.
Read the full documentation »
Features
- Poor connectivity installations of the Miru Agent are now supported
v0.5.1
September 17, 2025Fixes
- Fixed device provisioning script
- Fixed a critical bug where configuration files could go missing if multiple configuration files were queued for deployment while the agent was offline
v0.5.0
September 5, 2025 First release with Device API v0.1.0 endpoints, MQTT-based real-time sync, and device session management. Establishes the core on-device integration surface.Features
- Added agent version info to device and server updates
- Added device session ID for MQTT authentication
- Added MQTT ping/pong for connection health monitoring
- Added server APIs to sync the agent
- Added version argument to installation scripts
- Added agent information to client headers
- Pretty-printed JSON objects in logs
Fixes
- Activation script now restarts the agent on failures
- Activation script temporarily stops the agent during provisioning
- Fixed errant
unwrap()calls that could cause panics - Improved MQTT network connection error handling
- Fixed unnecessary file system writes for device patches

