Maylo Voice Assistant
v0.1.0Offline-first voice assistant stack for macOS (Wake word + VAD recording + local Whisper ASR + OpenClaw agent response + offline TTS via macOS say). Use to i...
Security Scan
OpenClaw
Suspicious
medium confidencePurpose & Capability
The skill description (offline macOS assistant) aligns with the code: wake-word (openWakeWord), VAD, local Whisper ASR (faster-whisper), an OpenClaw responder bridge, macOS 'say' TTS, and a web UI. However the registry lists no required binaries or credentials, while the code clearly expects/uses external binaries and services: the 'openclaw' CLI is invoked from bridge/milo_responder_openclaw.py, 'say' is used for TTS, openssl is used to generate certs in run_web_https.sh, and uvicorn is launched for the web UI. The metadata omission (no required binaries) is an incoherence and reduces transparency about prerequisites.
Instruction Scope
SKILL.md instructs copying the app, creating a venv, installing requirements, and running scripts — which is consistent with the code. But there are notable scope issues: (1) Despite 'offline-first' wording, openwakeword.utils.download_models() (in jarvis_minimal_test.py) and model loading (WhisperModel) may download pretrained models or require network access during setup or first run; pip install also downloads packages. (2) The web UI serves audio over WebSocket and the run_web_https.sh defaults to binding 0.0.0.0 with a self-signed cert, exposing the audio upload endpoint to the LAN; that is expected for the UI but is a privacy/network exposure you should explicitly consider. The runtime instructions do not call out these network interactions clearly.
Install Mechanism
There is no centralized install spec in registry (instruction-only), but the included scripts/install.sh will create a venv and pip install requirements.txt. This is normal but requires network access to PyPI and will pull packages (openwakeword, faster-whisper, onnxruntime, etc.). The script also optionally installs switchaudio-osx via Homebrew. Nothing is fetched from untrusted arbitrary URLs in the package itself, but third-party Python packages and model downloads are required.
Credentials
The skill does not request credentials or secrets in metadata. Code reads a few configuration env vars (MAYLO_* such as MAYLO_OPENCLAW_AGENT_ID, MAYLO_INPUT_DEVICE, MAYLO_WEB_WAKE) which are reasonable for runtime configuration. There are no declared or implicit demands for unrelated cloud credentials or secrets. The SKILL.md warns not to commit secrets.
Persistence & Privilege
The skill is not force-included (always:false) and uses standard background processes/threads. It launches background daemons (bridge/responder and main assistant) and a web server that by default binds 0.0.0.0 (network-exposed). While this is coherent with a web UI, it increases the blast radius on a LAN — consider restricting to localhost or firewalling the port if you want to limit exposure.
What to consider before installing
What to check before installing:
- Expect to install Python packages and possibly download pretrained models; the 'offline-first' claim is accurate at runtime but not during setup — model and pip downloads may occur. Plan for network access during install.
- The code invokes the 'openclaw' CLI locally (bridge/milo_responder_openclaw.py). Ensure you intentionally install and trust the openclaw binary on the same machine; the skill will run 'openclaw agent --local' via subprocess.
- This is macOS-focused: it calls the 'say' command and uses macOS audio behavior. It will generate a self-signed cert and default to binding the web UI to 0.0.0.0:8443 (accessible on your LAN). If you do not want LAN access, run the web UI on localhost or use a firewall.
- The package metadata omits required binaries (openclaw, openssl/uvicorn/runtime expectations). Treat that as a transparency issue: verify prerequisites before running.
- If privacy is a concern: inspect recordings/ directory (logs and possible saved WAVs), and consider running the project in an isolated environment (VM or sandbox) and reviewing the bridge/responder logs to confirm all processing is local.
- If you want higher confidence: review/verify openclaw installation/source, audit the exact versions of pip packages installed, and search for any unexpected outbound network connections during install and first run.Like a lobster shell, security has layers — review code before you run it.
latest
Maylo Voice Assistant (macOS)
What this skill ships
- A self-contained app under
assets/app/:- Wake word listener (openWakeWord)
- VAD recording (webrtcvad)
- Local ASR (faster-whisper)
- Responder bridge via OpenClaw (
openclaw agent --local) - Offline TTS via
say -v Yelda - Web UI (HTTPS + WebSocket audio streaming)
Install / Setup (fresh machine)
- Copy the app to a working directory (recommended):
cp -R <skill>/assets/app ~/maylo-voice-assistant
- Create venv + install deps:
- Run:
scripts/install.sh ~/maylo-voice-assistant
- Run:
- Start the assistant (wake word + responder):
- Run:
scripts/run_assistant.sh ~/maylo-voice-assistant
- Run:
- Start the HTTPS web UI for phone mic streaming:
- Run:
scripts/run_web_https.sh ~/maylo-voice-assistant --host 0.0.0.0 --port 8443 - On iPhone/Android (same Wi‑Fi):
https://<mac-ip>:8443 - Accept the self-signed certificate warning.
- Run:
Normal use
- Wake word: say "Hey Jarvis" near the Mac mini, then speak your query.
- Web UI: hold the mic button to talk; release to send.
Troubleshooting (fast)
- Check logs:
recordings/assistant.logrecordings/responder.logrecordings/web.log
- If wake word never triggers, run the minimal tester:
python jarvis_minimal_test.py
- If the assistant responds to itself (feedback loop):
- Set HDMI output back to Mac speakers / use headphones.
- Increase
MAYLO_POST_SAY_INHIBIT_SEC.
Security / Privacy
- Do NOT package or commit:
- OAuth client secrets, tokens, refresh tokens
- Private certs/keys
- This skill ships no secrets. Any tokens/keys must be created on the target machine.
Comments
Loading comments...
