Muninn is the optional companion service for Huginn devices. It runs on an authorized computer, connects through an explicitly declared local transport, and provides a clear local interface for device health, configuration, supported mode controls, and auditable results.
Muninn is not a remote shell, generic USB scanner, or universal hardware adapter. A cable, nearby device, or network endpoint does not grant a capability. Every transport and action must be declared, authenticated where appropriate, and tested against a supported Huginn board profile.
| Huginn | Muninn |
|---|---|
| Device firmware, board profiles, recovery images, release evidence, and browser flasher | Containerized companion service, local control experience, authorized device connection, and presentation of typed state |
| Owns board-native execution and safety behavior | Owns host-side connection management and user-facing workflows |
| Publishes the versioned device protocol | Implements compatible protocol clients and reports capability results |
The first foundation includes a typed Rust state model, a containerized local CLI foundation, automated formatting/test/container checks, and documentation for the desktop UI and USB contract. It intentionally does not open serial ports or claim to control a device before Huginn publishes the matching protocol.
- Connect to one explicitly selected Huginn device transport.
- Read and display device identity, firmware version, health, and declared capabilities.
- Show typed job state and results without adding unsupported hardware control.
- Keep all configuration local and out of source control.
The first flashable Huginn firmware and recovery evidence remain the priority. Muninn is provisioned now so its companion boundary and documentation can grow without mixing host-side code into the firmware repository.
Muninn consumes Huginn's versioned protocol contract. Until a standalone
package is needed, the canonical schemas remain in Huginn under protocol/v1.
Changes that require both repositories must update the compatibility notes and
be tested against a declared Huginn release.
| Path | Purpose |
|---|---|
crates/muninn-core |
Typed session, transport-selection, identity, and capability state. |
crates/muninn-cli |
Container-ready local companion entry point. |
docs/desktop-ui.md |
Human-facing desktop experience and screen model. |
docs/usb-transport-contract.md |
Required Huginn-to-Muninn USB contract before transport code exists. |
Dockerfile |
Non-root container foundation for local companion deployment. |