One-Click Task Dashboard

Security checks across malware telemetry and agentic risk

Overview

The skill mostly builds the promised local dashboard, but it also includes optional ClawHub publishing automation and a persistent retry job that can act on a user account.

Install only if you want macOS LaunchAgents that refresh a local dashboard and run a localhost web server. Do not run the publishing or publisher-retry scripts unless you intentionally want this skill published from your ClawHub account; if already run, review and remove the ai.x.publish-one-click-dashboard LaunchAgent and check ~/.openclaw logs/dashboard files for local task data.

SkillSpector

By NVIDIA
Vulnerability Patterns
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Rogue AgentSelf-Modification, Session Persistence
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (24)

Lp3

Medium
Category
MCP Least Privilege
Confidence
93% confidence
Finding
The skill advertises and instructs execution of scripts with shell, file read/write, and environment access, but does not declare any permissions or capability expectations to the user. This undermines informed consent and makes it easier to hide impactful local actions such as persistence setup and file modifications behind a seemingly simple setup step.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding
The skill is presented as a dashboard setup utility, but the documented behavior also includes ClawHub publishing, login-state checks, reading publication metadata, notifications, and installation of retry-based publishing automation. That mismatch is dangerous because users may authorize execution expecting local visualization only, while the skill can perform account-affecting and persistent actions outside the stated purpose.

Description-Behavior Mismatch

Medium
Confidence
92% confidence
Finding
The script automates publishing to an external marketplace and triggers a user-facing notification about post-publication pricing, which goes beyond the stated purpose of generating and refreshing a local task dashboard. This creates an undeclared side effect with external distribution implications, increasing the risk of unauthorized publication or operator confusion in an automation context.

Context-Inappropriate Capability

Medium
Confidence
95% confidence
Finding
Prompting the user to set a marketplace price after an automated publish indicates monetization-related behavior that is not justified by the described dashboard visualization function. In an agent skill, hidden or weakly disclosed publishing and commercialization behavior is risky because it can cause unintended listing, reputational harm, or unauthorized business actions.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The instructions tell the user to run a setup script that creates files under ~/.openclaw and installs and starts LaunchAgents, but they do not warn that these are persistent system changes. This is risky because users may not realize the command establishes recurring background tasks and a local HTTP service that continue running after initial setup.

Vague Triggers

Medium
Confidence
83% confidence
Finding
The default prompt is a broad, natural-language instruction to generate and start a local task dashboard, without any explicit scope limits, consent checks, or trigger constraints. In an agent setting, such open-ended defaults can cause the skill to be invoked too eagerly and may lead to unintended local actions such as creating files, starting services, or processing task data when the user did not clearly authorize those operations.

Missing User Warnings

Medium
Confidence
67% confidence
Finding
The script reads hard-coded workspace and log paths under a specific user's home directory and later writes dashboard artifacts, exposing potentially sensitive operational metadata such as job names, execution times, statuses, and publication links. In an agent-skill context, silent collection and repackaging of local data into browsable files increases privacy risk, especially because these paths are not configurable or disclosed in-code.

Missing User Warnings

Medium
Confidence
96% confidence
Finding
The script silently creates two LaunchAgents and immediately bootstraps them, causing persistent background execution and a local HTTP service to start on login without any confirmation or explicit opt-in. Even though the service is bound to 127.0.0.1 and appears intended for dashboard functionality, persistence plus automatic service startup materially increases attack surface and can surprise users who did not expect login persistence.

Session Persistence

Medium
Category
Rogue Agent
Content
/usr/bin/python3 "${SKILL_DIR}/scripts/build_dashboard.py" --output-dir "${OUT_DIR}" >/dev/null

cat > "${HOME}/Library/LaunchAgents/${REFRESH_LABEL}.plist" <<PLIST
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
Confidence
93% confidence
Finding
plist

Session Persistence

Medium
Category
Rogue Agent
Content
/usr/bin/python3 "${SKILL_DIR}/scripts/build_dashboard.py" --output-dir "${OUT_DIR}" >/dev/null

cat > "${HOME}/Library/LaunchAgents/${REFRESH_LABEL}.plist" <<PLIST
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
Confidence
93% confidence
Finding
PLIST

Session Persistence

Medium
Category
Rogue Agent
Content
cat > "${HOME}/Library/LaunchAgents/${REFRESH_LABEL}.plist" <<PLIST
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key><string>${REFRESH_LABEL}</string>
Confidence
92% confidence
Finding
plist

Session Persistence

Medium
Category
Rogue Agent
Content
cat > "${HOME}/Library/LaunchAgents/${REFRESH_LABEL}.plist" <<PLIST
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key><string>${REFRESH_LABEL}</string>
Confidence
92% confidence
Finding
PLIST

Session Persistence

Medium
Category
Rogue Agent
Content
cat > "${HOME}/Library/LaunchAgents/${REFRESH_LABEL}.plist" <<PLIST
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key><string>${REFRESH_LABEL}</string>
  <key>ProgramArguments</key>
Confidence
91% confidence
Finding
plist

Session Persistence

Medium
Category
Rogue Agent
Content
<key>StandardOutPath</key><string>${OUT_DIR}/dashboard-refresh.out.log</string>
  <key>StandardErrorPath</key><string>${OUT_DIR}/dashboard-refresh.err.log</string>
</dict>
</plist>
PLIST

cat > "${HOME}/Library/LaunchAgents/${HTTP_LABEL}.plist" <<PLIST
Confidence
90% confidence
Finding
plist

Session Persistence

Medium
Category
Rogue Agent
Content
<key>StandardErrorPath</key><string>${OUT_DIR}/dashboard-refresh.err.log</string>
</dict>
</plist>
PLIST

cat > "${HOME}/Library/LaunchAgents/${HTTP_LABEL}.plist" <<PLIST
<?xml version="1.0" encoding="UTF-8"?>
Confidence
90% confidence
Finding
PLIST

Session Persistence

Medium
Category
Rogue Agent
Content
</plist>
PLIST

cat > "${HOME}/Library/LaunchAgents/${HTTP_LABEL}.plist" <<PLIST
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
Confidence
94% confidence
Finding
plist

Session Persistence

Medium
Category
Rogue Agent
Content
</plist>
PLIST

cat > "${HOME}/Library/LaunchAgents/${HTTP_LABEL}.plist" <<PLIST
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
Confidence
94% confidence
Finding
PLIST

Session Persistence

Medium
Category
Rogue Agent
Content
cat > "${HOME}/Library/LaunchAgents/${HTTP_LABEL}.plist" <<PLIST
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key><string>${HTTP_LABEL}</string>
Confidence
93% confidence
Finding
plist

Session Persistence

Medium
Category
Rogue Agent
Content
cat > "${HOME}/Library/LaunchAgents/${HTTP_LABEL}.plist" <<PLIST
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key><string>${HTTP_LABEL}</string>
Confidence
93% confidence
Finding
PLIST

Session Persistence

Medium
Category
Rogue Agent
Content
cat > "${HOME}/Library/LaunchAgents/${HTTP_LABEL}.plist" <<PLIST
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key><string>${HTTP_LABEL}</string>
  <key>ProgramArguments</key>
Confidence
95% confidence
Finding
plist

Session Persistence

Medium
Category
Rogue Agent
Content
<key>StandardOutPath</key><string>${OUT_DIR}/dashboard-http.out.log</string>
  <key>StandardErrorPath</key><string>${OUT_DIR}/dashboard-http.err.log</string>
</dict>
</plist>
PLIST

launchctl bootout "gui/${USER_ID}/${REFRESH_LABEL}" >/dev/null 2>&1 || true
Confidence
90% confidence
Finding
plist

Session Persistence

Medium
Category
Rogue Agent
Content
<key>StandardErrorPath</key><string>${OUT_DIR}/dashboard-http.err.log</string>
</dict>
</plist>
PLIST

launchctl bootout "gui/${USER_ID}/${REFRESH_LABEL}" >/dev/null 2>&1 || true
launchctl bootout "gui/${USER_ID}/${HTTP_LABEL}" >/dev/null 2>&1 || true
Confidence
90% confidence
Finding
PLIST

Session Persistence

Medium
Category
Rogue Agent
Content
launchctl bootout "gui/${USER_ID}/${REFRESH_LABEL}" >/dev/null 2>&1 || true
launchctl bootout "gui/${USER_ID}/${HTTP_LABEL}" >/dev/null 2>&1 || true
launchctl bootstrap "gui/${USER_ID}" "${HOME}/Library/LaunchAgents/${REFRESH_LABEL}.plist"
launchctl bootstrap "gui/${USER_ID}" "${HOME}/Library/LaunchAgents/${HTTP_LABEL}.plist"
launchctl kickstart -k "gui/${USER_ID}/${REFRESH_LABEL}" >/dev/null 2>&1 || true
launchctl kickstart -k "gui/${USER_ID}/${HTTP_LABEL}" >/dev/null 2>&1 || true
Confidence
97% confidence
Finding
plist

Session Persistence

Medium
Category
Rogue Agent
Content
launchctl bootout "gui/${USER_ID}/${REFRESH_LABEL}" >/dev/null 2>&1 || true
launchctl bootout "gui/${USER_ID}/${HTTP_LABEL}" >/dev/null 2>&1 || true
launchctl bootstrap "gui/${USER_ID}" "${HOME}/Library/LaunchAgents/${REFRESH_LABEL}.plist"
launchctl bootstrap "gui/${USER_ID}" "${HOME}/Library/LaunchAgents/${HTTP_LABEL}.plist"
launchctl kickstart -k "gui/${USER_ID}/${REFRESH_LABEL}" >/dev/null 2>&1 || true
launchctl kickstart -k "gui/${USER_ID}/${HTTP_LABEL}" >/dev/null 2>&1 || true
Confidence
97% confidence
Finding
plist

VirusTotal

66/66 vendors flagged this skill as clean.

View on VirusTotal