Caveat verdict

kiwi-voice

88
🟢 Trusted
No high-risk patterns surfaced by the deep scan — automated capability review, not behavioral proof.

Manages a local Python voice assistant service with user-configured providers and local Telegram-based security approval; behavior matches the stated voice assistant management purpose.

⚠ Flagged for review — coarse, uncorroborated signal, not a confirmed exploit. Review the config yourself before installing.

Automated static analysis — not a human review. Caveat flags capabilities, not confirmed intent, and can produce false positives. Disagree with this verdict? Use Dispute below.

0
security
90
transparency
70
maintenance

Findings (18)

Pattern match critical

Possible hardcoded credential

README.md · code · token: "your-secret-token-here

Pattern match high

HTTP request to bare IP address — common in malicious payloads

docs/deployment/reverse-proxy.md · code · http://127.0.0.1

Pattern match high

References sudo — requests elevated privileges

docs/deployment/reverse-proxy.md · code · sudo

Pattern match high

<script> tag in markdown — potential code injection

kiwi/api/server.py · prose · downgraded · <script>

Pattern match high

Recursive delete from root or home — destructive command

kiwi/voice_security.py · prose · downgraded · rm -rf /

Pattern match high

Uses eval() — can execute arbitrary code

runpod/qwen_tts/core/tokenizer_25hz/vq/whisper_encoder.py · prose · downgraded · eval(

Pattern match high

Raw model control tokens — prompt injection via token manipulation

runpod/qwen_tts/inference/qwen3_tts_model.py · prose · downgraded · <|im_start|>

Pattern match medium

Opens WebSocket connection

CLAUDE.md · code · WebSocket

Pattern match medium

os.system/popen — direct OS command execution

kiwi/api/server.py · prose · downgraded · os.execv(

Pattern match medium

subprocess execution — runs system commands from Python

kiwi/hardware_aec.py · prose · downgraded · subprocess.run(

Pattern match medium

Instructs covert action — may act without user awareness

kiwi/locales/en.yaml · prose · downgraded · quietly

Pattern match medium

Accesses OpenClaw config/secrets directly

kiwi/openclaw_ws.py · prose · downgraded · ~/.openclaw/openclaw.json

Pattern match low

Python aiohttp session — async network access

custom_components/kiwi_voice/config_flow.py · prose · downgraded · aiohttp.ClientSession

Pattern match low

Python os.getenv — reads environment variable

kiwi/config_loader.py · prose · downgraded · os.getenv(

Pattern match low

Python os.environ.get — reads environment variable

kiwi/config_loader.py · prose · downgraded · os.environ.get(

Pattern match low

Python threading.Timer — deferred execution

kiwi/mixins/llm_callbacks.py · prose · downgraded · threading.Timer(

Pattern match low

Python urllib.request — network access

kiwi/tts/kokoro.py · prose · downgraded · urllib.request

Pattern match low

Popular HTTP library — network access

runpod/qwen_tts/core/tokenizer_12hz/modeling_qwen3_tts_tokenizer_v2.py · prose · downgraded · got

Why the tier is capped

Execution sink present in raw bytes (Hard Floor: class D). Final tier capped at Caution — cannot be lifted by any downgrade, example-payload opt-in, or allowlist.

Permissions & capabilities

No declared permissions — minimal attack surface.

Is this flag fair?

Check another skill Browse the registry Auditing your own skills or configs? Use the API