Agent Economy Report

Skill code audit

CAUTION version 2.0.0 · audited 2026-09-09

edge-tts @i3130002

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 purposeText-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 behaviortts-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 onlySAFE
Verdict, AICAUTION
Final verdictCAUTION (never better than either pass)

Capabilities

capabilityvs purposedetail
networkneededSpeech 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_writeneededWrites 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_readneededReads the config file at ~/.tts-config.json and stats generated output files. No other file reads.
install_packagesneededinstall.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.
shellneededinstall.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.

Findings

severityfinding
mediumAll 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);
lowArbitrary 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)')
lowWrites 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');
lowGenerated 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');
lowInstaller 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
infoDocumentation 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.

Network destinations in the code

domainservice ratingwhere
clawhub.ainot in the service indexskill-card.md:7
github.comnot in the service indexDISTRIBUTION.md:34
registry.npmjs.orgnot in the service indexscripts/package-lock.json:18
tts.travisvn.comnot in the service indexDISTRIBUTION.md:96

Other facts

Binaries invokedbash, git, node, npm, npx
Environment variables readnone
Hard-coded walletsnone
Pipes a download to a shell0
eval / exec / subprocess0
base64 blobs0
File writes20
Persistence0

Files audited

filelinessha256
DISTRIBUTION.md1046891c442c5d10f4d…
SKILL.md198f313dd928f5cfb7d…
_meta.json665a41bd5825a8e84…
install.sh244dada8f2086afefa…
references/node_edge_tts_guide.md236e2fd9644e658fc4e…
scripts/config-manager.js277f085b8642039e4c9…
scripts/package-lock.json2837badc62afe2cdfc7…
scripts/package.json1735f4b0da40526a5f…
scripts/tts-converter.js2593c01a4816738428b…
skill-card.md415970c4817da2b08f…
skill-info.json229ff7416cedf34d58…

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.

How this is computed

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).