miloco v2026.7.17
Since v2026.7.3: 117 commits, 43 PRs, 321 files changed (+35,996 / −3,526).
🎯 New Features
- Hermes Agent compatibility layer (@n0tssss): establishes the
plugins/<runtime>/convention so miloco can host pluggable agent runtimes. - Dual-camera multi-channel dual-stream perception (@Ada-xia): each channel of a multi-lens camera is promoted to an independent first-class camera, with its own dual-stream perception per channel.
- Omni provider adapter + multi-model support (@Molly-3000): a protocol adapter layer lets omni target multiple model providers, selectable from a new settings UI; adds a native Gemini adapter with
media_resolutioncontrol and thinking-mode off. - Runtime
omni_fpshot-reload (@Molly-3000): change perception FPS live without rebuilding the engine, reloading models, or losing tracks;window_size-only changes also skip model reload. - Tasks promoted to a dedicated tab (@idootop): full task CRUD, a detail drawer, description editing, and an agent-guidance dialog, backed by new task-detail / description-edit APIs.
- Auto-managed scheduled-tasks toggle (@idootop): opt in/out of miloco's scheduler from both CLI and Web, backed by a shared
scheduler.enabledconfig contract and an admin scheduler-config endpoint. - Multiple IM notification channels for OpenClaw (@gao19970120): fan notifications out across several IM channels.
- Per-camera microphone toggle (@LeonJoeeee): hard mic-off semantics, per camera.
- Camera availability as tri-state metrics (@Ada-xia): availability split into three explicit states, with
in_use= the active set.
🧠 Perception / Omni Stability
- omni "can't recognize a registered member" fixed: registration now writes the real name into
meta.json, and orphan / storage-path drift is made observable to help diagnose the "no registered members" symptom (@ExWang). - When the identity gallery is empty, member matching is skipped and repeat recognition is slowed to save pointless omni spend (@ExWang).
- The perception "rest" toggle now persists across restart / re-auth instead of silently resetting (@ExWang).
- omni circuit breaker (@Zirconi); persistent event loop + async ONNX inference, fixing a thread leak (@HCl8).
- Perception logs narrowed to the cameras that actually triggered the event (@Molly-3000).
📷 Camera
- Unperceived devices gain a manual-refresh action, a reason bubble when a toggle can't be enabled, and the room label moved next to the device name (@ExWang).
- Manual-refresh spinner fixes: it reflects only the current refresh (no longer borrowed by other list reloads), persists until the list actually updates, and its reason is announced to screen-reader / keyboard focus (@ExWang).
⚙️ Improvements: CLI / Install / Web / Version
- Device spec output grouped by service and annotated with each service's description (@HCl8).
- CLI treats only negative MIoT result codes as device-control failure; positive codes no longer misreport (@LeonJoeeee).
- Install: perception-model extraction moved earlier, and missing / corrupt models now hard-fail instead of degrading silently (@Zirconi); proxy-environment install failure fixed (@zivyuan).
- Schedule migration (@Zirconi).
- CoreML temp-model-file leak fixed — unbounded
$TMPDIRgrowth replaced with a bounded reuse cache (@ExWang). - Version numbers unified across all modules — front/back-end share one source, real base + retained commit (@yangbaofu007).
- Timezone: added to the
config-setwhitelist with a UTC-deploy warning; all agent-visible times anchored to the home deploy timezone (@LeonJoeeee). - Stale queued messages expire by TTL before sending; today's perception log injected into agent context; miloco agent sessions reset on home switch (@idootop).
🔒 CI / Supply Chain
- OpenGrep install avoids GitHub API anonymous rate limiting, dedups the install step, and asserts architecture (@ExWang).
📚 Docs
- Knowledge base realigned with post-2.0-open-source code and converged to spec (@hlccd).
- Perceive-logs usage and auth info corrected in the user guide (@feng183043996); timezone configuration chapter added, host-timezone-first (@LeonJoeeee); README header consolidated into a centered div with line-folded badges (@idootop).
🙏 Acknowledgements
Special thanks to @n0tssss for landing the Hermes Agent compatibility layer — the biggest change in this release.
Thanks as well to everyone else who contributed: @Ada-xia, @Molly-3000, @idootop, @LeonJoeeee, @ExWang, @HCl8, @Zirconi, @gao19970120, @yangbaofu007, @zivyuan, @hlccd, @feng183043996