live · scanning repos
Scanrepo
github.com
github.com / mbailey

mbailey/voicemode

Python·594 files·commit 74a17ab·scanned 4d ago·cached ✓
25/100
LOW RISK
Minor findings consistent with the project type. Nothing reachable from install hooks.

score capped at 25 — 1,417 stars — findings likely legitimate code patterns

verdict accurate?
threat-state: lowlive

FINDINGS ░▒▓

criticalRemote script piped into a shellA shell script downloads remote content and executes it directly (e.g. `curl … | bash`). The payload is never stored or reviewable and can change server-side — a classic malware/backdoor install pattern.docs/web/install.sh
# Usage:
#   curl -fsSL https://getvoicemode.com/install.sh | bash
#   curl -fsSL https://getvoicemode.com/install.sh | bash -s -- -y  # non-interactive
#   curl -fsSL https://getvoicemode.com/install...
+10
warningPython subprocess / os.system usageos.system() or subprocess with shell=True / suspicious commands can execute arbitrary shell commands. Plain pip/package installs are usually benign.installer/voicemode_install/checker.py
        try:
            subprocess.run(
                command,
                shell=True,
+4
warningPython subprocess / os.system usageos.system() or subprocess with shell=True / suspicious commands can execute arbitrary shell commands. Plain pip/package installs are usually benign.installer/voicemode_install/cli.py
    try:
        result = subprocess.run(
            ['voicemode', '--version'],
            capture_output=True,
+4
warningPython subprocess / os.system usageos.system() or subprocess with shell=True / suspicious commands can execute arbitrary shell commands. Plain pip/package installs are usually benign.tests/test_audio_guard.py
        before = len(audio_guard.HITS)
        subprocess.run([sys.executable, "-c", "pass"], check=True)
        assert len(audio_guard.HITS) == before
+4
criticalPython dynamic code executioneval(), exec() or compile() on untrusted input can execute arbitrary code. Common in Python malware for running obfuscated payloads.tests/test_server_syntax.py
    with open('{server_path}', 'r') as f:
        compile(f.read(), '{server_path}', 'exec')
    print("OK")
except SyntaxError as e:
+7
infoSuspicious files are not reachable from entry pointsFlagged files exist but are not imported by any entry point. They may be dead code, tests, or attack payloads triggered by another mechanism.+2

Scores are heuristics. A “safe” verdict means no known-malicious patterns were found — clever malware can look boring. Wrong verdict? Flag it above; confirmed false positives become regression tests.

358 files scanned @ 74a17ab | 10/25/2026 | heuristic scan — always review manually

risk by category
code execution25
network & exfiltration0
file system access0
obfuscation0
supply chain0
owasp / injection0
telemetry
files 358/594rules hit 6engine v7commit 74a17ab

github

mbailey/voicemode

Natural voice conversations with Claude Code

Python
1417
198
508d
594 files
358 scanned(60%)
74a17ab

architecture░▒▓

entry (0) flagged (10) pkg (229)
562 nodes · 1908 edgesscroll to zoom · click node to jump to finding
LOW (25/100) — mbailey/voicemode — ScanRepo