x402-x-tweet-fetcher — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited x402-x-tweet-fetcher (Agent Skill) and scored it 96/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 1 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Install from the public source repository so the host and security scanners can inspect every installed file:
npx skills add lvpiggyqq/xcatcher-skill --skill xcatcherhttps://github.com/lvpiggyqq/xcatcher-skillhttps://xcatcher.top/skills/xcatcher/SKILL.mdhttps://xcatcher.top/trust/The standalone SKILL.md is sufficient for the Remote MCP workflow. The public repository also documents companion metadata, focused references, and an optional dependency-free REST helper; inspect those files before choosing to use them. No archive is required.
Prefer the Remote MCP at https://xcatcher.top/mcp/. It supports discovery and accountless x402 tools without an Xcatcher key. Use REST or scripts/xcatcher.py only when the host cannot connect to Remote MCP; run scripts/xcatcher.py capabilities first in that fallback path.
payTo, asset, network, or quote.Call get_service_info first. Then call preflight_crawl(users, mode) for every new crawl intent. Preflight is free and read-only: it normalizes handles, deduplicates them, validates the mode, and previews the current modeled points/USDC cost without authentication, a quote, a task, or a payment. Accountless normal-mode x402 pricing is progressive, so preflight the complete deduplicated handle list together rather than splitting it solely for pricing; internal Actor failover adds no extra charge. Treat the later live 402 requirement as authoritative.
If the user or host wants to inspect the output contract before spending, call get_sample_result. It returns clearly labeled synthetic rows and coverage metadata; it does not fetch live X data.
After preflight, use exactly one path:
get_account_balance, then use the account flow. The model must not see the key.POST /api/v1/auth/register is an external side effect and returns a trial key when registration is available.Normalize inputs by accepting handles, @handles, or x.com/twitter.com profile URLs. Deduplicate case-insensitively. Reject keyword searches and non-profile URLs. Use normal for fast recurring snapshots; use deep only when the user accepts its higher live price and latency.
get_direct_crawl_payment with the exact normalized users and mode returned by preflight. It creates a request-bound challenge but moves no funds.amount, asset, network, payTo, and expiry from payment_required. Obtain spending approval.users and mode; an identical retry is safe, but changing parameters is not.task_id to the model. The credential is task-scoped and expires after seven days.get_direct_task_status every 5–10 seconds through the credential-binding host. When task.has_result is true, call get_direct_result_preview; paginate with next_offset when needed.Read references/PAYMENTS.md before configuring a wallet connector. Do not implement signing inside the agent or bundled helper.
get_account_balance and compare the balance with the preflight cost_points.create_crawl_task with a stable idempotency_key. Reuse that key only for retries of the same handles and mode.PAYMENT_REQUIRED is returned, obtain approval and have the trusted wallet connector satisfy the exact live requirement. Retry with the same idempotency key only after the host confirms settlement.wait_for_task. If it times out, wait again using the same task_id; do not recreate the task.get_result_preview for structured JSON. Use offset/next_offset for more rows. Request XLSX only when the user needs a full export, and have the authenticated host write it to an approved path without exposing credentials or a private download URL.Use list_crawl_tasks to recover recent task IDs. Read references/API.md for endpoint shapes, task states, errors, key scopes, and REST fallback commands.
State the requested handle count, task mode, returned row count, handles with no returned posts, bounded attempt counts, and per-handle upstream failures from result_meta. Treat NO_PUBLIC_POSTS_OR_HANDLE_UNAVAILABLE as ambiguous: the account can be unavailable, private, mistyped, or simply have no returned public rows. Result rows use username, tweet_time, content, and tweet_link.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.