Iran Intelligence Radar (Persian X Monitor)

ReviewAudited by ClawScan on May 10, 2026.

Overview

Review recommended: the skill mostly matches its OSINT purpose, but it can bill per scan and may return hardcoded sample tweets as if they were live X intelligence when search tools are unavailable.

Before installing, confirm that real X/search and translation tools are configured, disable or restrict alerts until tested, and do not rely on reports unless they clearly indicate live-source provenance. Be aware that scans are billed through SkillPay and that local history/log files and Telegram alerts may contain report data.

Findings (6)

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 user could mistake sample data for real geopolitical intelligence, and reports or decisions could be based on non-live content.

Why it was flagged

The skill is advertised as monitoring X/Twitter, but if search tools are missing or fail it returns hardcoded sample tweets without an artifact-backed user-facing mock-mode label.

Skill content
# Deterministic local mock data to keep the skill runnable without external tools.
mock = [
    RawTweet(
        id="m1",
        author="@analyst_fa",
Recommendation

Fail closed when live search tools are unavailable, or clearly label mock/demo results and prevent billing or alerts in mock mode.

What this means

A scan invocation may charge an external SkillPay account even if live search tools are unavailable and the result falls back to mock data.

Why it was flagged

The skill sends a user_id, skill_id, and amount to an external billing endpoint for charging; in agent.py this billing gate runs before the search workflow.

Skill content
payload = {
    "user_id": user_id,
    "skill_id": skill_id,
    "amount": price,
}
response = _request_json("POST", "/billing/charge", skill_id=skill_id, payload=payload)
Recommendation

Require explicit user confirmation for paid scans, verify live tool availability before charging, and clearly disclose the external billing provider and refund/error behavior.

What this means

Configured Slack, webhook, or other alert channels could receive false or unverified alerts, especially if the scan is using fallback mock rows.

Why it was flagged

HIGH rows are automatically sent to every configured alert channel through the provided send_alert tool, with no confirmation step shown.

Skill content
for row in rows:
    if row.get("alert") != "HIGH":
        continue
...
        send_alert_tool(channel=channel, message=msg)
Recommendation

Gate external alerts on verified live-source results, add a user confirmation option, and include provenance/source status in alert messages.

What this means

Report content and links may be shared with Telegram and the configured chat destination.

Why it was flagged

The skill can send escalation summaries, trending keywords, and tweet links to Telegram using a configured bot token and chat_id.

Skill content
url = f"https://api.telegram.org/bot{bot_token}/sendMessage"
payload = {
    "chat_id": chat_id,
    "text": _build_message(escalation, trending, rows),
Recommendation

Only configure Telegram credentials for chats you trust, and disable Telegram alerts if external sharing is not desired.

What this means

Tweet/report data from prior scans can influence later briefings and remains on disk for a limited period.

Why it was flagged

The skill persists scan snapshots, including rows, trends, and escalation scores, for later daily briefings with pruning.

Skill content
HISTORY_FILE = Path(__file__).resolve().with_name("daily_history.json")
...
history.append(snapshot)
...
_write_history(pruned[-500:])
Recommendation

Review or clear local history files when needed, and avoid treating persisted summaries as authoritative without checking source provenance.

What this means

Dependency behavior could change over time if the user installs from the unpinned requirements.

Why it was flagged

The Python dependencies are unpinned, so a future install may resolve different package versions.

Skill content
pyyaml
requests
python-dateutil
Recommendation

Pin dependency versions and use a trusted package index or lockfile before deployment.