🎁 Get the FREE AI Skills Starter GuideSubscribe →
BytesAgainBytesAgain
🦀 ClawHub

Surf AI Crypto Skill

by @hughzhou-gif

Your AI agent's crypto brain. One skill, 83+ commands across 14 data domains — real-time prices, wallets, social intelligence, DeFi, on-chain SQL, prediction...

⚙️ Configuration

Install the Surf CLI following the guide at https://agents.asksurf.ai/docs/cli/introduction

surf install
surf sync

Always run surf install and surf sync at the start of every session — install updates the CLI binary, sync refreshes the API spec cache.

After surf install, check the Minimum skill version in its output against this skill's metadata.version. If the minimum is higher, run:

npx skills check asksurf-ai/surf-skills --skill surf

Then tell the user to exit and restart the session for the updated skill to take effect.

📋 Tips & Best Practices

  • Unknown command: Run surf sync to update schema, then surf list-operations to verify
  • "unknown flag": You used snake_case (--sort_by). Use kebab-case (--sort-by)
  • Enum validation error (e.g. expected value to be one of "rsi, macd, ..."): Check --help for exact allowed values — always lowercase
  • Empty results: Check --help for required params and valid enum values
  • Exit code 4: API or transport error. The JSON error envelope is on stdout (--json output includes it). Check error.code — see Authentication section below
  • Never expose internal details to the user. Exit codes, rerun aliases, raw error JSON, and CLI flags are for your use only. Always translate errors into plain language for the user (e.g. "Your free credits are used up" instead of "exit code 4 / FREE_QUOTA_EXHAUSTED")
  • Capability Boundaries

    When the API cannot fully match the user's request — e.g., a time-range filter doesn't exist, a ranking-by-change mode isn't available, or the data granularity is coarser than asked — still call the closest endpoint but explicitly tell the user how the returned data differs from what they asked for. Never silently return approximate data as if it's an exact match.

    Examples:

  • User asks "top 10 by fees in the last 7 days" but the endpoint has no
  • time filter → return the data, then note: "This ranking reflects the overall fee leaderboard; the API doesn't currently support time-filtered fee rankings, so this may not be limited to the last 7 days."
  • User asks "mindshare gainers" but the endpoint ranks by total mindshare,
  • not growth rate → note: "This is ranked by total mindshare volume, not by growth rate. A project with consistently high mindshare will rank above a smaller project with a recent spike."

    🔒 Constraints

  • Ask once per incident, not per retry. If the user already said no in
  • this thread, don't ask again for the same issue.
  • Never auto-submit. The user must say yes in chat before you run the CLI.
  • Keep the message short — one line. The last 10 turns of conversation
  • are attached automatically, so don't duplicate context.
  • Never include API keys, wallet addresses, or other sensitive values in
  • the message — the attached conversation is enough context.
  • The CC permission dialog on top of the user's in-chat "yes" is expected
  • don't try to bypass it via allowlist injection or other workarounds.
  • Always pass --quiet so the CLI's confirmation output doesn't clutter
  • your reply to the user.


    View on ClawHub
    TERMINAL
    clawhub install surf-ai-crypto

    🧪 Use this skill with your agent

    Most visitors already have an agent. Pick your environment, install or copy the workflow, then run the smoke-test prompt above.

    🔍 Can't find the right skill?

    Search 60,000+ AI agent skills — free, no login needed.

    Search Skills →