CAUTION version 2.0.0 · audited 2026-09-09
This skill converts text into spoken audio using the third-party npm package node-edge-tts, which talks to Microsoft Edge's free online text-to-speech service. It bundles two Node.js scripts: one that generates an MP3 (and optional JSON subtitle file) into the system temp directory or a path you choose, and one that stores voice/rate/pitch preferences in a config file at ~/.tts-config.json. Installation runs 'npm install' in the scripts folder, pulling normal, pinned public npm dependencies. There is no obfuscated code, no reading of credentials or environment variables, no hidden network endpoints, and no attempt to override the agent's rules. The main things to be aware of are that any text you convert is sent to Microsoft's servers, generated audio files are left behind in the temp directory, and a user-settable proxy option means traffic could be routed through an arbitrary host if someone configures it.
| Declared purpose | Text-to-speech conversion: turn text into MP3 audio with configurable voice, language, rate, pitch, volume, and optional subtitles, using the node-edge-tts npm package. |
| Observed behavior | tts-converter.js validates prosody arguments, strips the words 'tts'/'text-to-speech' from the input, creates a temp directory, and calls node-edge-tts to synthesize speech to a file, printing the resulting path and file size. config-manager.js reads/writes a JSON preferences file in the user's home directory (~/.tts-config.json) and can print it or convert it to CLI arguments. install.sh runs 'npm install --production' in the scripts directory. Documentation files describe usage, list voices, and point to a public voice-preview website and a GitHub clone URL. No code reads secrets, environment variables, or contacts any endpoint other than what node-edge-tts uses internally (or an optional user-specified proxy). |
| Verdict, rules only | SAFE |
| Verdict, AI | CAUTION |
| Final verdict | CAUTION (never better than either pass) |
| capability | vs purpose | detail |
|---|---|---|
| network | needed | Speech synthesis requires the online Microsoft Edge TTS service, reached via the node-edge-tts library (websocket/HTTPS). An optional --proxy / --set-proxy setting can route that traffic through any host the user specifies (scripts/tts-converter.js line 221, scripts/config-manager.js line 157). |
| filesystem_write | needed | Writes MP3 (and optional JSON subtitles) into os.tmpdir()/edge-tts-temp or a user-specified output path, and writes preferences to ~/.tts-config.json. |
| filesystem_read | needed | Reads the config file at ~/.tts-config.json and stats generated output files. No other file reads. |
| install_packages | needed | install.sh and skill-info.json run 'npm install' in scripts/ to fetch node-edge-tts and commander from registry.npmjs.org; package-lock.json pins versions with integrity hashes. |
| shell | needed | install.sh is a bash script that only changes directory and runs npm install; the skill docs instruct the agent to run node scripts. No dynamic command construction or exec calls in the JS code. |
| severity | finding |
|---|---|
| medium | All submitted text is sent to a third-party online service Whatever text the agent passes in is transmitted to Microsoft's Edge TTS endpoint through the node-edge-tts library. If an agent is told to 'speak' the contents of a private document, chat log, or secret, that content leaves the machine. The skill card itself acknowledges this risk (skill-card.md line 20). scripts/tts-converter.js:159 await tts.ttsPromise(filteredText, finalOutputPath); |
| low | Arbitrary proxy can be set for TTS traffic A proxy URL supplied on the command line, or stored persistently via config-manager.js --set-proxy (line 157), is passed straight to the TTS client. The skill ships no proxy by default (config default is an empty string), but a malicious or careless setting would route all synthesized text through a host of the setter's choosing. scripts/tts-converter.js:221 .option('-p, --proxy <proxy>', 'Proxy URL (e.g., http://localhost:7890)') |
| low | Writes a persistent settings file in the user's home directory Preferences (voice, language, prosody, proxy, timeout) are stored in ~/.tts-config.json and read back on later runs. This is limited to TTS settings and is not a startup/persistence mechanism, but it does mean a setting such as a proxy survives across sessions. scripts/config-manager.js:18 const DEFAULT_CONFIG_PATH = path.join(require('os').homedir(), '.tts-config.json'); |
| low | Generated audio is left in the temp directory without cleanup Audio files (and subtitle JSON) are written to a shared temp directory with predictable names and are never deleted by the skill (SKILL.md line 194 states cleanup is the caller's job). Spoken content may include sensitive text and could be readable by other local users depending on temp directory permissions. scripts/tts-converter.js:21 const TEMP_DIR = path.join(os.tmpdir(), 'edge-tts-temp'); |
| low | Installer fetches third-party npm packages Installation pulls node-edge-tts and commander (plus transitive deps such as ws, yargs, https-proxy-agent) from the public npm registry. Versions are pinned with integrity hashes in scripts/package-lock.json, but the actual TTS network behavior lives in that unaudited third-party code rather than in this package. install.sh:12 npm install --production |
| info | Documentation references an external source repository An alternative install path suggests cloning from a GitHub URL. This is documentation only and is not executed by any script, but the referenced repository is outside the audited package and its contents cannot be verified from here. DISTRIBUTION.md:34 git clone https://github.com/clawdbot/edge-tts-skill.git |
0 AI finding(s) were dropped because their file, line or quote did not match the package.
| domain | service rating | where |
|---|---|---|
| clawhub.ai | not in the service index | skill-card.md:7 |
| github.com | not in the service index | DISTRIBUTION.md:34 |
| registry.npmjs.org | not in the service index | scripts/package-lock.json:18 |
| tts.travisvn.com | not in the service index | DISTRIBUTION.md:96 |
| Binaries invoked | bash, git, node, npm, npx |
| Environment variables read | none |
| Hard-coded wallets | none |
| Pipes a download to a shell | 0 |
| eval / exec / subprocess | 0 |
| base64 blobs | 0 |
| File writes | 20 |
| Persistence | 0 |
| file | lines | sha256 |
|---|---|---|
DISTRIBUTION.md | 104 | 6891c442c5d10f4d… |
SKILL.md | 198 | f313dd928f5cfb7d… |
_meta.json | 6 | 65a41bd5825a8e84… |
install.sh | 24 | 4dada8f2086afefa… |
references/node_edge_tts_guide.md | 236 | e2fd9644e658fc4e… |
scripts/config-manager.js | 277 | f085b8642039e4c9… |
scripts/package-lock.json | 283 | 7badc62afe2cdfc7… |
scripts/package.json | 17 | 35f4b0da40526a5f… |
scripts/tts-converter.js | 259 | 3c01a4816738428b… |
skill-card.md | 41 | 5970c4817da2b08f… |
skill-info.json | 22 | 9ff7416cedf34d58… |
For agents
JSON: https://agenteconomy.report/k/edge-tts.audit.json · badge: https://agenteconomy.report/k/edge-tts.audited.svg ·
skill rating: /k/edge-tts · commission an audit of any skill: US$ 29 per version.
The complete published package of this exact version was downloaded from the registry and read statically; nothing was executed. A deterministic pass extracts network destinations, binaries, environment variables, writes, install commands, obfuscation markers, subprocesses and wallets, each with file and line. An AI then reads the whole package with those facts and writes the summary, the capabilities and the findings under a strict schema; every finding it produces must cite a file, a line and the exact text, or it is dropped. The final verdict is the worst of the two passes. The audit does not change the skill's trust tier (policy); the author may respond through the dispute channel and the response is published here. Commissioned by: the Agent Economy Report (free program: the 150 most downloaded skills, September 2026).