Towns Protocol Skills

PassAudited by VirusTotal on May 13, 2026.

Overview

Type: OpenClaw Skill Name: towns-protocol Version: 2.0.0 The skill bundle provides comprehensive documentation and code examples for building a Towns Protocol bot, covering SDK usage, blockchain operations, messaging, interactive components, debugging, and deployment. It consistently promotes good security practices, such as verifying blockchain transactions on-chain before granting access. All code snippets and instructions are aligned with the stated purpose, using standard libraries and tools without any evidence of data exfiltration, malicious execution, persistence, or harmful prompt injection attempts against the agent. The use of environment variables is for bot configuration, and file access examples (e.g., `readFileSync` in `references/MESSAGING.md`) are for legitimate bot functionalities like sending attachments, not for arbitrary file access or exfiltration.

Findings (0)

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

If these secrets or the gas wallet are mishandled, someone could impersonate or operate the bot and spend funds available to it.

Why it was flagged

The skill instructs users to provide bot credentials, a webhook secret, RPC access, and a funded wallet. This is expected for a Towns bot, but it grants account and transaction authority.

Skill content
APP_PRIVATE_DATA=<base64_credentials>   # From app.towns.com/developer
JWT_SECRET=<webhook_secret>              # Min 32 chars
...
bot.viem.account.address = Gas wallet (signs & pays fees) - MUST fund with Base ETH
Recommendation

Store secrets outside source control, use least-privilege bot permissions, fund the gas wallet with only what is needed, and rotate APP_PRIVATE_DATA/JWT_SECRET if exposed.

What this means

Bot code based on these examples could move tokens or trigger on-chain actions if the recipient, amount, permissions, or trigger conditions are wrong.

Why it was flagged

The reference includes code for executing blockchain transfers. This is central to the stated blockchain bot purpose and is documented with receipt-verification guidance, but it is financially impactful.

Skill content
const hash = await execute(bot.viem, {
  address: bot.appAddress,
  account: bot.viem.account,
  calls: [{
    to: targetAddress,
    abi: contractAbi,
    functionName: 'transfer',
    args: [recipient, amount]
  }]
})
Recommendation

Require explicit user/admin checks for transfers, validate recipients and amounts, verify transaction receipts as documented, and test on non-production funds first.

What this means

A user following the setup will trust external package contents and dependency resolution.

Why it was flagged

The setup instructions pull an external initializer and dependencies. This is a normal, user-directed SDK workflow, but the docs do not pin package versions in the snippet.

Skill content
bunx towns-bot init my-bot
cd my-bot
bun install
Recommendation

Verify the package/source, review generated files before adding secrets, and use a lockfile or pinned versions for production projects.

What this means

Chat content, user IDs, and channel IDs may be sent to the bot service and stored in logs when broad forwarding or debug logging is used.

Why it was flagged

The docs describe forwarding all messages to the bot and logging message snippets for debugging. This is useful for bot development but can capture private channel content if enabled.

Skill content
"All Messages" = everything (required for `onTip`)
...
console.log('[onMessage]', {
  userId: event.userId,
  channelId: event.channelId,
  message: event.message.slice(0, 100),
  isMentioned: event.isMentioned
})
Recommendation

Use Mentions Only mode unless all-message access is truly needed, redact or disable message-body logs in production, protect log access, and keep JWT_SECRET strong.

NoteHigh Confidence
ASI10: Rogue Agents
What this means

After deployment, the bot can continue receiving events and acting under its configured permissions until stopped or revoked.

Why it was flagged

The deployment guide runs the bot as a persistent webhook service. This persistence is expected for a deployed bot, not hidden or self-propagating.

Skill content
Set start command: `bun run start`
...
Set webhook URL in app.towns.com/developer to Render URL + `/webhook`
Recommendation

Monitor deployed bot activity, keep a clear shutdown/revocation process, and remove webhook URLs or rotate secrets when retiring the bot.