WeatherPanel Note AI PC

Security checks across malware telemetry and agentic risk

Overview

The skill mostly does weather/dashboard work, but its safety claims are contradicted by code that uses shell execution and obsidian-cli with configurable commands and paths.

Review this skill carefully before installing. If you use it, inspect or remove configurable command overrides, ensure obsidian-cli writes only to the note you expect, and avoid running it with proxy credentials or untrusted configuration values in the environment.

VirusTotal

63/63 vendors flagged this skill as clean.

View on VirusTotal

Risk analysis

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.

#
ASI05: Unexpected Code Execution
High
What this means

A misconfigured or poisoned environment/config value could change what command is executed when the user runs the normal weather workflow.

Why it was flagged

The summary step builds a shell command string from environment-controlled values and runs it with shell=True, contradicting the documented claim that the summarize subprocess is shell-free and fixed.

Skill content
SUMMARIZE_BIN = os.environ.get("SUMMARIZE_BIN", "summarize") ... cmd_str = f'"{SUMMARIZE_BIN}" "{url}"' ... subprocess.run(... shell=True,)
Recommendation

Use subprocess.run with an argument list and shell=False, URL-encode configurable URL fields, restrict SUMMARIZE_BIN to a safe executable name/path, and update the documentation to match the real behavior.

#
ASI02: Tool Misuse and Exploitation
Medium
What this means

The skill may append to an unexpected vault or note if environment/config values are wrong, and users would not know from the safety text that obsidian-cli is being used.

Why it was flagged

The flush step invokes an external Obsidian CLI and appends content to a configurable note path, while SKILL.md says it does not invoke obsidian-cli and writes only to a validated .md path under a configured vault.

Skill content
OBSIDIAN_BIN = os.environ.get("OBSIDIAN_BIN", "obsidian-cli") ... NOTE_PATH = os.environ.get("OBSIDIAN_NOTE_PATH", "Inbox/WeatherPanel Note AI PC.md") ... cmd = [OBSIDIAN_BIN, "create", NOTE_PATH] ... cmd.extend(["--content", formatted, "--append"])
Recommendation

Either implement the documented direct validated file write, or clearly declare obsidian-cli as a dependency and validate the vault and note path before appending.

#
ASI09: Human-Agent Trust Exploitation
Medium
What this means

A user may approve the skill based on safety promises that are not true in the provided implementation.

Why it was flagged

These safety assurances are directly contradicted by the bundled summarize and flush scripts, which use shell=True and obsidian-cli respectively.

Skill content
The summary step uses a shell-free subprocess call to the fixed command name `summarize` found on PATH. ... The Obsidian step does **not** invoke `obsidian-cli`; it writes only to a validated `.md` path under a configured vault directory inside the user's home directory.
Recommendation

Correct the SKILL.md safety section so it accurately describes command execution, dependencies, configuration keys, and Obsidian write behavior.

#
ASI04: Agentic Supply Chain Vulnerabilities
Low
What this means

Opening the dashboard may contact third-party services and depends on those remote resources remaining trustworthy and available.

Why it was flagged

The local dashboard loads JavaScript and fonts from external CDNs, which is common for dashboards but is not disclosed in SKILL.md's local-dashboard description.

Skill content
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/4.4.1/chart.umd.min.js"></script> ... @import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono...
Recommendation

Disclose the remote dashboard dependencies, or vendor/pin them locally with integrity controls.

#
ASI03: Identity and Privilege Abuse
Low
What this means

Proxy credentials, if embedded in the proxy URL, could appear in the agent transcript or local logs.

Why it was flagged

The script may echo proxy environment values to logs; proxy URLs sometimes contain usernames or passwords.

Skill content
http_proxy = os.environ.get("HTTP_PROXY") or os.environ.get("http_proxy") ... if proxies: print(f"[fetch] Using proxy: {proxies}")
Recommendation

Mask proxy usernames/passwords before printing, or avoid printing proxy URLs entirely.