Signed voice-model artifacts for the wcpdr-agent Windows desktop assistant. The agent fetches models from this repo at first run via huggingface_hub; every artifact is verified against the Ed25519
signature below before it touches the runtime.
Asset layout
voice-models/
├── README.md # this file
├── manifest.json # canonical asset list (signed)
├── manifest.json.sig # Ed25519 signature over manifest.json
├── wake/
│ ├── hey_jarvis_v1.onnx # mirrored from openWakeWord v0.5.1 stock model
│ ├── hey_jarvis_v1.onnx.sig
│ ├── hey_alex_v1.onnx # custom-trained variants land here
│ ├── hey_alex_v1.onnx.sig
│ └── ...
└── piper/
├── en_US-amy-medium.onnx
├── en_US-amy-medium.onnx.sig
├── en_US-amy-medium.onnx.json # Piper voice metadata
├── es_MX-claude-high.onnx
├── es_MX-claude-high.onnx.sig
└── es_MX-claude-high.onnx.json
Signing key
All artifacts in this repo are signed with a single Ed25519 key dedicated to voice models. The key is separate from the MSI installer-update signing key so the two rotation calendars don't have to
coordinate, and a leak of one has narrower blast radius.
Public key fingerprint (SHA-256 of VOICE_MODEL_PUBLIC_KEY_B64, hex):
The matching public key value (base64-encoded raw 32 bytes):
KO8A6pii2YrmgFcTtGMX0cltdWjyfgo+vdB/VJTvyMk=
The wcpdr-agent build pipeline stamps this same value into the agent's signing module at compile time. Operators can verify their installed agent's bundled key matches by checking the agent's
--print-voice-pubkey output (when available); the printed value should hash to the fingerprint above. If it doesn't, the agent is from a different rotation cycle than the artifacts in this repo and won't
trust them — either re-sign artifacts with the agent's expected key (operators) or upgrade the agent (users).
Verification chain
Top-down chain of trust for any artifact in this repo:
Agent is built with VOICE_MODEL_PUBLIC_KEY_B64 baked into its signing module.
Agent fetches manifest.json + manifest.json.sig from this repo.
Agent verifies manifest.json.sig against the bundled public key — failure = refuse all artifacts in this manifest.
Agent reads asset entries from manifest.json (each entry has repo_path, sha256, signature_filename).
For each artifact the agent needs, it fetches the artifact + its .sig companion file.
Agent verifies SHA-256 against the manifest entry, then verifies the per-artifact Ed25519 signature.
Verified artifact gets atomically renamed into the agent's local cache and loaded into the runtime (Whisper / openWakeWord / Piper).
A failure at any step surfaces as voice_error{code: model_signature_invalid} IPC to the tray; voice mode stays off; no silent "load anyway" fallback.
License
This repo's contents are individually licensed:
wake/hey_jarvis_v1.onnx — bit-identical mirror of openWakeWord v0.5.1's hey_jarvis_v0.1.onnx (Apache-2.0).
piper/en_US-amy-medium.onnx and piper/es_MX-claude-high.onnx — upstream Piper TTS voices (MIT). Voice attribution lives in each .json metadata companion.
Re-distributable under the terms of each artifact's individual license.
Reporting a compromised key
If you have evidence the signing key has leaked, contact the wcpdr-agent maintainers directly. Do not include the leaked key value in any message — describe the suspected leak vector (where you saw it,
when, who has access) and we'll initiate the rotation procedure.
The wcpdr-agent source repository is private; if you don't have access, route the report through your wcpdr point of contact. Once a leak is confirmed, the maintainers rotate per the agent's internal
voice-models runbook and re-sign every artifact in this repo within 24 hours. A new agent release tag (with the new public key baked in) follows on the same day.