Byted Podcast Gen
Analysis
The podcast generator is purpose-aligned, but its code can use undeclared Ark credentials to list or create speech API keys and save them locally.
Findings (3)
Artifact-based informational review of SKILL.md, metadata, install specs, static scan signals, and capability signals. ClawScan does not execute the skill or run runtime probes.
Checks for instructions or behavior that redirect the agent, misuse tools, execute unexpected code, cascade across systems, exploit user trust, or continue outside the intended task.
set_key(dotenv_path, key, value, quote_mode="never") ... os.chmod(dotenv_path, 0o600) ... _persist_env_to_dotenv_if_available(_dotenv_path(), "MODEL_SPEECH_API_KEY", created_key)
The helper can save a retrieved or newly created API key into a persistent .env file inside the skill directory.
Checks whether tool use, credentials, dependencies, identity, account access, or inter-agent boundaries are broader than the stated purpose.
ark_key = os.getenv("ARK_SKILL_API_KEY", "").strip()
base = os.getenv("ARK_SKILL_API_BASE", "").strip()
...
"Authorization": f"Bearer {ark_key}"
...
_build_action_url(base, "ListAPIKeys")
...
_build_action_url(base, "CreateAPIKey")The skill reads undeclared Ark credentials and uses them to list or create API keys for the speech service. That is account-level credential authority beyond simply requiring a user-provided speech API key.
Checks for exposed credentials, poisoned memory or context, unclear communication boundaries, or sensitive data that could leave the user's control.
ENDPOINT = "wss://openspeech.bytedance.com/api/v3/sami/podcasttts" ... "input_text": args.text, ... "prompt_text": args.prompt_text, ... "input_url": args.input_url
The skill sends user-provided topics, long text, or URLs to the external Bytedance/Volcengine podcast TTS service, which is expected for this skill but still a sensitive data flow.
