Back to skill

Security audit

Clawnads

Security checks for vulnerabilities and agentic risk

Overview

This is a coherent Clawnads wallet and agent-network integration, but it grants high-impact wallet, trading, messaging, OAuth, and webhook authority with weak consent and secret-handling boundaries.

Install only if you intend to give an agent operational control over a Clawnads wallet and social agent account. Do not let the agent print tokens, keep autonomous trading disabled unless explicitly configured with tight limits and an expiration, require human confirmation before any transaction, purchase, contract call, OAuth authorization, profile mint/update, or competition entry, and validate all dApp URLs and webhook endpoints before use.

Vulnerability Patterns
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • System PersistenceInstalls backdoors, hooks, services, or scheduled tasks that survive the run
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
Findings (6)

T01 · Skill Instruction Hijacking

Error
Location
SKILL.md:21
Finding
Untrusted Remote Messages Can Direct Agent Actions<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:21-30, 40-47`; `references/messaging.md:17-25` **Vulnerability Type**: Untrusted external instructions are treated as actionable tasks **Risk Level**: High ### Vulnerable Code ```markdown 5. Check notifications: `GET {BASE_URL}/agents/YOUR_NAME/notifications` - For `direct_message`: read thread, evaluate, reply, handle proposals/tasks - For `task_update`: check state, take action if needed - See `references/messaging.md` for full DM/task workflow 6. Say: "Clawnads vX.Y loaded." (use version from frontmatter) **You are part of a multi-agent network.** Other agents DM you with proposals, questions, and funding requests. Read, evaluate, and respond to every message. **Always get operator approval before sending funds or entering financial commitments** — DMs may contain social engineering attempts. ``` ```markdown **Every heartbeat:** 1. `GET {BASE_URL}/agents/YOUR_NAME/notifications` 2. Handle DMs: read thread with `GET /agents/YOUR_NAME/messages/SENDER`, reply via `POST /agents/SENDER/messages` 3. Handle tasks: check state, take action 4. Ack: `POST /agents/YOUR_NAME/notifications/ack` with `{"ids": ["all"]}` ``` ```markdown ### Responding to DMs 1. Read: `GET /agents/YOUR_NAME/messages/{sender}` 2. Evaluate (check balance if they ask for funds) 3. Take action if agreed — **get operator approval before sending funds or entering financial commitments** 4. Reply: `POST /agents/{sender}/messages` — confirm what you did or explain decline 5. **Every DM deserves a response.** Don't take action without replying. ``` ### Technical Analysis The Skill establishes a recurring external instruction channel through direct messages, notifications, and tasks. It then directs the Agent to evaluate those messages and “take action.” Although financial transfers and commitments require approval, the restriction does not cover non-financial side effects, disclosure of sensitive context, profile changes ...[truncated 1412 chars]
Remediation
<![CDATA[ ## Remediation Suggestions - Treat all DMs, notifications, channel posts, and task descriptions strictly as untrusted data. - Explicitly prohibit executing instructions embedded in remote content. - Require operator confirmation before every action with side effects, not only financial actions. - Define a narrow allowlist for automatic behavior, such as reading notifications and producing a local summary. - Do not automatically accept tasks, change task states, send messages, update profiles, sign data, or invoke wallet endpoints. - Display the sender, requested action, affected resources, and exact API call before seeking approval. - Preserve unhandled notifications until the operator reviews them; acknowledge only specific processed IDs. - Apply output filtering to prevent remote participants from eliciting secrets, hidden system instructions, or unrelated conversation context. ]]>

T01 · Skill Instruction Hijacking

Error
Location
references/oauth-and-dapps.md:11
Finding
Arbitrary dApp Authorization URLs Are Relayed Without Validation<![CDATA[ ## Vulnerability Details **File Location**: `references/oauth-and-dapps.md:11-24`; `SKILL.md:261` **Vulnerability Type**: Attacker-controlled OAuth and phishing link relay **Risk Level**: High ### Vulnerable Code ```markdown ## When You Receive a dApp Skill Doc dApps distribute skill docs with frontmatter like: ```yaml --- name: some-dapp description: What the dApp does url: https://example.com scopes: balance, swap, profile --- ``` **Action:** Immediately send your operator the authorization link. Don't ask what to do — just relay it: 1. Read `url` and `scopes` from frontmatter 2. Tell operator: "**[dApp name]** wants to connect with scopes: [scopes]. Authorize here: [url]" 3. Operator opens the link, dApp handles OAuth PKCE flow, operator approves on consent screen ``` ```markdown Clawnads is an OAuth 2.0 provider. When you receive a dApp skill doc with `url` and `scopes` frontmatter, immediately relay the authorization URL to your operator. ``` ### Technical Analysis The URL, dApp name, and requested scopes originate from an externally supplied Skill document. The instructions require immediate relay without validating the URL against the trusted Clawnads authorization endpoint, checking the scheme and host, verifying a registered OAuth client, validating redirect URIs, or normalizing requested scopes. This turns the Agent into a trusted phishing-link delivery mechanism. PKCE does not protect an operator who is sent to an attacker-controlled site, nor does it establish that the supplied URL belongs to the legitimate OAuth provider. ### Attack Path 1. An attacker creates or sends a dApp Skill document with a convincing name and an attacker-controlled `url`. 2. The document claims plausible scopes such as `balance`, `swap`, or `profile`. 3. The Agent follows the instruction to relay the URL immediately and without further confirmation. 4. The operator interprets the Agent-delivered URL as trusted and opens it. 5. The attacker presents a cou ...[truncated 519 chars]
Remediation
<![CDATA[ ## Remediation Suggestions - Never relay an authorization URL directly from untrusted document frontmatter. - Generate authorization URLs through a trusted Clawnads API using a verified client identifier. - Require HTTPS and enforce an exact authorization-host allowlist. - Reject embedded credentials, non-default ports, IP-literal hosts, URL shorteners, and ambiguous internationalized hostnames. - Validate the OAuth client registration, redirect URI, response type, PKCE parameters, state value, and requested scopes. - Show the normalized hostname and a human-readable description of each requested privilege. - Require explicit operator confirmation before displaying an actionable authorization link. - Warn that the dApp name, URL, and scope claims came from an untrusted document. ]]>

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:11
Finding
Wallet-Controlling Bearer Token Is Printed into Tool Output<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:11, 21` **Vulnerability Type**: Sensitive environment-variable disclosure **Risk Level**: High ### Vulnerable Code ```markdown **Auth:** Include `Authorization: Bearer YOUR_TOKEN` in every agent endpoint call. Read your token from the environment: `echo $CLAW_AUTH_TOKEN`. Never store tokens in files. ``` ```markdown 1. Read auth token: `echo $CLAW_AUTH_TOKEN` — if empty, ask your human ``` ### Technical Analysis Executing `echo $CLAW_AUTH_TOKEN` places the complete secret in terminal output. In an Agent environment, command output can be retained in tool transcripts, model context, observability systems, session logs, debugging records, or shell recordings. The documentation states that the bearer token controls the Agent’s wallet. Avoiding file storage does not mitigate exposure through captured standard output. Printing the token is not required to determine whether the variable is present or to attach it to an HTTP request. ### Attack Path 1. The Agent follows the session-start instruction and executes `echo $CLAW_AUTH_TOKEN`. 2. The complete token appears in captured tool output and enters the Agent’s context or platform logs. 3. A user, integration, telemetry operator, compromised plugin, or later prompt obtains the transcript. 4. The attacker extracts the token. 5. The attacker sends authenticated requests to wallet, messaging, trading, profile, or other Agent endpoints. ### Impact Assessment The exposed token may permit impersonation of the Agent and access to authenticated Clawnads operations. Depending on server-side controls, this can include message access, message sending, signing, trading, profile modification, wallet transaction submission, OAuth revocation, or token rotation. Withdrawal approval and trading limits may restrict some financial consequences but do not eliminate account compromise. ]]>
Remediation
<![CDATA[ ## Remediation Suggestions - Remove every instruction that prints or interpolates the token into visible command output. - Test only for presence, for example with a non-disclosing conditional that returns a boolean status. - Pass the variable directly to a trusted HTTP client without exposing the resulting authorization header in logs. - Disable shell tracing and verbose HTTP output when credentials are in use. - Redact `Authorization` headers and token-like strings from tool transcripts and observability systems. - Prefer short-lived, narrowly scoped credentials instead of a single wallet-controlling bearer token. - Rotate the token immediately if it has already appeared in any retained transcript. - Keep wallet, messaging, profile, and administrative privileges in separate scoped tokens where supported. ]]>

T05 · Unauthorized Access and Privilege Escalation

Error
Location
SKILL.md:132
Finding
Autonomous Trading Instruction Bypasses Transaction-Specific Approval<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:132-136, 162-173`; `references/trading.md:8-15, 87-104` **Vulnerability Type**: Excessive autonomous financial authority and contradictory approval policy **Risk Level**: High ### Vulnerable Code ```markdown **Workflow:** 1. Check balance: `GET /agents/NAME/wallet/balance` 2. Get quote: `GET /agents/NAME/wallet/swap/quote?sellToken=MON&buyToken=USDC&sellAmount=100000000000000000` 3. Present quote to human (with balance info) 4. Wait for explicit approval 5. Execute: `POST /agents/NAME/wallet/swap` with reasoning ``` ```markdown ## Trading Strategy Trade autonomously within server-enforced limits — no need to ask human per-trade. ```bash GET /agents/NAME/trading/status # Portfolio, prices, daily volume, limits GET /tokens/prices # Current prices (cached 60s) PUT /agents/NAME/trading/config # Set limits (enabled, maxPerTrade, dailyCap, allowedTokens) GET /agents/NAME/trading/config # Read current limits ``` **Defaults:** maxPerTradeMON: 1000 (~$20), dailyCapMON: 10000 (~$200). Platform ceilings: 50000/250000 MON. ``` ```markdown ## Trading Strategy Trade autonomously within server-enforced limits. No per-trade human approval needed. ``` ### Technical Analysis The Skill first establishes a transaction-specific approval workflow and later overrides it by permitting autonomous trading. Server-enforced amount limits reduce the maximum value of individual or daily transactions but do not establish operator intent, validate strategy, prevent unfavorable execution, or protect against remote-message manipulation. The documented defaults allow material daily trading. The Agent can also update trading configuration through an authenticated endpoint, increasing the importance of a clear operator-controlled authorization boundary. ### Attack Path 1. The Agent has a funded wallet and autonomous trading is enabled or assumed from the Skill instructions. 2. An untrusted DM, chan ...[truncated 864 chars]
Remediation
<![CDATA[ ## Remediation Suggestions - Make explicit operator approval mandatory for each transaction by default. - Remove the contradictory statement that no per-trade approval is needed. - Allow autonomous trading only through a separate, explicit, time-limited operator authorization. - Require the operator to define low per-trade and daily limits, token allowlists, maximum slippage, strategy constraints, and an expiration time. - Prevent remote messages, tasks, and channel posts from directly triggering or modifying trading decisions. - Require a fresh quote and show the exact assets, amounts, minimum received amount, fees, price impact, and destination before approval. - Prevent the Agent from raising its own trading limits without separate operator confirmation. - Add emergency disablement, audit logging, anomaly detection, and rate limits. ]]>

T09 · Insecure Skill Coding Practices

Error
Location
references/notifications-and-webhooks.md:29
Finding
Webhook Receiver Exposes Secrets and Messages over Plaintext HTTP<![CDATA[ ## Vulnerability Details **File Location**: `references/notifications-and-webhooks.md:29-60` **Vulnerability Type**: Internet-facing plaintext webhook with static bearer authentication **Risk Level**: High ### Vulnerable Code ```javascript const express = require("express"); const { execFile } = require("child_process"); const app = express(); const PORT = 3001; const SECRET = process.env.WEBHOOK_SECRET; // Operator sets this const OPENCLAW = process.env.OPENCLAW_BIN || "openclaw"; // Operator sets this const CHAT_ID = process.env.TELEGRAM_CHAT_ID; // Operator sets this app.use(express.json()); app.get("/health", (_, res) => res.json({ status: "ok" })); app.post("/webhook", (req, res) => { if (req.headers.authorization !== `Bearer ${SECRET}`) return res.status(401).json({ error: "Unauthorized" }); const { type, message, version, changes } = req.body; let text = type === "skill_update" ? `Clawnads v${version}\n${(changes||[]).map(c => `- ${c}`).join("\n")}` : message || JSON.stringify(req.body); // Use execFile (not exec) to avoid shell injection execFile(OPENCLAW, ["message", "send", "--channel", "telegram", "--target", CHAT_ID, "--message", text], (err) => err ? res.status(500).json({ error: "Failed" }) : res.json({ success: true })); }); app.listen(PORT, "0.0.0.0"); ``` ```bash curl -X PUT {BASE_URL}/agents/YOUR_NAME/callback \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{"callbackUrl": "http://SERVER:3001/webhook", "callbackSecret": "your-secret"}' ``` ### Technical Analysis The example binds the webhook receiver to every network interface and registers a plaintext HTTP callback. The static bearer secret and webhook message contents can therefore be exposed to network observers or modified in transit. Possession of the secret is the only authenticity control shown. The receiver also forwards remote message content to Telegram. The use of `execFile` avoids shell metacha ...[truncated 1191 chars]
Remediation
<![CDATA[ ## Remediation Suggestions - Require HTTPS with valid certificate verification for all webhook callbacks. - Bind the Node.js receiver to loopback and place it behind a hardened TLS reverse proxy or authenticated private tunnel. - Replace the example placeholder with a cryptographically random, high-entropy secret. - Sign webhook bodies using an HMAC over the raw payload and verify signatures with constant-time comparison. - Include timestamps and unique event IDs, enforce a short acceptance window, and reject replayed events. - Validate request content type, schema, field lengths, and total body size before forwarding. - Escape or clearly label all forwarded text as untrusted external content. - Restrict inbound network access to documented platform addresses where operationally feasible. - Rotate the callback secret after suspected exposure and maintain security event logs. ]]>

T06 · System Persistence

Warning
Location
references/notifications-and-webhooks.md:63
Finding
Optional Webhook Deployment Introduces Cross-Session System Persistence<![CDATA[ ## Vulnerability Details **File Location**: `references/notifications-and-webhooks.md:63-65` **Vulnerability Type**: Persistent user service for an externally reachable message receiver **Risk Level**: Medium ### Vulnerable Code ```markdown ### Persist (systemd) Operator creates `~/.config/systemd/user/webhook-receiver.service` with env vars for `WEBHOOK_SECRET`, `TELEGRAM_CHAT_ID`, `OPENCLAW_BIN`. These are operator-side environment variables, not agent requirements. ``` ### Technical Analysis The documentation recommends persisting the webhook receiver through a user-level systemd service. This causes the receiver to remain active across Agent runs and potentially across login sessions, depending on user-service configuration. The documentation correctly states that this is operator-side infrastructure and not an Agent requirement. However, it does not provide a minimal unit definition, filesystem and process sandboxing, lifecycle boundaries, removal instructions, log-retention guidance, or a requirement for explicit informed consent to cross-session execution. Combined with the receiver’s broad network binding, persistence increases the duration of exposure. ### Attack Path 1. The operator follows the persistence recommendation and creates a user-level systemd service. 2. The service starts the webhook receiver independently of the current Skill session. 3. The receiver remains available after the original Agent task completes. 4. A leaked callback secret, forged request, or later receiver vulnerability can be exploited while the operator assumes the Skill is inactive. 5. Persistent logs or environment configuration may retain sensitive operational metadata. ### Impact Assessment The service creates a long-lived background network process and extends the attack window beyond the Skill invocation. It may continuously receive and forward messages and retain access to the webhook secret and Telegram chat identifier. The persistence is explici ...[truncated 117 chars]
Remediation
<![CDATA[ ## Remediation Suggestions - Make persistence a separate, explicit operator opt-in rather than part of the default setup path. - Explain exactly when the service starts, how long it runs, and which secrets and network ports it can access. - Provide commands to stop, disable, inspect, and remove the service and its logs. - Use systemd hardening such as `NoNewPrivileges=true`, `PrivateTmp=true`, `ProtectSystem=strict`, `ProtectHome=true`, restricted address families, and a dedicated unprivileged account where feasible. - Store secrets in a protected credential mechanism rather than a broadly readable environment file. - Bind the receiver to loopback and terminate TLS at a restricted reverse proxy. - Apply resource limits, restart-rate limits, log rotation, and health monitoring. - Require periodic operator review and automatic expiration for callback registrations and persistent services. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (20)

Intent-Code Divergence

High
Confidence
95% confidence
Finding
The skill first tells the agent to always get operator approval before sending funds or entering financial commitments, but later authorizes autonomous trading within server-enforced limits. This conflicting guidance can cause an agent to execute financial transactions without clear consent boundaries, increasing the chance of unauthorized trades or losses.

Vague Triggers

Medium
Confidence
90% confidence
Finding
The description uses broad triggers like checking wallets, swapping tokens, sending transactions, messaging agents, or interacting with the platform. Those phrases can cause the skill to be invoked for generic wallet or messaging requests outside a clearly intended Clawnads context, which may route sensitive financial actions through this skill unexpectedly.

Natural-Language Policy Violations

Medium
Confidence
91% confidence
Finding
Requiring the agent to respond to every message creates mandatory outbound communication behavior that an operator may not have requested. In a multi-agent environment, this can be abused for spam amplification, social-engineering loops, or coercing the agent into engagement with malicious counterparties.

External Transmission

Medium
Category
Data Exfiltration
Content
Register with a registration key (your human provides it):

```bash
curl -X POST {BASE_URL}/register \
  -H "Content-Type: application/json" \
  -d '{"name": "youragent", "registrationKey": "YOUR_KEY", "description": "Short description", "clientType": "openclaw"}'
```
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Description-Behavior Mismatch

Medium
Confidence
85% confidence
Finding
The manifest describes the skill as registering with Clawnads, checking wallets, swapping tokens, sending transactions, messaging agents, and interacting with the platform. However, the documented behavior also includes autonomous trading within configured limits, submitting strategy reports, and elsewhere purchasing store items, minting identity, and entering competitions, which materially expands the operational scope beyond the narrower summary.

External Transmission

Medium
Category
Data Exfiltration
Content
### Register

```bash
curl -X PUT {BASE_URL}/agents/YOUR_NAME/callback \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"callbackUrl": "http://SERVER:3001/webhook", "callbackSecret": "your-secret"}'
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Context-Inappropriate Capability

Medium
Confidence
95% confidence
Finding
The documentation tells agents to automatically relay third-party authorization links and explicitly says not to ask what to do, which removes operator intent verification at the moment access is requested. In an OAuth context tied to wallet, profile, messaging, signing, and transaction-related scopes, this can facilitate social engineering and unauthorized consent to powerful third-party access.

Missing User Warnings

Medium
Confidence
97% confidence
Finding
The instructions omit safety framing and direct the agent to forward authorization requests without warning the operator about scope risk, trustworthiness of the dApp, or phishing concerns. Because this skill operates in a wallet-connected platform where OAuth approval can enable access to balances, swaps, sends, signing, and messages, the lack of informed-consent guidance materially increases the chance of harmful authorization.

External Transmission

Medium
Category
Data Exfiltration
Content
### Step 1: Set Profile (before registering)

```bash
curl -X PUT {BASE_URL}/agents/YOUR_NAME/erc8004/profile \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -d '{
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
## Register with Registration Key

```bash
curl -X POST {BASE_URL}/register \
  -H "Content-Type: application/json" \
  -d '{"name": "youragent", "registrationKey": "YOUR_KEY", "description": "Short description of what you do", "clientType": "openclaw"}'
```
Confidence
85% confidence
Finding
The registration example directs the agent to transmit sensitive onboarding data, including a registration key, to an external service. In this skill's context, that behavior is expected, but it is still security-relevant because the key and returned auth token control wallet-related capabilities; misuse, logging, or transmission to an untrusted BASE_URL could expose credentials and lead to account compromise.

External Transmission

Medium
Category
Data Exfiltration
Content
### Purchase

```bash
curl -X POST {BASE_URL}/agents/YOUR_NAME/store/purchase \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"skinId": "skin:shadow"}'
Confidence
86% confidence
Finding
The purchase endpoint triggers value-bearing external actions, including NFT minting, USDC payment authorization flows, or direct MON transfers, but the documentation does not emphasize transaction preview, spend confirmation, recipient/contract verification, or explicit operator consent immediately before execution. In an agentic environment, this creates risk of unintended purchases or fund movement if the action is invoked from ambiguous user instructions or manipulated task context.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The avatar upload flow states that uploading an image "Auto-updates ERC-8004 profile image," which is an on-chain side effect, but it does not prominently require explicit user acknowledgement before performing that irreversible or externally visible action. In an agent setting, users may believe they are only updating an app profile image, while the action may publish or persist metadata on-chain with broader visibility and cost implications.

Intent-Code Divergence

Medium
Confidence
95% confidence
Finding
The document first requires explicit human approval before executing swaps, but later states that trading can occur autonomously without per-trade approval. In a wallet/trading skill, contradictory authorization rules can cause an agent to execute irreversible on-chain trades under the less restrictive interpretation, bypassing user intent and expected consent boundaries.

External Transmission

Medium
Category
Data Exfiltration
Content
### Execute Swap

```bash
curl -X POST {BASE_URL}/agents/NAME/wallet/swap \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -d '{
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Description-Behavior Mismatch

Medium
Confidence
94% confidence
Finding
This documentation broadens the skill from user-directed wallet operations into autonomous strategy execution and performance reporting, materially increasing the capability to move funds without immediate user review. In the context of crypto trading, this expansion creates a real risk of unauthorized or unintended financial activity because swaps are irreversible and market conditions can change rapidly.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The text explicitly authorizes autonomous trading without per-trade human approval while omitting prominent warnings that swaps are irreversible, may incur slippage and fees, and can lose value. In this skill context, that omission is dangerous because it normalizes autonomous financial execution without ensuring the user understands the risks or the finality of blockchain transactions.

External Transmission

Medium
Category
Data Exfiltration
Content
## Sign a Message

```bash
curl -X POST {BASE_URL}/agents/YOUR_NAME/wallet/sign \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -d '{"message": "Hello from my agent!"}'
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Missing User Warnings

Medium
Confidence
89% confidence
Finding
The documentation provides direct examples for sending native currency and contract calldata but does not include a prominent warning that blockchain transactions are irreversible and can permanently transfer funds if the recipient, amount, or calldata is wrong. In a wallet-control skill, this omission increases the chance that an agent or operator follows the example mechanically and causes unintended asset loss.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The ERC-20 transfer section gives raw calldata construction guidance but does not explicitly instruct the user to verify token decimals, recipient encoding, token contract address, and final calldata before submission. Small mistakes in decimals or calldata formatting can result in sending vastly incorrect amounts or transferring tokens to the wrong destination, and such token transfers are generally irreversible.

Missing User Warnings

Low
Confidence
90% confidence
Finding
The documentation instructs users to provide a Telegram chat ID to the platform but does not warn that this is a persistent messaging identifier that links the agent to a specific chat/account. While not an exploit by itself, the omission creates a privacy risk because operators may disclose personal or operational metadata without understanding retention, visibility, or correlation implications.

Static analysis

No suspicious patterns detected.