Competitor Intel Monitor
ReviewAudited by ClawScan on May 10, 2026.
Overview
The skill mostly matches its competitor-monitoring purpose, but it needs review because unvalidated URLs and competitor names can make it read or write outside its intended scope.
Review before installing. If you use it, monitor only public http/https competitor URLs, avoid competitor names containing slashes, dots, or path-like text, and consider patching the script to validate URLs and storage paths. Be aware that snapshots and history persist locally and that any cron or heartbeat setup will keep running until you remove it.
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.
If an untrusted or mistaken URL is added, the skill could be pointed at internal services, localhost, or other non-competitor resources and save their contents locally.
The user-provided URL is passed directly to urllib without scheme, host, localhost, private-network, or public-website validation. That is broader than the stated purpose of monitoring competitor websites.
add_p.add_argument("--url", required=True) ... req = urllib.request.Request(url, headers=headers) ... urllib.request.urlopen(req, timeout=timeout)Restrict monitored URLs to http/https public websites by default, block file://, localhost, and private IP ranges unless the user explicitly confirms, and validate the final derived URLs before fetching.
A malformed or untrusted competitor name could cause the script to create or overwrite fixed-named files outside the intended ~/.openclaw/competitor-data directory.
Competitor names are used in filesystem paths after only replacing spaces. Absolute paths, slashes, or '..' segments are not rejected before writing snapshots and history.
safe_name = name.lower().replace(" ", "-") ... return DATA_DIR / safe_name / f"{track_type}_latest.txt" ... path.write_text(content)Convert competitor names to a strict slug, reject path separators and '..', resolve the final path, and enforce that it remains under the intended data directory before writing.
If scheduled, the skill may continue making web requests and updating local files until the scheduled task is removed.
The skill documents recurring autonomous checks. This is disclosed and purpose-aligned, but it is persistent behavior users should intentionally configure.
Set up as a heartbeat task or cron: ... python3 scripts/monitor.py check --all --quiet --alert-changes
Only enable scheduling deliberately, keep a record of the cron or heartbeat task, and remove it when monitoring is no longer needed.
Monitored content and change history remain on disk and could influence later reports or be exposed if the local profile is shared or backed up.
The skill persistently stores fetched page text, configuration, and change history under the user's home directory.
CONFIG_PATH = Path.home() / ".openclaw" / "competitor-monitor.json"; DATA_DIR = Path.home() / ".openclaw" / "competitor-data" ... path.write_text(content) ... path.write_text(json.dumps(history, indent=2))
Avoid monitoring sensitive/private pages unless intended, periodically review or delete stored snapshots, and treat fetched website content as untrusted input.
Users have less provenance context for the local code they are asked to run.
The skill includes a runnable local script but does not provide a source repository or homepage for provenance. No remote installer or third-party dependency risk is shown.
Source: unknown; Homepage: none; No install spec — this is an instruction-only skill; Code file presence: scripts/monitor.py
Review the included script before use and prefer installing skills from sources with clear ownership and update history.
