Scan Report
5 /100
kiwi-voice
Kiwi Voice — 多语言实时语音助手,通过 OpenClaw WebSocket 与 LLM 后端通信。支持 Faster Whisper / MLX Whisper / ElevenLabs STT,支持 Qwen3 / ElevenLabs / Piper / Kokoro TTS,集成就绪词检测、说话人识别、危险命令过滤、Telegram 审批。
合法开源语音助手项目 Kiwi Voice,文档准确、架构清晰、安全控制完善。subprocess 均为合法系统工具调用(pactl/ffmpeg/openclaw),无命令注入;所有外部网络请求指向可信 AI 服务 API;无凭证收割、无数据外泄。
Safe to install
可安全使用。API 建议启用 auth,dependencies 建议锁定版本。
Findings 2 items
| Severity | Finding | Location |
|---|---|---|
| Low | 依赖版本未锁定 Supply Chain | requirements.txt:1 |
| Low | REST API 默认绑定 0.0.0.0 Priv Escalation | kiwi/config_loader.py:95 |
| Resource | Declared | Inferred | Status | Evidence |
|---|---|---|---|---|
| Filesystem | NONE | READ | ✓ Aligned | SKILL.md 仅声明管理配置文件,无文件写入操作 |
| Network | NONE | READ | ✓ Aligned | 连接 ElevenLabs/RunPod/Telegram/Home Assistant API,均由配置文件控制,无未声明外部连接 |
| Shell | NONE | READ | ✓ Aligned | subprocess 调用 pactl/ffmpeg/openclaw CLI,均为工具集成而非任意命令执行,无注入风险 |
| Environment | NONE | READ | ✓ Aligned | 仅读取 .env 中的服务凭证(API keys),无凭证外传行为 |
1 Critical 32 findings
Critical Dangerous Command 危险 Shell 命令
rm -rf / docs/features/voice-security.md:17 Medium External URL 外部 URL
https://kiwi-voice.com README.md:2 Medium External URL 外部 URL
https://kiwi-voice.com/assets/og-image.svg README.md:3 Medium External URL 外部 URL
https://img.shields.io/badge/license-MIT-blue.svg README.md:14 Medium External URL 外部 URL
https://www.python.org/downloads/ README.md:15 Medium External URL 外部 URL
https://img.shields.io/badge/python-3.10%2B-blue.svg README.md:15 Medium External URL 外部 URL
https://img.shields.io/badge/backend-OpenClaw-orange.svg README.md:16 Medium External URL 外部 URL
https://docs.kiwi-voice.com README.md:19 Medium External URL 外部 URL
https://docs.openclaw.ai README.md:21 Medium External URL 外部 URL
http://homeassistant.local:8123 README.md:429 Medium External URL 外部 URL
https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html docs/deployment/docker.md:70 Medium External URL 外部 URL
https://download.pytorch.org/whl/cu121 docs/deployment/gpu.md:10 Medium External URL 外部 URL
https://www.home-assistant.io/ docs/features/home-assistant.md:3 Medium External URL 外部 URL
http://192.168.1.100:7789 docs/features/home-assistant.md:20 Medium External URL 外部 URL
https://t.me/botfather docs/features/voice-security.md:60 Medium External URL 外部 URL
https://api.telegram.org/bot docs/features/voice-security.md:67 Medium External URL 外部 URL
https://developer.mozilla.org/en-US/docs/Web/API/AudioWorklet docs/features/web-microphone.md:7 Medium External URL 外部 URL
https://ffmpeg.org/download.html docs/getting-started/installation.md:52 Medium External URL 外部 URL
http://192.168.1.100:8123 kiwi/integrations/homeassistant.py:30 Medium External URL 外部 URL
https://api.elevenlabs.io/v1/text-to-speech kiwi/tts/elevenlabs.py:93 Medium External URL 外部 URL
https://api.runpod.ai/v2/ kiwi/tts/runpod.py:44 Medium External URL 外部 URL
http://www.w3.org/2000/svg kiwi/web/index.html:11 Medium External URL 外部 URL
https://console.runpod.io/serverless runpod/README.md:27 Medium External URL 外部 URL
https://api.runpod.ai/v2/YOUR_ENDPOINT_ID runpod/README.md:172 Medium External URL 外部 URL
http://www.apache.org/licenses/LICENSE-2.0 runpod/qwen_tts/__init__.py:9 Medium External URL 外部 URL
https://huggingface.co/papers/2103.17239 runpod/qwen_tts/core/tokenizer_12hz/modeling_qwen3_tts_tokenizer_v2.py:394 Medium External URL 外部 URL
https://huggingface.co/papers/2006.08195 runpod/qwen_tts/core/tokenizer_12hz/modeling_qwen3_tts_tokenizer_v2.py:588 Medium External URL 外部 URL
https://discuss.pytorch.org/t/how-to-generate-variable-length-mask/23397/3 runpod/qwen_tts/core/tokenizer_25hz/modeling_qwen3_tts_tokenizer_v1.py:233 Medium External URL 外部 URL
https://huggingface.co/papers/2005.07143 runpod/qwen_tts/core/tokenizer_25hz/modeling_qwen3_tts_tokenizer_v1.py:345 Medium External URL 外部 URL
https://arxiv.org/pdf/2107.03312.pdf runpod/qwen_tts/core/tokenizer_25hz/vq/core_vq.py:336 Medium External URL 外部 URL
https://arxiv.org/abs/2305.02765 runpod/qwen_tts/core/tokenizer_25hz/vq/core_vq.py:479 Medium External URL 外部 URL
https://colab.research.google.com/drive/1q1oe2zOyZp7UsB3jJiQ1IFn8z5YfjwEb scripts/train_wake_word.py:17 File Tree
146 files · 1.4 MB · 40646 lines Python 79f · 24900L
YAML 18f · 8512L
Markdown 35f · 3575L
CSS 2f · 1831L
JavaScript 3f · 1372L
HTML 1f · 282L
JSON 3f · 69L
Text 1f · 53L
TOML 2f · 43L
Config 1f · 9L
├─
▾
custom_components
│ └─
▾
kiwi_voice
│ ├─
▾
translations
│ │ └─
en.json
JSON
│ ├─
__init__.py
Python
│ ├─
button.py
Python
│ ├─
config_flow.py
Python
│ ├─
const.py
Python
│ ├─
coordinator.py
Python
│ ├─
manifest.json
JSON
│ ├─
sensor.py
Python
│ ├─
services.yaml
YAML
│ ├─
strings.json
JSON
│ ├─
switch.py
Python
│ └─
tts.py
Python
├─
▾
docs
│ ├─
▾
api
│ │ ├─
rest.md
Markdown
│ │ └─
websocket.md
Markdown
│ ├─
▾
assets
│ │ └─
favicon.svg
│ ├─
▾
deployment
│ │ ├─
docker.md
Markdown
│ │ ├─
gpu.md
Markdown
│ │ ├─
local.md
Markdown
│ │ ├─
reverse-proxy.md
Markdown
│ │ └─
systemd.md
Markdown
│ ├─
▾
development
│ │ ├─
architecture.md
Markdown
│ │ ├─
code-patterns.md
Markdown
│ │ └─
contributing.md
Markdown
│ ├─
▾
features
│ │ ├─
home-assistant.md
Markdown
│ │ ├─
multilanguage.md
Markdown
│ │ ├─
souls.md
Markdown
│ │ ├─
speaker-id.md
Markdown
│ │ ├─
streaming-tts.md
Markdown
│ │ ├─
stt-engines.md
Markdown
│ │ ├─
tts-providers.md
Markdown
│ │ ├─
voice-security.md
Markdown
│ │ ├─
wake-word.md
Markdown
│ │ ├─
web-dashboard.md
Markdown
│ │ └─
web-microphone.md
Markdown
│ ├─
▾
getting-started
│ │ ├─
configuration.md
Markdown
│ │ ├─
first-run.md
Markdown
│ │ └─
installation.md
Markdown
│ ├─
▾
stylesheets
│ │ └─
extra.css
CSS
│ └─
index.md
Markdown
├─
▾
kiwi
│ ├─
▾
api
│ │ ├─
__init__.py
Python
│ │ ├─
audio_bridge.py
Python
│ │ └─
server.py
Python
│ ├─
▾
integrations
│ │ ├─
__init__.py
Python
│ │ └─
homeassistant.py
Python
│ ├─
▾
locales
│ │ ├─
__init__.py
Python
│ │ ├─
ar.yaml
YAML
│ │ ├─
de.yaml
YAML
│ │ ├─
en.yaml
YAML
│ │ ├─
es.yaml
YAML
│ │ ├─
fr.yaml
YAML
│ │ ├─
hi.yaml
YAML
│ │ ├─
id.yaml
YAML
│ │ ├─
it.yaml
YAML
│ │ ├─
ja.yaml
YAML
│ │ ├─
ko.yaml
YAML
│ │ ├─
pl.yaml
YAML
│ │ ├─
pt.yaml
YAML
│ │ ├─
ru.yaml
YAML
│ │ ├─
tr.yaml
YAML
│ │ └─
zh.yaml
YAML
│ ├─
▾
mixins
│ │ ├─
__init__.py
Python
│ │ ├─
audio_playback.py
Python
│ │ ├─
dialogue_pipeline.py
Python
│ │ ├─
llm_callbacks.py
Python
│ │ ├─
stream_watchdog.py
Python
│ │ └─
tts_speech.py
Python
│ ├─
▾
souls
│ │ ├─
comedian.md
Markdown
│ │ ├─
hype-person.md
Markdown
│ │ ├─
mindful-companion.md
Markdown
│ │ ├─
siren.md
Markdown
│ │ └─
storyteller.md
Markdown
│ ├─
▾
stt
│ │ ├─
__init__.py
Python
│ │ ├─
elevenlabs.py
Python
│ │ └─
mlx_whisper.py
Python
│ ├─
▾
tts
│ │ ├─
__init__.py
Python
│ │ ├─
base.py
Python
│ │ ├─
elevenlabs_ws.py
Python
│ │ ├─
elevenlabs.py
Python
│ │ ├─
kokoro.py
Python
│ │ ├─
piper.py
Python
│ │ ├─
qwen_local.py
Python
│ │ ├─
runpod.py
Python
│ │ └─
streaming.py
Python
│ ├─
▾
web
│ │ ├─
▾
static
│ │ │ ├─
app.js
JavaScript
│ │ │ ├─
audio-client.js
JavaScript
│ │ │ ├─
audio-worklet.js
JavaScript
│ │ │ └─
style.css
CSS
│ │ └─
index.html
HTML
│ ├─
__init__.py
Python
│ ├─
__main__.py
Python
│ ├─
config_loader.py
Python
│ ├─
event_bus.py
Python
│ ├─
hardware_aec.py
Python
│ ├─
i18n.py
Python
│ ├─
listener.py
Python
│ ├─
openclaw_cli.py
Python
│ ├─
openclaw_ws.py
Python
│ ├─
service.py
Python
│ ├─
soul_manager.py
Python
│ ├─
speaker_id.py
Python
│ ├─
speaker_manager.py
Python
│ ├─
state_machine.py
Python
│ ├─
text_processing.py
Python
│ ├─
unified_vad.py
Python
│ ├─
utils.py
Python
│ ├─
voice_security.py
Python
│ └─
wake_word.py
Python
├─
▾
runpod
│ ├─
▾
qwen_tts
│ │ ├─
▾
cli
│ │ │ └─
demo.py
Python
│ │ ├─
▾
core
│ │ │ ├─
▾
tokenizer_12hz
│ │ │ │ ├─
configuration_qwen3_tts_tokenizer_v2.py
⚠
Python
│ │ │ │ └─
modeling_qwen3_tts_tokenizer_v2.py
⚠
Python
│ │ │ ├─
▾
tokenizer_25hz
│ │ │ │ ├─
▾
vq
│ │ │ │ │ ├─
core_vq.py
Python
│ │ │ │ │ ├─
speech_vq.py
Python
│ │ │ │ │ └─
whisper_encoder.py
Python
│ │ │ │ ├─
configuration_qwen3_tts_tokenizer_v1.py
⚠
Python
│ │ │ │ └─
modeling_qwen3_tts_tokenizer_v1.py
⚠
Python
│ │ │ └─
__init__.py
Python
│ │ ├─
▾
inference
│ │ │ ├─
qwen3_tts_model.py
Python
│ │ │ └─
qwen3_tts_tokenizer.py
⚠
Python
│ │ ├─
__init__.py
Python
│ │ └─
__main__.py
Python
│ ├─
download_model.py
Python
│ ├─
handler.py
Python
│ └─
README.md
Markdown
├─
▾
scripts
│ ├─
generate_cues.py
Python
│ ├─
noise_monitor.py
Python
│ ├─
send_voice.py
Python
│ ├─
telegram_voice.py
Python
│ └─
train_wake_word.py
Python
├─
▾
tests
│ ├─
__init__.py
Python
│ ├─
test_api.py
Python
│ ├─
test_audio_bridge.py
Python
│ ├─
test_config.py
Python
│ ├─
test_i18n.py
Python
│ ├─
test_smoke.py
Python
│ ├─
test_text_processing.py
Python
│ └─
test_voice_security.py
Python
├─
CLAUDE.md
Markdown
├─
config.yaml
YAML
├─
mkdocs.yml
YAML
├─
mypy.ini
Config
├─
pyproject.toml
TOML
├─
README.md
Markdown
├─
requirements.txt
Text
├─
ruff.toml
TOML
├─
SKILL.md
Markdown
└─
SOUL.md
Markdown
Dependencies 7 items
| Package | Version | Source | Known Vulns | Notes |
|---|---|---|---|---|
faster-whisper | >=1.0.0 | pip | No | 无版本锁定 |
requests | >=2.28.0 | pip | No | 无版本锁定 |
qwen-tts | unspecified | pip | No | 无版本锁定,来源非标准 |
kokoro-onnx | >=0.4.0 | pip | No | 无版本锁定 |
pyannote.audio | >=3.1.0 | pip | No | 无版本锁定 |
torch | >=2.0.0 | pip | No | 无版本锁定 |
aiohttp | >=3.9.0 | pip | No | 无版本锁定 |
Security Positives
✓ SKILL.md 准确描述功能,无文档欺骗或阴影功能
✓ 危险命令检测(DangerousCommandDetector)基于正则表达式,两层安全过滤(pre-LLM + post-LLM)
✓ Telegram 审批机制:非 Owner 用户的危险命令需 Telegram 按钮确认
✓ subprocess 调用均为硬编码命令(pactl/ffmpeg/openclaw),无命令注入漏洞
✓ base64 仅用于音频数据编码和 Ed25519 密钥序列化,无混淆执行
✓ 所有外部网络连接均指向已知可信服务(ElevenLabs/RunPod/Telegram/Home Assistant)
✓ API 支持 Bearer token 认证和细粒度 scope 控制
✓ Speaker Priority 系统实现了 OWNER > FRIEND > GUEST > BLOCKED 分级权限
✓ 代码结构清晰,模块化良好,使用 kiwi_log 统一日志记录
✓ 无凭证收割行为,os.environ 仅用于读取配置 env var,不外传
✓ i18n 系统完善,15 种语言支持,用户字符串完全外部化