Scrapbook-Style Illustration Inserter

ReviewAudited by ClawScan on May 10, 2026.

Overview

The skill largely matches its illustration purpose, but it runs shell commands and reads broad local API-key config files, including a Claude config path, which could use or expose the wrong credential.

Review before installing. Prefer setting a dedicated GLM_API_KEY or OPENROUTER_API_KEY in the environment, and avoid relying on generic config files. Consider editing the script to remove ~/.claude/config.json and generic api_key lookup. Do not use the shell command pattern with untrusted/generated text unless arguments are safely passed without shell expansion. Avoid sending confidential articles unless you accept the selected provider's data handling.

Findings (4)

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.

What this means

A local API key meant for another tool or provider could be selected and transmitted as an authorization token, potentially exposing or consuming the wrong credential.

Why it was flagged

The script can read a generic key named api_key from local agent/config files, including ~/.claude/config.json, and treat it as a GLM credential. That is broader than a provider-specific GLM_API_KEY/OPENROUTER_API_KEY contract and could accidentally send an unrelated API key to the GLM endpoint.

Skill content
config_paths = ["config.json", os.path.expanduser("~/.openclaw/config.json"), os.path.expanduser("~/.claude/config.json")]
...
def load_glm_key() -> str:
    key = _load_key_from_env_and_configs("GLM_API_KEY", "api_key")
Recommendation

Use dedicated GLM_API_KEY or OPENROUTER_API_KEY environment variables, remove the ~/.claude/config.json and generic api_key fallback, and update metadata to declare the credential requirements clearly.

What this means

A specially crafted article or generated prompt could cause unsafe local command behavior if passed through a shell exactly as shown.

Why it was flagged

The instructions put article-derived image descriptions into shell commands and encourage background/concurrent execution, but do not specify safe argument passing or escaping. If description text contains shell metacharacters and the agent follows the shell example, it could execute unintended commands.

Skill content
python3 scripts/generate.py "<description_1>" --language <lang> --size 1088x1920 &
...
The agent MUST issue all exec calls in a single tool-use turn so they run in parallel.
Recommendation

Invoke the script with structured argv/no-shell execution or stdin, avoid constructing shell strings from generated text, and require command review before running parallel jobs.

What this means

The runtime may fail unless requests is installed, and installing an unpinned package depends on the user's Python package source and environment.

Why it was flagged

The skill depends on a Python package but provides no install spec or pinned dependency version. This is common for simple scripts, but users should be aware of the unpinned dependency.

Skill content
Python 3 + `requests` library: `pip install requests`
Recommendation

Declare Python/requests in install metadata, pin or constrain dependency versions, and install in a trusted virtual environment.

What this means

Private or unpublished article content may be reflected in prompts sent to external providers.

Why it was flagged

The script sends generated image prompts to GLM or OpenRouter. This is expected for an image-generation skill, but those prompts may be derived from the user's article.

Skill content
url = "https://open.bigmodel.cn/api/paas/v4/images/generations"
...
url = "https://openrouter.ai/api/v1/chat/completions"
...
response = requests.post(url, headers=headers, json=body, timeout=120)
Recommendation

Use this only with content you are comfortable sending to the selected provider, and review provider data-retention terms for sensitive articles.