openclaw-visual

SuspiciousAudited by ClawScan on May 10, 2026.

Overview

The skill’s image-generation purpose is clear, but its renderer accepts unescaped content and loose file paths, which could expose private chats/logs or run browser code during image creation.

Use this skill only if you are comfortable installing npm/Chromium dependencies and letting it read the specific journal or chat content you request. Preview generated images before sharing, and ask the maintainer to add HTML sanitization, remove full-content logging, whitelist templates, and restrict output paths before broad use.

Findings (5)

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.

ConcernHigh Confidence
ASI05: Unexpected Code Execution
What this means

A crafted message, journal entry, or chat line could make the renderer execute browser JavaScript or load remote resources while creating the image.

Why it was flagged

Template variables are inserted without HTML escaping and then rendered in Chromium with sandboxing disabled, so message/log/chat content can become active HTML or JavaScript during image generation.

Skill content
return data[key] !== undefined ? data[key] : ''; ... await page.setContent(html, { waitUntil: 'networkidle' }); ... args: ['--no-sandbox', '--disable-setuid-sandbox']
Recommendation

Escape all text variables by default, sanitize any fields that intentionally allow HTML, disable JavaScript and unnecessary network access during rendering, and avoid no-sandbox mode unless the renderer is isolated.

What this means

Private journal entries, chat summaries, or message text may be retained in logs even if the user only expected an image file.

Why it was flagged

The script prints all parsed options before parsing content; because options includes the content JSON, private text being rendered can be written to stderr/runtime logs.

Skill content
const options = parseArgs(); console.error('Options:', JSON.stringify(options, null, 2)); ... contentData = JSON.parse(options.content);
Recommendation

Do not log full content by default; log only non-sensitive metadata such as template name and output path, or redact/truncate content in debug mode.

What this means

If the agent is influenced to use unusual arguments, it could render an unintended .html file or overwrite a file the user did not mean to change.

Why it was flagged

CLI arguments can set template and output paths without a whitelist or safe-directory check; template names are joined into a file path and output paths are passed directly to the renderer.

Skill content
options[key] = value; ... const templatePath = path.join(__dirname, '..', 'assets', 'templates', `${templateName}.html`); ... path: outputPath
Recommendation

Allow only documented template names, resolve and verify template paths stay inside assets/templates, restrict output to a dedicated Visuals directory, and prompt before overwriting existing files.

What this means

Generated images may include private diary or conversation details and may be shared into chat tools if the user asks.

Why it was flagged

The documented workflow reads local journal files and OpenClaw session history to build images; this is aligned with the feature but involves sensitive local context.

Skill content
读取 `~/PhoenixClaw/Journal/daily/YYYY-MM-DD.md` ... 扫描 `~/.openclaw/sessions/*.jsonl`
Recommendation

Confirm the date range and source files, preview or redact sensitive details before sending, and avoid broad session scans when selected text would be enough.

What this means

Installing the skill may download and run npm package setup and browser components.

Why it was flagged

The skill documents npm dependency installation and optional Chromium installation even though registry metadata lists no install spec; this is normal for rendering but should be visible to users.

Skill content
cd skills/openclaw-visual ... npm install ... npm install playwright ... npx playwright install chromium
Recommendation

Declare the npm/Chromium setup in metadata, use the included lockfile with a controlled install, and review dependency provenance before use.